プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Amazon EC2からS3にバックアップする為のS3Sync

 Amazon EC2のインスタンスをAMI化(イメージ化)して、Amazon S3にバックアップする為のツールはデフォルトで備えられています。でも、特定のディスクやディレクトリだけをS3に保存するツールは、不思議とありません。もちろんS3向けに通信コマンドを発行すれば保存出来るのですが、それはそれで面倒くさいです。
 そんな時に便利なのが、S3SyncというRubyのモジュールです。名前の通りのSyncコマンドの他に、幾つかのコマンドが使えます。

S3Syncのインストール

$http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
$tar zxvf s3sync.tar.gz
#cp -pr s3sync/ /usr/local/
#mkdir /etc/s3conf
#cd /etc/s3conf
#vi s3config.yml
aws_access_key_id: hogehoge
aws_secret_access_key: hogehoge

MacにS3Syncのインストール

brewで一発です。

$ brew install s3sync


アクセスキーとシークレット・アクセスキーは、exportコマンドで都度設定でも問題ありません。
その場合は、下記のような感じです。

$ export AWS_ACCESS_KEY_ID='hogehoge'
$ export AWS_SECRET_ACCESS_KEY='hogehoge'


使い方はシンプルです。

  • rで再帰的に、--deleteで同期元にファイルが無かった場合に同期先のファイルを消す設定です。


Amazon S3に同期

ruby /usr/local/s3sync/s3sync.rb -r --delete /path/to/data bucketname:data/


Amazon S3から同期

ruby /usr/local/s3sync/s3sync.rb -r --delete bucketname:data/ /path/to/data


 実行すると、下記のようなエラーが出ることがあると思います。

Permanent redirect received. Try setting AWS_CALLING_FORMAT to SUBDOMAIN
S3 ERROR: #


デフォルトであるus-west以外は、下記の設定が必要になります。うーん微妙。

export AWS_CALLING_FORMAT="SUBDOMAIN"


 応用範囲はかなりあるので、是非活用してください。


ec2-bundle-volコマンドのトラブルシューティング

 久しぶりにAmazon EC2を使いたくなって、最新のAMIからインスタンスを立ち上げました。AMIは、RightScaleのrightscale-us-east/CentOS_5.4_i386_v5.2.0_Alpha.manifest.xmlです。幾つかの必要なアプリケーションをインストール完了した状態で、イメージを固めてS3に保存しようとec2-bundle-volコマンドをたたいた所、下記のようなエラーが出ました。

/home/ec2/lib/ec2/amitools/crypto.rb:13:in `require': no such file to load -- openssl (LoadError)
from /home/ec2/lib/ec2/amitools/crypto.rb:13
from /home/ec2/lib/ec2/amitools/manifestv20071010.rb:11:in `require'
from /home/ec2/lib/ec2/amitools/manifestv20071010.rb:11
from /home/ec2/lib/ec2/amitools/bundle.rb:13:in `require'
from /home/ec2/lib/ec2/amitools/bundle.rb:13
from /home/ec2/lib/ec2/amitools/bundlevol.rb:11:in `require'
from /home/ec2/lib/ec2/amitools/bundlevol.rb:11


 心当たりはありありです。RPMのrubyのモジュールが古かったので、ソースから落として自前でコンパイルしました。その時、opensslのコンフィグとか入れていなかったのが原因でしょう。ということで、さっくりとモジュールの追加。
まずは、openssl関係が入っているか?

# yum list installed | grep openssl
openssl.i386                          0.9.8e-12.el5                    installed

opensslは入っているようですが、openssl-develはないようです。

# yum install openssl-devel


インストール後に、rubyのソースディレクトリへ移動してconfigu&make

# cd /root/src/ruby-1.8.7-p174/ext/openssl/
# ruby extconf.rb
# make
# make install


その後、ec2-bundle-volは動くようになりました。


関連:Amazon EC2インスタンスの保存
Amazon EC2/S3の使い方目次

