boto3 如何从实例中检索弹性 ip
boto3 how to retrieve the elastic ip from an instance
我需要做以下事情:
我有一些包含特定标签的实例,我需要遍历这些实例,对于包含该特定标签的每个实例,如果该实例附加了弹性 ip,我需要用它标记弹性 ip同一个标签。我的代码如下:
import boto3
import json
region_list = ['us-east-1']
session = boto3.Session(profile_name='default')
for region in region_list:
ec2 = session.resource('ec2',region)
client = boto3.client('ec2',region)
# Retrieve instances that contain this specific tag
instances = ec2.instances.filter(Filters=[{'Name':'tag:MyTargetTag', 'Values':['*']}])
for instance in instances:
for tag in instance.tags:
if tag['Key'] == "MyTargetTag":
MyTargetTag = tag['Value']
## check if this instance has an elasticip
## if it has, assign the value of MyTargetTag to it
response = client.add_tags(
ResourceArns=[
#elasticip ip identifier of some sort,
],
Tags=[
{
'Key': 'MyTargetTag',
'Value': MyTargetTag
},
]
)
我已经通读了文档和视频,但老实说我并不完全理解它,我只是在反复试验但没有成功。
ElasticIP 地址 'associated' 带有网络接口。一个实例可能有多个网络接口,每个接口可能有也可能没有分配给它的弹性 IP 地址。
这会列出附加到您的任何实例的所有 ElasticIP,例如:
import boto3
from pprint import pprint
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter()
for instance in instances:
for interface in instance.network_interfaces:
if interface.association_attribute is not None:
pprint (interface.association_attribute)
但是我在 boto3 中看不到任何允许您将 ElasticIP 作为对象 return 或对其应用任何标签的功能。这显然是可能的,因为您可以通过控制台执行此操作,我只是看不到 boto3 中的功能。
您可以分别在 boto3.resource('ec2')
资源 vpc_addresses
和 classic_addresses
上访问 VPC 或经典弹性 IP。
如果地址关联,它们将具有 instance_id
属性。您将能够获得带有 ec2.Instance(address.instance_id).tags
的标签
如果您想遍历所有地址,boto3.client('ec2')
客户端有 describe_addresses
会为您提供相同的信息。
我需要做以下事情:
我有一些包含特定标签的实例,我需要遍历这些实例,对于包含该特定标签的每个实例,如果该实例附加了弹性 ip,我需要用它标记弹性 ip同一个标签。我的代码如下:
import boto3
import json
region_list = ['us-east-1']
session = boto3.Session(profile_name='default')
for region in region_list:
ec2 = session.resource('ec2',region)
client = boto3.client('ec2',region)
# Retrieve instances that contain this specific tag
instances = ec2.instances.filter(Filters=[{'Name':'tag:MyTargetTag', 'Values':['*']}])
for instance in instances:
for tag in instance.tags:
if tag['Key'] == "MyTargetTag":
MyTargetTag = tag['Value']
## check if this instance has an elasticip
## if it has, assign the value of MyTargetTag to it
response = client.add_tags(
ResourceArns=[
#elasticip ip identifier of some sort,
],
Tags=[
{
'Key': 'MyTargetTag',
'Value': MyTargetTag
},
]
)
我已经通读了文档和视频,但老实说我并不完全理解它,我只是在反复试验但没有成功。
ElasticIP 地址 'associated' 带有网络接口。一个实例可能有多个网络接口,每个接口可能有也可能没有分配给它的弹性 IP 地址。
这会列出附加到您的任何实例的所有 ElasticIP,例如:
import boto3
from pprint import pprint
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter()
for instance in instances:
for interface in instance.network_interfaces:
if interface.association_attribute is not None:
pprint (interface.association_attribute)
但是我在 boto3 中看不到任何允许您将 ElasticIP 作为对象 return 或对其应用任何标签的功能。这显然是可能的,因为您可以通过控制台执行此操作,我只是看不到 boto3 中的功能。
您可以分别在 boto3.resource('ec2')
资源 vpc_addresses
和 classic_addresses
上访问 VPC 或经典弹性 IP。
如果地址关联,它们将具有 instance_id
属性。您将能够获得带有 ec2.Instance(address.instance_id).tags
如果您想遍历所有地址,boto3.client('ec2')
客户端有 describe_addresses
会为您提供相同的信息。