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

Eri*_*ord 8 aws-cloudformation aws-cli aws-lambda

尝试更新aws cli中的cloudformation堆栈时:

aws --profile dev cloudformation update-stack --stack-name mystackname --template-body file://events-list.yaml
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

An error occurred (ValidationError) when calling the UpdateStack operation: UpdateStack cannot be used with templates containing Transforms.
Run Code Online (Sandbox Code Playgroud)

因为我使用AWS无服务器转换进行lambda函数部署

Transform: 'AWS::Serverless-2016-10-31'
Run Code Online (Sandbox Code Playgroud)

是否有CLI方式来执行此堆栈更新,或者我将不得不在GUI中处理我的APM.

wjo*_*dan 20

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

aws cloudformation deploy \
   --template-file serverless-output.yaml \
   --stack-name new-stack-name \
   --capabilities CAPABILITY_IAM
Run Code Online (Sandbox Code Playgroud)

因为该命令是必要的变换需要使用应用的变更集,该deploy指令为你自动.有关进一步的讨论,请参阅使用包含转换的堆栈:

要使用转换创建或更新堆栈,您必须创建更改集,然后执行它.更改集描述了AWS CloudFormation将根据已处理的模板执行的操作.在处理期间,AWS CloudFormation将AWS SAM语法转换为由转换定义的语法.处理可以添加您可能不知道的多个资源.例如,专用AWS::Serverless::Function资源添加AWS身份和访问管理(IAM)执行角色和Lambda函数.

为了确保您了解转换引入的所有更改,AWS CloudFormation要求您使用更改集.[...]

如果使用AWS CLI,则可以使用packagedeploy命令减少使用转换启动堆栈的步骤数.