【发布时间】:2016-01-15 16:10:12
【问题描述】:
我在过去几周创建了新的 EC2 现场请求。为每个请求创建了一个新的安全组。当现场请求被删除时,安全组没有被删除。我已经达到了 100 个组的限制并想删除它们。 EC2 界面显然一次只允许删除一个,这意味着我必须单击 300 次才能删除这些组。或者有没有更好的方法来通过几次点击或几行代码删除多个安全组?
【问题讨论】:
标签: amazon-ec2
我在过去几周创建了新的 EC2 现场请求。为每个请求创建了一个新的安全组。当现场请求被删除时,安全组没有被删除。我已经达到了 100 个组的限制并想删除它们。 EC2 界面显然一次只允许删除一个,这意味着我必须单击 300 次才能删除这些组。或者有没有更好的方法来通过几次点击或几行代码删除多个安全组?
【问题讨论】:
标签: amazon-ec2
这需要一些基本的脚本和 AWS 开发工具包。您可以使用 AWS 提供的几乎所有 SDK 来做到这一点。
我更喜欢AWS-CLI,因为我已经安装并配置了它。这就是我会做的:
jq 语法)for 循环运行 delete-security-group。这是一种相当简单直接的方式来做你想做的事情。这可以通过任何 AWS 开发工具包来完成。
这些只是可以构建到 Bash 脚本中的几个命令,前提是:
jq。如果您已经安装了其他一些 AWS SDK,那么您最好使用它,因为 java/python/ruby...等都有自己的内置解析 JSON/HASH/DataStructure 的方式。
希望这会有所帮助。
【讨论】:
我认为您可以通过组合一个列出所有安全组的命令和另一个删除它们的命令来做到这一点。
如果您使用的是 python boto API(例如),那将是:
import boto
conn = boto.connect_ec2(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
groups = conn.get_all_security_groups()
返回(例如):[SecurityGroup:appserver, SecurityGroup:default, SecurityGroup:vnc, SecurityGroup:webserver]
然后你将它们全部删除:
for group in groups:
conn.delete_security_group(group.split(":")[1])
编辑
你应该在你的 shell 上运行命令。
【讨论】:
get_all_security_groups 获取所有安全组。 :) 你也应该试试@slayedbylucifer 的回答。
--delete 再次运行此命令以删除它们 [u'default', u'nv1'] 总共 2 个要删除的组。
仅当您在其他安全组中没有引用相关安全组的规则时,这些解决方案才有效。我有几个脚本可以删除单个安全组,包括其他安全组中的入口规则。我还处理引用 AWS ELB 默认安全组的入口规则的特殊情况。如果您遇到这种更复杂的情况,上述解决方案不会因为这些其他规则而删除您的安全组。我的脚本在这里(一个用于 ec2-classic,一个用于基于 VPC 的安全组):https://gist.github.com/arpcefxl/2acd7d873b95dbebcd42
【讨论】:
private static void delete(List<String> sgs) {
AmazonEC2Client ec2 = new AmazonEC2Client(Credentials.getCredentialsProvider());
ec2.setEndpoint("ec2.us-west-2.amazonaws.com"); // default
for(String sg:sgs) {
System.out.println("DELETING SECURITY GROUP " + sg);
DeleteSecurityGroupRequest delReq = new DeleteSecurityGroupRequest().withGroupName(sg);
try {
ec2.deleteSecurityGroup(delReq);
} catch (Exception e) {
// e.printStackTrace();
}
}
}
【讨论】: