我的 Amazon Elastic Container Service (Amazon ECS) 集群删除失败。
简短描述
Amazon ECS 集群可能由于资源依赖关系问题而无法删除。当您创建 ECS 集群时,AWS CloudFormation 会将资源与集群关联起来,例如自动扩缩组、虚拟私有云 (VPC) 和负载均衡器。这些资源和 AWS CloudFormation 的其他问题可能会阻止集群的删除。
如果您在 2015 年 11 月 24 日之后使用 ECS 控制台或 Create Cluster 向导来创建集群,则该集群具有 CloudFormation 堆栈。删除集群时,您的 EC2ContainerService-yourClusterName 堆栈可能会遇到以下错误:
- “The vpc 'vpc-1234567' has dependencies and cannot be deleted”(vpc 'vpc-1234567' 有依赖关系,无法删除)
- “The security group sg-123456 failed to delete due to the error "resource sg-123456 has a dependent object”(由于错误“资源 sg-123456 有依赖对象”,安全组 sg-123456 删除失败)
- “User: arn:aws:sts::1111222233334444:assumed-role/example-role/example-user is not authorized to perform: ecs:DeleteCluster on resource: arn:aws:ecs:Region:1111222233334444:cluster/example-cluster”(用户:arn:aws:sts::1111222233334444:assumed-role/example-role/example-user 无权对资源:arn:aws:ecs:Region:1111222233334444:cluster/example-cluster 执行:ecs:DeleteCluster)
由于上述错误,集群删除失败,CloudFormation 堆栈变为 DELETE_FAILED 状态。
解决方法
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误消息,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
验证 IAM 权限
完成以下步骤:
- 打开 AWS Identity and Access Management (IAM) 控制台。
- 在导航窗格中,选择 Roles(角色)。
- 在 Roles(角色)页面上,输入错误消息中指定的 IAM 角色。要查看 AWS CloudTrail 事件历史记录页面上的错误消息,请筛选 DeleteCluster API 调用。
**注意:**进行 API 调用的 IAM 实体是尝试删除 Amazon ECS 集群的实体。
- 选择 IAM 实体。
- 选择 Permissions(权限)选项卡。
- 检查权限策略是否包含所需的 ecs:Delete* 权限。如果缺少权限,则授予对 IAM 实体的 AmazonECS_FullAccess 访问权限。
跳过具有依赖关系的资源来删除集群
完成以下步骤:
- 打开 CloudFormation 控制台。
- 对于 Filter(筛选),选择 Active(活动),然后选择 Failed(失败)。
- 选择失败的堆栈。
- 选择 Actions(操作),然后选择 Delete Stack(删除堆栈)。
- 选择删除失败的资源。
- 选择 Yes, Delete(是,删除)。
**重要事项:**如果您无法删除资源但想要删除堆栈,请选择 Retain(保留)。您还可以使用 AWS CLI delete-stack 命令来保留资源。
- 删除 ECS 集群。
删除保留的资源
以下示例向您展示如何删除通常与 CloudFormation 堆栈相关联的资源。
安全组依赖关系
在以下示例中,一个安全组的入站或出站规则引用了其他安全组,因此您无法删除集群。
要清除安全组依赖关系,请完成以下步骤:
- 运行 describe-security-groups 命令来查找相关联的安全组:
aws ec2 describe-security-groups --filters Name=ip-permission.group-id,Values=[sg-xxxxxxxxx] --region us-east-1 | jq '.SecurityGroups[] .GroupId'
**注意:**jq 是一个命令行 JSON 处理器。
- 清除要删除的安全组的依赖关系。
- 删除安全组资源。
VPC 依赖关系
常见的 VPC 依赖关系包括互联网网关、子网和 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
要清除 VPC 依赖关系,请完成以下步骤:
- 运行 describe-subnets 命令来识别您的 VPC 的依赖资源:
aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-########" --region RegionId | grep SubnetId
**注意:**将 vpc-######## 替换为您的 VPC 值,将 RegionId 替换为您的 AWS 区域 ID。您可以为其他依赖项运行类似的 describe_* 命令,例如 describe-internet-gateways 和 describe-instances。
- 清除要删除的 VPC 的依赖关系。
- 删除 VPC。
有关更多信息,请参阅我尝试删除我的 Amazon VPC,但我收到了依赖关系错误消息。如何删除我的 Amazon VPC?
相关信息
删除堆栈失败