EBSタイプのインスタンスを他リージョンへ移行する手順

記事タイトルとURLをコピーする

みなさんこんにちは!インフラエンジニアの柳瀬です。 毎日暑いので、データセンターに行くのも嫌になってしまいますね。
あ、すいません。データセンターに行くのは暑くなくても嫌でした。インフラエンジニア失格ですね(笑) さて、『全てのサーバーをクラウドに移行する事が出来たら、データセンターに行く事もなくなる!』と夢見ておりますが、シンガポールにあるAWSのデータセンターがオープンして3カ月程度たちました。 先日、US WestにあるEBSタイプインスタンスをAsia Pacificに移行したという事もあり、今回のエントリーではEBSタイプのインスタンスを他のリージョンへ移行する手順について書きたいと思います。 必要な前提条件は以下の通りです

  • 移行するインスタンスにはec2-api-toolsがインストールされている事
  • 移行するインスタンスにはec2-ami-toolsがインストールされている事
  • 移行するインスタンスにはec2-metadataがインストールされている事
  • 今回はUS WestからAsia Pacificへの移動する

移行手順の概要は以下の通りです

  • EBSタイプのインスタンス上でイメージファイルを作成してAsia PacificのS3バケットにアップロード
  • Asia Pacificデータセンターで起動出来るインスタンスストアタイプのAMIを作成して起動
  • インスタンスストアタイプのインスタンスからEBSタイプのAMIを作成

※ec2-api-toolsとec2-ami-toolsのインストールは割愛してあります

準備

ec2-metadataのインストール

# wget http://s3.amazonaws.com/ec2metadata/ec2-metadata
# chmod 755 ec2-metadata
# mv ec2-metadata /usr/bin/ 

fstabの状態を確認

# vi /etc/fstab
/dev/sda1  /         ext3    defaults        1 1
/dev/sda3  swap      swap    defaults        0 0
/dev/sdc   /mnt      ext3    defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0

イメージファイルを作成しAsia PacificのS3へアップ

ec2-bundle-volを実行してインスタンスのイメージファイルを作成

# ec2-bundle-vol -k 秘密鍵 -c X.509証明書 -u アカウントナンバー

Asia-PacificのS3バケットを作成後、S3へイメージファイルをアップロード

# ec2-upload-bundle -b 作成したS3バケット名/ -m image.manifest.xml -a アクセスキーID -s シークレットアクセスキー

S3のイメージファイルからinstance-storeタイプのAMIを作成し、起動

S3へアップロードしたイメージファイルからAMIを登録する

$ ec2-register 作成したS3バケット名/image.manifest.xml --url https://ec2.ap-southeast-1.amazonaws.com

作成したAMIからインスタンスを起動します(AWS Management Consoleからでも実行出来ます)

$ ec2-run-instances AMI-ID -k 起動する秘密鍵 --group セキュリティグループ --url https://ec2.ap-southeast-1.amazonaws.com

起動したインスタンスからイメージを作成してEBSに展開、設定変更

起動したインスタンスへログイン後、ec2-bundle-volを実行してインスタンスのイメージファイルを作成

# cd /mnt
# ec2-bundle-vol -d /mnt -k 秘密鍵 -c X.509証明書 -u アカウントナンバー

バンドルボリュームを一つのファイルにまとめる

# ec2-unbundle -k 秘密鍵 -m /mnt/image.manifest.xml -s /mnt/ -d /mnt/
Unbundle complete.

# ls -l /mnt | head -3
合計 2194968
-rw-r--r-- 1 root root 10737418240  8月 16 16:26 image
-rw-r--r-- 1 root root        9406  8月 16 16:35 image.manifest.xml

EC2インスタンスのゾーンを取得する。

# ec2-metadata -z
placement: ap-southeast-1a

ブートイメージ格納用のEBSボリュームを作成する(EBSボリュームIDをメモ)

# ec2-create-volume --size 10 --availability-zone ap-southeast-1a

作成したEBSボリュームをアタッチする

# ec2-attach-volume EBSボリュームID --instance インスタンスID --device /dev/sdh

イメージをEBSボリュームに戻す

# dd if=/mnt/image of=/dev/sdh
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 1254.23 seconds, 8.6 MB/s

EBSボリュームをマウントする

# mkdir /mnt/ebs
# mount /dev/sdh /mnt/ebs
# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
/dev/sdc              147G  2.3G  138G   2% /mnt
none                  851M     0  851M   0% /dev/shm
/dev/sdh              9.9G  1.7G  7.7G  18% /mnt/ebs

fstabを編集し、ローカルストレージの設定を削除する

# mv /mnt/ebs/etc/fstab /mnt/ebs/etc/fstab.bak
# cat /mnt/ebs/etc/fstab.bak | grep -v mnt > /mnt/ebs/etc/fstab
# cat /mnt/ebs/etc/fstab
/dev/sda1  /         ext3    defaults        1 1
/dev/sda3  swap      swap    defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0

EBSボリュームをアンマウントする

# umount /mnt/ebs
# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
/dev/sdc              147G  2.3G  138G   2% /mnt
none                  851M     0  851M   0% /dev/shm

スナップショットを取得してAMIを作成

EBSボリュームのスナップショットを取得する(スナップショットのIDをメモ)

# ec2-create-snapshot EBSボリュームID --description hogehoge

カーネルIDを取得(カーネルIDをメモ)

# ec2-metadata -k
kernel-id: not available

RAMディスクIDを取得(RAMディスクIDをメモ)

# ec2-metadata -r
ramdisk-id: not available

スナップショットからAMIを登録する

# ec2-register --snapshot スナップショットのID
--description="hogehoge"
--architecture i386
--root-device-name /dev/sda1

EBSタイプのインスタンスを起動、各種設定

EC2インスタンスを起動する

# ec2-run-instances AMIのID
--kernel カーネルID
--ramdisk RAMディスクID
--block-device-mapping /dev/sdc=ephemeral0
--availability-zone ap-southeast-1a
--group セキュリティグループ
--instance-initiated-shutdown-behavior stop
--key 秘密鍵
-t m1.small

インスタンス起動後にローカルストレージのマウントとfstabの編集

# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
none                  851M     0  851M   0% /dev/shm

# fdisk -l
Disk /dev/sdc: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
ディスク /dev/sdc は正常な領域テーブルを含んでいません

# mount /dev/sdc /mnt

# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
none                  851M     0  851M   0% /dev/shm
/dev/sdc              147G  188M  140G   1% /mnt

# vi /etc/fstab
      1 /dev/sda1  /         ext3    defaults        1 1
      2 /dev/sda3  swap      swap    defaults        0 0
      3 /dev/sdc   /mnt      ext3    defaults        0 0
      4 none       /dev/pts  devpts  gid=5,mode=620  0 0
      5 none       /dev/shm  tmpfs   defaults        0 0
      6 none       /proc     proc    defaults        0 0
      7 none       /sys      sysfs   defaults        0 0

おわり

もう少し簡単なやり方があるかもしれません。
環境によってはfstabの設定などで手順が変わる場合があるかもしれませんが、ひとまず移行出来たので一安心です。

参考にさせて頂いたサイト

今回のエントリではこちらのサイトを参考にさせて頂きました。
ありがとうございましたー! http://cloudbb.jp/research1/ConvertEBS-bootedAMI.htm