2010年5月10日月曜日

[TechMemo] 第10回 Amazon EC2 USリージョンからAPリージョンへの移行

相当ブランクが空いてしまったのでAmazonから提供されているサービスで私が利用しているのにご紹介してないサービスがいくつもあるのですが。。

先月末に待望のアジア圏でのAWSが開始しましたので、久しぶりにAmazonEC2ネタで記事を書きました。
US East(Virginia) リージョンに作成されているEC2サイトを Asia Pacific(Singapore) リージョンに移行する方法を簡単に説明します。

USのサイトに作成していたシェルがそのまま動くと思いきやそんなことはなかったので、少々ハマりました。(笑)
ハマった経験を皆様にお知らせして少しでもお役に立てばうれしく思います。

今回の内容サマリ
1)移行するEC2環境の構成について
2)AMIのリージョン間コピー/APリージョンでAMIの登録

*** 以下、二つの手順は次回に説明します ***

3)Amazon EBS(Elastic Block Store)データの移行
4)移行後のシェルの修正
5)インスタンス再起動

移行するEC2環境の構成について


Region:US East
OS:Linux
Root Device Type: instance-store(停止時にルートのイメージが消えるタイプ)
Database:Oracle 10g Express Edition
※データベースはAmazonEBSボリュームに配置
固定IP(ElasticIP)利用



上記の構成でrcにはEC2 Command Line Toolsコマンドを実行する以下のシェルを登録しています。
※このシェルがのちにハマった原因です。

1)固定IPアドレスの振り直し
※EC2インスタンスは起動時に動的にIPが割り振られる仕組みなのでIPが割り振られた後に購入している固定IPをマップするコマンドを実行する必要があります。
2)Amazon EBSのアタッチとmount
3)Oracle NetとOracle Databaseの起動

AMIのリージョン間コピー/APリージョンでAMIの登録


AWSはそれぞれのリージョンは独立したインフラ環境になっています。
したがって例えばUS Eastリージョンで作成したAMI(AmazonMachineImage)をAPリージョンで使用するには既存のAMIを予め新しいリージョンに転送してあげる必要があります。

◆Amazonが提供しているリージョン
US East(Virginia)
US West(California)
EU West(Ireland)
Asia Pacific(Singapore) ※今回新規に始まったリージョン

私がテストサイトとして使用しているのはUS Eastでしたのでそこに作成したAMIをEC2 Command Line Toolsのコマンドを使ってAPリージョンにコピーします。

※古いAPIにはAPリージョンに対応したコマンドがなかったので最新版をダウンロードして設定。
以前はec2-migrate-bundle というコマンドでコピーを作りましたが ec2-migrate-image に変わっています。

**** EC2 API Toolsの更新 ****
more .ec2env
export JAVA_HOME=/usr/local/java
export EC2_HOME=/usr/share/ec2/ec2-api-tools
export PATH=$PATH:$EC2_HOME/bin:$JAVA_HOME/bin
export EC2_PRIVATE_KEY=/root/.ec2/pk-xxxxxxxxxxxx.pem
export EC2_CERT=/root/.ec2/cert-xxxxxxxxxxxx.pem

cd tmp
wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
unzip ec2-api-tools.zip
cd /usr/share/ec2
ln -s /root/tmp/ec2-api-tools-1.3-51254 ec2-api-tools
*****************************

◆AMIコピーの作成

US EastのS3バケットに保管されているAMIをAP South EastのS3バケットにコピーします。
このコピーには非常に時間がかかりました。
全体で約1.4GBのイメージを10MBに分割されたファイルで転送していますが完了するのに約2時間10分もかかりました。

ec2-migrate-imageの実行例

# ec2-migrate-image -K pk-xxxxxxxxx.pem -C cert-xxxxxxxxxx.pem -o AccessKeyID -w SecretAccessKey --bucket 101oraclexe2 --manifest oracle10gXE32bitUniv2.manifest.xml --location ap-southeast-1 --reagion ap-southeast-1 --destination-bucket ora10xe-101ap

各パラメータの詳細は以下のURL参照
http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/

※認証用のプライベートキーと証明書はパラメータではなくて環境変数(EC2_PRIVATE_KEY、EC2_CERT)で指定してもOKです。
※AWS認証用のアクセスキーとシークレットアクセスキーを指定するオプションが今までのコマンドと違って -o -w なので注意!
いままでEC2コマンドを使っていた人はきっと -a -s を指定してしまうと思います。

Downloading manifest oracle10gXE32bitUniv2.manifest.xml from 101oraclexe2... OK
Copying 'oracle10gXE32bitUniv2.part.000' to 'ora10xe-101ap/oracle10gXE32bitUniv2.part.000'... OK
Copying 'oracle10gXE32bitUniv2.part.001' to 'ora10xe-101ap/oracle10gXE32bitUniv2.part.001'... OK
Copying 'oracle10gXE32bitUniv2.part.002' to 'ora10xe-101ap/oracle10gXE32bitUniv2.part.002'... OK


Copying 'oracle10gXE32bitUniv2.part.136' to 'ora10xe-101ap/oracle10gXE32bitUniv2.part.136'... OK
Copying 'oracle10gXE32bitUniv2.part.137' to 'ora10xe-101ap/oracle10gXE32bitUniv2.part.137'... OK
Your new bundle is in S3 at the following location: ora10xe-101ap/oracle10gXE32bitUniv2.manifest.xml

※実際にS3にファイルがコピーされたかどうかはS3用のクライアントツールで確認してみてください。
以下はCloudBerryで確認した例です。



◆APリージョンでAMIの登録
AMIをAPリージョンにコピーしただけではそのAMIを起動することはできません。
EC2コンソールのAMIメニュー(Register New AMI)からコピーしたAMIを登録します。

・RegionをAsia Pacificにして左側のリストメニューの「AMIs」をクリックします。
・表示された画面の「Register New AMI」をクリックして以下のウィンドウを表示してコピーしたAMIのmanifestファイルを登録します。
manifestは「バケット名/マニフェストファイル名」と指定します。



**** コピー元で以下のように登録コマンドを実行すると。。***
# ec2-register ora10xe-101ap/oracle10gXE32bitUniv2.manifest.xml
[root@domU-12-31-39-0E-D8-13 ~]# ec2-register ora10xe-101ap/oracle10gXE32bitUniv2.manifest.xml
Client.InvalidManifest: HTTP 301 (Moved Permanently) response for URL http://s3.amazonaws.com:80/ora10xe-101ap/oracle10gXE32bitUniv2.manifest.xml: check your manifest path is correct and in the correct region.
リージョンが正しくないと言って怒られます。
**********************************************************

若干、長くなったので後半は次の回に掲載することにします。

ではまた。

0 件のコメント:

コメントを投稿