2011年8月7日日曜日

AMIを別のリージョンに移行する方法

スズキです。

以前も下記のように同じようなこと書いてますが、
"us-west-1"のAMI(EBS)を"ap-southeast-1"に
いろいろ、AWS環境もアップデートされているので、まとめ直しておきます。

(1) 移行元リージョンでの作業

(1-1) "Amazon Linux"を立ち上げログインします。
ログインは"ec2-user"なので注意が必要です。

(1-2) rootにスイッチします。
$ sudo su -

(1-3) 作業用EBSの作成とアタッチします。
15G(適宜必要なサイズに)で作成して"/dev/sdf1"にアタッチします。

(1-4)ファイルシステムを作成してマウントします。
# mkfs.ext4 /dev/xvdf1 
# mount -t ext4 /dev/xvdf1 /mnt/

(1-5) AMIのスナップショットからEBSを作成しアタッチします。
該当するスナップショットから6G(スナップショットのサイズに)で作成して
"/dev/sdf2"にアタッチします。

(1-6) AMIのルートディスクイメージをファイルに出力し、圧縮します。
# dd if=/dev/xvdf2 of=/mnt/suz-lab.img
# bzip2 /mnt/suz-lab.img

(2) 移行先リージョンでの作業

(2-1) "Amazon Linux"を立ち上げログインします。
ログインは"ec2-user"なので注意が必要です。

(2-2) rootにスイッチします。
$ sudo su -

(2-3) 作業用EBSの作成とアタッチします。
15G(適宜必要なサイズに)で作成して"/dev/sdf1"にアタッチします。

(2-4)ファイルシステムを作成してマウントします。
# mkfs.ext4 /dev/xvdf1 
# mount -t ext4 /dev/xvdf1 /mnt/

(3) 移行元リージョンのインスタンスから移行先リージョンの
インスタンスにAMIのルートディクスイメージファイルを転送


(4) 再び移行先リージョンでの作業

(4-1) AMIのルートディスクイメージ用EBSを作成しアタッチします。
6G(ルートディスクイメージのサイズに)で作成して"/dev/sdf2"にアタッチします。

(4-2) 転送されたルートディスクイメージファイルを解凍しEBSへ書き込みます。
# bzip2 -d /mnt/suz-lab.img.bz2
# dd if=/mnt/suz-lab.img of=/dev/xvdf2

(5) ルートディスクイメージのスナップショットをAMIとして登録

require_once("/opt/aws/php/sdk.class.php");

define("AWS_KEY"       , "AAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSS");

$ec2 = new AmazonEC2();
$ec2->set_region(AmazonEC2::REGION_US_E1);
 
$response = $ec2->register_image(array(
    "Name"               => "suz-lab_ebs_centos-core-i386-6.0.1",
    "Architecture"       => "i386",
    "KernelId"           => "aki-805ea7e9",
    "RootDeviceName"     => "/dev/sda1",
    "BlockDeviceMapping" => array(
        array(
            "DeviceName" => "/dev/sda1",
            "Ebs"        => array(
                "SnapshotId" => "snap-078cd466"
            )
        )
    )
));
 
var_dump($response);

どうやって自動化しようかなー?
--------
http://www.suz-lab.com

2 コメント:

匿名 さんのコメント...

いつも参考にさせてもらっています。
細かいですが(4-2)はbzip2 -dかbunzip2ではないですかね。

suz-lab さんのコメント...

ご指摘、ありがとうございます。
その通りです。
修正しておきました。