我想使用 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
uj5u.com热心网友回复:
CodeUri
需要版本。因此,如果您的存盘桶是版本,则对其物件的任何更改,即使名称相同,也会导致版本不同。因此,一旦您将新版本指定为自变量,您的函式就会得到更新。
uj5u.com热心网友回复:
在堆栈更新期间不会自动检测对 Amazon S3 中部署包的更改。要更新功能代码,请更改模板中的物件键或版本。
不幸的是,除非您在每次更新时更改“AWS::Lambda::Function”资源上的“S3Key”,否则 CloudFormation 不会将其视为更改
来源
当您应用 CloudFormation 堆栈更新时,它会检查任何已部署资源的属性是否有更新。当 Lambda 资源属性(如存储器、超时、环境变量等)发生更新时,没有问题,因为 CloudFormation 会选择这些更改并相应地更新。
当对 Lambda 函式代码或其任何依赖项进行更新时,就会出现问题。由于这些不是资源属性更新,因此 CloudFormation 无法知道是否发生更改并更新受影响的组件。
当对 Lambda 函式代码或其任何依赖项进行更新时,就会出现问题。由于这些不是资源属性更新,因此 CloudFormation 无法知道是否发生更改并更新受影响的组件。
请参考以下博文
0 评论