Я хочу использовать Terraform для развертывания моих лямбда-функций.Я сделал что-то вроде:
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.jsterraform обнаруживает изменение:
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 bucket /объект с etag
и он не обновляется ... Почему это так?