AWS 云信息 | 配置 Lambda 以使用 S3 存储桶中最新版本的代码

Vin*_*oft 7 amazon-s3 amazon-web-services aws-cloudformation aws-lambda

我在 AWS 上使用 codepipeline、codebuild 和 cloudformation。

我的流程是:

  1. 将提交推送到 github,这会触发 codepipeline
  2. Codebuild 将 lambda 函数上传(压缩)到 S3 存储桶
  3. Cloudformation 配置 lambda 函数

云信息(简化):

CreateDoctorLambda:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.6
      Handler: lambda_function.lambda_handler
      Role:
        Fn::GetAtt:
          - LambdaExecutionRole
          - Arn
      Code:
          S3Bucket: !Ref LambdaFunctionS3Bucket
          S3Key: CreateDoctor.zip
          S3ObjectVersion: Latest <-- This value is invalid
Run Code Online (Sandbox Code Playgroud)

问题:当我更新 lambda 函数的代码时(此新代码在代码构建期间被压缩并上传到 S3 存储桶),更改不会部署到现有的 lambda 函数。

根据AWS 文档

要更新源代码位于 Amazon S3 存储桶中的 Lambda 函数,您必须通过更新 S3Bucket、S3Key 或 S3ObjectVersion 属性来触发更新。单独更新源代码并不会更新功能。

问题:有没有办法告诉Cloudformation使用S3中存储的最新版本的代码?使用S3ObjectVersion: Latest会导致错误。

小智 5

它只是一个替代工作流程,但也许它可以解决您的问题:

  1. 您必须配置 CodePipeline 或 CodeBuild 来为基于的工件生成不同的名称,而不是使用相同的名称保存工件,例如在部署时;
  2. 在您的 CloudFormation 操作中,您将工件名称作为模板的参数传递 ( https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-parameter-override-functions.html ),并且它将根据新代码重新部署该功能。