Amazon Elastic MapReduceきたー!!

 昨日、酔っ払って家に帰ったらメールボックスに下記のようなメールが来ていました。

Announcing Amazon Elastic MapReduce

Dear AWS Customer,

We are excited today to introduce the public beta of Amazon Elastic MapReduce, a web service that enables businesses, researchers, data analysts, and developers to easily and cost-effectively process vast amounts of data. It utilizes a hosted Hadoop framework running on the web-scale infrastructure of Amazon Elastic Compute Cloud (Amazon EC2) and Amazon Simple Storage Service (Amazon S3).

 Amazon版のMapReduceです。当然、Hadoopで実装されているようです。これは、凄い。週末に触ってみます。大量に集めたデータをまとめて処理する方法を考えていたので、ありがたいです。


以下、ぱっと目についたリンクです。
moratoriumさんの記事が秀逸です。
Amazon Elastic MapReduce
moratorium:Amazon Elastic MapReduceを使ってみた
TechCrunch:Amazon、クラウド・コンピューティングで大規模並列分散処理エンジンHadoopをサポート
RX-7乗りの適当な日々:Amazon EC2でHadoopが簡単に利用できる「Amazon Elastic MapReduce」が登場
@IT:アマゾン、ウィザードだけで使えるHadoopサービス開始

Amazon EC2/S3の使い方目次

Amazon EC2/S3関係の記事が二つ

 立て続けにAmazon EC2/S3関係の記事がアップされていたのでご紹介です。
日本でも、もうすぐ転回点を迎えそうですね。


転回点を迎えたAmazonのクラウド

 Web 2.0の特徴とされる「永遠のベータ」。その典型的サービスの1つと見られていたアマゾンのクラウドサービス「Amazon Web Services」(以下、AWS)が2008年10月23日、ついにベータの冠を取って正式サービスとなった。同時に99.95%のアップタイムを保証するSLA(サービス品質保証契約)の提供も開始した。

アナリスト的な視点から、Amazon EC2の解説がしてあります。そろそろ、普通のIT企業の管理職くらいにも耳に届くようになりそうですね。


AWSの概要と登録手順 〜Amazon EC2/S3環境構築のすべて〜

 近頃、“クラウドコンピューティング”と呼ばれる、インターネット(クラウド)の向こう側でアプリケーションサービスや、サーバなどのハードウェアリソースを提供するサービスが急増しています。
 ユーザーはインターネットにさえ接続できれば各種サービスを利用でき、そのサービスがどこで動いているかなど、サービスインフラを意識する必要がありません(図1)。そして、それらのサービスは無料、もしくは利用した分だけ課金される形態となっており、利用にあたり多くの初期投資を必要としません。

 EC2関係で早くから色々エントリーなエントリーを書いているid:rx7さんの連載。使い方について、丁寧に説明してくれています。

エンタープライズ分野に本気で殴り込み Amazon EC2でOracle

 寝る前にメールをチェックしたら、Amazon EC2でかなり野心的な機能がリリースされていました。Amazon EC2でOracleが使えるようになるらしいです。使えるというのは、単にインストール出来るという意味ではなく、既存のOracleライセンスをEC2に持っていくことが可能のようです。
 今回の発表は、Amazonが本気でエンタープライズ分野を取りにいくことの意思表示ではないでしょうか?

Oracle Database

Oracle has officially certified Amazon EC2 as a supported platform on which to run their software. In addition, AWS has worked with Oracle to enable existing Oracle Database licenses to be transferred to Amazon EC2 and Amazon EBS. This means that for no additional cost, you can use an existing Oracle license to run your database in AWS, saving yourself the cost and effort of managing your own infrastructure while keeping the same database software you are already running. Oracle has also enabled Amazon S3 as one of the default backup locations for their RMAN service, making it easy for you to protect your data. Check out more details about running Oracle in Amazon EC2, along with some easy-to-use tools that can help you get started.

