Amazon EC2 を Windows から操作する(EU regionで必須)
Amazon EC2 を利用してみました。
現在は、インスタンスの起動や、EBS の作成、Elastic IP の取得などは
AWS Management Console の画面から操作するのが正攻法だと思います。
しかし、現バージョンの AWS Management Console は US region 専用のため、
EU region(ヨーロッパのサーバ)を使う場合には利用できません。
今回は、ヨーロッパのサーバを利用したかったので、基本ということで
Windows コマンドラインから Amazon EC2 の各操作を行いました。
一通りの手順をメモしておきます。
これで今日からクラウドコンピューティング♪
まず、Amazon EC2 API Tools をダウンロードします。
ダウンロードした ec2-api-tools.zip を展開(解凍)して、中身のフォルダを
C:\ec2-api-tools-1.3-30349
に移動します。
Access Identifiers の画面から API 呼び出しの認証で利用するキーを発行・確認します。
以下の3つの文字列と、2ファイルを取得します。
Account Number ⇒ 8510-9409-xxxx の形式
Access Key ID ⇒ 14W10WFR0BF84G1NXXXX の形式
Secret Access Key ⇒ 英数40文字
Private Key file ⇒ pk-BYJMUBN7PUOHG6KEVWEK3PLMO7BZXXXX.pem
X.509 Certificate file ⇒ cert-BYJMUBN7PUOHG6KEVWEK3PLMO7BZXXXX.pem
このうち Private Key file と X.509 Certificate file については、
ファイルをダウンロードして C:\ec2-api-tools-1.3-30349 に保存します。
(この PC を他の人が利用できないようにご注意ください)
たいていの PC では、Java 実行環境 (JRE) がインストールされているので、
マイコンピュータにアクセスして C:\Program Files\Java を開きます。
jre1.6.0_07 などのフォルダがあるので、フォルダ名を確認します。

JRE がインストールされていない場合は、
http://java.com/ja/download/ からインストールします。
メモ帳などを開いて、以下を書きます。
JAVA_HOME は、↑で調べたパスを指定します。
EC2_PRIVATE_KEY・EC2_CERT はダウンロードしたファイル名を指定します。
EC2_URL も設定します。
↑の環境変数をコピーしてから、コマンドプロンプト(cmd.exe)を開いて、
右クリック⇒貼り付け でペーストして、実行(環境変数を設定)します。

続けて、
後ほど起動したインスタンスに SSH で root アカウントでログインする際に
利用する keypair を作成します。
Windows では sed が使えないので、代わりに find 文を使います。
C:\ec2-api-tools-1.3-30349 に identity というファイルが作成されます。
『key-kawanet』が keypair の名前です。
他の文字列でも構わないのですが、接頭辞 key- を付けると分かりやすそう。
keypair を確認・削除する際は、以下のコマンドを実行します。
EC2 のファイアウォール機能を設定するグループを作成します。
デフォルトグループ default のままでも良いのですが、念のため。
通常のサーバでは、22 (SSH) と 80 (HTTP) が開いていれば良いかと。
接頭辞 grp- は不要ですが、分かりやすいように付けています。
今回は、Amazon 純正の Fedora 8 のイメージを利用します。
最新の fedora-8-i386-base-v1.08 は、ami-5647a33f になります。
AMI ID、インスタンス数(普通は1個)、keypair、セキュリティグループ、
インスタンス種別(プラン)を指定して、インスタンスを起動します。
インスタンスの起動状況は、↓で確認できます。
外部からアクセスできるホスト名が
ec2-174-129-112-76.compute-1.amazonaws.com
の形式で表示されます。
起動したインスタンスを終了(破棄)する際は、
接頭辞 i- で始まるインスタンス ID を指定します。
『ホスティングサービスの契約解除する API』と捉えるのが良さそう。
Amazon EC2 では、インスタンスを起動する度にダイナミックに
グローバル IP アドレスが割り当てられます。(毎回 IP が変わる)
DNS 登録のために固定 IP アドレスが必要な場合は、Elastic IP を利用します。
インスタンス起動中は、固定 IP アドレス分の追加料金はありません。
(インスタンスを起動せずに IP を保有し続ける場合は、有償になる)
取得、確認、返却のコマンドは、以下の通りです。
Elastic IP を取得した時点では、IP アドレスはインスタンスでなくて
アカウントに紐づいています。実際にその IP を利用するためには、
起動しているインスタンスに取得した IP を割り当てる必要があります。
次に↓でインスタンスに IP アドレスを割り当てます。
IP アドレスの割り当てを解除するには、↓のコマンドを実行します。
SSH は、慣れている http://sourceforge.jp/projects/ttssh2/releases/ TeraTerm を使っています。
認証画面では、User name に root を入力し、Passphrase は空にします。
Use RSA/DSA key to log in のチェックボックスを選択して、
Private key file をクリックして、
C:\ec2-api-tools-1.3-30349 内の identity ファイルを選択します。

