amazon-web-services - Terraform 没有上传新的 ZIP
问题描述
我想使用 Terraform 来部署我的 lambda 函数。我做了类似的事情:
provider "aws" {
region = "ap-southeast-1"
}
data "archive_file" "lambda_zip" {
type = "zip"
source_dir = "src"
output_path = "build/lambdas.zip"
}
resource "aws_lambda_function" "test_terraform_function" {
filename = "build/lambdas.zip"
function_name = "test_terraform_function"
handler = "test.handler"
runtime = "nodejs8.10"
role = "arn:aws:iam::000000000:role/xxx-lambda-basic"
memory_size = 128
timeout = 5
source_code_hash = "${data.archive_file.lambda_zip.output_base64sha256}"
tags = {
"Cost Center" = "Consulting"
Developer = "Jiew Meng"
}
}
我发现当 test.js 没有变化时,terraform 正确检测到没有变化
No changes. Infrastructure is up-to-date.
当我更改 test.js 文件时,terraform 确实检测到更改:
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
~ aws_lambda_function.test_terraform_function
last_modified: "2018-12-20T07:47:16.888+0000" => <computed>
source_code_hash: "KpnhsytFF0yul6iESDCXiD2jl/LI9dv56SIJnwEi/hY=" => "JWIYsT8SszUjKEe1aVDY/ZWBVfrZYhhb1GrJL26rYdI="
它确实压缩了新的 zip,但是,它似乎没有用新的 ZIP 更新功能。似乎它认为因为文件名没有变化,所以它没有上传......我该如何解决这种行为?
=====
按照这里的一些答案,我尝试了:
- 使用
null_resource
- 将 S3 存储桶/对象与 etag 一起使用
而且它没有更新......为什么会这样?
解决方案
我遇到了同样的问题,为我解决的问题是使用publish 参数自动发布 Lambda 函数。为此,只需publish = true
在您的aws_lambda_function
资源中设置。
请注意,您的函数将在此之后进行版本控制,并且每次更改都会创建一个新的。qualified_arn
因此,如果您在任何其他 Terraform 代码中引用该函数,则应确保使用属性引用。
推荐阅读
- reactjs - 间歇性测试失败,出现“TypeError:无法读取 null 的属性“body”或“TypeError:无法读取 null 的属性“createEvent”错误
- c - 在C中加入多个线程
- autoencoder - 使用 Keras 制作自动编码器时出现未知错误
- css - 桌面和移动设备之间的不同标题定位
- sql - sql中根据优先级赋值
- r - R中的gsub和反斜杠
- javascript - 在搜索时插入内容控件 Word 加载项
- kubernetes - 移除基于 jsonnet 文件的 kubernetes 部署
- javascript - 如何将 JavaScript 对象方法名称作为字符串参数传递
- php - Laravel-Array 输入无法在数据库中更新