詳しくはこちら
Oracle and AWS


でも、私はMySQL使うけどね w

Amazon Elastic Block Store (EBS)上に、Subversionのリポジトリを置く

 週末プログラマに朗報 Amazon Elastic Block Store(EBS)で書きましたが、EBSは私のように週末プログラマにはかなり嬉しい存在です。基本、開発環境等はローカルの端末に入れているのですが、色々な端末を使うのでソースの管理はやはりSubversion等のソース管理サーバに置きたいです。また、自宅や外出先その他色々な所から使うのでHTTP経由で使いたいところなのですが、その為の公開サーバをどうしようかなというのが悩みの種でした。
 自宅サーバ設定して使っていたという時期もあったのですが、はっきり言って年中サーバが起動するのはうるさいです。レンタルサーバという手もあるのですが、SVNの為だけもなぁというのが正直な感想でした。AmazonのEC2で必要な時だけ起動するというのが有力解かなと思っていたのですが、バックアップされる対象の領域は非常に小さいです。となると、S3にバックアップ&リストアする仕組みを作るのが正解なんでしょうが、ちょっと面倒くさいと思っていました。
 そこにEBSが出て来たので、これだと思いました。MySQLやSubversionのデータ領域は全てEBSにおいて、EC2はエンジン部分などの実体を置くようにします。で、必要な時だけEC2を立ち上げてEBSをマウント。コマンドを登録しておけば、手間はほとんど掛かりません。


 ということで、Subversionの設定です。EBSの設定さえしてあれば、通常のインストールとなんら変わりありません。その辺りは、Amazon Elastic Block Store (EBS)を使ってみたをご参照ください。


以下、インストールのログです。


Subversionのインストール。

# yum list subversion
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * fedora: mirror.cogentco.com
 * updates: mirror.cogentco.com
Available Packages
subversion.i386                          1.4.4-7                fedora          
[root@domU-12-31-39-00-85-B7 mount_vol]# yum list svn       
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * fedora: mirror.cogentco.com
 * updates: mirror.cogentco.com
Error: No matching Packages to list
[root@domU-12-31-39-00-85-B7 mount_vol]# yum install subversion.i386
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * fedora: mirror.cogentco.com
 * updates: mirror.cogentco.com
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package subversion.i386 0:1.4.4-7 set to be updated
--> Processing Dependency: libapr-1.so.0 for package: subversion
--> Processing Dependency: libaprutil-1.so.0 for package: subversion
--> Processing Dependency: perl(URI) >= 1.17 for package: subversion
--> Processing Dependency: libneon.so.27 for package: subversion
--> Running transaction check
---> Package neon.i386 0:0.27.2-2 set to be updated
---> Package apr-util.i386 0:1.2.10-2.fc8 set to be updated
---> Package apr.i386 0:1.2.11-2 set to be updated
---> Package perl-URI.noarch 0:1.35-3.1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Installing:
 subversion              i386       1.4.4-7          fedora            2.3 M
Installing for dependencies:
 apr                     i386       1.2.11-2         fedora            126 k
 apr-util                i386       1.2.10-2.fc8     fedora             74 k
 neon                    i386       0.27.2-2         fedora            109 k
 perl-URI                noarch     1.35-3.1         fedora            116 k

Transaction Summary
=============================================================================
Install      5 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 2.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/5): perl-URI-1.35-3.1. 100% |=========================| 116 kB    00:00     
(2/5): apr-1.2.11-2.i386. 100% |=========================| 126 kB    00:00     
(3/5): apr-util-1.2.10-2. 100% |=========================|  74 kB    00:00     
(4/5): subversion-1.4.4-7 100% |=========================| 2.3 MB    00:00     
(5/5): neon-0.27.2-2.i386 100% |=========================| 109 kB    00:00     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: apr                          ######################### [1/5] 
  Installing: apr-util                     ######################### [2/5] 
  Installing: neon                         ######################### [3/5] 
  Installing: perl-URI                     ######################### [4/5] 
  Installing: subversion                   ######################### [5/5] 

