如何使用 boto3 获取 public ip
How to get the public ip's using boto3
我需要从 AWS 中提取所有 运行 PUBLIC Ip,我正在使用以下代码:
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
这不适合我,它给我错误:
ipaddress = instance[unicode('PublicIpAddress')]
KeyError: u'PublicIpAddress'
这个字典中不存在 PublicIpAddress
的原因。有人可以帮我吗?
使用 get()
而不是 dict[key]
。 get()
不会提出 KeyError
。这里有一些例子可以解释。
>>> test = {'xxx':123}
>>> test['xxx']
123
>>> test['yyy']
KeyError: 'yyy'
>>> test.get('yyy')
>>> test.get('yyy') is None
True
并且您可以检查 'PublicIpAddress'
是否不存在,如下所示。
ipaddress = instance.get(u'PublicIpAddress')
if ipaddress is None:
# Do Something
编辑
if instance[u'State'][u'Name'] == 'running' and instance.get(u'PublicIpAddress') is not None:
print instance.get(u'PublicIpAddress')
我需要从 AWS 中提取所有 运行 PUBLIC Ip,我正在使用以下代码:
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
这不适合我,它给我错误:
ipaddress = instance[unicode('PublicIpAddress')]
KeyError: u'PublicIpAddress'
这个字典中不存在 PublicIpAddress
的原因。有人可以帮我吗?
使用 get()
而不是 dict[key]
。 get()
不会提出 KeyError
。这里有一些例子可以解释。
>>> test = {'xxx':123}
>>> test['xxx']
123
>>> test['yyy']
KeyError: 'yyy'
>>> test.get('yyy')
>>> test.get('yyy') is None
True
并且您可以检查 'PublicIpAddress'
是否不存在,如下所示。
ipaddress = instance.get(u'PublicIpAddress')
if ipaddress is None:
# Do Something
编辑
if instance[u'State'][u'Name'] == 'running' and instance.get(u'PublicIpAddress') is not None:
print instance.get(u'PublicIpAddress')