nishio-dens's diary

Railsとかプログラミング関連の備忘録

Amazon EC2の使い方 目次

Amazon EC2の申し込み,使い方,及びAmazon S3へのイメージバックアップ方法についての記事を書きました. Amazon EC2やS3の制御にはAWS Management Consoleを使っています.

なお,Amazon MapReduce等,他のサービスについては触れていません.

クラウドコンピューティング技術に興味のある方,Amazon EC2の利用を検討している方は是非ご覧ください.

はじめに
Amazon EC2への申し込み
アクセスキーの作成
AWS Management Consoleを用いたインスタンスの生成
Amazon EC2インスタンスにSSHでアクセスする
Amazon EC2インスタンスに固定IPアドレスを割り当てる
Amazon S3に新しいバケットを作成する
Amazon EC2のイメージをAmazon S3にバックアップする
Amazon S3上のEC2イメージバックアップからインスタンスを起動する
Amazon EC2の利用料金

キーワード:Amazon EC2,Amazon S3,Cloud,クラウド

Amazon S3上のEC2イメージバックアップからインスタンスを起動する

Amazon S3上にイメージをバックアップした後,S3上のイメージからインスタンスを生成する方法について紹介します.

Management ConsoleからIMAGES,AMIsを選択し,Register New AMIボタンをクリックしてください.


AMI Manifest Pathの部分にはS3上のimage.manifest.xmlのパスを設定してください.

例では,S3のBucket名をnishio-cloud-storageとしているため,

http://s3.amazonaws.com:80/nishio-cloud-storage/image.manifest.xml

としてimageマニフェストのパスを設定しました.

Registerボタンを押すと,新しいAMIが登録されます.インスタンスを起動するには,登録されたイメージを右クリックし,Launch Instanceボタンをクリックしてください.


あとは通常のインスタンス生成と同じ手順で起動ができます.

ただし,S3からのインスタンス起動では,残念ながらInstance TypeにMicro Instanceは指定できませんでした.インスタンスを起動後,sshでEC2にアクセスし,データが正常に復旧しているかどうかを確認してください.


目次に戻る

Amazon EC2のイメージをAmazon S3にバックアップする

Amazon EC2では,インスタンスを終了すると保存されていたデータがすべて消えてしまいます.せっかくインストールしたソフトウェア等も,不慮の事態や誤った操作によってインスタンスが終了してしまった場合に消えてしまっては困ります.

そこで,Amazon S3にEC2イメージのフルバックアップを行う方法を紹介します.このようにしておけば,あとからS3上のバックアップデータからインスタンスを作成することができます.

なお,EC2からS3へのデータ転送は無料です.もちろん,S3にデータを置いておく料金はかかります.あくまでも転送が無料なだけです.

まずは,S3を利用するために証明書が必要です.アクセス証明書の秘密鍵とX.509証明書をダウンロードしておいてください.


この秘密鍵や証明書はEC2上に置いておく必要があります.よって,ダウンロード後にセキュアコピー等を使ってあらかじめEC2にアップロードしておいてください.

セキュアコピーはLinuxからはscpコマンドで行うことができます.ターミナル上で

scp -i sshアクセス用の秘密鍵 転送したいファイル ec2-user@EC2のアドレス

などとすればアップロードを行うことができます. Windowsを利用している方はWinSCP等のソフトを使うことでアップロードが可能です.

次に,Amazon EC2sshでログインします.ターミナルなどから

ssh -i 秘密鍵のパス ec2-user@EC2のアドレス

を入力し,sshでログインします. Windowsユーザの方はPuTTY等のソフトウェアを用いてアクセスを行ってください.

EC2にログイン後,

sudo su -

コマンドを入力し,rootユーザへと移行してください.

次にEC2上で ec2-bundle-vol コマンドを入力し,EC2のイメージのバックアップをとります.

イメージのバックアップをとるためには,X509の秘密鍵が必要です. ec2-bundle-volコマンドは

ec2-bundle-vol -d イメージを保存するディレクトリ --privatekey 秘密鍵 --cert 証明書 --user ユーザの口座番号

とすることで利用できます.--cert 証明書の部分は必要ないかもしれないです.

口座番号はAccountのページに書いてあります(下図の下線部分).


下図の例では,イメージのバックアップをとりあえず /mnt ディレクトリに保存することとしました.バックアップはmicro instanceでは15分から20分程度の時間がかかりましたが,この辺りは時間帯によって変ってくるかと思います.

コマンドが完了したら,イメージを保存したディレクトリに移動し,正しく作成されているかどうかを確認してください.

例では/mnt ディレクトリにイメージを作成したため,

cd /mnt

でディレクトリを移動し,lsコマンドでイメージが作成されているかを確認してください.また,ディレクトリの中にimage.manifest.xmlというファイルが存在しているはずです.このxmlはS3へのイメージアップロードの際に利用します.

次に,作成したイメージをS3にアップロードします.

ec2-upload-bundle コマンドを利用することで、S3にイメージをアップロードできます. ec2-upload-bundleコマンドは以下のように利用します.

ec2-upload-bundle --bucket S3のストレージ名 --manifest image.manifest.xml --access-key アクセスキー --secret-key シークレットキー

