如何使用 CloudFormation 模板更新 AWS Lambda 函数
How do I update AWS Lambda function using CloudFormation template
我想使用 CloudFormation 模板部署和更新我的 lambda 函数代码。
我的部署工作流程是:
- 将我的 lambda 函数代码压缩到一个名为
Lambda
的 zip 文件中
- 启用名为
LambdaS3
的 s3 存储桶的 s3 版本控制
- 将 zip 文件上传到名为
LambdaS3
的 s3 存储桶中
- 将如下所示的 CloudFormation 模板
CFtemplate
上传到 s3bucket LambdaS3
- 通过输入“LambdaS3”作为参数来创建 CloudFormation 堆栈
LambdaS3
,
“Lambda”作为参数 Lambdafilename
和 zip 文件的版本作为参数 LambdafileVersion
我的 lambda 代码更新工作流程是:
- 将我更新的 lambda 函数代码压缩到一个名为
Lambda
的 zip 文件中
- 将更新后的 zip 文件上传到名为
LambdaS3
的 s3 存储桶中
- 通过输入 zip 文件的更新版本作为参数来更新 CloudFormation 堆栈
LambdafileVersion
- 如我所料:部署和更新会成功
- 实际结果:从 AWS 获取消息“创建此更改集时出错
提交的信息未包含更改。提交不同的信息以创建变更集。”在更新堆栈期间,同时部署成功。
我的模板如下
AWSTemplateFormatVersion: "2010-09-09"
Metadata: ""
Description: ""
Parameters:
LambdaS3:
Description: Api Gateway Authorizer Lambda S3Bucket Name
Type: String
Lambdafilename:
Description: Api Gateway Authorizer Lambda file Name (Latest)
Type: String
LambdafileVersion:
Description: Lambda zip file version
Type: String
Transform: AWS::Serverless-2016-10-31
Resources:
LambdaFunction:
DeletionPolicy: "Delete"
Type: "AWS::Serverless::Function"
Properties:
Description: ""
FunctionName: "LambdaFunction"
Handler: "lambda_function.lambda_handler"
CodeUri:
Bucket: !Ref LambdaS3
Key: !Sub '${Lambdafilename}.zip'
Version: !Ref LambdafileVersion
MemorySize: 512
Role: !GetAtt IAMRole2.Arn
Runtime: "python3.8"
Timeout: 20
Tracing: "PassThrough"
AutoPublishAlias: live
DeploymentPreference:
Type: Linear10PercentEvery10Minutes
这不起作用,因为您正在使用 CodeDeploy。如果你想按照你尝试的方式更新函数,那么你必须从你的代码中删除以下内容:
AutoPublishAlias: live
DeploymentPreference:
Type: Linear10PercentEvery10Minutes
我想使用 CloudFormation 模板部署和更新我的 lambda 函数代码。
我的部署工作流程是:
- 将我的 lambda 函数代码压缩到一个名为
Lambda
的 zip 文件中
- 启用名为
LambdaS3
的 s3 存储桶的 s3 版本控制
- 将 zip 文件上传到名为
LambdaS3
的 s3 存储桶中
- 将如下所示的 CloudFormation 模板
CFtemplate
上传到 s3bucketLambdaS3
- 通过输入“LambdaS3”作为参数来创建 CloudFormation 堆栈
LambdaS3
, “Lambda”作为参数Lambdafilename
和 zip 文件的版本作为参数LambdafileVersion
我的 lambda 代码更新工作流程是:
- 将我更新的 lambda 函数代码压缩到一个名为
Lambda
的 zip 文件中
- 将更新后的 zip 文件上传到名为
LambdaS3
的 s3 存储桶中
- 通过输入 zip 文件的更新版本作为参数来更新 CloudFormation 堆栈
LambdafileVersion
- 如我所料:部署和更新会成功
- 实际结果:从 AWS 获取消息“创建此更改集时出错 提交的信息未包含更改。提交不同的信息以创建变更集。”在更新堆栈期间,同时部署成功。
我的模板如下
AWSTemplateFormatVersion: "2010-09-09"
Metadata: ""
Description: ""
Parameters:
LambdaS3:
Description: Api Gateway Authorizer Lambda S3Bucket Name
Type: String
Lambdafilename:
Description: Api Gateway Authorizer Lambda file Name (Latest)
Type: String
LambdafileVersion:
Description: Lambda zip file version
Type: String
Transform: AWS::Serverless-2016-10-31
Resources:
LambdaFunction:
DeletionPolicy: "Delete"
Type: "AWS::Serverless::Function"
Properties:
Description: ""
FunctionName: "LambdaFunction"
Handler: "lambda_function.lambda_handler"
CodeUri:
Bucket: !Ref LambdaS3
Key: !Sub '${Lambdafilename}.zip'
Version: !Ref LambdafileVersion
MemorySize: 512
Role: !GetAtt IAMRole2.Arn
Runtime: "python3.8"
Timeout: 20
Tracing: "PassThrough"
AutoPublishAlias: live
DeploymentPreference:
Type: Linear10PercentEvery10Minutes
这不起作用,因为您正在使用 CodeDeploy。如果你想按照你尝试的方式更新函数,那么你必须从你的代码中删除以下内容:
AutoPublishAlias: live
DeploymentPreference:
Type: Linear10PercentEvery10Minutes