首页 > 解决方案 > 如何在 codebuild buildspec 和 codedeploy 中使用多个 sam 模板进行 lambda 函数部署

问题描述

我想在我的 codebuild buildspec 和 codedeploy 中使用多个 SAM 模板文件来部署我的 lambda 函数。

我在构建规范中定义了多个 SAM 模板,该模板构建时没有任何错误。但是,CodeDeploy 仅部署其中一个 SAM 模板。

如何设置 codebuild 和 codedeploy 以使用多个 sam 模板 lambda 函数部署?

下面是我设置的 Codebuild 规范文件

version: 0.1
env:
  parameter-store:
    S3_BUCKET: "my_s3_bucket"

phases:
  install:
    commands:
      - aws cloudformation package --template-file samTemplate.yaml --s3-bucket $S3_BUCKET --output-template-file outputSamTemplate.yaml
      - aws cloudformation package --template-file samTemplatetwo.yaml --s3-bucket $S3_BUCKET --output-template-file outputSamTemplate.yaml


artifacts:
  type: zip
  files:
    - samTemplate.yaml
    - samTemplatetwo.yaml
    - outputSamTemplate.yaml

下面是我为部署 lambda 函数的 codedeploy 的配置。它创建了云形成堆栈。

代码部署

以下是我正在使用的 sam 模板。模板 1

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Lambda Functions Deployment 

Parameters:
  Environments:
    Type: String
    Default: UAT
    Description: Parameters  deployment Environments

Mappings:
  StagesMap:
    UAT:
      CONFIGBUCKET: staging-bucket-name
      CONFIGKEY: source-data-key-path
      URL: UAT
      RoleEnv: arn:aws:iam::

    NonProd:
      CONFIGBUCKET: non-prod-bucket-name
      CONFIGKEY: source-data-key-path
      RoleEnv: arn:aws:iam::

      
Resources:
  CDDemoLambda:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: ./LambdaCode
      FunctionName: CDDemoLambda
      Description: 'Lambda function for CD Demo'
      MemorySize: 128
      Timeout: 30
      Role: !FindInMap
            - StagesMap
            - Ref: Environments
            - RoleEnv
      Environment:
        Variables:
          CONFIG_BUCKET: !FindInMap
            - StagesMap
            - Ref: Environments
            - CONFIGBUCKET
          CONFIG_KEY: !FindInMap
            - StagesMap
            - Ref: Environments
            - CONFIGKEY
    
  LambdaCopy:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: ./LambdaCopy-CICD
      FunctionName: LambdaCopy-CICD
      Description: 'Lambda function to copy from one folder to another'
      MemorySize: 128
      Timeout: 30
      Role: !FindInMap
            - StagesMap
            - Ref: Environments
            - RoleEnv
      Environment:
        Variables:
          CONFIG_BUCKET: !FindInMap
            - StagesMap
            - Ref: Environments
            - CONFIGBUCKET
          CONFIG_KEY: !FindInMap
            - StagesMap
            - Ref: Environments
            - CONFIGKEY

模板 2

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Lambda Functions Deployment 

Parameters:
  Environments:
    Type: String
    Default: UAT
    Description: Parameters  deployment Environments

Mappings:
  StagesMap:
    UAT:
      CONFIGBUCKET: staging-bucket-name
      CONFIGKEY: source-data-key-path
      URL: UAT
      RoleEnv: arn:aws:iam::

    NonProd:
      CONFIGBUCKET: non-prod-bucket-name
      CONFIGKEY: source-data-key-path
      RoleEnv: arn:aws:iam::

      

Resources:
  Demo:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: ./LambdaCode2
      FunctionName: Demo
      Description: 'Lambda func'
      MemorySize: 128
      Timeout: 30
      Role: !FindInMap
            - StagesMap
            - Ref: Environments
            - RoleEnv
      Environment:
        Variables:
          CONFIG_BUCKET: !FindInMap
            - StagesMap
            - Ref: Environments
            - CONFIGBUCKET
          CONFIG_KEY: !FindInMap
            - StagesMap
            - Ref: Environments
            - CONFIGKEY

标签: aws-lambdaaws-codepipelineaws-codebuildaws-code-deployaws-sam

解决方案


一种解决方案是查看嵌套堆栈。这样,您可以创建第三个 SAM 模板,该模板将您的两个模板作为嵌套堆栈。然后,您只需部署父模板,您的两个模板都将部署为单独的堆栈。

更多信息请点击此处


推荐阅读