[英]Dynamically create resource names in AWS SAM using parameters
如果可以的话,我想在使用AWS SAM时为我的Cloud Formation堆栈中的资源动态创建名称。
例如,当我打包或部署时,我希望能够在命令行中添加东西:
sam package --s3-bucket..... --parameters stage=prod
在我的template.yml
文件中,以某种方式执行以下操作:
Resources:
OrdersApi:
Type: AWS::Serverless::Function
Properties:
FunctionName: orders-api-${stage}
CodeUri: ./src/api/services/orders/
...
请注意FunctionName
的OrdersApi
属性,我想将其动态设置为orders-api-prod
,这是我尝试在CLI上传递的值。
我可以使用无服务器框架很容易地做到这一点,但是我还不太清楚如何使用SAM来做到这一点。
您可以使用Sub
功能在CloudFormation中构造资源名称。 大致情况:
Parameters:
stage:
Type: String
Default: dev
AllowedValues:
- dev
- prod
Resources:
OrdersApi:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub 'orders-api-${stage}'
lexicore发布的答案是正确的,您可以使用!Sub
函数在template.yaml
文件的某些部分中形成值,例如
FunctionName: !Sub 'orders-api-${stage}'
为什么这种方法行不通的缺失部分是您需要将参数以特定格式传递给sam deploy
命令。 通过阅读AWS文档, sam deploy
是AWS aws cloudformation deploy...
简写。 该命令允许您使用以下语法传递参数:
aws cloudformation deploy .... --parameter-overrides stage=dev
该语法也可以与sam deploy
命令一起使用,例如
sam deploy --template-file packaged.yml ..... --parameter-overrides stage=dev
请注意,在此示例中, stage=dev
适用于template.yaml
文件的Parameters
部分
Parameters:
stage:
Type: String
AllowedValues:
- dev
- stage
- prod
这种方法使我可以传递参数并在部署云形成堆栈时动态更改值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.