Installed: subversion.i386 0:1.4.4-7
Dependency Installed: apr.i386 0:1.2.11-2 apr-util.i386 0:1.2.10-2.fc8 neon.i386 0:0.27.2-2 perl-URI.noarch 0:1.35-3.1
Complete!
[root@domU-12-31-39-00-85-B7 mount_vol]# svn --version
svn, version 1.4.4 (r25188)
   compiled Sep  2 2007, 14:30:15

Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme

Subversionと連携するために、Apacheもインストール。

# yum list httpd 
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * fedora: mirror.cogentco.com
 * updates: mirror.cogentco.com
Available Packages
httpd.i386                               2.2.9-1.fc8            updates         
[root@domU-12-31-39-00-85-B7 mount_vol]# yum install httpd.i386
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * fedora: mirror.cogentco.com
 * updates: mirror.cogentco.com
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package httpd.i386 0:2.2.9-1.fc8 set to be updated
--> Processing Dependency: httpd-tools = 2.2.9-1.fc8 for package: httpd
--> Running transaction check
---> Package httpd-tools.i386 0:2.2.9-1.fc8 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Installing:
 httpd                   i386       2.2.9-1.fc8      updates           969 k
Installing for dependencies:
 httpd-tools             i386       2.2.9-1.fc8      updates            68 k

Transaction Summary
=============================================================================
Install      2 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 1.0 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): httpd-tools-2.2.9- 100% |=========================|  68 kB    00:00     
(2/2): httpd-2.2.9-1.fc8. 100% |=========================| 969 kB    00:00     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: httpd-tools                  ######################### [1/2] 
  Installing: httpd                        ######################### [2/2] 

Installed: httpd.i386 0:2.2.9-1.fc8
Dependency Installed: httpd-tools.i386 0:2.2.9-1.fc8
Complete!
# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
# /etc/init.d/httpd stop 
Stopping httpd:                                            [  OK  ]


さらにapacheとsubversionの連携用に、mod_dav_svnもインストール

# yum install mod_dav_svn
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * fedora: mirror.cogentco.com
 * updates: mirror.cogentco.com
fedora                    100% |=========================| 2.1 kB    00:00     
updates                   100% |=========================| 2.3 kB    00:00     
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package mod_dav_svn.i386 0:1.4.4-7 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Installing:
 mod_dav_svn             i386       1.4.4-7          fedora             71 k

Transaction Summary
=============================================================================
Install      1 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 71 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): mod_dav_svn-1.4.4- 100% |=========================|  71 kB    00:00     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: mod_dav_svn                  ######################### [1/1] 

Installed: mod_dav_svn.i386 0:1.4.4-7
Complete!

リポジトリの作成と、サンプルプロジェクト(keywords)のインポート

# svnadmin create /vol/svn --fs-type fsfs
# ll /vol/svn/
total 28
-rw-r--r-- 1 root root  229 Sep  7 02:04 README.txt
drwxr-xr-x 2 root root 4096 Sep  7 02:04 conf
drwxr-xr-x 2 root root 4096 Sep  7 02:04 dav
drwxr-sr-x 5 root root 4096 Sep  7 02:04 db
-r--r--r-- 1 root root    2 Sep  7 02:04 format
drwxr-xr-x 2 root root 4096 Sep  7 02:04 hooks
drwxr-xr-x 2 root root 4096 Sep  7 02:04 locks
# mkdir keywords
# cd keywords/
# mkdir branches
# mkdir tags
# mkdir trunk
# svn import keywords/ file:///vol/svn/keywords -m "first import."
Adding         keywords/trunk
Adding         keywords/branches
Adding         keywords/tags


一通りの設定が終われば、インスタンスをS3に保存します。これで次回からは、インスタンスを起動するだけで大丈夫です。方法は、以下のリンクの通りです。
Amazon EC2インスタンスの保存

