繁体   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