boto3如何从实例中检索弹性ip

时间:2018-11-08 20:15:19

标签: amazon-ec2 boto3 elastic-ip

我需要执行以下操作:

我有一些包含特定标签的实例,我需要遍历这些实例,对于包含该特定标签的每个实例,如果该实例附加了弹性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
                },
            ]
        )

我已经阅读了文档和视频,但不是全部,但老实说,我并不太完全了解它,而我只是在反复尝试而没有成功。

2 个答案:

答案 0 :(得分:1)

您可以分别在boto3.resource('ec2')资源vpc_addressesclassic_addresses上访问VPC或经典弹性IP。

如果地址已关联,则它们将具有instance_id属性。您将可以使用ec2.Instance(address.instance_id).tags

获取标签

如果您想遍历所有地址,则boto3.client('ec2')客户端有describe_addresses,可为您提供相同的信息。

答案 1 :(得分:0)

ElasticIP地址与网络接口“关联”。一个实例可以具有多个网络接口,每个网络接口可以分配也可以不分配弹性IP地址。

这列出了附加到您的任何实例的所有ElasticIP,例如:

julia> setdiff!([1,2,3,4, 4], [3])
3-element Array{Int64,1}:
 1
 2
 4

但是,我在boto3中看不到任何允许您将ElasticIP作为对象返回或对其应用任何标签的功能。显然有可能,因为您可以通过控制台进行操作,但我看不到boto3的功能。