AWS Cloud Formation.Requiresfunction:(儿童堆栈)

重要

我正在dynamic构buildTemplateURL。

"TemplateURL" : { "Fn::Join" : ["", [ { "Ref" : "TemplateURL"}, "substack.template" ]] } 

我正在AWS控制台中运行CloudFormation模板。

直接运行堆栈

我从一个使用IAM资源的模板开始,当直接运行堆栈时,控制台会提示我确认IAMfunction。

作为一个孩子运行堆栈

然后我尝试从父堆栈调用同一个堆栈,但没有收到相同的提示。

该堆栈然后失败,消息:

需要function:[CAPABILITY_IAM]

研究

文档表明,我可以通过多种方式运行CF脚本。 有很多关于CLI / API的文档并提供了function参数,但似乎没有关于如何确保在通过控制台运行时应用它的信息。

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html

AWS CloudFormation模板中的IAM资源

  • CF控制台
  • CLI
  • API

我做了什么/我的想法

我现在已经通过论坛提出了一个问题,但是没有回复(还没有): https : //forums.aws.amazon.com/thread.jspa?threadID=139160

我怀疑这是一个在控制台中的错误,因为似乎没有任何文档如何通过控制台更改行为,据我所知,这应该只是工作。

任何人都遇到同样的问题,或者可以报告说,它工作正常吗?

我刚刚遇到了这个问题,我的问题是没有选中checkbox“我承认这个模板可能会导致AWS CloudFormation创buildIAM资源”。 在更新我的堆栈之前的最后一个屏幕上。 在这里输入图像说明

当dynamic构buildTemplateURL时,validation检查器无法预先查看是否存在IAM资源,这就是为什么它不会要求IAM_CAPABILITIES。

解决此问题的最佳解决scheme(现在)将是在主模板中创build一个虚拟IAM资源以获取提示。

如果您正在使用CLI或boto,则可以包含“function”参数。 这是一个列表,但目前唯一被接受的条目是“CAPABILITY_IAM”。

 cf.update_stack(..., capabilities=['CAPABILITY_IAM']) 

要么

 cf.create_stack(..., capabilities=['CAPABILITY_IAM']) 

这将授予整个堆栈树IAM创build权限。