如果可以的话,我想在使用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/
...
请注意OrdersApi
的{{1}}属性,我想将其动态设置为FunctionName
,这是我试图在CLI上传递的值。
我可以使用无服务器框架很容易地做到这一点,但是我还不太清楚如何使用SAM来实现。
答案 0 :(得分:3)
您可以使用Sub
之类的函数在CloudFormation中构造资源名称。大致情况:
Parameters:
stage:
Type: String
Default: dev
AllowedValues:
- dev
- prod
Resources:
OrdersApi:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub 'orders-api-${stage}'
答案 1 :(得分:0)
Lexicore发布的答案是正确的,您可以使用template.yaml
函数在!Sub
文件的某些部分中形成值,例如
FunctionName: !Sub 'orders-api-${stage}'
此方法行不通的缺失之处在于,您需要以特定格式将参数传递给sam deploy
命令。通过阅读AWS文档,sam deploy
是aws cloudformation deploy...
的简写。该命令允许您使用以下语法传递参数:
aws cloudformation deploy .... --parameter-overrides stage=dev
此语法也可以与sam deploy
命令一起使用,例如
sam deploy --template-file packaged.yml ..... --parameter-overrides stage=dev
请注意,在此示例中,stage=dev
适用于Parameters
文件的template.yaml
部分,例如
Parameters:
stage:
Type: String
AllowedValues:
- dev
- stage
- prod
这种方法使我可以在部署云形成堆栈时传递参数并动态更改值。