使用Terraform通过AWS Lambda创建应用程序自动扩展的问题 [英] Issue with Creating Application Auto Scaling with AWS Lambda using Terraform

查看:19
本文介绍了使用Terraform通过AWS Lambda创建应用程序自动扩展的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将一些CloudForformation转换为Terraform,它创建一个Lambda,然后为Lambda设置预配置的并发和应用程序自动伸缩(Application Auto Scaling)。当Terraform运行aws_appautoscaling_target资源时,它会失败,并显示以下消息:

Error: Error creating application autoscaling target: ValidationException: Unsupported service namespace, resource type or scalable dimension

我没有找到太多与lambdas一起使用的aws_appautoscaling_target资源的示例。这是否不再受支持?作为参考,我运行的是Terraform版本1.0.11,我使用的是AWS Provider版本3.66.0。我把我的平台贴在下面。谢谢。

data "archive_file" "foo_create_dist_pkg" {
  source_dir  = var.lambda_file_location
  output_path = "foo.zip"
  type        = "zip"
}

resource "aws_lambda_function" "foo" {
  function_name = "foo"
  description   = "foo lambda"
  handler       = "foo.main"
  runtime       = "python3.8"
  publish       = true

  role        = "arn:aws:iam::${local.account_id}:role/serverless-role"
  memory_size = 256
  timeout     = 900

  depends_on       = [data.archive_file.foo_create_dist_pkg]
  source_code_hash = data.archive_file.foo_create_dist_pkg.output_base64sha256
  filename         = data.archive_file.foo_create_dist_pkg.output_path
}

resource "aws_lambda_provisioned_concurrency_config" "foo_provisioned_concurrency" {
  function_name                     = aws_lambda_function.foo.function_name
  provisioned_concurrent_executions = 15
  qualifier                         = aws_lambda_function.foo.version
}

resource "aws_appautoscaling_target" "autoscale_foo" {
  max_capacity       = var.PCMax
  min_capacity       = var.PCMin
  resource_id        = "function:${aws_lambda_function.foo.function_name}"
  scalable_dimension = "lambda:function:ProvisionedConcurrency"
  service_namespace  = "lambda"
}

推荐答案

您需要发布您的lambda以获取新版本。这可以通过在aws_lambda_function资源中设置publish = true来实现。这将给出可在aws_appautoscaling_target

中使用的函数的数字版本
resource "aws_appautoscaling_target" "autoscale_foo" {
  max_capacity       = var.PCMax
  min_capacity       = var.PCMin
  resource_id        = "function:${aws_lambda_function.foo.function_name}:${aws_lambda_function.foo.version}"
  scalable_dimension = "lambda:function:ProvisionedConcurrency"
  service_namespace  = "lambda"
}
或者,您可以创建aws_lambda_alias并在aws_appautoscaling_target中使用它,而不是在Lambda版本中使用。不过,这还需要发布该函数。

这篇关于使用Terraform通过AWS Lambda创建应用程序自动扩展的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