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

AWS SAM Template setting environment specific variables

我正在尝试配置特定于环境的 Lambda 函数的 S3 策略存储桶。我希望能够在 "sam package" 或 "sam deploy" 期间传递变量,指定 "dev"、"test" 或 "prod"。该变量将在 template.yaml 文件中用于 select 环境特定设置:

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

如何使用参数和/或变量实现此目的?谢谢。

您想使用模板的 Parameters 部分。查看文档 here。然后,您可以将 —parameters-overrides 标志与 sam deploy 命令一起使用。

您应该在 sam deploy 命令中使用 —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}"

然后执行:

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)传递你的 json 文件(转换为参数如何覆盖模式)作为参数覆盖参数。

希望对您有所帮助