我在过去几周中创建了新的EC2 Spot请求。 每个请求都创建了一个新的安全组。 当删除Spot请求时,安全组没有被删除。 我已经达到了100个安全组的限制,并希望将它们删除。 EC2界面显然只允许一次删除一个安全组,这意味着我必须点击300次才能删除这些组。 或者,是否有更好的方法可以用少量点击或几行代码删除多个安全组?
我在过去几周中创建了新的EC2 Spot请求。 每个请求都创建了一个新的安全组。 当删除Spot请求时,安全组没有被删除。 我已经达到了100个安全组的限制,并希望将它们删除。 EC2界面显然只允许一次删除一个安全组,这意味着我必须点击300次才能删除这些组。 或者,是否有更好的方法可以用少量点击或几行代码删除多个安全组?
jq
语法)。
4. 一旦您拥有 SG ID,请使用 for
循环运行 delete-security-group。jq
。如果您已经安装了其他AWS SDK,则最好使用它,因为Java/Python/Ruby等都有自己内置的解析JSON/HASH/DataStructure的方法。
希望这可以帮到您。
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的答案。 - Artem Tsikiridisprivate 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();
}
}
}
这些解决方案只在您没有规则引用所涉及的安全组的“其他”安全组时才起作用。我有几个脚本,将删除单个安全组,包括其他安全组中的入站规则。我还处理了入站规则引用 AWS ELB 默认安全组的特殊情况。如果您有这种更复杂的情况,则上述解决方案不会删除您的安全组,因为存在其他规则。我的脚本在此处(一个针对经典 EC2 的,一个针对基于 VPC 的安全组):https://gist.github.com/arpcefxl/2acd7d873b95dbebcd42