Amazon EC2-ClassicのElastic IPをVPCに移行する

2015.05.17

ども、大瀧です。
Amazon EC2を始めとするAWSのサービスでは、インスタンス同士を接続する内部ネットワークとしてClassicとVPCの2種類を利用することができます。Classicは他のアカウントとサブネットを共有するネットワークモデル、VPCはアカウントごとに隔離されたネットワークモデルになっており、従来のClassicから高機能なVPCへの移行を検討するケースが最近増えています。昨日、その移行を手助けするElastic IPの移行機能がリリースされたのでその使い方をご紹介します。

Elastic IPの移行とは

EC2インスタンスに紐付けて利用する固定IPアドレスとして、Elastic IPが利用できます。Elastic IPはClassic用(表示上は「EC2」)とVPC用が区別され、取得されるIPアドレスはランダムなため、従来はVPCに移行するタイミングで別のElastic IPの取得とIPアドレス変更に伴うDNSの設定変更が必要でした。Elastic IPの移行機能により、Classic向けに取得したIPアドレスをそのままVPC向けに変更することができます。

設定方法

Elastic IPの移行は、現在Management Consoleでは行えません。AWS CLIやAWS Tools for Windows PowerShellを利用します。今回はAWS CLI(バージョン1.7.27以降)で試してみます。対応するコマンドはaws ec2 move-address-to-vpcです。まずは、Classic用のElastic IPを用意します。

$ aws ec2 describe-addresses
{
    "Addresses": [
        {
            "InstanceId": "",
            "PublicIp": "54.238.XX.XX",
            "Domain": "standard"
        }
    ]
}
$

では、移行してみましょう。aws ec2 move-address-to-vpcコマンドに--public-ipオプションでElastic IPを指定します。

$ aws ec2 move-address-to-vpc --public-ip 54.238.XX.XX
{
    "Status": "MoveInProgress"
}

少し待ってから、再度Elastic IPを確認してみます。

$ aws ec2 describe-addresses
{
    "Addresses": [
        {
            "PublicIp": "54.238.XX.XX",
            "Domain": "vpc",
            "AllocationId": "eipalloc-XXXXXXXX"
        }
    ]
}
$

VPC用(Addresses.DomainVPC)に変わっていますね!なお、取得してから24時間経過していないElastic IPは移行できません。以下のようなエラーになります。

$ aws ec2 move-address-to-vpc --public-ip 54.238.XX.XX

A client error (InvalidState) occurred when calling the MoveAddressToVpc operation: Address 54.238.XX.XX cannot be moved.
$

また、EC2インスタンスに割り当てているElastic IPは移行できないとのことなので、本番で使用している場合は、ある程度のダウンタイムをもって移行するよう計画する必要があります。

まとめ

EC2-ClassicのElastic IPをVPCに移行する方法をご紹介しました。ものすごく地味な機能ですが、ClassicLinkとともに実際の移行プランを計画するときには、心強い存在として役立てていただけるのではないでしょうか。

参考URL