2008年8月12日火曜日

[TechDay] 第2回 Amazon Elastic Compute Cloud (Amazon EC2)

前回に引き続き今回もAmazon EC2について書きます。
第2回の内容は、インスタンスの起動と停止 です。

第1回の説明の中でダウンロードしたAWS用コマンドラインツール(ec2-api-tools)をクライアントから利用してEC2を操作するのですが、実はこのツールのほかにもクライアントに必要なものがあります。

■JRE(version5以降)
■SSHクライアント

です。

まずは、簡単に自分の環境のJREを確認しましょう。
Java環境がない方は、以下のサイトからダウンロードしましょう。
http://www.java.com/ja/download/manual.jsp

Windows確認例.
C:\AWS>"%JAVA_HOME%\bin"\java -version
java version "1.5.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_02-b09)
Java HotSpot(TM) Client VM (build 1.5.0_02-b09, mixed mode, sharing)

私の環境ではかろうじて1.5以上になっていましたのでそのまま試しました。

次にSSHのクライアントの設定です。

おそらくTera Term Proが一番ポピュラーだと思いますが、Getting StartedのAppendixで紹介されているPutty(パティ)を利用しました。

Putty(パティ)のセットアップ


1)ダウンロード

ダウンロードページの以下のところからWindows用のインストーラを取得します。
A Windows installer for everything except PuTTYtel
Installer: putty-0.60-installer.exe (or by FTP) (RSA sig) (DSA sig)

インストールは、putty-0.60-installer.exe を起動してウィザードで進めるだけです。
メニューの日本語化をしたい場合は、以下のサイトからputtyjp.exeとputtyjp.lngを入手してPuTTYのインストールフォルダにコピーします。
http://hp.vector.co.jp/authors/VA024651/PuTTYkj.html

またEC2インスタンスにクライアントからファイルをコピーする場合には、SCP(SecureCopyProtocol)を使います。Windowsの標準コマンドにはありませんのでこのサイトにあるPSCPを取得します。

PSCP: pscp.exe (or by FTP) (RSA sig) (DSA sig)

※ここにあるscpツールは、コマンドラインツールなのでGUIが良い人は、WinSCPを入手してください。

公開鍵と秘密鍵のキー・ペアの生成


AMI(Amazon Machine Image)の利用認証はRSA認証で行います。キー・ペアの生成手順は以下の通りです。

1)ec2-api-toolsのec2-add-keypairを使ってキーを生成します。
キーの名前は、起動するAMIを識別しやすい名前をつけることが推奨されています。
(例.my-test-keypair)

C:\> ec2-add-keypair my-test-keypair




2)ツールで生成したキーを以下のように任意のファイル名で保存(コピペ)します。
id_rsa-キー名(例.id_rsa-my-test-keypair)
コピーする部分は、以下の行を含めたそれぞれの行間の文字列すべてです。
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

3)WindowsでPuttyをSSHのクライアントにする場合は、2)で作成したファイルからPutty用の秘密鍵ファイルを生成しなければいけません。

先ほどインストールしたPuTTYのメニューからPuTTYgenを起動します。



PuTTYgenのメニューから[Conversions]->[Import key]を選択して2)で生成したファイルを読み込みます。出来たファイルを拡張子ppk( id_rsa-my-test-keypair.ppk )で保存します。PuTTYでSSH接続するときにこのファイルを使用します。



[Import key]でファイルを読み込むと以下の画面が表示されるので[OK]ボタンをクリックしてメッセージどおりに[Save private key]ボタンでPuTTY用の秘密鍵ファイルを保存します。




利用可能なAMIの確認


以下のようにコマンドプロンプトから ec2-api-tools の ec2-describe-images を使って現在利用可能なAMIを確認します。
このコマンドでは自分で作ったAMIとAmazonが一般公開用に作成したAMIがリストされます。それぞれのAMIの識別はリストの2番目のカラムで行います。AMIの起動や停止はこのAMI ID(例.ami-2c5fba45)を指定して行います。



上記リストを見ると利用できるマシン・イメージがたくさんあるのでどれを利用したらよいのか迷いますね。とりあえずApacheとMySQLがインストールされていると思われる 25b6534c (AMI ID)を使ってインスタンスを起動します。

AMIの起動


インスタンスの起動は、 ec2-api-tools の ec2-run-instances コマンドを使用します。
起動したインスタンスの状態を確認するコマンドは ec2-describe-instances コマンド使用します。以下の実行例では、起動後、すぐに ec2-describe-instances コマンドを実行したためステータスが pending になっているのが分かります。再度、確認してみるとステータスが running に変わってDNS名(ec2-67-202-60-210.compute-1.amazonaws.com)が付与されているのがわかります。

