2014-10-07 32 views
0

我已经在这个网站和谷歌搜索,但一直未能得到这个答案。如何使用纯蟒蛇/ boto访问EMR主私人IP地址

我的代码从EC2实例运行,它使用boto创建和管理EMR集群。 我可以使用这个框架来获取flow_id(或者cluster_id,不知道哪个是正确的名称),它以“j-”开头并且具有固定数量的字符来标识集群。

使用框架,我可以建立电子病历或EC2连接,但对我的生活,我不能做以下使用博托:

aws emr --list-clusters --cluster-id=j-ASDFGHJKL | json '["instances"].[0].["privateipaddress"] 

**以上是有点欣喜之余,我不记得了json格式和json命令是什么或者它想要什么参数,但是cli。

我pprint.pprint()编辑和检查与inspect.getmembers()的连接,获得连接到特定的cluster_id,但我还没有看到这个字段/ var /属性有或没有方法调用。

我一直在向上和向下亚马逊和博托,他们如何做它像 here

def test_list_instances(self): #line 317 
     ... 
     self.assertEqual(response.instances[0].privateipaddress , '10.0.0.60') 
     ... 

附:我试过this,但python抱怨说“实例”属性不可迭代,数组可访问(我忘记了“var [0]”的命名),还有其他我尝试过的东西,包括检查。 顺便说一句,我可以从这里访问publicDNSaddress,以及许多其他的东西,只是不是私人IP ...

请告诉我,如果我搞乱了某处,我可以找到答案,我使用一个丑陋的修复通过使用子进程!

回答

0

检查博托版本使用 pip show boto 我的猜测是您使用版本2.24或更早,因为这版本并没有解析实例的信息看https://github.com/boto/boto/blob/2.24.0/tests/unit/emr/test_connection.py#L117 相比 https://github.com/boto/boto/blob/2.25.0/tests/unit/emr/test_connection.py#L313

如果您博托的版本升级到2.25或更新版本,您可以执行以下操作:

from boto.emr.connection import EmrConnection 

conn = EmrConnection(<your aws key>, <your aws secret key>) 
jobid = 'j-XXXXXXXXXXXXXX' # your job id 
response = conn.list_instances(jobid) 

for instance in response.instances: 
    print instance.privateipaddress