【问题标题】:AWS CloudFormation Stack update error: Requires capabilities : [CAPABILITY_IAM]AWS CloudFormation 堆栈更新错误:需要功能:[CAPABILITY_IAM]
【发布时间】:2017-05-05 21:25:59
【问题描述】:

使用 CloudFormation 创建堆栈时,我收到此错误:

堆栈更新错误:需要功能:[CAPABILITY_IAM]

我找不到用于将 CAPABILITIES_IAM 添加到 CloudFormation 配置的模板。

解决CAPABILITIES_IAM 错误的选项有哪些?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation amazon-iam


    【解决方案1】:

    事实证明,您需要在堆栈创建的最后一个屏幕上选中一个框。如果您使用控制台,则在“创建堆栈”按钮上方有一个框,要求您确认您希望允许 Cloudformation 修改 IAM 内容。当然,您可以在没有确认的情况下创建堆栈,这将导致堆栈失败并出现 CAPABILITY_IAM 错误(或另一个错误,如果需要不同的功能)。

    在 CodePipeline CloudFormation 中,您可以像这样添加它以允许在部署操作中执行创建的 change_set:

    Configuration:
            StackName: !Ref GitHubRepository
            ActionMode: CHANGE_SET_REPLACE
            Capabilities: CAPABILITY_NAMED_IAM
            RoleArn: arn:aws:iam::818272543125:role/events-list-codepiplinerole
            ChangeSetName: !Join ["",[!Ref GitHubRepository, "-changeset"]]
            TemplatePath: MyAppBuild::sam_post.yaml
    

    在 aws cli 中追加

    --capabilities CAPABILITY_IAM
    

    --capabilities CAPABILITY_NAMED_IAM
    

    你的命令是这样的:

    aws cloudformation create-stack --stack-name message-store --template-body file://bucket_with_keys.yaml --parameters file://cfg_bucket_with_keys.json --capabilities CAPABILITY_NAMED_IAM
    

    这不适用于 cloudformation --validate-template,因为它实际上并未创建资源。

    【讨论】:

      【解决方案2】:

      如果您使用的是 AWS CLI,则可以向 aws cloudformation create-stack 命令添加一个额外参数,明确声明您希望提供这些功能。

      (这是在此处的另一个答案中勾选复选框的 CLI 等效项)。

      参数是--capabilities CAPABILITY_IAM,所以你的命令看起来像:

      aws cloudformation create-stack --stack-name $STACK_NAME --capabilities CAPABILITY_IAM

      希望有帮助

      【讨论】:

      • 感谢 cli 参数的提醒。添加了上面的完整代码示例。
      • 我错了还是不适用于validate-template??我的完整命令:aws cloudformation validate-template --template-body file://sqs-template.yml --capabilities CAPABILITY_IAM
      • 我来到这里想知道同样的事情。如果您看到“错误”"CapabilitiesReason": "The following resource(s) require capabilities: [AWS::IAM::Role]",则表示您的模板有效,您必须在创建堆栈时指定返回功能。 Source
      • 模板将在没有命令的情况下进行验证 - 只有在创建堆栈时才需要它
      • 还有一个 github 问题也在讨论这个问题:github.com/awslabs/serverless-application-model/issues/51
      【解决方案3】:

      就在创建堆栈按钮上方,在控制台中打开确认。

      【讨论】:

        猜你喜欢
        • 2021-06-01
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2019-06-30
        • 2014-07-11
        • 2022-08-05
        • 2018-08-06
        • 2021-03-31
        相关资源
        最近更新 更多