nkjmkzk.net

powered by Kazuki Nakajima

Archive for the ‘ebs’ tag

EC2でEBSベースのAMIをRegion間移行する方法

EC2をしばらく使っていると、クラウドといえどRegionというのはかなりハードなパーティションであることがわかります。あるRegionで作成したSnapshot, Volume, AMI, InstanceはそのRegionでしか利用することができませんし、Region間通信にPrivateセグメントは利用できません。

S3ベースのAMIに関してはRegion間移行するためのAPIが用意されているのですが、EBSベースのAMIについてはRegion間移行を行う手段は提供されていません。つまり、例えばUS Eastで作成したAMIをAP North Eastでも使えるようにしたい場合にそれを簡単に実現するためのツールがないということです。Amazonさんの勢いからするとその内ec2-migrate-imageがEBSもサポートしそうな気もしないでもないのですが、まさに今時点でこのEBSベースのAMIをRegion間移行を手動で行う方法を見ていきたいと思います。

*AWS Management Consoleで行える作業でについては詳細な画面操作は割愛します。

移行先Regionでの作業

  • まず移行元AMIのEBSボリュームと同じサイズでボリュームを作成します。
  • なんでもいいのでLinuxインスタンスをLaunchします。ここではAmazon Linux AMI 64bitを使うこととします。
  • 先ほど作成した空のEBSボリュームをインスタンスにattachします。ここでは/dev/sdfとしてattachすることとします。
  • インスタンスにログインし、ec2-userのパスワードを設定します。
  • あと、セキュリティグループでこのインスタンスに対してSSH接続ができるように設定しておきます。

 

移行元Regionでの作業

  • 移行したいAMIのEBSボリュームのSnapshotを作成します。
  • このSnapshotからボリュームを作成します。
  • なんでもいいのでLinuxインスタンスをLaunchします。ここではAmazon Linux AMI 64bitを使うこととします。
  • このインスタンスに先程作成したボリュームをattachします。ここでは/dev/sdfとしてattachすることとします。
  • インスタンスにログインし、下記のddコマンドで/dev/sdfの情報を吸い上げながらそれをSSH経由で移行先インスタンスに送信して同じくddで書き出します。EBSボリュームのサイズにもよりますがそれなりに時間がかかります。僕が実施したときの実績では転送スピードは1.4MB/sくらいでしたのでそれを目安に計算してください。なお、screenで作業する等して、もしセッションが切れても泣かないようにしてのぞみましょう。
[ec2-user@sender]$ sudo dd if=/dev/sdf | ssh [移行先RegionのインスタンスのIP] sudo dd of=/dev/sdf

 

再び移行先Regionでの作業

  • インスタンスを停止します。
  • EBSボリュームをインスタンスからdetachします。
  • EBSボリュームのSnapshotを作成します。
  • ec2-registerコマンドで、作成したSnapshotからAMIを登録・作成します。このとき、–kernelパラメータや–ramdiskパラメータに注意してください。これらのオプションに渡す値はRegionで異なります。これはkernelイメージやramdiskイメージもRegion毎に管理されているため、別Regionのイメージを指定することはできないからです。僕はUser Provided Kernelを使用するため、今回の移行先Region (AP North East)でそれに応じたAKIとなるaki-d409a2d5を指定しました。
[nkjm@mac]$ ec2-register -n 'Oracle Linux 5.6 64bit customized by nkjm' -d 'Oracle Linux optimized for Grid Infrastructure and Oracle Database' --root-device-name /dev/sda1 -b /dev/sda1=snap-215ef049 -a x86_64 --kernel aki-d409a2d5

これでAMIの移行は完了です。

without comments

Written by 中嶋 一樹

3月 20th, 2011 at 10:18 pm

Posted in Uncategorized

Tagged with , ,

EC2においてEBS Snapshotでバックアップを取得しそれをリカバリする方法

EC2のインスタンスにはS3(Simple Storage Service)をルートデバイスにするタイプと、EBS(Elastic Block Storage)をルートデバイスにする2種類が存在します。S3の方はインスタンスを止めると消滅してしまい、EBSの方はインスタンスを止めても維持されます。

今回はEBSをルートデバイスとするインスタンスで、EBS Snapshotを使ってインスタンスをごっそりバックアップし、それをリカバリする手順をみていきます。AWS Management Console (Web UI) から実施できる作業もあるのですが、今回はすべてコマンドラインで攻めてみます。

*コマンドライン環境をセットアップしていない方はこちらを。
AWS EC2のコマンドラインインターフェースを使う準備

まずはSnapshotの作成からです。インスタンスに割り当てられているEBSのSnapshotを作成します。Snapshotはインスタンス起動中でも作成できますが、クリーンな状態でとりたい場合はインスタンスを停止してから作成するのが確実です。

[nkjm@mac]$ ec2-create-snapshot -d '2011_03_15 of nkjmkzk.net' vol-42aaf52a
* -d: 作成されるスナップショットの説明
* vol-42aaf52a: EBSのVolume ID(ec2-describe-instancesで確認)

次に今作成したSnapshotからAMIを作成します。AMI自体はインスタンスではなく、インスタンスを作るためのテンプレートのようなものです。

[nkjm@mac]$ ec2-register -n nkjmkzk.net-template -d 'template of nkjmkzk.net' --root-device-name /dev/sda1 -b /dev/sda1=snap-be86f0d2 -a x86_64 --kernel aki-23d43a4a --ramdisk ari-25d43a4c
* -n: 作成されるAMIの名前
* -d: 作成されるAMIの説明
* --root-device-name: インスタンスからみたルートデバイス
* -b: ルートデバイスとそれに対応するSnapshotのID(ec2-describe-snapshotsで確認)
* -a: アーキテクチャ
* --ramdisk: ramdiskのID(元のインスタンスで確認)
* --kernel: kernelのID(元のインスタンスで確認)

次に今作成したAMIからインスタンスを作成&起動します。

[nkjm@mac]$ ec2-run-instances ami-fe39cb97 -t t1.micro -k nkjmkey --ramdisk ari-24d43a4c --kernel aki-23d43a4a
* ami-fe39cb97: AMIのID(ec2-describe-imagesで確認)
* -t: インスタンスタイプ
* -k: keypair

そしてElastic IPを今作成したインスタンスに紐付けます。

[nkjm@mac]$ ec2-associate-address 50.17.222.51 -i i-f0ce229f
* 50.17.222.51: 発行済みのElastic IP
* -i: 紐づけるインスタンスのID(ec2-describe-instancesで確認)

これでリカバリ完了です。

参考

with one comment

Written by 中嶋 一樹

3月 15th, 2011 at 5:21 pm

Posted in Uncategorized

Tagged with , ,