使用SAM变换从aws cli更新cloudformation堆栈

时间:2016-12-21 18:16:19

标签: aws-lambda amazon-cloudformation aws-cli

尝试更新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。

2 个答案:

答案 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,则可以使用packagedeploy命令减少使用转换启动堆栈的步骤数。

答案 1 :(得分:2)

尝试使用deploy而不是update-stack

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