Kat*_*hir 13 aws-cloudformation aws-lambda
我正在使用 cloudformation 在启用版本控制的 S3Bucket 中使用代码创建我的 lambda 函数。
"MYLAMBDA": {
"Type": "AWS::Lambda::Function",
"Properties": {
"FunctionName": {
"Fn::Sub": "My-Lambda-${StageName}"
},
"Code": {
"S3Bucket": {
"Fn::Sub": "${S3BucketName}"
},
"S3Key": {
"Fn::Sub": "${artifact}.zip"
},
"S3ObjectVersion": "1e8Oasedk6sDZu6y01tioj8X._tAl3N"
},
"Handler": "streams.lambda_handler",
"Runtime": "python3.6",
"Timeout": "300",
"MemorySize": "512",
"Role": {
"Fn::GetAtt": [
"LambdaExecutionRole",
"Arn"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
lambda 函数创建成功。当我将新的工件 zip 文件复制到 s3bucket 时,会使用新版本的“S3ObjectVersion”字符串创建该文件的新版本。但是 lambda 函数代码仍然使用旧版本。
aws cloudformation 的文档清楚地说明了以下内容
要更新源代码位于 Amazon S3 存储桶中的 Lambda 函数,您必须通过更新 S3Bucket、S3Key 或 S3ObjectVersion 属性来触发更新。单独更新源代码不会更新函数。
是否有额外的触发事件,我需要创建以更新代码?
L.T*_*.T. 12
万一有人遇到这个类似的问题,我已经想出了一个办法。我使用 Terraform + Jenkins 通过 s3 存储桶创建我的 lambda 函数。一开始,我可以创建函数,但一旦创建就不会更新。我验证了 s3 中的 zip 文件已更新。我花了一些时间才弄清楚我需要做以下两个更改之一。
解决方案 1:加载新的 zip 文件时提供新的对象键。在我的 terraform 中,我添加了 git commit id 作为 s3 键的一部分。
resource "aws_s3_bucket_object" "lambda-abc-package" {
bucket = "${aws_s3_bucket.abc-bucket.id}"
key = "${var.lambda_ecs_task_runner_bucket_key}_${var.git_commit_id}.zip"
source = "../${var.lambda_ecs_task_runner_bucket_key}.zip"
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:在lambda部分添加source_code_hash。
resource "aws_lambda_function" "abc-ecs-task-runner" {
s3_bucket = "${var.bucket_name}"
s3_key = "${aws_s3_bucket_object.lambda-ecstaskrunner-package.key}"
function_name = "abc-ecs-task-runner"
role = "${aws_iam_role.AbcEcsTaskRunnerRole.arn}"
handler = "index.handler"
memory_size = "128"
runtime = "nodejs6.10"
timeout = "300"
source_code_hash = "${base64sha256(file("../${var.lambda_ecs_task_runner_bucket_key}.zip"))}"
Run Code Online (Sandbox Code Playgroud)
所以做任何一个都应该工作。此外,在检查 lambda 代码时,从浏览器刷新 URL 将不起作用。需要返回函数并再次打开该函数。
希望这可以帮助。
我也遇到了同样的问题,我的代码位于S3存储桶中的Archive.zip中,当我上传新的Archive.zip时,lambda没有根据新代码进行响应。
解决方案是再次将 Archive.zip 的 S3 位置的链接粘贴到 lambda 的函数代码部分并再次保存。
我如何发现 lambda 没有采用新代码?
转到您的 lambda 函数 --> Actions --> Export Function --> Download Deployment Package 并检查代码是否实际上是您最近上传到 S3 的代码。
| 归档时间: |
|
| 查看次数: |
10232 次 |
| 最近记录: |