将CAPABILITY_AUTO_EXPAND用于CloudFormation上的嵌套堆栈

时间:2018-11-29 16:22:36

标签: amazon-cloudformation aws-codepipeline

我正在尝试使用嵌套堆栈,并且在执行我的ChangeSet时出现此错误:

Requires capabilities : [CAPABILITY_AUTO_EXPAND]

我去创建了一个带有cloudformation的管道。

这可以用来创建管道:

Configuration:
  ActionMode: CHANGE_SET_REPLACE
  ChangeSetName: changeset
  RoleArn: ??
  Capabilities: CAPABILITY_IAM
  StackName: appsync-graphql
  TemplatePath: BuildArtifact::output.yaml

这不能:

Configuration:
  ActionMode: CHANGE_SET_REPLACE
  ChangeSetName: changeset
  RoleArn: ??
  Capabilities: 
    - CAPABILITY_IAM
    - CAPABILITY_AUTO_EXPAND
  StackName: appsync-graphql
  TemplatePath: BuildArtifact::output.yaml

错误是:“属性配置的值必须是具有字符串(或简单类型)属性的对象”

这是我找到的最近的文档:https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStack.html

它说:Type: Array of strings表示功能,而aws cli文档也有类似的说法,但没有给出示例。

因此,我没有其他想法来尝试使用CAPABILITY_AUTO_EXPAND功能。

4 个答案:

答案 0 :(得分:16)

我尝试了另一种变体,并且奏效了!

Configuration:
  ..
  Capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND
  ...

答案 1 :(得分:5)

我从基顿·霍奇森(Keeton Hodgson)得到了答案,此cli命令有效:

sam deploy --template-file output.yaml --stack-name <AppName> --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

请注意,没有逗号。

我仍然不知道如何更改管道模板以使其正常工作。

答案 2 :(得分:0)

像这样在最后放置功能属性

aws cloud formation deploy COMMAND --capabilities CAPABILITY_NAMED_IAM

更改订单

Configuration:
  ActionMode: CHANGE_SET_REPLACE
  ChangeSetName: changeset
  RoleArn: ??
  StackName: appsync-graphql
  TemplatePath: BuildArtifact::output.yaml
  Capabilities: 
    - CAPABILITY_IAM
    - CAPABILITY_AUTO_EXPAND

答案 3 :(得分:0)

我尝试了上述解决方案,而今天(2020年6月)使用更高级别的sam对我有用的是在列出的功能之间增加了一个空格。完全疯狂的是,此文本文件解释中没有弹性。 SAM的cli是开放源代码,因此我想我可以将代码放在我的嘴边并提交PR。无论如何。

samconfig.toml

...
capabilities = "CAPABILITY_IAM CAPABILITY_AUTO_EXPAND"
...

然后:

sam deploy

输出:

...
Capabilities               : ["CAPABILITY_IAM", "CAPABILITY_AUTO_EXPAND"]
...