拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 我可以使用CloudFormation模板更新AWSLambda函式吗?

我可以使用CloudFormation模板更新AWSLambda函式吗?

白鹭 - 2022-02-23 2119 0 0

我想使用 CloudFormation 堆栈部署和更新 Lambda 函式。

我的堆栈创建作业流程是:

  1. 将我的 Lambda 函式代码(zip 档案)上传到 S3
  2. 使用 s3 存盘桶(存盘 lambda 函式代码的位置)和 LambdaFileName(zip 文件名)作为 CloudFormation 自变量,通过部署 CloudFormation 模板来创建 CloudFormation 堆栈

但是,我不知道如何使用模板更新 Lambda 函式。我尝试将新功能代码上传到 S3 并另存为新文件名。并使用新档案作为自变量来更新堆栈。但由于档案是 zip 档案,CloudFormation 无法检测到任何更改。

我的问题:

  1. 如何使用 CloudFormation 模板更新 Lambda 函式
  2. 我应该使用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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *