gpt4 book ai didi

amazon-web-services - AWS SAM 和参数存储 : How to select parameter for the deployment into different environments

转载 作者:行者123 更新时间:2023-12-04 00:13:35 25 4
gpt4 key购买 nike

我有一个设置,我使用 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 Parameter store 中定义的 prod 变量部署到 prod
我应该在我的 template.yaml 文件中进行哪些更改才能部署到不同的环境?

最佳答案

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

Parameters:
Stage:
Type: String
Default: staging
Description: Parameter for getting the deployment stage
然后是一个带有 map 的映射部分,用于保存所有阶段的环境变量
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 to deploy 命令时,您需要定义要部署到的阶段。
前任:
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

关于amazon-web-services - AWS SAM 和参数存储 : How to select parameter for the deployment into different environments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65961753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com