nic*_*tev 8 amazon-s3 aws-lambda terraform
Zip 包不是由 Terraform 上传到 S3。
Lambda 由 Terraform aws_lambda_function 资源配置。当我更改 S3 上的 Zip 包并运行terraform apply命令时,Terraform 表示没有任何更改。
aws_lambda_function 资源中有一个source_code_hash字段可以设置为包内容的哈希值。但无论我提供的这个哈希值是什么,它都不会在 Terraform 状态下更新。
如果 S3 中的 Zip 包更新,如何告诉 Terraform 更新 Lambda?
经过大量实验来验证 Terraform 如何处理哈希,我发现了以下内容:
source_code_hash在配置 Lambda 时,aws_lambda_function 资源存储在 Terraform 状态中。source_code_hash仅当您在 aws_lambda_function 资源中为其提供新值并且该新值对应于 S3 中实际 Zip 包的哈希值时才会更新。terraform apply。因此,为了使其发挥作用,我们有以下选择:
source_code_hashaws_lambda_function 资源的字段或source_hash该资源中的字段以将其保存为 Terraform 状态。aws_lambda_function 资源可以使用该值进行更新。不幸的是,这种行为没有记录在案,我花了很多时间来发现它。此外,它可以随时更改,因为它没有记录并且没有人知道:-(
那么我是如何解决这个问题的呢?
我生成 Lambda Zip 文件的 base64 编码的 SHA256 哈希值,并将其存储为实际 Zip 文件的元数据。然后我在 Terraform 中读取此元数据并将其传递给source_code_hash.
细节:
openssl dgst -binary -sha256 lambda_package.zip | openssl base64命令生成哈希。aws s3 cp lambda_package.zip s3://my-best-bucket/lambda_package.zip --metadata hash=[HASH_VALUE]。source_code_hashTerraformdata "aws_s3_bucket_object" "package" {
bucket = "my-best-bucket"
key = "lambda_package.zip"
}
resource "aws_lambda_function" "main" {
...
source_code_hash = data.aws_s3_bucket_object.package.metadata.Hash
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5619 次 |
| 最近记录: |