Aws lambda 如何在codebuild buildspec和codedeploy中使用多个sam模板进行lambda函数部署

Aws lambda 如何在codebuild buildspec和codedeploy中使用多个sam模板进行lambda函数部署,aws-lambda,aws-codepipeline,aws-codebuild,aws-code-deploy,aws-sam,Aws Lambda,Aws Codepipeline,Aws Codebuild,Aws Code Deploy,Aws Sam,我想在我的codebuild buildspec和codedeploy中使用多个SAM模板文件来部署lambda函数 我在buildspec中定义了多SAM模板,该模板构建时没有任何错误。但是,CodeDeploy仅部署一个SAM模板 如何设置codebuild和codedeploy以使用多个sam模板lambda函数部署 下面是我设置的代码构建规范文件 version: 0.1 env: parameter-store: S3_BUCKET: "my_s3_bucket&

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

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

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

下面是我设置的代码构建规范文件

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

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

关于这方面的更多信息