2008/10/18

Amazon EC2 (1) 

Amazon EC2を使ってみました。
AWS(Amazon Web Service)のサイトにGettingStartedがあるので、それを見ながらやればOKと思いますが、簡単にポイントを説明しておきます。
  1. サインアップ
    まずはAmazon.com(co.jpではなく)へのサインアップが必要です。

    以前、米アマゾンのアカウントを持っていたこともあって、それをそのまま使いました。普通にサインアップすると、日本のアマゾンと同様に、クレジットカードや住所等の個人情報の入力を求められると思いますので(有料サービスなので当然ですが)、無料サービスに慣れている人は若干抵抗があるかもしれません。

    サインアップはすんだとして、気になるのはお値段です。
    こんな感じになってます。ざっくり、1インスタンス10~80円/一時間なので、一ヶ月動かしっぱなしだと7000円から、ということになります。

  2. X.509の証明書の作成
    Your AccountメニューのAccess Identifiersメニューから、X.509の証明書を作成してダウンロードします。

    cert-MJBIQXYA2SIACBDSSVTBVB9RXQFTSLWT.pem
    pk-MJBIQYI3S2SIACBDSSVT44UVRXQVCLWT.pem

    というような二つのファイルが出来るので、~/.ec2というディレクトリを作成してその中にコピーしておきます。

  3. ツールのインストール
    AWS(Amazon Web Service)は、クラウドを制御するためのツールを用意していてくれています。Javaとスクリプトで書かれていて、Windows/Linux等で動きます。今回は、Ubuntuの上で動かしています。

    ツールは、zipをダウンロードして展開するだけでインストール完了です。私は、~/EC2というディレクトリを作成して、その中にzipを展開しました。ec2-api-tools-1.3-24159という名前で展開されるのでec2-api-toolsというシンボリックリンクを作成。

    その上で、いくつか環境変数の設定が必要です。EC2_HOMEには~EC2/ec2-api-tools/を設定し、PATHにEC2_HOME/binを追加。
    EC2_CERT、EC2_PRIVATE_KEYの両環境変数には、.ec2配下に置いた各X.509証明書を設定しておきます。

    export EC2_HOME=~/EC2/ec2-api-tools/
    export PATH=$PATH:"$EC2_HOME/bin"
    export EC2_PRIVATE_KEY=~/.ec2/pk-
    MJBIQYI3S2SISSVT44UVRXQVCLWT.pem
    export EC2_CERT=~/.ec2/cert-
    MJBIQYI3S2SIACBDSSVT44UVRXQVCLWT.pem

    Javaが動くことが前提なので、入っていなければインストール要です。私のUbuntuにはSun Java が入っていなかったので、改めてsun-java5-jdkを入れました(何もしないとGNU Javaになってしまうので注意が必要です)。

  4. ツールを試してみる

    % ec2-describe-images -o amazon

    と入力して、AMI(Amazon Machine Image)がぞろぞろと出てくれば、とりあえずここまではOKと思われます(オーナがamazonのイメージのリストを取得したことになります)。

    % ec2-describe-images -o amazon
    IMAGE ami-2c5fba45 ec2-public-images/demo-paid-
    AMI-v1.07.manifest.xml amazon available public A79EC0DB i386 machine
    IMAGE ami-bd9d78d4 ec2-public-images/demo-paid-
    AMI.manifest.xml amazon available public A79EC0DB i386 machine
    IMAGE ami-2f5fba46 ec2-public-images/developer-
    image-i386-v1.07.manifest.xml amazon available publici386 machine
    IMAGE ami-26b6534f ec2-public-images/developer-
    image.manifest.xml amazon available public i386 machine
                  :
    IMAGE ari-a23adfcb ec2-public-images/initrd-2.6.
    20-1.3002.fc6xen.ari.manifest.xml amazon available publicx86_64 ramdisk
    IMAGE aki-9b00e5f2 ec2-public-images/vmlinuz-2.6.
    18-xenU-ec2-v1.0.i386.aki.manifest.xml amazon available public i386 kernel
    IMAGE aki-9800e5f1 ec2-public-images/vmlinuz-2.6.
    18-xenU-ec2-v1.0.x86_64.aki.manifest.xml amazon available public x86_64 kernel
    IMAGE aki-a53adfcc ec2-public-images/vmlinuz-2.6.
    20-1.3002.fc6xen.aki.manifest.xml amazon available publicx86_64 kernel

    このひとつひとつが仮想マシンの雛形になります。

  5. sshの設定をする

    %ec2-add-keypair gsg-keypair


    これによってssh接続用のキーが標準出力に出力されます。「----- BEGIN RSA PRIVATE KEY -----」から、「----- END RSA PRIVATE KEY -----」までの行を、適当なファイルに格納してください。私は、~/EC2/id_rsa-gsg-keypairというファイルを作ってそこに置きました。

  6. Fedora8の64bitイメージを立ち上げてみる
    まず、立ち上げるイメージ名を調べます。今回は、Fedora 8のx86_64版ということにします。

    %
    ec2-describe-images -o amazon|grep -i fedora-8-x86_64-base-v1.07
    IMAGE ami-2a5fba43 ec2-public-images/fedora-8-
    x86_64-base-v1.07.manifest.xml amazon available public x86_64 machine aki-b51cf9dc ari-b31cf9da

    この2カラム目の「ami-2a5fba43」がイメージ名になりますので、それを引数にして ec2-run-instancesコマンドを実行します。

    % ec2-run-instances
    ami-2a5fba43 -t m1.large -k gsg-keypair

    でインスタンスの生成が行われます。m1.large というのはインスタンスの型で、他にもm1.small(32bit、小規模)、c1.large(CPUインテンシブなジョブ向け、64bit)など何種類かあります。詳細はここ

    生成したインスタンスの情報は、ec2-describe-instancesコマンドで
    参照・確認することができます。早速生成されたインスタンスを確認すると以下のようになっていました。「 i-fcb85296 」がインスタンスのIDになります。

    % ec2-describe-instances
    RESERVATION r-376bb45e 573465381650 default
    INSTANCE i-fcb85296 ami-2a5fba43 ec2-01-234-567-89.compute-1.amazonaws.com domU-12-34-56-78-90-12.
    compute-1.internal running gsg-keypair 0 m1.large 2008-10-19T13:16:32+0000 us-east-1c aki-bcf529dc ari-b31cf53

    以下、このインスタンスIDを使って操作を行うことになります。

  7. sshとhttpのポートを開放する
    インスタンスの起動を待ちつつ、あらかじめsshのポートを開けておきます。ついでにhttpも開けておくことにします。

    % ec2-authorize default -p 22
    % ec2-authorize default -p 80

  8. インスタンスの正当性の確認
    しばらくするとインスタンスが起動完了します(ec2-describe-imageでステータスがrunningになります)。コンソール出力を取得して、生成されたインスタンスのフィンガープリントを調べます(下記のボールド部分)。

    % ec2-get-console i-fcb85296
    Linux version 2.6.21.7-2.fc8xen (mockbuild@xenbuilder4.fedora.phx.redhat.com) (gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)) #1 SMP Fri Feb 15 12:34:28 EST 2008
    Command line: root=/dev/sda1 ro 4
    :
    ec2: ec2-ami-tools already up to date
    ec2: -----BEGIN SSH HOST KEY FINGERPRINTS-----
    ec2: 2048 da:63:be:67:aa:30:72:df:c1:c4:10:fb:a8:27:9a:0f /etc/ssh/ssh_host_key.pub
    ec2: 2048 c5:61:78:38:c5:20:5b:82:37:58:07:ba:ab:eb:75:54 /etc/ssh/ssh_host_rsa_key.pub
    ec2: 1024 a8:5a:67:e0:32:a6:59:c3:34:52:9f:f7:e8:c0:52:ee /etc/ssh/ssh_host_dsa_key.pub
    ec2: -----END SSH HOST KEY FINGERPRINTS-----

    :

  9. sshでログインする
    インスタンスにrootでログインします。-iオプションで、上で作成したキーファイル(~EC2/id_rsa-gsg-keypair)を指定します。
    インスタンスの外向きのホスト名は、ec2-describe-instancesで調べることが出来ます。
    私の場合には、ec2-75-101-227-236.compute-1.amazonaws.comでした。

    % ssh -i ~/EC2/id_rsa-gsg-keypair root@ec2-75-101-227-236.compute-1.amazonaws.com
    The authenticity of host 'ec2-01-234-567-89.compute-1.amazonaws.com (12.345.678.901)' can't be established.
    RSA key fingerprint is
    c5:61:78:38:c5:20:5b:82:37:58:07:ba:ab:eb:75:54.
    Are you sure you want to continue connecting (yes/no)?


    __| __|_ ) Fedora 8

    _| ( / 64-bit
    ___|\___|___|

    Welcome to an EC2 Public Image
    :-)
    Base

    --[ see /etc/ec2/release-notes ]--

    [root@ip-12-345-67-89 ~]#


    これでログイン完了です。ログイン時に出力されるフィンガープリントを、事前にコンソールで確認したフィンガープリントと比較して、man-in-the-middle攻撃にさらされていないことを確認してください。

    以降、一般的なLinuxのコマンドを自由に使うことが出来ます。

    [root@ip-12-345-67-89 ~]# uname -a
    Linux ip-12-345-67-89 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 x86_64 x86_64 GNU/Linux


0 件のコメント: