使用SAM转换,通过AWS CLI更新CloudFormation堆栈

9
尝试使用AWS CLI更新CloudFormation堆栈时:
aws --profile dev cloudformation update-stack --stack-name mystackname --template-body file://events-list.yaml

我收到了以下错误信息:
An error occurred (ValidationError) when calling the UpdateStack operation: UpdateStack cannot be used with templates containing Transforms.

由于我正在使用AWS无服务器转换进行Lambda函数部署

Transform: 'AWS::Serverless-2016-10-31'

有没有命令行的方式来执行这个堆栈更新,还是我必须在图形用户界面中处理我的应用程序性能管理?
2个回答

20

您可以使用 deploy 而不是 update-stack

aws cloudformation deploy \
   --template-file serverless-output.yaml \
   --stack-name new-stack-name \
   --capabilities CAPABILITY_IAM

这个命令很重要,因为转换需要使用变更集来应用,而deploy命令会自动化这个过程。请参考包含转换的堆栈操作进行进一步讨论。
要使用转换创建或更新堆栈,您必须创建更改集,然后执行它。 更改集描述AWS CloudFormation将基于处理的模板采取的操作。 在处理期间,AWS CloudFormation将AWS SAM语法转换为由转换定义的语法。 处理可以添加多个资源,您可能不知道其中的一些。 例如,专用的AWS :: Serverless :: Function资源会添加AWS Identity and Access Management(IAM)执行角色和Lambda函数。
为确保您了解转换引入的所有更改,AWS CloudFormation要求您使用更改集。 [...]
如果您使用AWS CLI,则可以使用packagedeploy命令来减少使用转换启动堆栈的步骤数。

2

尝试使用deploy命令而不是update-stack命令

aws cloudformation deploy \ --template-file serverless-output.yaml \ --stack-name new-stack-name \ --capabilities CAPABILITY_IAM


1
当然,我添加了一个答案,并提供了有关这两个命令之间区别的其他文档的引用。 - wjordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接