OK ボタンを押すと、パスワード入力なく、root でログインできます。

root 権限で reboot は実行しても OK です。OS が再起動します。
ただし、 shutdown -h now は厳禁です。
ec2-terminate-instances と同様に内容が破棄されて、復活できません。
初回は root でログインするとしても、その後で一般アカウントを作成して、
通常は root でなくて一般アカウントでログイン操作するのが良いでしょう。
デフォルトでは、システム時計が EST(東部標準時=米国東海岸時間)になっています。
日本時間の方が分かりやすいので、下記のコマンドで設定変更できます。
EC2 のディスク内容は、EC2 インスタンスを終了すると消えてしまいます。
ときどき、ハードウェア障害などでインスタンスが異常終了する場合もあるようです。
単純に並列配置するアプリサーバならともかく、データベースサーバなど、
データが消えてしまうと困る用途では、Amazon EBS の使用は必須と思われます。
まず、インスタンスが起動している zone(region の下位)を確認します。
us-east-1c に、10GB のディスク(ボリューム)を作成する。
作成したボリュームは↓で確認できます。
次に、EC2 インスタンスとボリュームを紐付けます。
↓のマウント操作は、EC2 インスタンス上で実行します。
ボリュームを削除するには、umount でマウント解除してから、
ec2-detach-volume でインスタンスとボリュームの紐付けを解除し、
さらに ec2-delete-volume でボリューム自体を削除します。
ただし、1インスタンスに複数ボリュームを同時にマウントできますが、
1ボリュームを複数インスタンスに同時にマウントすることはできません。
時計や EBS のマウント、ユーザアカウントの作成など諸々の初期設定を行ったら、
オリジナルの OS イメージを作成しておくと、OS 初期状態のバックアップとなり、
次回インスタンス起動時もその状態からスグに作業に入れて便利・安心です。
Private Key file (pk-xxx.pem) と X.509 Certificate file (cert-xxx.pem) が
必要になるため、両ファイルをインスタンス上に予めコピーしておきます。
大量のファイル追加等がなければ、5分程度でイメージを作成できました。
--exclude オプションは、イメージに含めないディレクトリを指定できます。
複数を指定する場合は、カンマ『,』区切りで並べます。
内部的には、rsync でイメージを作成しているようです。
イメージは多数のファイルに分割して作成されるので、/mnt/ami のように
サブディレクトリを作成しておいた方が、/mnt が汚れなくて良いかと思います。
作成したイメージをローカル(EC2 インスタンス上)から S3 にアップロードします。
bucket バケット名は任意です。一部の名前は Amazon に予約されているみたいです。
バケット(S3 上のファイル置き場)は自動的に作成されるので、
事前に S3 で作成しておく必要はありません。
S3 にアップロードしたイメージを AMI として登録します。
ここからの操作は、EC2 インスタンスでなくて、Windows を利用します。
まず、バケット名と manifest のファイル名を指定し、AMI として登録します。
自分で作成した AMI の一覧を表示する。
登録した AMI を登録解除するコマンドは以下の通りです。
現在は、インスタンスの起動や、EBS の作成、Elastic IP の取得などは
AWS Management Console の画面から操作するのが正攻法だと思います。
しかし、現バージョンの AWS Management Console は US region 専用のため、
EU region(ヨーロッパのサーバ)を使う場合には利用できません。
今回は、ヨーロッパのサーバを利用したかったので、基本ということで
Windows コマンドラインから Amazon EC2 の各操作を行いました。
一通りの手順をメモしておきます。
これで今日からクラウドコンピューティング♪
Amazon EC2 API Tools のダウンロード
まず、Amazon EC2 API Tools をダウンロードします。
ダウンロードした ec2-api-tools.zip を展開(解凍)して、中身のフォルダを
C:\ec2-api-tools-1.3-30349
に移動します。
アクセスキー等の発行・確認
Access Identifiers の画面から API 呼び出しの認証で利用するキーを発行・確認します。
以下の3つの文字列と、2ファイルを取得します。
Account Number ⇒ 8510-9409-xxxx の形式
Access Key ID ⇒ 14W10WFR0BF84G1NXXXX の形式
Secret Access Key ⇒ 英数40文字
Private Key file ⇒ pk-BYJMUBN7PUOHG6KEVWEK3PLMO7BZXXXX.pem
X.509 Certificate file ⇒ cert-BYJMUBN7PUOHG6KEVWEK3PLMO7BZXXXX.pem
このうち Private Key file と X.509 Certificate file については、
ファイルをダウンロードして C:\ec2-api-tools-1.3-30349 に保存します。
(この PC を他の人が利用できないようにご注意ください)
JRE (Java Runtime Environment) のパスの確認
たいていの PC では、Java 実行環境 (JRE) がインストールされているので、
マイコンピュータにアクセスして C:\Program Files\Java を開きます。
jre1.6.0_07 などのフォルダがあるので、フォルダ名を確認します。

