试图获取有关boto docs

时间:2015-07-16 23:02:00

标签: python amazon-web-services amazon-ec2 boto

我是python的新手并且正在研究boto做一些SG的快速列表。我的问题是当我查看下面列出的boto文档时......我怎么知道我可以使用哪些属性。例如,在我从下面的python输出的示例中,我创建了一个名为inst的变量....首先我用它来获取实例id,接下来我用它来获取SG信息....我的问题是......我怎么知道我能得到什么其他属性?也许是实例类型,ami-id等。阅读下面的文档对我来说有点混乱,因为我是python的新手......任何帮助/指针都会受到赞赏......

http://boto.readthedocs.org/en/latest/ref/ec2.html#module-boto.ec2.instance

>>> reservations = conn.get_all_instances()
>>> for i in reservations:
     inst = i.instances[0]
     print inst

Instance:i-c8990c39
Instance:i-c7e45537
Instance:i-698047c1
>>>
>>> for i in reservations:
     inst = i.instances[0].groups
     print inst

[<boto.ec2.group.Group object at 0xf2c7d0>]
[<boto.ec2.group.Group object at 0xf2c350>]
[<boto.ec2.group.Group object at 0xf2c750>
 <boto.ec2.group.Group object at 0x10992d0>]

另外,为什么我没有得到SG,但我得到了实例ID?

>>> for i in reservations:
      inst = i.instances
      print inst

[Instance:i-c8990c39]
[Instance:i-c7e45537]
[Instance:i-698047c1] 

>>>
>>> for i in reservations:
      sg = i.groups
      print sg

[] [] []
>>>
>>>

3 个答案:

答案 0 :(得分:1)

如果要打印出与您的实例关联的第一个安全组ID,您可以执行以下操作:

.characters
  

好的,我看到发生了什么,但另一个愚蠢的问题:   为什么我没有得到SG,但我得到了实例ID?

>>> reservations = conn.get_all_instances()
>>>
>>> for i in reservations:
     sg = i.instances[0].groups[0]
     print sg.id


sg-9f1xxxxx
sg-9f1xxxxx
sg-9f1xxxxx
sg-9f1xxxxx
sg-9f1xxxxx
sg-1faxxxxx
sg-9f1xxxxx
sg-9f1xxxxx
sg-9f1xxxxx

在这种情况下,您正在打印所有预订。不是实例。每个预订都有一个实例。

>>> for i in reservations:
      inst = i.instances
      print inst

[Instance:i-c8990c39]
[Instance:i-c7e45537]
[Instance:i-698047c1] 

在这种情况下,您正在打印预订的安全组。预订不具有与之关联的安全组。

答案 1 :(得分:1)

您在指向我们的EC2 instance reference 包含属性列表,例如image_id(对于AMI id)和instance_type。你在寻找不同的东西吗?

另外,要了解当你“打印”一个对象时,你不一定会看到该对象的所有属性 - 相反,你会经常看到一个简单的字符串表示,例如“Instance:i-c8990c39”。

最后,准备经常使用dir(obj)来了解有关obj属性的更多信息 - Python文档很少(如果有的话)完成,dir(obj)会帮助你。请参阅how to use type, str, and dir for introspection

答案 2 :(得分:1)

查看python内置函数dir: https://docs.python.org/2/library/functions.html#dir

>>> reservations = conn.get_all_instances()
>>> instance = reservations[0].instances[0]
>>> dir(instance)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_in_monitoring_element', '_placement', '_previous_state', '_state', '_update', 'add_tag', 'ami_launch_index', 'architecture', 'block_device_mapping', 'client_token', 'confirm_product', 'connection', 'create_image', 'dns_name', 'ebs_optimized', 'endElement', 'eventsSet', 'get_attribute', 'get_console_output', 'group_name', 'groups', 'hypervisor', 'id', 'image_id', 'instance_profile', 'instance_type', 'interfaces', 'ip_address', 'item', 'kernel', 'key_name', 'launch_time', 'modify_attribute', 'monitor', 'monitored', 'monitoring', 'monitoring_state', 'persistent', 'placement', 'placement_group', 'placement_tenancy', 'platform', 'previous_state', 'previous_state_code', 'private_dns_name', 'private_ip_address', 'product_codes', 'public_dns_name', 'ramdisk', 'reason', 'reboot', 'region', 'remove_tag', 'requester_id', 'reset_attribute', 'root_device_name', 'root_device_type', 'sourceDestCheck', 'spot_instance_request_id', 'start', 'startElement', 'state', 'state_code', 'state_reason', 'stop', 'subnet_id', 'tags', 'terminate', 'unmonitor', 'update', 'use_ip', 'virtualization_type', 'vpc_id']