長くなったので、Apache経由のSubversionのアクセスの設定はまた次回に書きます。

Amazon Elastic Block Store (EBS)を使ってみた

 ちょっと時間が空いたので、Amazon Elastic Block Store (EBS)を使ってみました。EC2に慣れていたら簡単な操作で扱えます。


まず、稼働中のインスタンスのロケーションを確認します。

$ ec2-describe-instances i-3d3f9b54
RESERVATION	r-a613c5cf	021010746129	default
INSTANCE	i-3d3f9b54	ami-f3fc189a	ec2-75-101-243-186.compute-1.amazonaws.com	domU-12-31-39-00-85-B7.compute-1.internal	running	gsg-keypair2	m1.small	2008-09-04T14:13:11+0000	us-east-1b	aki-a71cf9ce	ari-a51cf9cc

us-east-1bで動いている模様。


ボリュームの作成。下記の例は、ロケーションをus-east-1bに指定して、5GBの領域を作成しています。

$ec2-create-volume -z us-east-1b -s 5
VOLUME	vol-262bce4f	5		us-east-1b	creating	2008-09-04T14:17:13+0000


ボリュームをインスタンスにアタッチします。ボリューム名が解らなければ、ec2-describe-volumesで確認できます。

$ ec2-attach-volume -d /dev/sdc -i i-3d3f9b54 vol-262bce4f
ATTACHMENT	vol-262bce4f	i-3d3f9b54	/dev/sdc	attaching	2008-09-04T14:18:43+0000

$ ec2-describe-volumes 
VOLUME	vol-262bce4f	5		us-east-1b	in-use	2008-09-04T14:17:13+0000
ATTACHMENT	vol-262bce4f	i-3d3f9b54	/dev/sdc	attached	2008-09-04T14:18:43+0000


インスタンスにログインして、デバイスとして認識しているか確認します。

$ ssh -i gsg-keypair root@ec2-75-101-243-186.compute-1.amazonaws.com
# ll /dev/sd*
brw-r----- 1 root disk 8,  1 Sep  4 10:14 /dev/sda1
brw-r----- 1 root disk 8,  2 Sep  4 10:13 /dev/sda2
brw-r----- 1 root disk 8,  3 Sep  4 10:13 /dev/sda3
brw-r----- 1 root disk 8, 32 Sep  4 10:18 /dev/sdc


ボリュームにファイルシステムを作ります。フォーマットはお好みで。

# mkfs -t ext3 /dev/sdc 
mke2fs 1.40.4 (31-Dec-2007)
/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
655360 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

成功!!


マウントしてみます。

# mkdir /vol
# mount /dev/sdc /vol
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  1.1G  8.3G  12% /
/dev/sda2             147G  188M  140G   1% /mnt
none                  854M     0  854M   0% /dev/shm
/dev/sdc              5.0G  139M  4.6G   3% /vol


後は、普通に使えます。念のため、作成したボリュームの削除の仕方も。
アンマウントして、ログアウトします。

#umount /vol
#exit


ボリューム名を確認して、デタッチします。その後に、削除。

$ ec2-describe-volumes 
VOLUME	vol-262bce4f	5		us-east-1b	in-use	2008-09-04T14:17:13+0000
ATTACHMENT	vol-262bce4f	i-7d3a9e14	/dev/sdc	attached	2008-09-04T15:04:42+0000

$ ec2-detach-volume vol-262bce4f
ATTACHMENT	vol-262bce4f	i-7d3a9e14	/dev/sdc	detaching	2008-09-04T15:04:42+0000

$ ec2-delete-volume vol-262bce4f
VOLUME	vol-262bce4f


$ ec2-describe-volumes 
VOLUME	vol-262bce4f	5		us-east-1b	deleting	2008-09-04T14:17:13+0000


次は、この上にアプリを置いてみようと思います。