簡體   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