我正在尝试配置特定于环境的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
如何使用参数和或变量来实现?谢谢。
答案 0 :(得分:2)
您应在—parameters-overrides
命令中使用sam deploy
。
让我演示如何:
在您的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
标志。