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)
经过更多搜索后,我发现了一些讨论(此处),其中提到了source_code_hash
terraform 中 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 正确更新正在运行的版本。
归档时间: |
|
查看次数: |
1837 次 |
最近记录: |