我是aws的新形象;我想知道是否有人知道在它刚刚赢得删除时强制删除堆栈的方法。它失败并出现此错误:
Failed to delete stack: Role arn:aws:iam::role/CloudFormationRole-NestedCFN-CodePipeline is invalid or cannot be assumed
当我尝试删除嵌套的子堆栈而不是首先删除父堆栈时,通常会发生此错误。如果我不小心删除了父堆栈,有没有办法删除嵌套堆栈?
答案 0 :(得分:23)
我有几次这个问题。解决方案有点像黑客攻击。在您的情况下,您需要创建一个名为CloudFormationRole-NestedCFN-CodePipeline
的新角色。创建此角色后,当您要求选择将使用此角色的服务然后附加权限政策时,您可能需要选择CloudFormation
服务即可。创建角色后,尝试再次删除堆栈
其中一些是猜谜游戏,因为您需要选择正确的资源(即AWS服务),这是一个"可信实体"。根据您的角色名称,它可以是CloudFormation或CodePipeline。
删除CloudFormation堆栈后,您可以删除刚刚创建的IAM角色。
您收到此错误的原因是您可能删除了一个CloudFormation堆栈,该堆栈具有您正在尝试删除的堆栈使用的IAM角色。
我希望AWS提供更优雅的解决方案,但这是我的解决方法。
答案 1 :(得分:18)
我遇到了同样的问题,删除堆栈的唯一方法是使用AWS CLI并执行以下命令:
aws cloudformation delete-stack --role-arn arn:aws:iam::xxxx:role/anyrolewithpermissions --stack-name StuckStack
确保使用具有足够权限的其他角色。
答案 2 :(得分:0)
不幸的是,没有办法强制删除CF Stack。
你可以尝试一些事情:
答案 3 :(得分:0)
就我而言,我删除了创建堆栈的管道,这删除了堆栈使用的角色。
选项1)从管道堆栈中扮演另一个管道,然后“更新”您不能删除的堆栈,但是告诉它使用管道创建的新角色。然后删除堆栈(即使更新失败,新角色仍在起作用,您可以删除)。
选项2)创建一个与您已删除的角色匹配的角色(在我的情况下为以下角色),然后使用该角色更新堆栈,然后删除。
CloudformationServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
Service:
- cloudformation.amazonaws.com
Version: '2012-10-17'
Path: "/"
Policies:
- PolicyName: DeployCloudformationStack
PolicyDocument:
Version: '2012-10-17'
Statement:
- Resource: "*"
Effect: Allow
Action:
- "*"
此后可能还有其他维修!
答案 4 :(得分:0)
解决此问题的更简单方法是使用变更集。可以遵循以下步骤
然后您可以相应地删除堆栈
答案 5 :(得分:0)
通常在嵌套堆栈的情况下发生。只需创建一个具有相同名称的角色,然后授予该角色完全的管理员访问权限。使用此权限,该角色将能够删除堆栈。成功删除堆栈后删除角色
答案 6 :(得分:0)
这通常发生在需要删除堆栈的角色被意外删除时。您可能会收到错误消息
Role arn:aws:iam::<account>:role/<role name> is invalid or cannot be assumed
转到 IAM
> roles
> create role
> 点击 cloudformation
获取服务 > 确保您给它正确的 permissions
,以便 cloudformation 可以删除堆栈。 (在我的例子中,我给了它管理员权限,因为我打算在删除堆栈后直接删除角色 > for Role name
在错误消息中使用相同的角色名称。
您现在应该可以删除堆栈