2008/10/25

Amazon S3 を使ったオンラインストレージ(バックアップ)

これまで、Gmail用のストレージプラグイン(GSpace)を使っていたのですが、どうも最新のFirefoxではうまく動かないようです。

それで、無料のオンラインストレージを探してみたのですが、結論から言うと、どれもこれも帯に短し襷に流しということが判りました。私の要件としては、
  • 最大ストレージ容量が大きい
  • 1ファイルにサイズ制限がないこと(500MB以上)
  • 特定の環境に縛られず、アクセシビリティが高いこと
  • 期間限定保存は×
などがあるのですが、これらを(部分的に満たすものはありますが)同時に満たすオンラインストレージが見当たりません。MegaUploadがそれに近く、一時期それを候補にしていたこともあるのですが、登録しただけで実際には使っていませんでした。月に$10も払えば、どれも大体まともに使えるのですけどね。

そんなこんなで、結局有償になっちゃうのであればおんなじだろということで、Amazon S3 (Simple Storage Service)をオンラインストレージとして使うことにしました。

ツールとしては、Windows用からLinux/UNIX用まで、色々出ているようですが、まずはAmazon AWSのリソースセンターで紹介されているawsを使ってみることにします。

インストールは簡単で、まずは~/.awssecretファイルにAWSのアクセス鍵と秘密鍵を一行づつ書いておきます。
1B5JYHP24PS13GWKFGAG2
2GAPQFG3+1wxc4sj52bFgqc0AQxj21FMkipjfz
次に、awsサイトからawsファイルをダウンロードします。ダウンロードしたファイルを適切なディレクトリに置き、

% perl aws --install

を実行すると、カレントディレクトリ配下(一般ユーザの場合)、もしくは/usr/bin/(rootの場合)にインストールが行われます。私は実行形式は ~/bin/に配置したかったので、~/bin/にawsを置いてインストールしました。

インストールが終了すると、いくつかのコマンド(ec2XXXとかs3XXXという名前になります)が使えるようになります。

次にS3/awsの使い方ですが、
  1. バケットの作成
    S3には、バケットという概念があって、簡単にいうとストレージ領域の区分けのようなもので、トップディレクトリをイメージすると良いかもしれません。
    すなわち、あるファイルXは、バケットAの中にある、といった意配置イメージとなります。

    aws では、

    % s3mkdir バケット名

    でバケットを作成することが出来ます。
    一点注意が必要なのはバケット名がシステム全体でひとつの名前空間を構成しており、ユーザ全体で共有されるということです。既に取られてしまったキーワードは使えません(backupとか一般的な名詞は使えないようです)。

  2. ファイルのput/get
    バケットを作成したら、そこにアイテム(ファイル)をputしたりgetすることが出来ます。

    % s3put BUCKET/ file
    % s3get BUCKET/file


    なお、putに際して、55MBのファイルで約3分、550MBのファイルで約23分でしたから、大体300Kbps出ている勘定になりますが、これは回線速度に拠るところが大きいでしょう。

  3. ファイルの一覧
    s3lsコマンドを使います。
    引数にバケットを指定するとそのバケット内のファイル一覧が、指定をしないと自分の持っているバケットの一覧が得られます。

  4. ファイルのコピー
    s3cpコマンドを使用します。引数の方向が標準的なUNIXとは異なり右から左なので注意してください。

    % s3copy bucket2/ bucket1/xxx
    (bucket1のアイテムxxxをbucket2へコピーする)

    なお、S3内のストレージは重複排除されてカウントされているな気がします(気のせいかもしれません)。

  5. アイテムの削除、バケットの削除
    s3rm、s3rmdirコマンドでアイテム、バケットを削除します。
一連の操作後(600MB程アップロードしました)の課金状況です。$1.02。

2008/10/24

Big Day for Amazon EC2

丁度遊んでいたところで、Amazon EC2のブログに、"Big Day for Amazon EC2: Production, SLA, Windows, and 4 New Capabilities"という記事が載っていました。

  • Amazon EC2 is now in full production. The beta label is gone.
  • There's now an SLA (Service Level Agreement) for EC2.
  • Microsoft Windows is now available in beta form on EC2.
  • Microsoft SQL Server is now available in beta form on EC2.
  • We plan to release an interactive AWS management console.
  • We plan to release new load balancing, automatic scaling, and cloud monitoring services.
