尝试更新aws cli中的云形式堆栈时:
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'
是否有CLI方式来执行此堆栈更新,或者我将不得不在GUI中处理我的APM。
答案 0 :(得分:19)
您可以使用deploy
代替update-stack
:
aws cloudformation deploy \
--template-file serverless-output.yaml \
--stack-name new-stack-name \
--capabilities CAPABILITY_IAM
此命令是必需的,因为Transforms需要使用change sets来应用,deploy
命令会自动为您执行。有关进一步的讨论,请参阅Working with Stacks that Contain Transforms:
要使用转换创建或更新堆栈,您必须创建更改集,然后执行它。更改集描述了AWS CloudFormation将根据已处理的模板执行的操作。在处理期间,AWS CloudFormation将AWS SAM语法转换为由转换定义的语法。处理可以添加您可能不知道的多个资源。例如,专用
AWS::Serverless::Function
资源添加了AWS身份和访问管理(IAM)执行角色和Lambda函数。为了确保您了解转换引入的所有更改,AWS CloudFormation要求您使用更改集。 [...]
如果您使用AWS CLI,则可以使用
package
和deploy
命令减少使用转换启动堆栈的步骤数。
答案 1 :(得分:2)
尝试使用deploy而不是update-stack
aws cloudformation deploy \ --template-file serverless-output.yaml \ --stack-name new-stack-name \ - 能力CAPABILITY_IAM