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

tam*_*ler 4 aws-lambda aws-sam

我正在尝试配置特定于环境的 Lambda 函数的 S3 策略存储桶。我希望能够在指定“dev”、“test”或“prod”的“sam package”或“sam deploy”期间传递变量。该变量将在 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
Run Code Online (Sandbox Code Playgroud)

如何使用参数和/或变量来实现这一点?谢谢你。

Ass*_*ran 8

你应该—parameter-overrides在你的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}"
Run Code Online (Sandbox Code Playgroud)

然后执行:

sam deploy --template-file packaged.yaml --stack-name yourstack --capabilities CAPABILITY_IAM --parameter-overrides Env=dev S3Bucket=bucket-name
Run Code Online (Sandbox Code Playgroud)

如果你想从.json每个 env的文件中传递你的参数,你应该考虑使用cross-env ENV=dev来传递你的Env变量,然后在根据你的变量 (process.env.ENV)传递你的 json 文件时使用gulp或执行你的sam deploy --parameter-overrides命令Env(转换为如何参数覆盖模式)作为参数覆盖参数。

希望这可以帮助