我正在使用cloudformation来创建我的lambda函数,其中包含启用了版本控制的S3Bucket中的代码 .
"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"
]
}
}
}
lambda函数成功创建 . 当我将新的工件zip文件复制到s3bucket时,将使用新版本“S3ObjectVersion”字符串创建该文件的新版本 . 但lambda函数代码仍在使用旧版本 .
aws cloudformation的文档清楚地说明了以下内容
要更新源代码位于Amazon S3存储桶中的Lambda函数,必须通过更新S3Bucket,S3Key或S3ObjectVersion属性来触发更新 . 仅更新源代码不会更新该功能 .
是否有额外的触发事件,我需要创建以更新代码?
1 回答
我也遇到了同样的问题,我的代码是在S3桶中的Archive.zip,当我上传一个新的Archive.zip时,lambda根据新代码没有响应 .
解决方法是再次将Archive.zip的S3位置链接粘贴到lambda的功能代码部分并再次保存 .
How I figured out lambda was not taking new code?
转到lambda函数 - >操作 - >导出函数 - >下载部署包,并检查代码是否实际上是您最近上传到S3的代码 .