JRE がインストールされていない場合は、
http://java.com/ja/download/ からインストールします。
環境変数の設定
メモ帳などを開いて、以下を書きます。
JAVA_HOME は、↑で調べたパスを指定します。
EC2_PRIVATE_KEY・EC2_CERT はダウンロードしたファイル名を指定します。
set JAVA_HOME=C:\Progra~1\Java\jre1.6.0_07US region(米国サーバ)でなく、EU region(ヨーロッパサーバ)を利用する場合は
set EC2_HOME=C:\ec2-api-tools-1.3-30349
set PATH=%PATH%;%EC2_HOME%\bin
set EC2_PRIVATE_KEY=%EC2_HOME%\pk-BYJMUBN7PUOHG6KEVWEK3PLMO7BZXXXX.pem
set EC2_CERT=%EC2_HOME%\cert-BYJMUBN7PUOHG6KEVWEK3PLMO7BZXXXX.pem
EC2_URL も設定します。
set EC2_URL=https://eu-west-1.ec2.amazonaws.com
Amazon EC2 API Tools の動作確認
↑の環境変数をコピーしてから、コマンドプロンプト(cmd.exe)を開いて、
右クリック⇒貼り付け でペーストして、実行(環境変数を設定)します。

続けて、
ec2verを実行します。
1.3-30349 2008-12-01のように表示されれば成功です。
keypair の作成
後ほど起動したインスタンスに SSH で root アカウントでログインする際に
利用する keypair を作成します。
Windows では sed が使えないので、代わりに find 文を使います。
C:\ec2-api-tools-1.3-30349 に identity というファイルが作成されます。
『key-kawanet』が keypair の名前です。
他の文字列でも構わないのですが、接頭辞 key- を付けると分かりやすそう。
ec2-add-keypair key-kawanet | find /V "KEYPAIR" > %EC2_HOME%\identity作成した identity ファイルは、必ずバックアップをとって、なくさないように。
keypair を確認・削除する際は、以下のコマンドを実行します。
ec2-describe-keypairs
ec2-delete-keypair key-kawanet
セキュリティグループの作成
EC2 のファイアウォール機能を設定するグループを作成します。
デフォルトグループ default のままでも良いのですが、念のため。
通常のサーバでは、22 (SSH) と 80 (HTTP) が開いていれば良いかと。
接頭辞 grp- は不要ですが、分かりやすいように付けています。
ec2-add-group grp-kawanet --description kawanet_security_group作成したセキュリティグループの確認と削除をする際は、以下のコマンドを実行します。
ec2-authorize grp-kawanet -p 22
ec2-authorize grp-kawanet -p 80
ec2-describe-group
ec2-delete-group grp-kawanet
利用可能な AMI(OSイメージ)の確認
今回は、Amazon 純正の Fedora 8 のイメージを利用します。
ec2-describe-images --owner amazon | find "fedora-8-i386"AMI ID は、接頭辞 ami- で始まります。
最新の fedora-8-i386-base-v1.08 は、ami-5647a33f になります。
インスタンスの起動~終了
AMI ID、インスタンス数(普通は1個)、keypair、セキュリティグループ、
インスタンス種別(プラン)を指定して、インスタンスを起動します。
ec2-run-instances ami-5647a33f --instance-count 1 --key key-kawanet --group grp-kawanet --instance-type m1.small起動直後のステータスは、 pending となります。
インスタンスの起動状況は、↓で確認できます。
ec2-describe-instancesOS が起動すると、ステータスが running になります。
外部からアクセスできるホスト名が
ec2-174-129-112-76.compute-1.amazonaws.com
の形式で表示されます。
起動したインスタンスを終了(破棄)する際は、
接頭辞 i- で始まるインスタンス ID を指定します。
ec2-terminate-instances i-d6008abfディスク内容は削除されます。復活ではできないので要注意です。
『ホスティングサービスの契約解除する API』と捉えるのが良さそう。
Elastic IP(固定IPアドレス)の取得、確認、返却
Amazon EC2 では、インスタンスを起動する度にダイナミックに
グローバル IP アドレスが割り当てられます。(毎回 IP が変わる)
DNS 登録のために固定 IP アドレスが必要な場合は、Elastic IP を利用します。
インスタンス起動中は、固定 IP アドレス分の追加料金はありません。
(インスタンスを起動せずに IP を保有し続ける場合は、有償になる)
取得、確認、返却のコマンドは、以下の通りです。
ec2-allocate-address
ec2-describe-addresses
ec2-release-address 79.125.5.xxx
取得した Elastic IP をインスタンスに割り当てる
Elastic IP を取得した時点では、IP アドレスはインスタンスでなくて
アカウントに紐づいています。実際にその IP を利用するためには、
起動しているインスタンスに取得した IP を割り当てる必要があります。
ec2-describe-instances↑で起動中のインスタンスと取得している IP アドレスを確認します。
ec2-describe-addresses
次に↓でインスタンスに IP アドレスを割り当てます。
ec2-associate-address -i i-d6008abf 79.125.5.xxx数分で NAT 情報が更新されて、固定 IP でアクセスできるようになります。
IP アドレスの割り当てを解除するには、↓のコマンドを実行します。
ec2-disassociate-address 79.125.5.xxx
起動したインスタンスに SSH でログインしてみる
SSH は、慣れている http://sourceforge.jp/projects/ttssh2/releases/ TeraTerm を使っています。
認証画面では、User name に root を入力し、Passphrase は空にします。
Use RSA/DSA key to log in のチェックボックスを選択して、
Private key file をクリックして、
C:\ec2-api-tools-1.3-30349 内の identity ファイルを選択します。

