如何将参数传递到不同的 AWS SAM 文件
How to pass parameters through to different AWS SAM files
我将我的 SAM 堆栈分成多个文件,如下所示:
.
├── README.md
├── lambda_template.yaml
.
.
.
└── template.yaml
这样我就可以在不同的文件中使用不同的 lambda(及其相关资源)。
我的主要 template.yaml
文件类似于:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Sample SAM Template
Resources:
MyLambda:
Type: AWS::Serverless::Application
Properties:
# Lambda function
Location: ./lambda_template.yaml
然后在 ./lambda_template.yaml
内我有了 lambda 的实际定义:
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sam Template deploys MyLambda.
Parameters:
Environment:
Description: 'Required. Environment you are deploying to -- not working'
Type: String
Default: 'develop'
Resources:
# Details about the input_object_processor Lambda function
MyLambda:
Type: AWS::Serverless::Function
Properties:
...
我希望能够制作一个参数,然后在 sam deploy ....
期间在命令行上覆盖它
我认为您可以执行以下操作:
sam deploy ... --parameter-overrides Environment=QA
但这没有用,所以我尝试了:
sam deploy ... --parameter-overrides ParameterKey=Environment,ParameterValue=-qa
但似乎不尊重更新,只是使用默认值。有没有办法让 SAM 将参数传递给子文件?
您的 sam 部署看起来确实正确
您是否尝试过用双引号括起您的参数覆盖
sam deploy ... --parameter-overrides "ParameterKey=Environment,ParameterValue=qa"
我断断续续地研究了一段时间,终于弄明白了。有点尴尬的是,我花了这么长时间才尝试似乎有效的解决方案。希望这可以在将来为其他人节省一些时间:
我的 template.yaml 主文件现在看起来像这样:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Sample SAM Template
Parameters:
Environment:
Description: 'Required. Environment you are deploying to'
Type: String
Resources:
MyLambda:
Type: AWS::Serverless::Application
Properties:
Parameters:
Environment: !Ref Environment
Location: ./lambda_template.yaml
我的 ./lambda_template.yaml
文件现在看起来像:
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sam Template deploys MyLambda.
Parameters:
Environment:
Description: 'Required. Environment you are deploying to -- not working'
Type: String
Resources:
# Details about the input_object_processor Lambda function
MyLambda:
Type: AWS::Serverless::Function
Properties:
FunctionName:
Fn::Join:
- "-"
- - "my"
- Ref: Environment
- 'lambda'
我将我的 SAM 堆栈分成多个文件,如下所示:
.
├── README.md
├── lambda_template.yaml
.
.
.
└── template.yaml
这样我就可以在不同的文件中使用不同的 lambda(及其相关资源)。
我的主要 template.yaml
文件类似于:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Sample SAM Template
Resources:
MyLambda:
Type: AWS::Serverless::Application
Properties:
# Lambda function
Location: ./lambda_template.yaml
然后在 ./lambda_template.yaml
内我有了 lambda 的实际定义:
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sam Template deploys MyLambda.
Parameters:
Environment:
Description: 'Required. Environment you are deploying to -- not working'
Type: String
Default: 'develop'
Resources:
# Details about the input_object_processor Lambda function
MyLambda:
Type: AWS::Serverless::Function
Properties:
...
我希望能够制作一个参数,然后在 sam deploy ....
我认为您可以执行以下操作:
sam deploy ... --parameter-overrides Environment=QA
但这没有用,所以我尝试了:
sam deploy ... --parameter-overrides ParameterKey=Environment,ParameterValue=-qa
但似乎不尊重更新,只是使用默认值。有没有办法让 SAM 将参数传递给子文件?
您的 sam 部署看起来确实正确
您是否尝试过用双引号括起您的参数覆盖
sam deploy ... --parameter-overrides "ParameterKey=Environment,ParameterValue=qa"
我断断续续地研究了一段时间,终于弄明白了。有点尴尬的是,我花了这么长时间才尝试似乎有效的解决方案。希望这可以在将来为其他人节省一些时间:
我的 template.yaml 主文件现在看起来像这样:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Sample SAM Template
Parameters:
Environment:
Description: 'Required. Environment you are deploying to'
Type: String
Resources:
MyLambda:
Type: AWS::Serverless::Application
Properties:
Parameters:
Environment: !Ref Environment
Location: ./lambda_template.yaml
我的 ./lambda_template.yaml
文件现在看起来像:
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sam Template deploys MyLambda.
Parameters:
Environment:
Description: 'Required. Environment you are deploying to -- not working'
Type: String
Resources:
# Details about the input_object_processor Lambda function
MyLambda:
Type: AWS::Serverless::Function
Properties:
FunctionName:
Fn::Join:
- "-"
- - "my"
- Ref: Environment
- 'lambda'