AWS boto 检查安全组或其他元素是否准备好

5 投票
1 回答
658 浏览
提问于 2025-04-18 07:03

我正在用boto创建一个虚拟私有云(VPC)和安全组。如果我在脚本中直接创建和标记这些元素,常常会遇到错误,因为这些元素还没有准备好。我可以手动等待一段时间,但我更喜欢通过检查它们的状态来确认它们是否真的准备好了。对于VPC或子网,我可以使用类似下面的代码:

import boto.vpc

v = boto.vpc.VPCConnection(
    region=primary_region,
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key)

vpcs = v.get_all_vpcs()
print vpcs[0].state

然后加上一些逻辑和一个循环,来检查状态是否是available(可用)、running(运行中)或者其他状态。这种方法对于大多数VPC/AWS元素都能很好地工作,但有些元素,比如安全组,在使用get_all_security_groups或类似的命令时,并没有返回状态属性。

那么大家是怎么检查这些元素是否可以使用的呢?

1 个回答

1

结果发现,对于那些没有状态属性的元素,你得动点脑筋,写一些可能不太稳定的代码。

以安全组为例,我的做法是:

  1. 使用 get_all_security_groups 并加上过滤条件来找到安全组。
  2. 检查 sg.rules_egress。
  3. 使用指数退避法进行重试。

当这个方法开始出问题时(我相信肯定会),我会再看看其他更好的解决办法,不过到目前为止,这个方法一直都能正常工作。

撰写回答