如何将参数传递到不同的 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'