2016-06-08 39 views
0

我有打印的公共IP对正在运行的实例代码,如何打印EC2标签名称以及IP地址?

regions = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1','ap-southeast-1','ap-southeast-2','ap-northeast-1'] 
for region in regions: 
    client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
    addresses_dict = client.describe_addresses() 
    for eip_dict in addresses_dict['Addresses']: 
     if 'PrivateIpAddress' in eip_dict: 
      print eip_dict['PublicIp'] 

这是好的,现在我也想打印tag name并将其存储在另一个字典,我知道我这个可以这样做:

regions = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1','ap-southeast-1','ap-southeast-2','ap-northeast-1'] 
for region in regions: 
    client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
    dex_dict = client.describe_tags() 
    for dexy_dict in dex_dict['Tags']: 
    print dexy_dict['Value'] 

问题是我如何将它结合在一个函数中并使用2个字典:一个存储IP,另一个存储标记名?请帮助

+0

您是否在寻找一个结构为{client:[IP,tag_name]}的字典? –

+0

是的,但我需要能够将这些值传递给另一个def,所以请帮助我如何返回 – PythonFreak

回答

1

请尝试下面的代码,它会给你一个字典,其中的关键是InstanceId,值是一个列表[PublicIP, Name]

import boto3 

def instance_info(): 
    instance_information = {} 
    ip_dict = {} 
    client = boto3.client('ec2') 
    addresses_dict = client.describe_addresses().get('Addresses') 

    for address in addresses_dict: 
     if address.get('InstanceId'): 
      instance_information[address['InstanceId']] = [address.get('PublicIp')] 

    dex_dict = client.describe_tags().get('Tags') 
    for dex in dex_dict: 
     if instance_information.get(dex['ResourceId']): 
      instance_information[dex['ResourceId']].append(dex.get('Value')) 

    for instance in instance_information: 

     if len(instance_information[instance]) == 2: 
      ip_dict[instance_information[instance][0]] = instance_information[instance][1] 
     else: 
      ip_dict[instance_information[instance][0]] = '' 
    return instance_information, ip_dict 
+0

引发我: 'Traceback(最近调用最后一次): 文件“stackHELP.py”,第10行在 instance_information [地址[ 'INSTANCEID']] = [address.get( 'PublicIp')] KeyError异常: 'INSTANCEID' ,' 即在实例ID的检查应该在那里,并且这是否只返回RUNNING实例 – PythonFreak

+0

我试着用我的AWS实例的功能,我只有运行的。 –

+0

我得到的东西,如: '{} { 'I-93cd0221':'54 .21.1.22' , '电子邮件中继']} 回溯(最近通话最后一个): 文件 “stackHELP.py”第11行,在 instance_information [address ['InstanceId']] = [address.get('PublicIp')] KeyError:'InstanceId'' – PythonFreak