【发布时间】:2021-12-31 06:43:37
【问题描述】:
我想使用 CloudFormation 堆栈部署和更新 Lambda 函数。
我的堆栈创建工作流程是:
- 将我的 Lambda 函数代码(zip 文件)上传到 S3
- 使用 s3 存储桶(存储 lambda 函数代码的位置)和 LambdaFileName(zip 文件名)作为 CloudFormation 参数,通过部署 CloudFormation 模板来创建 CloudFormation 堆栈
但是,我不知道如何使用模板更新 Lambda 函数。 我已尝试将新功能代码上传到 S3 并另存为新文件名。并使用新文件作为参数来更新堆栈。但由于文件是 zip 文件,CloudFormation 无法检测到任何更改。
我的问题:
- 如何使用 CloudFormation 模板更新 Lambda 函数
- 我应该使用
AWS::Lambda::Function还是AWS::Serverless::Function资源?我希望支持版本控制。
谢谢。
我的 CloudFormation 模板如下。
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
Transform: AWS::Serverless-2016-10-31
Resources:
# LambdaFunction:
# DeletionPolicy: "Delete"
# Type: "AWS::Lambda::Function"
# Properties:
# Description: ""
# FunctionName: "LambdaFunction"
# Handler: "lambda_function.lambda_handler"
# Code:
# S3Bucket: !Ref LambdaS3
# S3Key: !Sub '${Lambdafilename}.zip'
# MemorySize: 512
# Role: !GetAtt IAMRole2.Arn
# Runtime: "python3.8"
# Timeout: 20
# TracingConfig:
# Mode: "PassThrough"
LambdaFunction:
DeletionPolicy: "Delete"
Type: "AWS::Serverless::Function"
Properties:
Description: ""
FunctionName: "LambdaFunction"
Handler: "lambda_function.lambda_handler"
CodeUri:
Bucket: !Ref LambdaS3
Key: !Sub '${Lambdafilename}.zip'
MemorySize: 512
Role: !GetAtt IAMRole2.Arn
Runtime: "python3.8"
Timeout: 20
Tracing: "PassThrough"
AutoPublishAlias: live
DeploymentPreference:
Type: Linear10PercentEvery10Minutes
【问题讨论】:
-
进展如何?仍然不清楚你能做什么?
-
“如果您的存储桶是版本”是什么意思? 1.添加Version作为新参数 2.将Version属性添加到CodeUri属性 3.使Version属性引用新的参数值 4.输入S3存储桶名称作为Version值 上述步骤对吗?
-
Backet 可以是versioned,并且您在模板中提供版本号。
-
我更新了 lambda 函数代码,添加了一行 print msg,然后部署到同一个 S3 存储桶并使用相同的 zip 文件名。然后我通过输入新的 zip 文件版本作为
Version参数的新值来更新堆栈。但是,我得到的只是“提交的信息不包含更改。提交不同的信息以创建更改集。” -
您的版本一定有问题。我建议提出新问题,提供确切的详细信息、分步说明以及更新前后在模板中使用的值的示例。
标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudformation