使用 Terraform 的 AWS Lambda 预置并发问题

Issue with AWS Lambda Provisioned Concurrency using Terraform

提问人:Sree Teja 提问时间:12/30/2021 更新时间:3/29/2023 访问量:1408

问:

我一直在尝试为我的 AWS Lambda 函数进行配置。我一次又一次地打。我尝试了别名版本和别名的属性。虽然它等待了 2 分钟并引发错误,但它已在 AWS 控制台中成功配置,状态为 ready。下面是我的配置。Provisioned ConcurrencyValidationExceptionqualifierterraform apply

resource "aws_lambda_alias" "contact_lambda_alias" {
  name             = module.aws_lambda_function_contact_alias_label.id
  function_name    = module.terraform_aws_lambda_contact.lambda_arn
  function_version = module.terraform_aws_lambda_contact.latest_published_version
}

resource "aws_lambda_provisioned_concurrency_config" "contact_lambda_alias" {
  function_name                     = module.terraform_aws_lambda_contact.lambda_arn
  provisioned_concurrent_executions = 1
  qualifier                         = module.terraform_aws_lambda_contact.latest_published_version
  timeouts {
    create = "30m"
    update = "30m"
  }
}

我尝试了有和没有阻挡,但仍然一次又一次地击中。 这是错误 ValidationExceptiontimeoutsValidationException

aws-lambda 地形

评论

2赞 Marcin 12/30/2021
完整的错误消息到底是什么?
0赞 Sree Teja 12/30/2021
获取 Lambda 预置并发配置 (arn:aws:lambda:ca-central-1:xxxxxxxxxxxx:function:ifs-dev-customer-contact:4) 时出错:ValidationException
0赞 Sree Teja 12/30/2021
的 Terraform 状态正在扰乱进一步的应用。因此,我需要手动从状态中删除资源并申请其他资源。aws_lambda_provisioned_concurrency_config
0赞 Sree Teja 12/30/2021
此外,未配置需要配置预置并发的此别名 lambda 函数的 API 触发器。
0赞 Fabio Petrillo 1/9/2022
请澄清您的具体问题或提供其他详细信息以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

0赞 Marcin 12/31/2021 #1

您应该使用别名 arn

 function_name = aws_lambda_alias.contact_lambda_alias.arn

评论

0赞 Sree Teja 12/31/2021
根据 Terraform 注册表中的文档,应该是 lambda arn 而不是别名。function_name
0赞 Sree Teja 12/31/2021
这是我尝试使用别名 arn 时出现的错误。error putting Lambda Provisioned Concurrency Config (arn:aws:lambda:ca-central-1:xxxxxxxxxxxx:function:ifs-dev-customer-contact:ifs-dev-ax-contact-alias:4): InvalidParameterValueException: The derived qualifier from the function name does not match the specified qualifier.function_name
0赞 Sree Teja 12/31/2021
{ │ RespMetadata: { │ StatusCode: 400, │ RequestID: "a3bc271b-5f82-4bfa-bac7-4c155996f6f0" │ }, │ Message_: "The derived qualifier from the function name does not match the specified qualifier.", │ Type: "User" │ }
0赞 Marcin 12/31/2021
@SreeTeja Prov Conc 仅适用于别名或版本,正如 AWS 解释的那样:“$LATEST 不支持预置并发。甚至 TF 文档也使用别名function_name = aws_lambda_alias.example.function_name
0赞 Sree Teja 12/31/2021
但是是本身,所以我使用了 lambda arn。aws_lambda_alias.example.function_namelambda_arn
0赞 Stephane 3/29/2023 #2

截至 2023 年的完整工作示例。

您需要使用depends_on。

请勿将 arn 用于 aws_lambda_provisioned_concurrency_config.function_name 。查看未解决的问题

# Lambda
resource "aws_lambda_function" "my_lambda" {
  ...
  publish          = true // Need to publish because of aws_lambda_provisioned_concurrency_config
  ...
}

resource "aws_lambda_alias" "my_lambda_alias" {
  depends_on       = [aws_lambda_function.my_lambda] // Important
  name             = "LATEST"
  description      = "Latest version"
  function_name    = aws_lambda_function.my_lambdag.arn
  function_version = aws_lambda_function.lambda_wiseday_ml_rating.version
}

resource "aws_lambda_provisioned_concurrency_config" "my_lambda_concurrency_config" {
  depends_on                        = [aws_lambda_alias.my_lambda_alias] // Important
  function_name                     = aws_lambda_function.my_lambda.function_name // Not arn. Bug with arn.
  provisioned_concurrent_executions = 1
  qualifier                         = aws_lambda_alias.my_lambda_alias.name
}