AWS SDK for Python boto3で割り振られたEIPを他のインスタンスへ振り直す。

インスタンスBのインターフェース0が持っているEIPを、インスタンスAへ割り振る手順。

AとBのインスタンスIDのみ分かってる場合とするとこんなかんじ。

A = client.describe_instances(
        Filters=[{'Name':'instance-id','Values':['i-AAAAAAAAAAAAAAAA']}]
    )

B = client.describe_instances(
        Filters=[{'Name':'instance-id','Values':['i-BBBBBBBBBBBBBBBB']}]
    )

AllocationIds = client.describe_addresses(
        PublicIps=[B['Reservations'][0]['Instances'][0]['NetworkInterfaces'][0]['Association']['PublicIp']]
)

client.associate_address(
        AllocationId=AllocationIds['Addresses'][0]['AllocationId'],
        NetworkInterfaceId=A['Reservations'][0]['Instances'][0]['NetworkInterfaces'][0]['NetworkInterfaceId'],
        AllowReassociation=True
)

AとBのインスタンス情報を持ってきて、Bのアドレスから、AllocationIdを取ってくる。

AllocationIdがわかれば、associate_addressでAへEIPを関連付けしてあげられる。

本当はBのEIPを関連付けを外して、Aに割り振る流れになるんだけれども、AllowReassociationをTrueにしてあげることで、

EIPが誰かに振られてても強引に新しいインスタンスにあげられる。

インターフェースがいくつもあって0番目じゃない場合には振りたいのを修正する必要がある。

というかいくつもインターフェースがある場合にはもっと考えて作ってね。