【问题标题】:Issue with Creating Application Auto Scaling with AWS Lambda using Terraform使用 Terraform 使用 AWS Lambda 创建 Application Auto Scaling 的问题
【发布时间】:2021-11-20 05:20:43
【问题描述】:

我正在将一些 Cloudformation 转换为 Terraform,以创建 Lambda,然后为 Lambda 设置预置并发和应用程序自动扩展。当 Terraform 运行 aws_appautoscaling_target 资源时,它会失败并显示以下消息:

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

我没有找到太多与 Lambda 一起使用的 aws_appautoscaling_target 资源示例。这不再支持了吗?作为参考,我运行的是 Terraform 版本 1.0.11,我使用的是 AWS 提供商版本 3.66.0。我在下面发布我的 Terraform。谢谢。

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"
}

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    您需要发布您的 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 版本。不过,这也需要发布函数。

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2017-11-19
      • 2023-03-13
      • 2021-12-04
      • 2017-02-07
      • 2022-01-28
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      相关资源
      最近更新 更多