2008年3月11日火曜日

AmazonWebService(EC2,S3)を利用する

AmazonWebServices(AWS)のアカウントを作成する

AmazonWebServices(AWS)のEC2,S3,SimpleDb等のServiceは「AmazonWebServices(AWS)」のアカウントを作成してから、それぞれ申し込む事ができる。

  1. Create an Amazon Web Services AccountのページからAWSのアカウントを作成する。
  2. AWSのアカウントを作成できたら、AWSのホームページからS3とEC2に申し込む。
  3. Amazon.com: Homepage: Amazon Web Servicesへ移動する。
  4. 右上にある「Your Web Services Account」というコンボボックスから「AWS Access Identifiers」を開く。
  5. 表示されている「Access Key ID」「Secret Access Key」ふたつを控えておく。
  6. 「X.509 Certificate」でPrivate keyとPublic Keyを作成し、ダウンロードする。「cert-*.pem」「pk-*.pem」というファイルが生成される。これはEC2のインスタンスイメージを作成するときに必要となるのでなくさない事!
  7. Amazon.com: Homepage: Amazon Web Servicesを開いたときに右上にある「Your Web Services Account」コンボボックス内の「AWS Account Activity」を開いて「AccountNumber(4桁-4桁-4桁の数字)」を控えておく。これもまたEC2のインスタンスイメージを作成するときに必要となる。また、このページでいつでも使用料金の確認を行う事ができる。

Amazon S3の使用方法

Firefoxのpluginを使うのが最も簡単。

  1. FirefoxにAmazon S3 Firefox Orgnizer(S3Fox)をInstallする。
  2. Firefoxを再起動し、「Tool」メニューから「S3 Organizer」を起動する。
  3. まず、左上にある「Manage Account」アイコンをClickして「ユーザ名」「Access Key」「Secret Key」を入力し、「Save」「Close」。
  4. 正しく認証できたら「Manage Account」の右のコンボボックスにアカウント名が表示されるはず。
  5. 画面の説明は直感的で、左側がLocal右側がS3。まずはフォルダを作成する。
  6. これまた直感的で、いかにも新規にフォルダを作りそうなアイコンをClickすればOKOK。
  7. 後は中央の右向きアイコンでLocal->S3、左向きアイコンでS3->Local。
  8. 普通にこれらのアイコンをClickすると単純にファイルのコピーになる。が、これらのアイコンの右側に微妙に見えている「下向き矢印」をClickすると、「...Synchronized Folders list」のようなメニューが出てくる。この機能で一度コピーすると「Synchronize Folders」の設定に追加されて、次回からは上部にある「Sychronized Folders」から「同期コピー」を行う事ができるようになり便利。

S3の使い方はこの程度。有料のツールだと「Bucket Explorer」というツールもあるようだが、Demoを見る限りS3Foxと大して差http://www.blogger.com/img/gl.link.gifが無いように見えるのでS3Foxで十分かと。S3Foxにある「Synchronize Folders」という便利な機能がBucket ExplorerのDemoでは見れないし。

AMazon EC2の使用方法

