AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何在 AWSEBSecurityGroup 删除失败时,终止或重建 Elastic Beanstalk 环境?
在终止或重建 AWS Elastic Beanstalk 环境时,我收到以下错误: "Stack deletion failed: The following resource(s) failed to delete: [AWSEBSecurityGroup]."
简短描述
AWSEBSecurityGroup 是一个 Amazon Elastic Compute Cloud (Amazon EC2) 安全组,由底层 AWS CloudFormation 堆栈通过 Elastic Beanstalk 创建。在 Elastic Beanstalk 环境之外创建的弹性网络接口或安全组使用 AWSEBSecurityGroup 时,环境会在您终止或重建时失败。
**注意:**若要管理 Elastic Beanstalk 创建的资源,最佳实践是使用以下之一:Elastic Beanstalk 控制台、Elastic Beanstalk 命令行界面 (EB CLI) 或 AWS 命令行界面 (AWS CLI)。如果在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新版本的 AWS CLI。
解决方法
若要解决此问题,请完成以下任务之一:
- 使用 AWS CloudFormation 控制台或 AWS CLI 删除 Elastic Beanstalk 环境创建的 CloudFormation 堆栈。然后,终止或重建 Elastic Beanstalk 环境。
- 从 Elastic Beanstalk 安全组中移除依赖对象。然后,终止或重建 Elastic Beanstalk 环境。
**注意:**在以下 AWS CLI 命令中,输入堆栈名称、环境名称、AWS 区域和其他特定于环境的变量的数值。
从 CloudFormation 控制台中删除堆栈
**重要事项:**如果 Elastic Beanstalk 环境中存在一个集成的 Amazon Relational Database Service(Amazon RDS)数据库,请先解耦 Amazon RDS 数据库实例。
可以使用 CloudFormation 控制台或 AWS CLI 来删除堆栈。
CloudFormation 控制台
- 打开 CloudFormation 控制台。
- 在堆栈页面上,选择删除失败的堆栈。
注意:堆栈的状态列会显示 DELETE_FAILED。 - 选择删除。
- 在删除堆栈弹窗中,选择 AWSEBSecurityGroup,然后选择删除。
重要事项:请务必删除安全组。删除堆栈时,不会自动删除 AWSEBSecurityGroup。如果由于其他依赖资源而导致环境终止失败,请先从删除堆栈弹窗中选择处于 DELETE\ _FAILED 状态的相应资源。然后,选择删除。 - 终止或重建 Elastic Beanstalk 环境。
AWS CLI
-
若要删除 CloudFormation 堆栈,请运行 describe-network-interface-attribute 命令:
aws cloudformation delete-stack --stack-name awseb-e-ztrauxujck-stack --retain-resources "AWSEBSecurityGroup" --region us-east-1 -
若要终止 Elastic Beanstalk 环境,请运行 terminate-environment 命令:
aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1 -
若要重建 Elastic Beanstalk 环境,请运行 rebuild-environment 命令:
aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1
查找并移除 Elastic Beanstalk 安全组的依赖对象
要查找阻止删除 AWSEBSecurityGroup 的依赖网络接口或依赖安全组,请完成以下步骤。可以使用 Amazon EC2 控制台或 AWS CLI。
Amazon EC2 控制台
- 从 Elastic Beanstalk 事件流中的错误消息中获取 AWSEBSecurityGroup 的安全组 ID。
- 打开 Amazon EC2 控制台。
- 在导航窗格中,选择安全组。然后,选择 AWSEBSecurityGroup ID。
- 选择操作,然后选择删除安全组以查找 AWSEBSecurityGroup 上的依赖关系。
- 在删除安全组弹窗中,完成以下步骤:
选择查看关联实例。
选择操作,然后选择网络。
选择更改安全组。
清除 AWSEBSecurityGroup ID 和分配安全组复选框。 - 在删除安全组弹窗中,选择查看引用的安全组。
- 若要移除 AWSEBSecurityGroup ID 的关联,请选择操作,然后选择编辑入站规则或编辑出站规则。
- 终止或重建 Elastic Beanstalk 环境。
AWS CLI
-
从 Elastic Beanstalk 事件流中的错误消息中获取 AWSEBSecurityGroup 的安全组 ID。
-
在 .ebextensions 文件夹中,根据以下示例创建一个配置文件:
#!/bin/bash SecurityGroupID=$1 Region=$2 DependentENI=$(aws ec2 describe-network-interfaces --filters Name=group-id,Values=[$SecurityGroupID] --region $Region | jq '.NetworkInterfaces[].NetworkInterfaceId') DependentSGingress=$(aws ec2 describe-security-groups --filters Name=ip-permission.group-id,Values=[$SecurityGroupID] --region $Region | jq '.SecurityGroups[] .GroupId') DependentSGegress=$(aws ec2 describe-security-groups --filters Name=egress.ip-permission.group-id,Values=[$SecurityGroupID] --region $Region | jq '.SecurityGroups[] .GroupId') echo "The dependent ENI is $DependentENI" echo "The security group id with a dependency in ingress rule : $DependentSGingress" echo "The security group id with a dependency in egress rule : $DependentSGegress" -
将 bash 脚本另存为 sg\ _dependency.sh。
-
从 jq 网站安装 jq 实用程序。
-
要获取您的网络接口 ID 和安全组 ID,请运行以下命令:
./sg_dependency.sh sg-111aaa22 us-east-1**注意:**将 sg-111aaa22 替换为您的 AWSEBSecurityGroup ID。将 us-east-1 替换为您的AWS 区域。
-
若要查找连接到网络接口 ID 的安全组,请运行 describe-network-interface-attribe 命令:
aws ec2 describe-network-interface-attribute --network-interface-id eni-1099d901 --attribute groupSet -
若要分离 AWSEBSecurityGroup ID,请运行 modify-network-interface-attribute 命令:
aws ec2 modify-network-interface-attribute --network-interface-id eni-1099d901 --groups sg-030644d6c95b6470a sg-d34a33a8 sg-059c081ab30c3e38e sg-0e4eabc747368e6c9**重要事项:**在前面的命令中,排除 AWSEBSecurityGroup ID。加入其他安全组 ID 以保持与网络接口的连接。如果您在创建网络接口的 AWS 服务中加入 AWSEBSecurityGroup ID,则命令输出会返回以下错误: "An error occurred (AuthFailure) when calling the ModifyNetworkInterfaceAttribute operation: You don't have permission to access the specified resource".
-
运行 describe-security-groups 命令,列出依赖安全组的所有入口和出口规则。
-
根据步骤 7 的输出,运行 revoke-security-group-ingress 或 revoke-security-group-egress 命令。
**示例:**例如,如果 AWSEBSecurityGroup ID 为 sg-111aaa22 且步骤 8 的输出在入口规则中含有该安全组 ID,则运行以下命令:aws ec2 revoke-security-group-ingress --group-id sg-0018a2fbdcd5797ea --ip-permissions '\[{"PrefixListIds":\[\],"FromPort":0,"IpRanges":\[\],"ToPort":65535,"IpProtocol":"tcp","UserIdGroupPairs":\[{"UserId":"123456789102","GroupId":"sg-111aaa22"}\],"Ipv6Ranges":\[\]}\]'**注意:**UserId 是 AWS 账户 ID。
-
若要终止 Elastic Beanstalk 环境,请运行 terminate-environment 命令:
aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1
- 若要重建 Elastic Beanstalk 环境,请运行 rebuild-environment 命令:
aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1
