Terraform - 通过别名调用 lambda 的 URI 是什么?

mon*_*mon 4 aws-lambda terraform

问题

要从 API GW 调用 Lambda,invoke_arn可用于 aws_lambda_function 资源。

invoke_arn - 用于从 API Gateway 调用 Lambda 函数的 ARN。

resource "aws_api_gateway_integration" "videos" {
  rest_api_id = "${aws_api_gateway_rest_api.24_hour_video.id}"
  resource_id = "${aws_api_gateway_method.videos_get.resource_id}"
  http_method = "${aws_api_gateway_method.videos_get.http_method}"

  integration_http_method = "GET"
  type                    = "AWS_PROXY"  # Lambda Proxy
  uri                     = "${aws_lambda_function.list_videos.invoke_arn}"
}
Run Code Online (Sandbox Code Playgroud)

在uri中设置什么才能通过别名调用相同的 lambda?

resource "aws_lambda_alias" "lambda_alias_list_videos" {
  name             = "get_video_list"
  description      = "Alias to lambda_list_videos"
  function_name    = "${aws_lambda_function.list_videos.arn}"
  function_version = "$LATEST"
}
Run Code Online (Sandbox Code Playgroud)

dun*_*all 6

aws_lambda_alias资源创建一个指向 Lambda 函数的特定版本的别名。别名本身是不可调用的。

相反,您应该创建一个aws_lambda_function指向别名版本的数据源,并使用其invoke_arn属性。您可以使用qualifieran 中的参数aws_lambda_function来指定版本或别名(有关更多信息,请参阅AWS Lambda Invoke 文档)。

您的示例显示您已经创建了一个名为get_video_list的别名,它指向$LATEST版本。您需要创建一个指向此别名的新数据源:

data "aws_lambda_function" "my_function_get_video_list" {
  function_name = "your-function-name"
  qualifier = "get_video_list"
}
Run Code Online (Sandbox Code Playgroud)

您现在可以获得别名函数的调用 ARN:

${aws_lambda_function.my_function.get_video_list.invoke_arn}
Run Code Online (Sandbox Code Playgroud)

  • 这是资源的文档。它是具有限定符属性的数据源 https://www.terraform.io/docs/providers/aws/d/lambda_function.html (2认同)

Ign*_*nas 5

aws_lambda_alias资源具有专为 API Gateway 设计的invoke_arn属性(请参阅文档)。例如:

resource "aws_lambda_alias" "api_function_alias_live" {
  name             = "live"
  function_name    = aws_lambda_function.api_function.function_name
  function_version = "1"
}

resource "aws_api_gateway_integration" "proxy_integration" {
  rest_api_id             = aws_api_gateway_rest_api.api_gateway.id
  resource_id             = aws_api_gateway_resource.proxy_resource.id
  http_method             = aws_api_gateway_method.proxy_method.http_method
  integration_http_method = "POST"
  type                    = "AWS_PROXY"
  uri                     = aws_lambda_alias.api_function_alias_live.invoke_arn
}
Run Code Online (Sandbox Code Playgroud)