EC2を利用するツールとして、AWSのDeveloper Connectionで公開されているAmazon EC2 Command-Line Toolsもあるが、やはりFirefoxのpluginを発見したのでそちらを使用する。便利な世の中ですね。作者様には感謝感謝です。

  1. Firefoxのpluginとして配布されているEC2 UIをinstallする。
  2. Firefoxを再起動し、「Tool」メニューから「S3 Organizer」を起動する。
  3. 下のGooglePresentationのPage2の図(以降「P2図」のように表現)の画面が起動するので、左上の「Credential」アイコンをClickする。
  4. P3図のアカウント情報を入力する画面が表示されるので、「ユーザ名」「Access Key」「Secret Key」を入力して「Add」。するとP4図のように中央コンボボックスにアカウント名が表示される。
  5. 次に「Key pairs」タブをClickする。P5図の画面が表示されるので「Create a new key pair」をClickすると鍵ペアが生成され、リストに生成した鍵ペアが表示される。この時鍵を保存するダイアログが出てくるので、保存した場所を忘れない事。
  6. 次に「Securty groups」タブをClickする。上半分の領域にある「Refresh」アイコンをClickすると、最初からdefaultというgroupが存在している。この状態で下半分の領域にある「Grant permission」をClickする。するとP6図のダイアログが表示されるので、まずは「TCP/IP」「22」から「22」という設定でSSHのPortを外部からアクセスできるように追加する。するとP7図のように下半分の領域に許可したportが追加されていく。他にも、Webで接続するなら80とか8080とか、許可する必要があるPortを追加しておく。
  7. これらの作業でインスタンスを起動する準備はOKOK!という事で「AMIs and Instances」タブをClickする。
  8. 最初は「Available AMIs」のリストが空っぽなので「Refresh」アイコンをClickする。すると既存のAMIの一覧が表示される(P8図)。
  9. 色々な構成を選択して起動できるが、自分はLinuxに疎いから、最も経験がある「Ubuntu-7.10」を選択した(自分の環境では"ami-34d4315d"というidだった)。起動する構成が決まったら「Launch Instance(s)」をClickする。
  10. 起動するインスタンスの種類などを決定するダイアログが表示される(P9図)。
  11. 「Instance type」は使用するインスタンスの強さを意味するので、予算に応じて決定する。ちなみに最も安いのが「m1.small」。練習にはたぶんこれで十分。他には「KeyPairs」には先の手順で生成したKeyPairを選択し、「Available Group」には先の手順で作成したGroupを左側に移動しておく。(P10図)
  12. インスタンスの種類の設定が完了したら「Launch」。下半分に起動中のインスタンスが表示される。最初は「pending」となっているが(P11図)、30秒ほど待って「Refresh」すると「running」に変わる。(P12図)
  13. runningな状態になったら、下半分の起動中インスタンスを右Clickして「Copy Public DNS Name to Clipboard」する。これで外部から接続するときのhost名がコピーできる。
  14. sshで接続するには、terminalを開いて以下のようにコマンドを実行する。
    $ ssh -i ${インスタンスを起動した時のKeyPair} root@${コピーしたホスト名}
  15. これでsshで接続できたはず。後はwgetするなりapt-getするなりしてどんどん好きなようにアプリを構築すればOKOK!
  16. ただし!どれだけマシンを構成しても、インスタンスを終了するとその構成は消滅する。これがEC2のルール。そこで、インスタンスの状態をイメージ(AMI)として保存しておく必要がある。まずは以下のコマンドでLocalマシンから起動インスタンスの「/mnt」へX.509証明書をコピーする。
    $ scp -i ${インスタンスを起動した時のKeyPair} ${cert-*.pemの公開鍵} ${pk-*.pemの秘密鍵} root@${host名}:/mnt
  17. まず、以下のコマンドでインスタンスのイメージを作成する。
    # cd /mnt
    # ec2-bundle-vol -d /mnt --privatekey ${pk-*.pemの秘密鍵} --cert ${cert-*.pemの公開鍵} --user ${AccountNumber(12桁の数字)}
    「Bundling image file...」と表示され時間がかかる。「ec2-budle-vol complete.」と出力されれば終了。
  18. インスタンスの作成が終了したら、作成したイメージをS3へ転送する。
    # ec2-upload-bundle --bucket ${S3のフォルダ名} --manifest image.manifest.xml --access-key ${AccessKey} --secret-key ${SecretKey}
    S3のフォルダ名は存在しないものを指定すれば勝手に作成してくれるよぅだ。ちなみに、この「ec2-upload-bundle」というコマンドの実態は「/usr/lib/site_ruby/aes/amiutil/uploadbundle.rb」という、rubyで記述されたS3をRESTで操作するプログラムになっているよぅだ。
    ※追記
    起動するときに使用する構成によっては以下のようなエラーが発生してfailする事がある。
    Error: failed to upload "./image.part.00", HTTP put failed: curl returned response code 77
    ec2-upload-bundle failed
    
    curlが出力するこのメッセージは「Problem with reading the SSL CA cert (path? access rights?)=SSL CA cert の読み取りに問題がある(パス? アクセス権?)」というものらしい。この場合「apt-get install ca-certificates」してから再度ec2-upload-bundleすれば正常に動作した。
  19. S3に転送したAMIはEC2 UIの「Available AMIs」に「Register AMI」で登録しておく。この時「AMI Manifest Path」には「${S3のフォルダ名}/image.manifest.xml」という書式で指定する。
    これでインスタンスを終了しても、次回からはこのAMIから起動できる(P13図)。
  20. 最後に、インスタンスの終了方法。これは簡単で、EC2 UIの下の領域で停止したいインスタンスを選択し「Terminate Selected Instance」アイコンをClickするだけ(P14図)。最小は「shutting down...」となっているが、30秒ほど待って「Refresh」すれば「terminated.」となっているはず(P15図)。

S3,EC2ともに料金も手軽だし、こんなに簡単に色んな構成を試せるってのは、ほんっっっっと便利なServiceだと思う。

コメントを投稿