首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用boto3获取公网ip

如何使用boto3获取公网ip
EN

Stack Overflow用户
提问于 2016-06-27 16:42:31
回答 1查看 9.8K关注 0票数 3

我需要从AWS提取所有运行的公共Ip,并使用以下代码:

代码语言:javascript
复制
def gather_public_ip():
    regions = ['us-west-2', 'eu-central-1', 'ap-southeast-1']
    combined_list = []   ##This needs to be returned
    for region in regions:
        instance_information = [] # I assume this is a list, not dict
        ip_dict = {}
        client = boto3.client('ec2', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY,
                              region_name=region, )
        instance_dict = client.describe_instances().get('Reservations')
        for reservation in instance_dict:
            for instance in reservation['Instances']: # This is rather not obvious
               if instance[unicode('State')][unicode('Name')] == 'running' and instance[unicode('PublicIpAddress')] != None:
                    ipaddress = instance[unicode('PublicIpAddress')]
                    tagValue = instance[unicode('Tags')][0][unicode('Value')] # 'Tags' is a list, took the first element, you might wanna switch this
                    zone = instance[unicode('Placement')][unicode('AvailabilityZone')]
                    info = ipaddress, tagValue, zone
                    instance_information.append(info)
        combined_list.append(instance_information)
    return combined_list

这对我不起作用,它给了我一个错误:

代码语言:javascript
复制
    ipaddress = instance[unicode('PublicIpAddress')]
KeyError: u'PublicIpAddress'

这个字典中不存在PublicIpAddress的原因..有谁能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-27 17:06:57

使用get()而不是dict[key]get()不会引发KeyError。这里有一些例子,它们将解释。

代码语言:javascript
复制
>>> test = {'xxx':123}
>>> test['xxx']
123
>>> test['yyy']
KeyError: 'yyy'
>>> test.get('yyy')
>>> test.get('yyy') is None
True

您可以检查'PublicIpAddress'是否不存在,如下所示。

代码语言:javascript
复制
ipaddress = instance.get(u'PublicIpAddress')
if ipaddress is None:
   # Do Something

编辑

代码语言:javascript
复制
if instance[u'State'][u'Name'] == 'running' and instance.get(u'PublicIpAddress') is not None:
    print instance.get(u'PublicIpAddress')
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38049391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档