--bucket の後には,S3上で作成したバケット名を入力してください.また,アクセスキーおよびアクセスシークレットはAccountのページから確認できます.


イメージを保存したディレクトリに移動後,ec2-upload-bundleコマンドを入力してS3にイメージをバックアップしてください.

コマンドが完了後,Management ConsoleにてS3にアクセスし,イメージがアップロードされているかを確認してください.


目次に戻る

Amazon S3に新しいバケットを作成する

Amazon S3を利用するのはとても簡単です.まず,Management ConsoleからAmazon S3を選択し,Create Bucketボタンをクリックします.


適当なBucket名とRegionを設定します. RegionはEC2と同じRegionに割り当てたほうが良いかもしれません.


ここで割り当てたBucket名は,EC2からS3にデータをアップロードする際に利用しますので,覚えておいてください.


次に適当なPrefixを設定し,Createボタンを押します.するとS3上に新たな保存領域が割り当てられます.これでS3のセットアップは完了です.

別の章では,EC2側からS3にデータをアップロードする方法について紹介します.


目次に戻る

Amazon EC2インスタンスに固定IPアドレスを割り当てる

EC2では,新たなインスタンスを起動する毎,またはインスタンスを再起動するごとに,割り当てられるIPアドレスが変わってしまいます.

これが嫌な場合はElastic IPを使うことで固定IPアドレスを割り当てることができます.なお,1時間あたり未接続の Elastic IP アドレス 1 つにつき $0.01かかります.

固定IPを割り当てるには,Management ConsoleのElastic IPsをクリックし,Allocate New Addressを選択します.

適当なIPアドレスが割り当てられると,下図のようになります.

次に,この割り当てられたIPをインスタンスと結びつけてやる必要があります. Addressの部分を右クリックし,Associateボタンをクリックします.その後,固定IPを割り当てたいインスタンスを選択し,Yes, Associateボタンをクリックすることで,インスタンスに固定IPが割り当てられます.インスタンスを作り直した際も,もう一度同じ手順を繰り返すことで,別インスタンスにも同じIPアドレスが割り当てられることとなります.


目次に戻る

Amazon EC2インスタンスにSSHでアクセスする

インスタンスを生成後,SSHでアクセスしてみましょう. Management Consoleでインスタンス一覧を表示し,インスタンスを右クリックします.

すると,インスタンスに対して行える制御一覧が表示されます. Instance Management内のConnectボタンをクリックすると,SSHでの具体的なアクセス方法の詳細が表示されます.

私は普段OSにUbuntuを使っているので,Ubuntuのターミナル上からSSHを行いアクセスしてみることとします. Windowsユーザの方はPuTTYなどを使ってSSHでアクセスすればよいでしょう.しかし,Exampleに書いてあるコマンドをそのままターミナルに入力してもうまく繋がりません.

まず,Ubuntuのターミナル上から,インスタンス作成時にダウンロードしたプライベート鍵(例ではnishio-key.pem)のアクセス権を変更します.例えば,ターミナル上から

chmod 400 nishio-key.pem

とすればよいです.

次に,Exampleにある通り,

ssh -i ダウンロードした秘密鍵のパス root@サーバのアドレス

と入力してみるが,うまくアクセスできませんでした.

エラーメッセージを見ると,どうやらrootユーザでログインするな,ec2-userでログインせよとの事でした.そこで,

ssh -i ダウンロードした秘密鍵のパス ec2-user@サーバアドレス

として再度ログインします.

無事にログインできました.あとはyumでパッケージをインストールするなりして好きにカスタマイズしてください.

コンピュータの性能を表示させたところ,以下のような結果となりました.

高性能なコンピュータを使ってますね.以上でインスタンスの生成は完了です.

しかしながら,実際にEC2上でシステムを運用するとなると,上記の手順だけでは不十分です.

実は,インスタンスに保存されているデータ(インストールしたソフト等すべて)は,インスタンスをTerminate(終了)してしまうとすべて消えてしまうのです.

例えばAmazon側が不慮の自体でサービスが止まってしまったり,管理者が間違えてTerminateしてしまった場合,大切な情報がすべて失われてしまうことになります.

このような自体を防ぐ方法として,Amazon S3やElastic Block Store(EBS)等を利用し,データのバックアップをとっておく必要があります.

S3は大容量のデータを保存する際に利用します.このS3はEC2とは疎に結合することしかできません.つまり,EC2側から普通のHDDのように簡単にアクセスすることができないわけです.よって,S3上に頻繁にアクセス,更新するデータを置くことは難しいと考えてよいでしょう.

この問題を解決するためには,Elastic Block Store(EBS)と呼ばれるものを利用します. EBSは,いわゆる外付けHDDのような感覚で使えますが,このEBSもインスタンス一つ毎に異なるものを作らなければならず(つまり複数インスタンスから同時にアクセスはできない),さらにアクセス速度がいまいちという欠点もあります.

ともあれ,例えばMySQLのデータをEBSにおいておき,インスタンスのイメージをS3上に取っておくようにしてバックアップするなど,用途によってEBSとS3の利用を分けるなどしたほうが良いかと思います.

別の章にて,インスタンスのイメージをAmazon S3側にバックアップし,インスタンスが止まった際にS3からデータを復旧する方法について紹介します.


目次に戻る