首页 > 解决方案 > 如何将参数传递给不同的 AWS SAM 文件

问题描述

我将我的 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 将参数传递给子文件?

标签: amazon-web-servicesaws-lambdaamazon-cloudformationaws-sam

解决方案


我已经断断续续地研究了一段时间,终于弄明白了。我花了这么长时间才尝试似乎有效的解决方案,这有点尴尬。希望这可以在将来为其他人节省一些时间:

我的主 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'

推荐阅读