我正在尝试使用terraform创建AWS Lambda函数。我的terraform目录如下:
- terraform
- iam-policies
- main.tf
- lambda
- files/
- main.tf
- main.tf
- iam-policies
variable "pythonfile" {
description = "lambda function python filename"
type = "string"
}
resource "null_resource" "lambda_preconditions" {
triggers {
always_run = "${uuid()}"
}
provisioner "local-exec" {
command = "rm -rf ${path.module}/files/zips"
}
provisioner "local-exec" {
command = "mkdir -p ${path.module}/files/zips"
}
provisioner "local-exec" {
command = "cp -R ${path.module}/files/${var.pythonfile} ${path.module}/files/zips/lambda_function.py"
}
provisioner "local-exec" {
command = "cd ${path.module}/files/zips && zip -r lambda.zip ."
}
}
我的“aws_lambda_function”资源看起来是这样的。
resource "aws_lambda_function" "lambda_function" {
filename = "${path.module}/files/zips/lambda.zip"
function_name = "${format("%s-%s-%s-lambda-function", var.name, var.environment, var.function_name)}"
role = "${aws_iam_role.iam_for_lambda.arn}"
handler = "lambda_function.lambda_handler"
source_code_hash = "${base64sha256(format("%s/files/zips/lambda.zip", path.module))}", length(path.cwd) + 1, -1)}")}"
runtime = "${var.function_runtime}"
timeout = "${var.function_timeout}"
memory_size = "${var.function_memory}"
environment {
variables = {
region = "${var.region}"
name = "${var.name}"
environment = "${var.environment}"
}
}
vpc_config {
subnet_ids = ["${var.subnet_ids}"]
security_group_ids = ["${aws_security_group.lambda_sg.id}"]
}
depends_on = [
"null_resource.lambda_preconditions"
]
}
问题: 每当我更改lambda_function.py文件并再次应用terraform时,一切都正常,但lambda函数中的实际代码不会更改。 此外,如果我删除所有terraform状态文件并重新应用,则新更改会传播而不会出现任何问题。
可能的原因是什么?
terraform apply
是否创建了包含更新代码的 zip 文件? - norbjdsource_code_hash
语法有误(关闭括号/方括号的数量不一致)。第一个apply
后,它的计算值是什么?如果第二个apply
后source_code_hash
是相同的,那就说明 lambda 没有被更新(因为其他计算参数也是相同的)。 - norbjdsource_code_hash
表达式是否是您的问题,您可以始终使用source_code_hash = "${timestamp()}"
强制每次更新。 - Arin