【问题标题】:How to deploy to multiple environments using CodeCommit and Code Pipeline [duplicate]如何使用 CodeCommit 和 Code Pipeline 部署到多个环境 [重复]
【发布时间】:2021-01-31 13:38:04
【问题描述】:

我使用 CodeCommit 作为我的代码存储库,因为 code-commit 使您能够将代码部署到另一个环境中的跨账户。我在我的 QA 环境中使用 AWS SAM 在 template.yaml 中设置了一个 lambda 函数。

我应该在代码管道的哪里定义环境变量,以便可以在另一个帐户的 Prod 环境中部署 lambda 函数?

如何定义变量,以便在 prod 环境中合并 staging lambda 函数时,它会使用 prod 环境变量?

因为在合并代码时在 prod 环境中定义暂存环境变量没有任何意义。

环境变量会在代码构建中定义吗?

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: CD Demo Lambda
Resources:
  CDDemoLambda:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: ./LambdaCode
      FunctionName: ApigatewayLambda
      AutoPublishAlias: ApiLambda
      Description: 'Lambda function validation'
      MemorySize: 128
      Timeout: 30
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /getazs
            Method: get
      Environment:
        Variables:
          CONFIG_BUCKET: staging-bucket-name
          CONFIG_KEY: source-data-key-path

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-codepipeline aws-codebuild aws-codecommit


    【解决方案1】:

    您可以使用 cloudformation 中的参数和条件功能来做到这一点,例如,您将添加一个参数部分,如下所示:

    Parameters:
      Stage:
        Type: String
        Default: staging
        Description: Parameter for getting the deployment stage
    

    然后是带有映射的映射部分,用于保存所有阶段的环境变量

    Mappings:
      StagesMap:
        staging:
          CONFIG_BUCKET: staging-bucket-name
          CONFIG_KEY: source-data-key-path
        prod:
          CONFIG_BUCKET: prod-bucket-name
          CONFIG_KEY: source-data-key-path
    
    

    那么你的函数可以根据你所处的环境使用变量:

    AWSTemplateFormatVersion: '2010-09-09'
    Transform: 'AWS::Serverless-2016-10-31'
    Description: CD Demo Lambda
    Resources:
      CDDemoLambda:
        Type: 'AWS::Serverless::Function'
        Properties:
          Handler: lambda_function.lambda_handler
          Runtime: python3.6
          CodeUri: ./LambdaCode
          FunctionName: ApigatewayLambda
          AutoPublishAlias: ApiLambda
          Description: 'Lambda function validation'
          MemorySize: 128
          Timeout: 30
          Events:
            ApiEvent:
              Type: Api
              Properties:
                Path: /getazs
                Method: get
          Environment:
            Variables:
              CONFIG_BUCKET: !FindInMap
                - StagesMap
                - Ref: Stage
                - CONFIG_BUCKET
              CONFIG_KEY: !FindInMap
                - StagesMap
                - Ref: Stage
                - CONFIG_KEY
    

    现在,当您调用 sam 部署命令时,您需要定义要部署到的阶段。 例如:

    sam deploy --parameter-overrides Stage=prod
    

    您的完整 cloudformation 模板应如下所示:

    AWSTemplateFormatVersion: '2010-09-09'
    Transform: 'AWS::Serverless-2016-10-31'
    Description: CD Demo Lambda
    
    Parameters:
      Stage:
        Type: String
        Default: staging
        Description: Parameter for getting the deployment stage
    
    Mappings:
      StagesMap:
        staging:
          CONFIG_BUCKET: staging-bucket-name
          CONFIG_KEY: source-data-key-path
        prod:
          CONFIG_BUCKET: prod-bucket-name
          CONFIG_KEY: source-data-key-path
    
    
    Resources:
      CDDemoLambda:
        Type: 'AWS::Serverless::Function'
        Properties:
          Handler: lambda_function.lambda_handler
          Runtime: python3.6
          CodeUri: ./LambdaCode
          FunctionName: ApigatewayLambda
          AutoPublishAlias: ApiLambda
          Description: 'Lambda function validation'
          MemorySize: 128
          Timeout: 30
          Events:
            ApiEvent:
              Type: Api
              Properties:
                Path: /getazs
                Method: get
          Environment:
            Variables:
              CONFIG_BUCKET: !FindInMap
                - StagesMap
                - Ref: Stage
                - CONFIG_BUCKET
              CONFIG_KEY: !FindInMap
                - StagesMap
                - Ref: Stage
                - CONFIG_KEY
    

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 2018-10-11
      • 2016-12-17
      • 1970-01-01
      • 2013-01-24
      • 2015-07-29
      • 2013-01-27
      • 1970-01-01
      • 2016-10-24
      相关资源
      最近更新 更多