Terraform:AWS Lambda 图像未更新

Hep*_*tus 5 docker aws-lambda terraform terraform-provider-aws

我们有一个新的 terraform 脚本,它将 docker 镜像推送到 AWS Lambda。该脚本运行良好,并将新图像正确连接到 Lambda。我可以通过检查 Lambda 的 AWS 控制台中显示的图像 URL 来确认这一点,它是新推送+连接的图像。然而,在测试 lambda 时,它显然正在运行之前的代码。Lambda 似乎已更新,但正在运行的内存实例未收到消息。
问题:有没有办法强制内存中的 Lambda 循环到新镜像?

这是 Lambda 的 TF 代码:

resource "aws_lambda_function" "my_lambda" {
  function_name = "MyLambda_${var.environment}"
  role          = data.aws_iam_role.iam_for_lambda.arn
  image_uri     = "${data.aws_ecr_repository.my_image.repository_url}:latest"
  memory_size   = 512
  timeout       = 300
  architectures = ["x86_64"]
  package_type  = "Image"
  environment {variables = {stage = var.environment, commit_hash=var.commit_hash}}
}
Run Code Online (Sandbox Code Playgroud)

Hep*_*tus 8

经过更多搜索后,我发现了一些讨论(此处),其中提到了source_code_hashterraform 中 Lambda 创建块的选项(此处的文档)。它主要与用于从 S3 存储桶推送代码的 zip 文件的 SHA 哈希一起使用,但在我们的例子中,我们使用容器/图像,因此实际上没有可以从中获取哈希的文件。然而,事实证明这只是 Lambda 检查更改的字符串。所以我们添加了以下内容:

resource "aws_lambda_function" "my_lambda" {
  function_name = "MyLambda_${var.environment}"
  role          = data.aws_iam_role.iam_for_lambda.arn
  image_uri     = "${data.aws_ecr_repository.my_image.repository_url}:latest"
  memory_size   = 512
  timeout       = 300
  architectures = ["x86_64"]
  package_type  = "Image"
  environment {variables = {stage = var.environment, commit_hash=var.commit_hash}}
  source_code_hash = var.commit_hash  << New line
}
Run Code Online (Sandbox Code Playgroud)

我们使用 bitbucket 管道将 git 哈希注入 terraformapply操作。此修复允许 Lambda 正确更新正在运行的版本。

  • 这救了我:) (2认同)