对 CloudFormation 上的嵌套堆栈使用 CAPABILITY_AUTO_EXPAND

Use CAPABILITY_AUTO_EXPAND for nested stacks on CloudFormation

我正在尝试使用嵌套堆栈,当我的 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 for capabilites,aws cli docs 说的类似,但没有给出示例。

所以我 运行 不知道还有什么可以尝试拥有 CAPABILITY_AUTO_EXPAND 能力。

我从 Keeton Hodgson 那里得到了答案,这个 cli 命令有效:

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

注意没有逗号。

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

我尝试了另一种变体,它成功了!

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

像这样把能力属性放在最后

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

我尝试了上述解决方案,今天(2020 年 6 月)使用更高级别 sam 对我有用的是在列出的功能之间添加 space。在这个文本文件解释中没有弹性,这完全是精神错乱。 SAM 的 cli 是开源的,所以我想我可以把我的代码放在嘴边并提交 PR。反正。

samconfig.toml:

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

然后:

sam deploy

输出:

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

经过一些研究发现您实际上可以在控制台中添加这些功能。
参考Capabilities - optional section in the cfn deploy phase definition in console