ということで、改善点がてんこ盛りのようです。

2008/10/22

Amazon EC2とGoogle App Engine(GAE)の違い

Amazon EC2と、Google App Engine(GAE)の違いを考えてみたところ、(まだあまり整理できていませんが)以下の表のようになりました(赤がProsで、青がConsのつもりです)。

観点 Amazon EC2 Google App Engine
実行環境のバリエーション 豊富(Linux、Windows、OpenSolaris...) で、利用者の馴染んでいる環境を選んで使える Python限定
OSイメージのメンテが必要。単なるバージョンアップから、セキュリティホール対応まできちんと対応する必要がある (今でもかなりの数のイメージが乱立しているが、これからどのように制御して行くのだろう。ユーザ任せ?) 単一実行環境なので、バージョンアップやセキュリティ対策の見通しはよく、メンテナンスコストは集中化できると思われる
OSイメージのコスト OSイメージのコストは掛からない
実行環境の能力 低レベルのサービス(ファイルIOなど)を使える。何でもあり。 高レベルAPIに限られる。自由度低い
仮想化環境の上、OS毎の特性も異なると思われるので、安定化や特に性能面のSLA制御は大変だろうと思われる 挙動のバリエーションが限られるので見通しはよく、安定化させやすい。性能見積もりなども究極的には楽になるはず
実行環境モデル バッチ処理や計算処理など、Webサービス以外にも使える Webサービスに特化
OSが生で見えていて判りやすい分、どうしても単一ノードに特化したサービス実装になりがち。単一ノード以上にスケールアウトさせるには道具立て(Hadoopなど)が必要。 フレームワークに則って作れば(究極的には)スケールしやすい。逆に言うとスケールしやすいものしか作れない
性能についても(有償で課金しているから良いようなものの)制御しづらい 負荷プランニングし易い
移行 他のホスティングサービスからの乗り換えが容易 APをほぼ新規に書き起こすことが前提。 特に、ISV/LAMPなどに依存する場合には、直接的な移行は難しい。
アプリケーション 一般的なISV(Oracleとか)を使える 性質上、一般的なOS上のISVは動作しない
ISVメンテが必要。OSイメージとの組み合わせ爆発が起きないか? メンテナンスは不要


結局のところ、
  • Amazon EC2 はユーザの利便性を気にしている。使ってもらってナンボ。
  • Google App Engineは、システムのシンプルさや既存システムとの整合性・流用性に重点を置いている。ユーザの利便性ははっきり言って二の次、三の次。
となるでしょうか。

もうちょっと言うと(AmazonとGoogleのスタンス、ビジネスモデルの違いを考えれば当たり前ですが)、
  • Amazon EC2は近々の利益を考えている
    端的にはマシンパワーを売るビジネスモデルで、客への訴求性の代償として管理コストを支払っている
  • Google App Engineはそれ自身で利益を上げるつもりが(あまり)ない
    余ったマシンタイムで面白いサービスが出てきて、結果的に広告露出が増えればよいと割り切っていて、マシンパワーを売ろうとは思っていない。なので投資(管理コスト)も少なめで、ユーザ数に比例しない範囲に留めたい。今後出来るという有償サービスも多分おまけのサービスでしょう。
マイクロソフトのクラウドについても、(詳細は見ていませんが、彼らの商売センスから類推して)Amazon EC2と同じモデルのような気がします。

ここで、両陣営の大きな違いになるのが、管理コストの問題じゃないかと思います。EC2は便利で敷居が低く移行しやすい作りですが、それが先々システムの複雑さや見通しの悪さの原因となるような気がしています。うまいこと押さえ込めればいいのですが、この手の話はすぐに増殖するので、行きはよいよい帰りは怖いということになり兼ねません。

また、EC2上で稼動するOS/ISVインスタンス(FedoraやCentOSはともかく、WindowsやOracle)に対して、ベンダーがどのくらいの値札を付けてくるのかも気になります(Windows EC2については未発表のようですが)。ベンダは、立場上あんまり安売りもできない(パッケージが売れなくなっちゃう)けれども、あんまりご無体な値札も付けられないので、何かと引き換えで値引きとか、ぎりぎりのところで色々交渉が行われているものと推測します。駆け引きの結果、EC2の費用構造がどのあたりに落ち着くのかは、大変興味深いところでしょう。

マイクロソフトのスティーブ・バルマーが「皆GAEは良いというけど、実際に使っている人は見たことがない」と言ったそうですが、上のような意味では、Googleとしては「ウチは程々に使ってもらえればいいんだよ」なのかもしれません(まったく見向きもされないのも困るでしょうけど)

何となくの予感として、Amazonモデルは持続的技術、GAEは破壊的技術だというのはGoogleに贔屓し過ぎかな。

2008/10/20

Amazon EC2 (2)

さて、EC2のFedoraインスタンスにログインできるようになったので、httpdを起動してみることにします。
  1. httpdをインストールする
    起動したばかりのインスタンスにはhttpdが入っていないので、yumでインストールする必要があります。


    [root@ip-12-345-67-89 ~]# yum -y install httpd
    Loading "fastestmirror" plugin
    Determining fastest mirrors
                     :
    Installing: apr-util ######################### [2/4]
    Installing: httpd-tools ######################### [3/4]

    Installing: httpd ######################### [4/4]

    Installed: httpd.x86_64 0:2.2.6-3
    Dependency Installed: apr.x86_64 0:1.2.11-2 apr-util.x86_64 0:1.2.10-2.fc8 httpd-tools.x86_64 0:2.2.6-3
    Complete!
    [root@ip-12-345-67-89 ~]#

  2. httpdを起動します。
    [root@ip-12-345-67-89 ~]# /sbin/service httpd start
    Starting httpd: [ OK ]

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

  3. Webページを作成する
    /var/www/html/index.htmlを編集して、Webページを作ってみます。


    [root@ip-12-345-67-89 ~]#
    cat /var/www/html/index.html
    <html>
    <title>EC2 test web page</title>
    <body>
    This is EC2 test web page!!!
    </body>
    </html>
    ここで、外からブラウザでhttp://ec2-01-234-567-89.compute-1.amazonaws.comを参照すると、確かに作ったばかりのページを見ることが出来ます。


  4. インスタンスのシャットダウン
    一通り動作を確認したら、インスタンスをシャットダウンしておきましょう(何もしていなくて無負荷空転状態でも、インスタンスが生きていれば課金されてしまいます)。

    [root@ip-12-345-67-89 ~]# shutdown -h now
    Broadcast message from root (pts/0) (Mon Oct 20 11:12:21 2008):
    The system is going down for system halt NOW!

    あるいは、ec2-terminate-instancesコマンドを使って、外から強制的にインスタンスを停止させることも出来ます。

    EC2の課金は1時間単位です。たとえ1分しか使っていなくても1時間分まるまる課金されます。そのためか判りませんが、インスタンスの停止後も、約1時間はそのままインスタンスがterminate状態で残るようです(最初は、インスタンスの削除が出来ないのではないかとちょっとあせりました)。

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


2008/10/13

「新聞、これからは不要90%」

読売新聞の調査によると「新聞、これからも必要90%」ということらしい。

読売新聞社が15~21日の第61回新聞週間を前に行った全国世論調査(面接方式)によると、情報や知識を得るために、新聞はこれからも必要だと思う人は90%に上った。

しかし、リンク先では面接方式でどういう質問をどうしたのか等々の情報はまったく明らかにされていない。
実は、オレの調査(全国世論調査、面接方式)によると、情報や知識を得るためにはこれからは不要と思う人が90%に上っているのだが、その矛盾はどう解決したら良いのだろう。

2008/10/10

メールから投稿するテスト

携帯メール経由での投稿のテストです

アマゾンで"More Joel on Software"他を購入


More Joel on Software
を買いました。

まあ、一部はWebサイトでも読んだけれども、前著も買ったし折角なので。



そういえば、ノーベル賞を受賞した下村さんの息子さんは、あの下村務さんだそうです。下村務といえば「カッコウはコンピュータに卵を産む」だよな(と思ったらそれは別の人の話でした。混乱してる...)、あの頃はああいうシステムハッキングの話ってスリリングだったなあと感慨深くなりました。また読みたい。

と、スリリングで思い出したのが「闘うプログラマ」。WindowsNTの開発物語なのですが、今同じような境遇の仕事をしているので(レベルはデビッド・カトラーより随分下がるとは思いますが)、こちらもまた読みたくなりました(が、残念ながら絶版のようです)。

2008/10/05

秋月でYMZ294の販売が再開していた

秋月でYMZ294の販売が再開しているようです。
2、3個買っておこうかどうか思案中。