AWS SAM模板设置环境特定的变量

时间:2019-11-26 23:18:49

标签: aws-lambda aws-sam

我正在尝试配置特定于环境的Lambda函数的S3策略存储桶。我希望能够在“ sam软件包”或“ sam部署”期间传递一个变量,指定“ dev”,“ test”或“ prod”。该变量将在template.yaml文件中用于选择特定于环境的设置:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  image-processing


Resources:
  ImageProcessingFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/handlers/image-processing.handler
      Runtime: nodejs12.x
      CodeUri: .
      MemorySize: 256
      Timeout: 300
      Policies:
        S3CrudPolicy:
          BucketName: dev-bucket-name  <-- change this to dev, test or prod

如何使用参数和或变量来实现?谢谢。

2 个答案:

答案 0 :(得分:2)

您应在—parameters-overrides命令中使用sam deploy

sam deploy cli

让我演示如何:

在您的template.yaml中:

Parameters:
Env:
    Type: String

S3Bucket:
    Type: String

Resources:

ImageProcessingFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/handlers/image-processing.handler
      Runtime: nodejs12.x
      CodeUri: .
      MemorySize: 256
      Timeout: 300
      Policies:
        S3CrudPolicy:
          BucketName: !Sub "${Env}-${S3Bucket}"

然后执行:

sam deploy --template-file packaged.yaml --stack-name yourstack --capabilities CAPABILITY_IAM --parameter-overrides Env=dev S3Bucket=bucket-name

如果您希望每个环境从.json文件中传递参数,则应考虑使用cross-env ENV=dev传递Env变量,然后使用gulp或任何要执行的命令您的sam deploy --parameter-overrides命令,同时根据Env变量(process.env.ENV)(转换为参数如何覆盖pattern)作为参数覆盖参数传递json文件。

希望这会有所帮助

答案 1 :(得分:1)

您要使用模板的Parameters部分。查看文档here。然后,您可以在—parameters-overrides命令中使用sam deploy标志。