OK ボタンを押すと、パスワード入力なく、root でログインできます。

root 権限で reboot は実行しても OK です。OS が再起動します。
ただし、 shutdown -h now は厳禁です。
ec2-terminate-instances と同様に内容が破棄されて、復活できません。
初回は root でログインするとしても、その後で一般アカウントを作成して、
通常は root でなくて一般アカウントでログイン操作するのが良いでしょう。
時刻表示を日本時間にする
デフォルトでは、システム時計が EST(東部標準時=米国東海岸時間)になっています。
日本時間の方が分かりやすいので、下記のコマンドで設定変更できます。
# date↑のコマンドは、Windows 上でなくて、Amazon EC2 インスタンス上の root 権限で実行します。
Wed Feb 11 05:52:53 EST 2009
# cp /usr/share/zoneinfo/Japan /etc/localtime
cp: overwrite `/etc/localtime'? y
# date
Wed Feb 11 19:53:06 JST 2009
Amazon EBS (Elastic Block Store) のマウント
EC2 のディスク内容は、EC2 インスタンスを終了すると消えてしまいます。
ときどき、ハードウェア障害などでインスタンスが異常終了する場合もあるようです。
単純に並列配置するアプリサーバならともかく、データベースサーバなど、
データが消えてしまうと困る用途では、Amazon EBS の使用は必須と思われます。
まず、インスタンスが起動している zone(region の下位)を確認します。
ec2-describe-instancesus-east-1c (米国東1c)とか eu-west-1a (欧州西1a)といった zone が表示されます。
us-east-1c に、10GB のディスク(ボリューム)を作成する。
ec2-create-volume --size 10 --availability-zone us-east-1c最初のステータスは creating となります。
ec2-create-volume --size 1 --availability-zone us-east-1c
作成したボリュームは↓で確認できます。
ec2-describe-volumesしばらくすると、 available となって利用可能になります。
次に、EC2 インスタンスとボリュームを紐付けます。
ec2-attach-volume vol-10b3xxxx --instance i-0687xxxx --device /dev/sdh1ステータスが attached となったらマウント可能です。
↓のマウント操作は、EC2 インスタンス上で実行します。
# mkfs -t ext3 /dev/sdh1OS 再起動時にも自動的にマウントさせるためには、/etc/fstab も設定します。
# mkdir /mnt/data1
# mount /dev/sdh1 /mnt/data1
ボリュームを削除するには、umount でマウント解除してから、
ec2-detach-volume でインスタンスとボリュームの紐付けを解除し、
さらに ec2-delete-volume でボリューム自体を削除します。
ec2-detach-volume vol-10b3xxxxボリューム自体は、削除せずに他のインスタンスに再マウントすることも可能です。
ec2-delete-volume vol-10b3xxxx
ただし、1インスタンスに複数ボリュームを同時にマウントできますが、
1ボリュームを複数インスタンスに同時にマウントすることはできません。
オリジナルの AMI(OSイメージ)を作成する
時計や EBS のマウント、ユーザアカウントの作成など諸々の初期設定を行ったら、
オリジナルの OS イメージを作成しておくと、OS 初期状態のバックアップとなり、
次回インスタンス起動時もその状態からスグに作業に入れて便利・安心です。
Private Key file (pk-xxx.pem) と X.509 Certificate file (cert-xxx.pem) が
必要になるため、両ファイルをインスタンス上に予めコピーしておきます。
# mkdir /mnt/ami先頭の time は不要ですが、処理時間確認のために付けておくと参考になります。
# time ec2-bundle-vol --exclude '/root/.cpan' --destination /mnt/ami --prefix img-kawanet -r i386 --cert ~root/cert-xxxx.pem --privatekey ~root/pk-xxxx.pem --user 8510-9409-xxxx
大量のファイル追加等がなければ、5分程度でイメージを作成できました。
--exclude オプションは、イメージに含めないディレクトリを指定できます。
複数を指定する場合は、カンマ『,』区切りで並べます。
内部的には、rsync でイメージを作成しているようです。
イメージは多数のファイルに分割して作成されるので、/mnt/ami のように
サブディレクトリを作成しておいた方が、/mnt が汚れなくて良いかと思います。
オリジナルの AMI を S3 に保存する
作成したイメージをローカル(EC2 インスタンス上)から S3 にアップロードします。
bucket バケット名は任意です。一部の名前は Amazon に予約されているみたいです。
バケット(S3 上のファイル置き場)は自動的に作成されるので、
事前に S3 で作成しておく必要はありません。
# time ec2-upload-bundle --bucket kawanet-images --manifest /mnt/ami/img-kawanet.manifest.xml --access-key 14W1xxxx --secret-key uzqBxxxxEU region(ヨーロッパサーバ)を利用する場合は、--location も指定します。
# time ec2-upload-bundle --bucket kawanet-images --manifest /mnt/ami/img-kawanet.manifest.xml --access-key 14W1xxxx --secret-key uzqBxxxx --location EU今回の例では、1分以下で転送できました。
オリジナルの AMI を登録して起動する
S3 にアップロードしたイメージを AMI として登録します。
ここからの操作は、EC2 インスタンスでなくて、Windows を利用します。
まず、バケット名と manifest のファイル名を指定し、AMI として登録します。
ec2-register kawanet-images/img-kawanet.manifest.xml次に、登録された AMI を確認します。
自分で作成した AMI の一覧を表示する。
ec2-describe-images --owner self起動方法は、通常の ec2-run-instances と同じです。
登録した AMI を登録解除するコマンドは以下の通りです。
ec2-deregister ami-f61fxxxx
この記事へのコメント