■起動:ec2-run-instances AMIID -k 生成したキー・ペア
C:\mydoc\Prototype\AWS>ec2-run-instances ami-25b6534c -k my-test-keypair
■状態確認:ec2-describe-instances インスタンス名
C:\mydoc\Prototype\AWS>ec2-describe-instances i-f5ff269c
※インスタンス名は起動時にレスポンスされます。



これでEC2のインスタンスが起動しましたが、そのままではサービスが有効になっていません。
ec2-api-tools の ec2-authorize コマンド使って http と ssh のポートをアクセス可能にします。

sshとhttpポートをアクセス可能にする


EC2のセキュリティの考え方は、セキュリティ・グループというものを利用してアクセス制御を定義しています。グループは100種類まで定義することが出来るようです。
何も定義していない場合は、default グループ というグループが定義されている状態になっています。このグループの初期状態は、何も許可されていない状態です。
以下の例は、ec2-authorize コマンド使って default グループに http と ssh のアクセス許可を定義しています。アクセス許可はインスタンスに依存するものではなくグループごとに定義するものですので以降インスタンスを再作成しても default グループのアクセス権限はそのまま生きることになります。

C:\>ec2-authorize default -p 22
GROUP default
PERMISSION default ALLOWS tcp 22 22 FROM CIDR 0.0.0.0/0

C:\>ec2-authorize default -p 80
GROUP default
PERMISSION default ALLOWS tcp 80 80 FROM CIDR 0.0.0.0/0

以下の実行例では default グループに付与されたパーミッションの確認をしています。



EC2のセキュリティの詳細は Amazon Elastic Compute Cloud Developer Guide の Instance Addressing and Network Security を参照してください。IPアドレスでアクセス制限する例なども確認することができます。

ちなみにポートスキャン・ソフトを使って起動中のインスタンスを調べてみても起動しているサービスが ssh と http だけであることが分かります。以下の画面は、windows用のポートスキャン・ソフト nmap(Zenmap) を利用して確認した例です。



sshとhttpへのアクセス


HTTPの確認は、ブラウザでURLへアクセスしてみましょう。
またSSHの確認はPuTTYでインスタンスへログインしてみましょう。

■HTTPの確認

ブラウザに該当のURL(DNS名)を入力するとApacheのデフォルト画面が表示されます。
http://ec2-67-202-60-210.compute-1.amazonaws.com/



■SSHでインスタンスにログイン

1)PuTTY([スタート]->[プログラム]->[PuTTY]->[PuTTY])起動
2)認証用のキーファイル(id_rsa-my-test-keypair.ppk)の指定
3)ホスト名にDNS名を指定して「開く」ボタンをクリック





ログインプロンプトが表示されたらrootと入力してエンター。



EC2にログインできましたのでpsコマンドでどんなプロセスが起動されているか確認してみます。



apache(httpd)、mysql(mysqld)、仮想コンソール(mingetty)、メール(sendmail)などが動いていることが分かります。

ちょっとだけカスタマイズ


■apacheのデフォルト・ページを変更してみましょう。

1)PuTTYの付属コマンドpsftpを起動します。
引数はroot@dns_name
2)apacheのDocumentRoot "/var/www/html"へ作成したindex.htmlをアップします。



アップ後にURLにアクセスするとページが更新されていることが確認できます。



■mySQLをさわってみよう。

1)ユーザmysqlへスイッチして作成済みのデータベースを確認
2)日本語入力のためLANG環境変数の設定
3)mysqlのコマンドラインユーティリティを起動
4)既存のtestデータベースに表作成、INSERT、SELECTの実行







※PuTTYの文字コード設定は以下のように行います。(以下の例ではEUCへ設定)



以上 第2回目はEC2を起動して実際のサービスのカスタマイズするところまで紹介しました。

ところがEC2のインスタンスは停止してしまうとすべての内容が消えてしまいます。連続稼働中は良いのですがせっかくいろいろカスタマイズした設定やデータが消えてしまっては困りますね。

そこで必要になるのがS3(AWSのディスクサービス)です。
S3へカスタマイズしたイメージ全体(AMI)をバックアップすることで実際のシステムを運用するという方式になります。

次回第3回では、自分用のインスタンス・イメージの作成とバックアップについて説明したいと思います。

(続く)

0 件のコメント:

コメントを投稿