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番目じゃない場合には振りたいのを修正する必要がある。

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

AWS構築サービスの全てをまとめた資料を公開中

ハックノート(TOWN株式会社)では、AWSの導入や構築支援を行っています。AWS導入メニューやサービス詳細、構成例や費用を掲載した資料をダウンロードできます。

AWSの新規導入やAWSへの移行を検討の際は、ぜひご参考ください。