0

我使用 terraform 创建了一个 Lambda 函数,如下所示:


module "my-lambda" {
  source  = "terraform-aws-modules/lambda/aws"
  version = "~> v1.31.0"

  function_name         = "${var.environment_name}-${local.lambda_name}"
...
  publish               = true
}

#...
module "alias" {
  source           = "terraform-aws-modules/lambda/aws//modules/alias"
  name             = "${var.lambda_name}-latest"
  function_name    = module.my-lambda.this_lambda_function_name
  function_version = module.my-lambda.this_lambda_function_version
}

所以目前我有一个带有数字的已发布 Lambda 版本,我还添加了一个别名和$LATEST版本。我需要发布版本的原因是预配置并发只能附加到发布版本。

我的 API 网关集成如下所示:

module "api_gateway" {
  source  = "terraform-aws-modules/apigateway-v2/aws"
  version = "~> 0.9.0"

  name          = "${var.environment_name}-my-api"
  # ...Abriged...
  integrations = {
    "GET /mymethod" = {
      integration_type        = "AWS_PROXY"
      integration_http_method = "POST"
      payload_format_version  = "2.0"
      lambda_arn              = module.my-lambda.this_lambda_function_invoke_arn
    }
}

但是在控制台中我可以看到它正在触发$LATEST版本,而不是已发布的版本。如何更改配置以便 API Gateway 集成触发特定版本(或别名)?

4

1 回答 1

2

我不熟悉 terraform,但要从 api 网关调用别名,您需要在 API 网关集成中有 lambda 别名 arn。

您正在从 lambda 模块获取 lambda arn,但您需要 arn 的别名。

lambda_arn = module.my-lambda.this_lambda_function_invoke_arn

别名 arn 只不过是<Lambda ARN>:<AliasName>.

:因此,您尝试从 module.alias 中获取 arn 或在集成中附加别名和 lambda arn 。

于 2021-03-02T13:31:04.937 回答