Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使用CodeCommit和代码管道部署到多个环境_Amazon Web Services_Aws Lambda_Aws Codepipeline_Aws Codebuild_Aws Codecommit - Fatal编程技术网

Amazon web services 如何使用CodeCommit和代码管道部署到多个环境

Amazon web services 如何使用CodeCommit和代码管道部署到多个环境,amazon-web-services,aws-lambda,aws-codepipeline,aws-codebuild,aws-codecommit,Amazon Web Services,Aws Lambda,Aws Codepipeline,Aws Codebuild,Aws Codecommit,我使用CodeCommit作为代码的存储库,因为代码提交使您能够在另一个环境中跨帐户部署代码。我已经使用AWS SAM在template.yaml的QA环境中设置了lambda函数 我应该在代码管道中的何处定义环境变量,以便lambda函数可以在另一个帐户的Prod环境中部署 我应该如何定义变量,以便在prod环境上合并staging lambda函数时,它会接受prod环境变量 因为在合并代码时,在prod环境中定义登台环境变量没有任何意义 环境变量会在代码构建中定义吗 AWSTemplate

我使用CodeCommit作为代码的存储库,因为代码提交使您能够在另一个环境中跨帐户部署代码。我已经使用AWS SAM在template.yaml的QA环境中设置了lambda函数

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

我应该如何定义变量,以便在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

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

参数:
阶段:
类型:字符串
默认值:暂存
Description:获取部署阶段的参数
然后是一个带有映射的映射部分,用于保存所有阶段的环境变量

映射:
舞台地图:
登台:
配置存储桶:暂存存储桶名称
配置密钥:源数据密钥路径
产品:
CONFIG_BUCKET:prod BUCKET名称
配置密钥:源数据密钥路径
然后,您的函数可以根据您所处的环境使用变量:

AWSTemplateFormatVersion:'2010-09-09'
转换:“AWS::Serverless-2016-10-31”
描述:CD演示Lambda
资源:
CDDemoLambda:
类型:“AWS::Serverless::Function”
特性:
处理程序:lambda_函数。lambda_处理程序
运行时:python3.6
代码URI:./LambdaCode
功能名称:ApigatewayLambda
自动出版物:ApiLambda
描述:“Lambda函数验证”
记忆化:128
超时时间:30
活动:
ApiEvent:
类型:Api
特性:
路径:/getazs
方法:获取
环境:
变量:
配置桶:!FindInMap
-舞台地图
-参考:阶段
-配置桶
配置键:!FindInMap
-舞台地图
-参考:阶段
-配置键
现在,当您调用sam to deploy命令时,需要定义要部署到的阶段。 例:

sam部署--参数覆盖Stage=prod
完整的cloudformation模板应如下所示:

AWSTemplateFormatVersion:'2010-09-09'
转换:“AWS::Serverless-2016-10-31”
描述:CD演示Lambda
参数:
阶段:
类型:字符串
默认值:暂存
Description:获取部署阶段的参数
映射:
舞台地图:
登台:
配置存储桶:暂存存储桶名称
配置密钥:源数据密钥路径
产品:
CONFIG_BUCKET:prod BUCKET名称
配置密钥:源数据密钥路径
资源:
CDDemoLambda:
类型:“AWS::Serverless::Function”
特性:
处理程序:lambda_函数。lambda_处理程序
运行时:python3.6
代码URI:./LambdaCode
功能名称:ApigatewayLambda
自动出版物:ApiLambda
描述:“Lambda函数验证”
记忆化:128
超时时间:30
活动:
ApiEvent:
类型:Api
特性:
路径:/getazs
方法:获取
环境:
变量:
配置桶:!FindInMap
-舞台地图
-参考:阶段
-配置桶
配置键:!FindInMap
-舞台地图
-参考:阶段
-配置键