簡體   English   中英

我可以使用 CloudFormation 模板更新 AWS Lambda function 嗎?

[英]Can I update AWS Lambda function using CloudFormation template?

我想使用 CloudFormation 堆棧部署和更新 Lambda function。

我的堆棧創建工作流程是:

  1. 將我的 Lambda function 代碼(zip 文件)上傳到 S3
  2. 使用 s3 存儲桶(其中存儲 lambda function 代碼)和 LambdaFileName(zip 文件名)作為 CloudFormation 參數,通過部署 CloudFormation 模板創建 CloudFormation 堆棧

但是,我不知道如何使用模板更新 Lambda function。 我嘗試將新的 function 代碼上傳到 S3 並另存為新文件名。 並使用新文件作為參數來更新堆棧。 但是由於文件是 zip 文件,CloudFormation 無法檢測到任何更改。

我的問題:

  1. 如何使用 CloudFormation 模板更新 Lambda function
  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

CodeUri采用Version 因此,如果您的存儲桶是版本,則對其對象的任何更改,即使名稱相同,也會導致不同的版本。 因此,一旦您將新版本指定為參數,您的 function 就會得到更新。

在堆棧更新期間不會自動檢測到對 Amazon S3 中部署 package 的更改。 要更新 function 代碼,請更改模板中的 object 密鑰或版本。

不幸的是,除非您在每次更新時更改“AWS::Lambda::Function”資源上的“S3Key”,否則 CloudFormation 不會將其視為更改

資源

當您應用 CloudFormation 堆棧更新時,它將檢查任何已部署資源的屬性中是否有更新。 當 Lambda 資源屬性(如 memory、超時、環境變量等)有更新時,沒有問題,因為 CloudFormation 會選擇這些更改並相應地更新。

當更新 Lambda function 代碼或其任何依賴項時,就會出現問題。 由於這些不是資源屬性更新,CloudFormation 無法知道是否有更改並更新受影響的組件。

當更新 Lambda function 代碼或其任何依賴項時,就會出現問題。 由於這些不是資源屬性更新,CloudFormation 無法知道是否有更改並更新受影響的組件。

請參考以下博客文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM