【发布时间】:2021-05-03 19:15:48
【问题描述】:
我有一个设置,我使用 CodeCommit 作为我的存储库来存储 lambda 函数和 CodePipeline,使用 AWS SAM 来部署和创建 lambda 函数。
我想将 lambda 函数部署到不同的环境中,例如 QA、staging 和 Prod。我已使用 AWS 参数存储来引用我的变量。
下面是我设置的 template.yaml 文件,它创建了一个 lambda 函数,它使用 AWS 参数存储来引用变量
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Test
Parameters:
BucketName:
Description: 'Required. Bucket Name'
Type: 'AWS::SSM::Parameter::Value<String>'
Default: 'MyBucketname'
CSVPath:
Description: 'Required. Configkey Name'
Type: 'AWS::SSM::Parameter::Value<String>'
Default: 'MyCSVPath'
Resources:
GetOrdersFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./LambdaCode
Handler: app.lambda_handler
FunctionName: app
Runtime: python3.6
Description: 'staging'
Environment:
Variables:
BucketName: !Ref BucketName
CSVPath: !Ref CSVPath
Events:
HelloWorld:
Type: Api
Properties:
Path: /orders
Method: get
我可以在我的 template.yaml 中为部署定义变量,但我不确定如何为不同的环境(prod 或 qa)定义它。
当管道触发时,它应该使用 QA 变量部署到 QA 环境,并使用将在 AWS 参数存储中定义的 prod 变量部署到 prod
我应该在我的 template.yaml 文件中进行哪些更改才能部署到不同的环境?
【问题讨论】:
-
每个环境是否有一个代码管道,或者每个环境至少有不同的阶段或操作?您可以从代码管道传递
ParameterOverrides以传递正确的参数值{"BucketName":"/BUCKETNAME/DEV","CSVPath":"/CSVPATH/DEV"} -
是的,我每个环境都有一个代码管道
标签: amazon-web-services aws-lambda aws-codepipeline aws-sam amazon-systems-manager