Amazon EC2/S3を使ってみた - 4.EC2で固定IPの取得

by Christopher Chan


さて、昨日のエントリ(d:id:rx7:20080425:p3)では、Amazon EC2の仮想マシンイメージファイルを作成し、S3に保存する部分について紹介しました。

今日は、仮想マシンに静的な固定IPアドレスを割り当てる方法を紹介します。

# Amazon EC2/S3については、d:id:rx7:20080423:p1 をご覧ください。


昨日のエントリ(d:id:rx7:20080425:p3)で、Amazon EC2を使用する上での制約事項の1つである、インスタンス停止後にディスクの内容が消えることと、その解決策について取り上げましたが、もう1つ制約事項というか注意点が存在します。

それは、インスタンスを停止し、再度起動するたびにIPアドレスが変更されてしまうことです。IPアドレスが変わってしまう可能性があることは、DNSへ登録しているIPアドレスを書き直さなければいけない可能性があるため、その間は名前解決できなくなり、サービスを公開する上では非常に不便です。


しかし、先月3/27にAWSから「Elastic IP」と呼ばれる新サービスが開始されました。"Elastic IP"は、Amazon EC2のアカウントに割り当てられる固定IPのことを指します。


では、この"Elastic IP"の概要を簡単に説明した後、使い方を紹介します。

Elastic IPについて

Amazon EC2では、インスタンスはEC2用の内部セグメントで稼動しており、上位のルータで外部のグローバルIPとは1:1のNATになっているようです。で、このグローバルIPが動的に割り振られる(Public IPと呼ばれています)ため、普段はインスタンスの停止・起動を行う度にIPアドレスが変更されるわけです。

まぁ、貴重なIPアドレスというリソースを有効活用するという意味では、妥当なやり方ではありますよね。


そこで、登場するのが、この新サービス"Elastic IP"、つまり固定IPです。簡単に言うと、インスタンスの起動時に、動的なPublic IPではなく、静的なElastic IPを割り当てる(NATの設定)ことで、固定IPを実現しているようです。なので、Elastic IPの実体は、NATでWAN側のIPアドレスを固定IPに振っているということになります。

"Elastic IP"に関して、いくつか注意点を箇条書きでまとめておきます

  • 固定IPを1つ取得した場合、1時間当たり$0.01の追加費用が発生する
    • ただし、固定IPをインスタンスに割り当てている時間(固定IP利用時)は、課金が発生しない
  • 1つのアカウントに割り当てられる固定IPは最大5つまで
    • ただし、Amazonに申請することで増やしてもらうことは可能みたい
  • 固定IPを取得した場合、インスタンスに割り当てなくても費用は発生する
    • 固定IPを開放することで、費用はかからなくなるが、再取得すると別のIPアドレスが割り振られる
    • つまり、「固定IPを取得 = アカウントに割り当て」となり、アカウントに割り当てられている間は、IPアドレスは変わりません。その間は費用が発生します。アカウントに割り当てられた固定IPをインスタンスに紐付けることで、固定IPをインスタンスに割り当てることができます。
  • 固定IPをインスタンスに割り当てた際は、反映されるまでしばらく待ち時間が発生する(数分)
    • ここは、改善するべくAmazonも頑張っている模様


と、こんなところでしょうか。

固定IPの取得・インスタンスへの割り当て

では、固定IPを取得します。

尚、2008年2月1日版以降の「Amazon EC2 Command-Line Tools」が必要ですので、古いバージョンを使われている場合はアップデートしましょう。"ec2ver"コマンドで確認できます。

# ec2-allocate-address
ADDRESS 75.101.157.145


上記のコマンドを発行するたびに新しい固定IPが取得され、その分の費用が発生しますので注意してください。

次に、以下のコマンドで稼動しているインスタンスに対して先ほど取得した固定IPを割り当てます。

# ec2-describe-instances
RESERVATION     r-f845bd91      xxxxxxxxxxxx    default
INSTANCE        i-429a582b      ami-be799cd7    ec2-75-101-198-23.compute-1.amazonaws.com       domU-12-31-39-00-68-14.compute-1.internal       running rx7_server     0               m1.small        2008-04-24T09:38:18+0000        us-east-1b      aki-a71cf9ce    ari-a51cf9cc


まず、割り当てるべきインスタンスの"インスタンスID"を確認します、上記の例だと"i-429a582b"となります。確認が出来たところで、インスタンスに対して固定IPを割り当ててみます。

# ec2-associate-address -i i-429a582b 75.101.157.145
ADDRESS 75.101.157.145   i-429a582b


上記のコマンドで割り当て完了です。"ec2-describe-instances"コマンドでIPアドレスが変わっていることが確認できるかと思います。

尚、最初にも書いたとおり、注意点としては実際に固定IPが反映され、通信できるようになるまでには数分かかります。サービスを公開している場合などには注意が必要です。

インスタンスから固定IPを分離・取得した固定IPの解放

では、次はインスタンスに割り当てている固定IPを引き剥がしてみましょう。

# ec2-describe-addresses
ADDRESS 75.101.157.145   i-429a582b


まずは使用しているアカウントで取得している固定IP一覧を確認し、割り当てられているインスタンスIDを確認し、引き剥がすIPアドレスおよびインスタンスを確認します。

# ec2-disassociate-address 75.101.157.145
ADDRESS 75.101.157.145


上記のコマンドで固定IPアドレスを引き剥がします。

# ec2-describe-addresses
ADDRESS 75.101.157.145


その後、もう一度、取得している固定IP一覧を確認するとインスタンスに割り当てられていないことが確認できます。

尚、引き剥がした後、"Public IP"が振られることになりますが、こちらも実際に反映されるまで時間がかかります。


とまぁ、こんな感じで割と簡単に固定IPアドレスを割り当てることが可能です。

あとは、割り当ててから即座に反映されれば完璧なんですが、そこは今後の進化に期待しましょう。

参考

Feature Guide: Amazon EC2 Elastic IP Addresses
http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1346




まとめ

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)