インスタンスに固定IPアドレスを割り当てる(Elastic IP)
前回の記事で、「Amazon EC2」のインスタンスに付与されるグローバルIPアドレスは、固定IPアドレスではないため、インスタンスの起動・停止を繰り返すたびにIPアドレスが変更されてしまうという注意点を紹介しました。
外部へサービスを公開している場合、IPアドレスが変わってしまうと、DNSへ登録しているIPアドレスを変更しなければいけないため、その間一時的に名前解決できなくなり、非常に不便です。
この点についても、「Amazon EC2」では「Elastic IP」と呼ばれる固定IPアドレスを付与できるサービスがあります。
「Elastic IP」を利用する上での前提や注意点
「Elastic IP」を利用する上での前提や注意点を下記にまとめます。
- 固定IPアドレスは1アドレスの取得につき、1時間当たり$0.01の追加費用が発生する
- 固定IPアドレスを取得した場合、インスタンスにIPアドレスを割り当てなくても費用が発生する
- 固定IPアドレスをインスタンスに割り当てた際、反映されるまでしばらく待ち時間が発生する
1つ目は「固定IPアドレスを取得すると費用が発生する」という意味です。なお、1つのアカウントで最大5つまでの固定IPを取得することができます。この取得数に関する上限は、Amazonへ申請すれば増やすことも可能です。
2つ目は、ユーザーが取得した固定IPアドレスは、そのままインスタンスに割り当てられるのではなく、「一旦ユーザーがプールする形で保持する」という意味です。ユーザーは、そのIPアドレスを自由に好きなインスタンスへ割り当てることができます。つまり、複数のサーバを運用している場合は、別のサーバへ固定IPアドレスを割り当てなおすことが可能です。また、一時的にインスタンスを停止する場合などには、固定IPアドレスを保持しておいたままにすることも可能です。
3つ目に関しては、固定IPアドレス割り当て後、即座にインスタンスへ反映されないので注意が必要です。反映までに数十秒~数分かかると考えておいた方がよいでしょう。
固定IPアドレスの取得・インスタンスへの割り当て
固定IPアドレスを取得するには次のコマンドを発行します。
$ ec2-allocate-address ADDRESS xxx.xxx.xxx.xxx
実行後に表示されたIPアドレスが、取得した固定IPアドレスとなります。なお、上記のコマンドを実行する度に、新しい固定IPアドレスが取得されるので注意してください。
次に、ec2-describe-instances
コマンドなどで、割り当てたいインスタンスのIDを確認します。
$ ec2-describe-instances RESERVATION r-8e0eaae7 xxxxxxxxxxxx default INSTANCE i-2222944b ami-2b5fba42 ec2-75-101-200-115.compute-1.amazonaws.com domU-12-31-39-02-62-31.compute-1.internal running fedora_test 0 m1.small 2008-11-15T17:56:25+0000 us-east-1b aki-a71cf9ce ari-a51cf9cc
上記の例では、インスタンスのIDは「i-2222944b」となります。確認ができたら、次のコマンドでインスタンスに対し固定IPアドレスを割り当てます。
$ ec2-associate-address -i ${インスタンスのID} ${取得した固定IPアドレス} ADDRESS xxx.xxx.xxx.xxx i-xxxxxxxx
-i
オプションで先ほど確認したインスタンスのIDを指定し、その後ろに1文字分スペースを空けて先ほど取得した固定IPアドレスを指定します。これで、固定IPアドレスの割当は完了です。再びec2-describe-instances
コマンドを実行すると、ドメインネームが指定したec2-xxx-xxx-xxx-xxx.・・・
へと変更され、固定IPアドレスが割り当てられている事が確認できます。
なお、前述のとおり、実際に固定IPアドレスが反映され、通信できるようになるまでには少し時間がかかります。サービスを公開している場合などには、注意が必要です。
インスタンスからの固定IPアドレス引き剥がしと固定IPアドレスの解放
サービスの停止などで固定IPアドレスである必要性がなくなった場合は、インスタンスに割り当てた固定IPアドレスを引き剥がしましょう。まずは下記コマンドを実行し、利用中のアカウントで取得している固定IPアドレスの一覧を確認します。
$ ec2-describe-addresses ADDRESS xxx.xxx.xxx.xxx i-xxxxxxxx
実行結果とインスタンスID(i-xxxxxxxx
)から、引き剥がす固定IPアドレスを確認します。次に、下記のコマンドで固定IPアドレスを引き剥がします。
$ ec2-disassociate-address xxx.xxx.xxx.xxx ADDRESS xxx.xxx.xxx.xxx
その後、取得している固定IPアドレス一覧を確認すると、インスタンスに割り当てられていないことが分かります。
$ ec2-describe-addresses ADDRESS xxx.xxx.xxx.xxx
なお固定IPアドレスを引き剥がした後は、通常どおり動的なIPアドレスが付与されますが、こちらも実際に反映されるまで、固定IPアドレスの割り当て時と同様、少し時間がかかります。