繁体   English   中英

如何使用 CloudFormation 模板更新 AWS Lambda function

[英]How do I update AWS Lambda function using CloudFormation template

我想使用 CloudFormation 模板部署和更新我的 lambda function 代码。

我的部署工作流程是:

  1. 将我的 lambda function 代码压缩到名为Lambda的 zip 文件中
  2. 启用名为LambdaS3的 s3 存储桶的 s3 版本控制
  3. 将 zip 文件上传到名为LambdaS3的 s3 存储桶中
  4. 将如下 CloudFormation 模板CFtemplate上传到 s3bucket LambdaS3
  5. 通过输入“LambdaS3”作为参数LambdaS3 、“Lambda”作为参数Lambdafilename并将 zip 文件的版本作为参数LambdafileVersion来创建 CloudFormation 堆栈

我的 lambda 代码更新工作流程是:

  1. 将我更新的 lambda function 代码压缩到名为 zip 的文件Lambda
  2. 将更新后的 zip 文件上传到名为LambdaS3的 s3 存储桶中
  3. 通过输入 zip 文件的更新版本作为参数LambdafileVersion来更新 CloudFormation 堆栈
  • 我所期望的:部署和更新会成功
  • 实际结果:从 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

跟进:

而不是删除DeploymentPreference属性,添加AutoPublishCodeSha256是正确的解决方案。

根据 AWS 文档,

  • “此属性解决了当 AWS SAM 模板具有以下特征时出现的问题:DeploymentPreference object 配置为逐步部署(如逐步部署无服务器应用程序中所述),AutoPublishAlias 属性已设置且不会在部署之间更改,以及CodeUri 属性已设置并且在部署之间不会更改。”

  • "This scenario can occur when the deployment package stored in an Amazon Simple Storage Service (Amazon S3) location is replaced by a new deployment package that contains updated Lambda function code, but the CodeUri property remains unchanged (as opposed to the new deployment package being上传到新的 Amazon S3 位置,并且 CodeUri 被更改到新位置)。”

所描述的场景正是我的情况。 添加AutoPublishCodeSha256属性后,可以使用DeploymentPreference属性的存在来更新我的堆栈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM