みなさんは、Gmailの「アカウントへの不正アクセス警告機能」をご存知でしょうか?
先日不正アクセスの可能性があるという警告がGmailの受信トレイ画面に表示されて非常に焦りました。
背景が赤い行に白抜き文字で警告が表示されたのです。
えええーなんで?
急いで確認をすすめるうちに。。
◆Gmailの「アカウントへの不正アクセス警告機能」とは
Gmailのページを表示すると画面のフッター部分(以下画面参照)に「アカウントアクティビティの詳細」というリンクがあります。
このリンクをクリックすると次の画面が表示されます。
この画面ではGmailアカウントに対してどこからどういうタイプのアクセスをいつしたかを確認することができます。
◆あやしいアクセス?
上記の画面をみると1行だけ赤くなっている行がありますね。
しかもアクセスタイプは不明と出ています。
これは一見やばそうですね。
ふつうはびびりますよね。
そこで該当のIPアドレスは何者なのかを確認しました。
nslookupでIPアドレスを確認してみるとUstreamとなっています。
そういえば最近アカウント登録したサイトです。
でも結構焦っていたので、これはホントに不正アクセスだと思い即 Ustream にmailで問い合わせをしてしまいました。
すると問い合わせが多いので順番に回答しているが返答には時間がかかるという悠長なAutoReplyメールが。。
ますます不安になりGoogle先生に聞いたりしたのですが「Ustream Gmail 不正アクセス」なんてキーワードでは何も探すことができず。。
そして何気なくUstreamのログインページを開いてみると「なあんだ」と気が付きホッとしました。
Utsream のログインページはGoogleやFacebookのアカウントでもログインができるようになっています。
そういえば、以前、Ustream アカウントを作成するときに特に何も考えずに外部連携でGoogleを追加していました。
どうも日付といい時間といいドンピシャでした。(^^;
自分で許可していながら他から警告されると、自分が許可したことをすっかり忘れて焦ってしまいました。
しかもUstreamに問い合わせメールまで。「自分が登録したメールアカウントでUstreamが勝手にアクセスをすることはあるんですか?」
なんて。。
いやあほんとに恥ずかしいことをしました。
でも特にあやしいアクセスではなかったことにホッとしてBLOGネタにしてしまいました。
恥はかきましたがGmailのほかの動きも確認できて多少ためにもなりました(笑)。
◆もう一つのアメリカ合衆国からのIMAPアクセス?
上記の「 アカウント アクティビティの詳細」画面ではもう一つUSサイトからのアクセスがあることに気づかれた方も多いと思います。
ただし、この行は赤くなっていませんよね。つまりGoogle側では安全なアクセスとみなしているのです。
このエントリも初めは驚いたのですが、これはGoogleカレンダーの予定通知機能でメール送信を設定していると発生する現象です。
とはいえIPアドレスからドメイン名を見てもGoogleという名称は出てこないのですごく心配になりました。
結論からするとなあーんだ。というお話ですが。。私としては非常に焦った出来事でした。
以上 しょうもない話を最後まで読んでいただいてありがとうございます!
記事一覧
- 不正アクセスの可能性 - 少々焦ったお話し
- [TechMemo] 第12回 Amazon EC2 利用するリージョンのデフォルト
- [TechMemo] 第11回 Amazon EC2 USリージョンからAPリージョンへの移行(後半)
- [TechMemo] 第10回 Amazon EC2 USリージョンからAPリージョンへの移行
2010年5月24日月曜日
2010年5月22日土曜日
[TechMemo] 第12回 Amazon EC2 利用するリージョンのデフォルト
今回は前回2回にわたって掲載したAmazon EC2のリージョン移行の補足です。
[TechMemo]Amazon EC2 USリージョンからAPリージョンへの移行
[TechMemo]Amazon EC2 USリージョンからAPリージョンへの移行(後半)
私が利用していたUS EastではEC2のコマンドを実行する際にリージョン(region)を意識する必要がなかった(まあEC2環境でのデフォルトということでしょうが)のですがAsia Pacificリージョンではコマンド実行時にregionを指定しなければうまくいきませんでした。
コマンドのhelpを後からゆっくり読み直したところregionも環境変数で指定できることに気がつきました。
はじめから気がつかずにシェルを書き直してしまいました。とほほ。
region のデフォルトを指定するための環境変数は EC2_URL です。
APリージョンの指定は以下のようにします。
export EC2_URL=https://ec2.ap-southeast-1.amazonaws.com
こうすればシェルはどこのリージョンでも同じように使うことができるわけですね。
まあ今考えてみれば当たり前ですね。
リージョン用の環境変数があるはずだとう感が働くなった私はそろそろ技術者としては厳しいかなぁ。。orz
環境構築やプログラミングの際には、感も重要ですよね。
皆さんはどう思いますか?
ではまた。
[TechMemo]Amazon EC2 USリージョンからAPリージョンへの移行
[TechMemo]Amazon EC2 USリージョンからAPリージョンへの移行(後半)
私が利用していたUS EastではEC2のコマンドを実行する際にリージョン(region)を意識する必要がなかった(まあEC2環境でのデフォルトということでしょうが)のですがAsia Pacificリージョンではコマンド実行時にregionを指定しなければうまくいきませんでした。
コマンドのhelpを後からゆっくり読み直したところregionも環境変数で指定できることに気がつきました。
はじめから気がつかずにシェルを書き直してしまいました。とほほ。
region のデフォルトを指定するための環境変数は EC2_URL です。
APリージョンの指定は以下のようにします。
export EC2_URL=https://ec2.ap-southeast-1.amazonaws.com
こうすればシェルはどこのリージョンでも同じように使うことができるわけですね。
まあ今考えてみれば当たり前ですね。
リージョン用の環境変数があるはずだとう感が働くなった私はそろそろ技術者としては厳しいかなぁ。。orz
環境構築やプログラミングの際には、感も重要ですよね。
皆さんはどう思いますか?
ではまた。
ラベル:
amazon,
cloud computing,
ec2,
techday
2010年5月11日火曜日
[TechMemo] 第11回 Amazon EC2 USリージョンからAPリージョンへの移行(後半)
今回は先日公開しようとしてしていた内容の後半部分を説明します。
なんか長くなってしまったのですが。。
内容サマリ
1)移行するEC2環境の構成について
2)AMIのリージョン間コピー/APリージョンでAMIの登録
*** 上記、二つの手順は前回に説明しています ***
3)Amazon EBS(Elastic Block Store)データの移行
4)移行後のシェルの修正
5)Amazon Machine Image(AMI)の再作成
Amazon EC2には不揮発性のディスクを提供するEBS(Elastic Block Store)というサービスがあります。
EBSはデータベースのデータなど永続的に保持したいデータの格納用に提供されたものです。
小職のテスト環境のデータベースは、Oracle社から無償で提供されている Oracle Database 10g Express Edition(XE) です。
このXEをEBS上に構築しています。
EBSを別のEC2リージョンに移行するコマンドは、見当たらなかった(たぶんない)のでLinuxのコマンドで移行作業を行いました。
*** 小ネタ: 無償のOracleはどこで手に入る? ***********************
◆Oracle Technology Network からDL
※ユーザ登録必須
※私はここからDLしたXEを自分のEC2にuploadしてOracle Database環境をEBS上に構築しました。
◆AmazonEC2のAMIもあった!
@US Eastリージョン
AMI ID:ami-98be5cf1
Source:incharge/www.mototaker.com/ja_JP.32/ruby-db-ami/oracle_10gR2_XE_Univ_32Bit-Ruby_on_Rails233_Server-1.0-image.manifest.xml
※AmazonのAMIでは日本語が使えるもの(Universal版)はあまりないのでご注意。
※上記のAMIは日本語っぽいですねw
※US East、APリージョンではキーワードoracleで検索してもありませんでした。
※APリージョンには製品版のOracleがバンドルされたAMIすら存在しません。
******************************************************************
*** 豆知識: リージョン間AMIコピーコマンド(ec2-migrate-image) ***
※昨年末くらいからEBS上にAMIを構築するサービスも提供されていますが、前回のBLOGで説明したAMIのリージョン間コピー用コマンド(ec2-migrate-image)はEBS上のAMIを移行できません。
******************************************************************
◆データ移行手順
@US Eastリージョンでの作業
1)EBSにあるすべてのファイルをtarなどでアーカイブ
2)アーカイブしたファイルをs3へアップロード
@Asia Pacificリージョンでの作業
3)APリージョンに登録したAMIの起動(前回のBLOGで説明したAMI)
4)EBS上にVolumを作成
5)S3からダウンロード
6)ダウンロードファイルの展開とファイルのアクセス権限変更
◆データ移行内容詳細
@US Eastリージョンでの作業
1)EBSにあるすべてのファイルをtar+gzipでアーカイブ
※EBSボリュームは/volというフォルダにマウントされています。
oracle関連のファイルはすべて/vol/oracle配下にありますので oracle フォルダ以下すべてをアーカイブして2GBづつのファイルに分割します。
cd /vol
tar czvf oracle.tar.gz ./oracle
split -b 500m oracle.tar.gz oracle.tar.gz.
mkdir /vol/oracleimg
mv oracle.tar.gz.* /vol/oracleimg/.
2)アーカイブしたファイルをs3へアップロード
EC2からS3へのアップロードはrubyで作成されたスクリプト:s3sync.rb で行います。
以下の例では、S3に101ora-ap バケットを作成しそこに /vol/oracleimg フォルダを
同一名でコピーします。
cd /usr/local/s3sync
export AWS_ACCESS_KEY_ID='xxxxxxxxxxxxxxxx'
export AWS_SECRET_ACCESS_KEY='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ruby s3cmd.rb createbucket 101ora-ap
ruby s3sync.rb -r --delete /vol/oracleimg/ 101ora-ap:oracleimg
*** 小ネタ:s3sync.rb はどこで手に入る? *************************
以下の記事に書いてある通りやれば簡単に使えるようになります。
http://developer.amazonwebservices.com/connect/entry!default.jspa?categoryID=100&externalID=931&fromSearchPage=true
・s3sync.rbのセットアップ
wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
tar -xzvf s3sync.tar.gz
cp -r s3sync/ /usr/local/
******************************************************************
@Asia Pacificリージョンでの作業
3)APリージョンに登録されているAMIの起動(前回のBLOGで説明したAMI)
※ここで起動されたAMIはrcが正しく動作しないためElasticIPも設定されずに動的なグローバルIPが割り当てられたままのとりあえずのインスタンスという状態です。
4)EBS上にVolumを作成
US Eastで使用しているボリュームは使えませんのでAPリージョン用にボリュームを作成します。
EC2コンソールで50GBのボリュームを作成後、フォーマット(/dev/sdh)してマウントします。
4-1.EC2コンソールで50GBのボリューム作成とアタッチ
コンソールのメニュー Volumes をクリックして EBS Volumes の画面を表示します。
「Create Volumes」をクリックすると以下の画面が表示されるので Size 入力エリアに50と入力します。
Availavility Zone:は現在インスタンスが起動しているZoneに合わせます。ボリュームはZone固有です。
※ec2-create-volumeというコマンドもあるのですがなぜか実行するとエラーになりました。
# ec2-create-volume --size 50 --availability-zone ap-southeast-1
Client.InvalidZone.NotFound: The zone 'ap-southeast-1' does not exist.
次に作成された Volume をデバイスに Attach します。
作成したVolumeはコンソールに表示されますので左のチェックボックスをチェックして「Attach Volumes」をクリックすると以下の画面が表示されるのでDevice:を選択して「Attach」ボタンをクリックします。
アタッチ後確認してみるとブロックデバイスができています。
# ls -al /dev/sdh
brw-r----- 1 root disk 8, 112 May 5 07:58 /dev/sdh
※コマンドで実行する場合は以下の通り
# ec2-attach-volume vol-80d160e8 --instance i-9dace8cf --device /dev/sdh
4-2.mkfsコマンドでデバイスのフォーマット(プロンプトはすべてyesとする実行例)
# yes | mkfs -t ext3 /dev/sdh
mke2fs 1.40.4 (31-Dec-2007)
/dev/sdh is entire device, not just one partition!
Proceed anyway? (y,n) Filesystem label=
OS type: Linux
Block size=4096 (log=2)
・・・省略・・・
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
4-3.フォーマットされたデバイスのマウント
# mount /dev/sdh /vol
5)S3からダウンロード
作成したVolumeがファイルシステムから見えるようになったのでS3からoracle関連のアーカイブファイルをダウンロードします。
S3へのアクセスのために以下の環境変数を設定します。
# export AWS_ACCESS_KEY_ID='xxxxxxxxxxxxxxxx'
# export AWS_SECRET_ACCESS_KEY='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# export AWS_CALLING_FORMAT='SUBDOMAIN'
※US Eastでは環境変数 AWS_CALLING_FORMAT はデフォルトの REGULAR でよいので指定していませんでしたがAPでは必須です。(参照)
# cd /usr/local/s3sync
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.ad /vol/oracle.tar.gz.ad &
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.ac /vol/oracle.tar.gz.ac &
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.ab /vol/oracle.tar.gz.ab &
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.aa /vol/oracle.tar.gz.aa &
分割したファイルの結合
# cd /vol
# cat oracle.tar.gz.aa oracle.tar.gz.ab oracle.tar.gz.ac oracle.tar.gz.ad > oracle.tar.gz
6)ダウンロードファイルの展開とファイルのアクセス権限変更
# chown oracle oracle.tar.gz
# chgrp dba oracle.tar.gz
# su - oracle
% cd /vol
% ls
lost+found oracle.tar.gz
% tar xvfz oracle.tar.gz
◆sビットを付与
% chmod ug+s oracle
% chmod ug+s tnslsnr
US EastリージョンからコピーしてきたAMIで起動されたインスタンスはrc(起動シェル)に記載された内容がUS Eastリージョン用になったままです。
ここではリージョン固有の記述がされたシェルの内容を修正します。
◆rcで実行させているシェルの修正について
1)Elastic IP Address
Elastic IP Addressとは固定IPを利用できるサービスです。
(Elastic IP Addressについては書きだめのテキストがあるのでこれも後日掲載します。鮮度はなくなってますが。。)
リージョンが変わればもちろんIPアドレスも振り直しですね。
まずはAWSのWebコンソールからAPリージョンのElasticIPを購入します。
購入したIPアドレスをインスタンスIDに関連付けなければいけません。
AmazonEC2のインスタンスIDは起動時に動的に付与されますので起動するたびに変化します。
起動後に手動で関連付けることももちろん可能ですが。。
インスタンス起動時に動的に関連付けるためのシェルが以下のようになります。
シェルをみるとわかると思いますが引数 region でAPリージョンの値を指定しています。
てっきりコマンドを実行しているインスタンスがデフォルトの region なると勝手に信じていたのでエラーになる理由がわからずちょっとハマりました。
#!/bin/bash
#
# Associate EC2 Elastic IP Address with INSTANCE
source /root/.ec2env
var1=`ec2din --region ap-southeast-1| grep running | gawk '{print $2}'`
#echo $var1
ec2assocaddr 購入したIPアドレス -i $var1 >/dev/null 2>&1
2)EBSのアタッチ
EBSを作成すると固定の識別ID(Volume ID)が付与されます。
インスタンスIDは起動時に動的に付与されますので起動ごとに変化します。
つまりEBSはインスタンス起動後にアタッチしてあげる必要があります。
そのための起動シェルは以下のようになります。
このシェルにも region 引数を追加しています。
#!/bin/bash
#
# Attach EBS VolumeID: vol-84ac00ec to INSTANCE
source /root/.ec2env
var1=`ec2din --region ap-southeast-1 | grep running | gawk '{print $2}'`
#echo $var1
ec2attvol --region ap-southeast-1 vol-84ac00ec -i $var1 -d /dev/sdh >/dev/null 2>&1
mount /dev/sdh /vol
システム起動時のシェルを修正したら忘れずに再度AMIを作成します。
これを忘れてシステムを停止してしまうと設定が消えて苦労が水の泡なので注意しましょう!
※上記はRoot Device Type: instance-store
※EBS上にAMIを作成できるサービスも始まっているのでそれを利用すれば設定は消えません。
私のインスタンスはまだS3上に置いたAMIから起動するタイプです。
以下AMI再作成の手順です。
1)AMIのサイズは10GBまでという制限があるのでoracleが配置してあるボリュームをumountします。
umount /vol
2)AMIを作成するコマンドの実行
ec2-bundle-vol -d /tmp -k pk-xxxxxxxxxxxxxxxxx.pem -c cert-xxxxxxxxxxxxxxxx.pem -u 999999999 -r i386 -p oracle10gXE32bitUniv2
正常に終わると/tmpの下にmanifestファイルとAMIを10MB単位に分割したファイルがたくさんできています。
3)作成されたAMIをS3にアップロード
ec2-upload-bundle -r ap-southeast-1a -b tnoraclexe -m /tmp/oracle10gXE32bitUniv2.manifest.xml -a AccsessKey値 -s SecretAccessKey値
上記のコマンドが2)で作成したファイルをS3の tnoraclexe バケットにアップロードします。
4)S3に保管したAMIをAPリージョンに登録
ec2-register --region ap-southeast-1 tnoraclexe/oracle10gXE32bitUniv2.manifest.xml
※ここでも region 引数を指定しています。
US Eastでは指定する必要なかったのですが、ほとんどのコマンドで region 引数を明示的に指定する必要があるようですね。
以上、長々と書いてしまいましたがなんとなくお分かりいただけましたでしょうか?
US East と AP ネットワークレイテンシを計測した結果の画面スナップショットを掲載します。
ググルとすでにBLOGなどで掲載しているのを見つけることができますね。
結論から言うとAPリージョンのほうがUS Eastに比べると2.5倍くらい早いですね。
いままでレイテンシーが大きいのではと懸念されていた方もAPリージョンならその心配もない様に思います。
ちなみにAmazonが提供しているAMIはデフォルトではpingは通らない設定になっているのでWebコンソールのSecurity Group設定でpingを通す設定してください。
ピングを通す設定は以下の通りです。
Protocol FromPort ToPort IP
-------------------------------------------
icmp -1 -1 許可するIPアドレス
◆以下レイテンシーの計測結果
1)ローカルPCからUS EastとAsia Pacificリージョンにping実行結果
2)US Eastインスタンスからwww.nikkei.comへping実行結果
3)Asia Pacificインスタンスからwww.nikkei.comへping実行結果
以上 前後半2回に分けて紹介したEC2インスタンスのリージョン間移行手順。
みなさまのお役立てば幸いです。
ではまた。
なんか長くなってしまったのですが。。
内容サマリ
1)移行するEC2環境の構成について
2)AMIのリージョン間コピー/APリージョンでAMIの登録
*** 上記、二つの手順は前回に説明しています ***
3)Amazon EBS(Elastic Block Store)データの移行
4)移行後のシェルの修正
5)Amazon Machine Image(AMI)の再作成
Amazon EBS(Elastic Block Store)データの移行
Amazon EC2には不揮発性のディスクを提供するEBS(Elastic Block Store)というサービスがあります。
EBSはデータベースのデータなど永続的に保持したいデータの格納用に提供されたものです。
小職のテスト環境のデータベースは、Oracle社から無償で提供されている Oracle Database 10g Express Edition(XE) です。
このXEをEBS上に構築しています。
EBSを別のEC2リージョンに移行するコマンドは、見当たらなかった(たぶんない)のでLinuxのコマンドで移行作業を行いました。
*** 小ネタ: 無償のOracleはどこで手に入る? ***********************
◆Oracle Technology Network からDL
※ユーザ登録必須
※私はここからDLしたXEを自分のEC2にuploadしてOracle Database環境をEBS上に構築しました。
◆AmazonEC2のAMIもあった!
@US Eastリージョン
AMI ID:ami-98be5cf1
Source:incharge/www.mototaker.com/ja_JP.32/ruby-db-ami/oracle_10gR2_XE_Univ_32Bit-Ruby_on_Rails233_Server-1.0-image.manifest.xml
※AmazonのAMIでは日本語が使えるもの(Universal版)はあまりないのでご注意。
※上記のAMIは日本語っぽいですねw
※US East、APリージョンではキーワードoracleで検索してもありませんでした。
※APリージョンには製品版のOracleがバンドルされたAMIすら存在しません。
******************************************************************
*** 豆知識: リージョン間AMIコピーコマンド(ec2-migrate-image) ***
※昨年末くらいからEBS上にAMIを構築するサービスも提供されていますが、前回のBLOGで説明したAMIのリージョン間コピー用コマンド(ec2-migrate-image)はEBS上のAMIを移行できません。
******************************************************************
◆データ移行手順
@US Eastリージョンでの作業
1)EBSにあるすべてのファイルをtarなどでアーカイブ
2)アーカイブしたファイルをs3へアップロード
@Asia Pacificリージョンでの作業
3)APリージョンに登録したAMIの起動(前回のBLOGで説明したAMI)
4)EBS上にVolumを作成
5)S3からダウンロード
6)ダウンロードファイルの展開とファイルのアクセス権限変更
◆データ移行内容詳細
@US Eastリージョンでの作業
1)EBSにあるすべてのファイルをtar+gzipでアーカイブ
※EBSボリュームは/volというフォルダにマウントされています。
oracle関連のファイルはすべて/vol/oracle配下にありますので oracle フォルダ以下すべてをアーカイブして2GBづつのファイルに分割します。
cd /vol
tar czvf oracle.tar.gz ./oracle
split -b 500m oracle.tar.gz oracle.tar.gz.
mkdir /vol/oracleimg
mv oracle.tar.gz.* /vol/oracleimg/.
2)アーカイブしたファイルをs3へアップロード
EC2からS3へのアップロードはrubyで作成されたスクリプト:s3sync.rb で行います。
以下の例では、S3に101ora-ap バケットを作成しそこに /vol/oracleimg フォルダを
同一名でコピーします。
cd /usr/local/s3sync
export AWS_ACCESS_KEY_ID='xxxxxxxxxxxxxxxx'
export AWS_SECRET_ACCESS_KEY='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ruby s3cmd.rb createbucket 101ora-ap
ruby s3sync.rb -r --delete /vol/oracleimg/ 101ora-ap:oracleimg
*** 小ネタ:s3sync.rb はどこで手に入る? *************************
以下の記事に書いてある通りやれば簡単に使えるようになります。
http://developer.amazonwebservices.com/connect/entry!default.jspa?categoryID=100&externalID=931&fromSearchPage=true
・s3sync.rbのセットアップ
wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
tar -xzvf s3sync.tar.gz
cp -r s3sync/ /usr/local/
******************************************************************
@Asia Pacificリージョンでの作業
3)APリージョンに登録されているAMIの起動(前回のBLOGで説明したAMI)
※ここで起動されたAMIはrcが正しく動作しないためElasticIPも設定されずに動的なグローバルIPが割り当てられたままのとりあえずのインスタンスという状態です。
4)EBS上にVolumを作成
US Eastで使用しているボリュームは使えませんのでAPリージョン用にボリュームを作成します。
EC2コンソールで50GBのボリュームを作成後、フォーマット(/dev/sdh)してマウントします。
4-1.EC2コンソールで50GBのボリューム作成とアタッチ
コンソールのメニュー Volumes をクリックして EBS Volumes の画面を表示します。
「Create Volumes」をクリックすると以下の画面が表示されるので Size 入力エリアに50と入力します。
Availavility Zone:は現在インスタンスが起動しているZoneに合わせます。ボリュームはZone固有です。
※ec2-create-volumeというコマンドもあるのですがなぜか実行するとエラーになりました。
# ec2-create-volume --size 50 --availability-zone ap-southeast-1
Client.InvalidZone.NotFound: The zone 'ap-southeast-1' does not exist.
次に作成された Volume をデバイスに Attach します。
作成したVolumeはコンソールに表示されますので左のチェックボックスをチェックして「Attach Volumes」をクリックすると以下の画面が表示されるのでDevice:を選択して「Attach」ボタンをクリックします。
アタッチ後確認してみるとブロックデバイスができています。
# ls -al /dev/sdh
brw-r----- 1 root disk 8, 112 May 5 07:58 /dev/sdh
※コマンドで実行する場合は以下の通り
# ec2-attach-volume vol-80d160e8 --instance i-9dace8cf --device /dev/sdh
4-2.mkfsコマンドでデバイスのフォーマット(プロンプトはすべてyesとする実行例)
# yes | mkfs -t ext3 /dev/sdh
mke2fs 1.40.4 (31-Dec-2007)
/dev/sdh is entire device, not just one partition!
Proceed anyway? (y,n) Filesystem label=
OS type: Linux
Block size=4096 (log=2)
・・・省略・・・
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
4-3.フォーマットされたデバイスのマウント
# mount /dev/sdh /vol
5)S3からダウンロード
作成したVolumeがファイルシステムから見えるようになったのでS3からoracle関連のアーカイブファイルをダウンロードします。
S3へのアクセスのために以下の環境変数を設定します。
# export AWS_ACCESS_KEY_ID='xxxxxxxxxxxxxxxx'
# export AWS_SECRET_ACCESS_KEY='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# export AWS_CALLING_FORMAT='SUBDOMAIN'
※US Eastでは環境変数 AWS_CALLING_FORMAT はデフォルトの REGULAR でよいので指定していませんでしたがAPでは必須です。(参照)
# cd /usr/local/s3sync
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.ad /vol/oracle.tar.gz.ad &
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.ac /vol/oracle.tar.gz.ac &
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.ab /vol/oracle.tar.gz.ab &
# ruby s3cmd.rb get 101ora-ap:oracleimg/oracle.tar.gz.aa /vol/oracle.tar.gz.aa &
分割したファイルの結合
# cd /vol
# cat oracle.tar.gz.aa oracle.tar.gz.ab oracle.tar.gz.ac oracle.tar.gz.ad > oracle.tar.gz
6)ダウンロードファイルの展開とファイルのアクセス権限変更
# chown oracle oracle.tar.gz
# chgrp dba oracle.tar.gz
# su - oracle
% cd /vol
% ls
lost+found oracle.tar.gz
% tar xvfz oracle.tar.gz
◆sビットを付与
% chmod ug+s oracle
% chmod ug+s tnslsnr
移行後のシェルの修正
US EastリージョンからコピーしてきたAMIで起動されたインスタンスはrc(起動シェル)に記載された内容がUS Eastリージョン用になったままです。
ここではリージョン固有の記述がされたシェルの内容を修正します。
◆rcで実行させているシェルの修正について
1)Elastic IP Address
Elastic IP Addressとは固定IPを利用できるサービスです。
(Elastic IP Addressについては書きだめのテキストがあるのでこれも後日掲載します。鮮度はなくなってますが。。)
リージョンが変わればもちろんIPアドレスも振り直しですね。
まずはAWSのWebコンソールからAPリージョンのElasticIPを購入します。
購入したIPアドレスをインスタンスIDに関連付けなければいけません。
AmazonEC2のインスタンスIDは起動時に動的に付与されますので起動するたびに変化します。
起動後に手動で関連付けることももちろん可能ですが。。
インスタンス起動時に動的に関連付けるためのシェルが以下のようになります。
シェルをみるとわかると思いますが引数 region でAPリージョンの値を指定しています。
てっきりコマンドを実行しているインスタンスがデフォルトの region なると勝手に信じていたのでエラーになる理由がわからずちょっとハマりました。
#!/bin/bash
#
# Associate EC2 Elastic IP Address with INSTANCE
source /root/.ec2env
var1=`ec2din --region ap-southeast-1| grep running | gawk '{print $2}'`
#echo $var1
ec2assocaddr 購入したIPアドレス -i $var1 >/dev/null 2>&1
2)EBSのアタッチ
EBSを作成すると固定の識別ID(Volume ID)が付与されます。
インスタンスIDは起動時に動的に付与されますので起動ごとに変化します。
つまりEBSはインスタンス起動後にアタッチしてあげる必要があります。
そのための起動シェルは以下のようになります。
このシェルにも region 引数を追加しています。
#!/bin/bash
#
# Attach EBS VolumeID: vol-84ac00ec to INSTANCE
source /root/.ec2env
var1=`ec2din --region ap-southeast-1 | grep running | gawk '{print $2}'`
#echo $var1
ec2attvol --region ap-southeast-1 vol-84ac00ec -i $var1 -d /dev/sdh >/dev/null 2>&1
mount /dev/sdh /vol
Amazon Machine Image(AMI)の再作成
システム起動時のシェルを修正したら忘れずに再度AMIを作成します。
これを忘れてシステムを停止してしまうと設定が消えて苦労が水の泡なので注意しましょう!
※上記はRoot Device Type: instance-store
※EBS上にAMIを作成できるサービスも始まっているのでそれを利用すれば設定は消えません。
私のインスタンスはまだS3上に置いたAMIから起動するタイプです。
以下AMI再作成の手順です。
1)AMIのサイズは10GBまでという制限があるのでoracleが配置してあるボリュームをumountします。
umount /vol
2)AMIを作成するコマンドの実行
ec2-bundle-vol -d /tmp -k pk-xxxxxxxxxxxxxxxxx.pem -c cert-xxxxxxxxxxxxxxxx.pem -u 999999999 -r i386 -p oracle10gXE32bitUniv2
正常に終わると/tmpの下にmanifestファイルとAMIを10MB単位に分割したファイルがたくさんできています。
3)作成されたAMIをS3にアップロード
ec2-upload-bundle -r ap-southeast-1a -b tnoraclexe -m /tmp/oracle10gXE32bitUniv2.manifest.xml -a AccsessKey値 -s SecretAccessKey値
上記のコマンドが2)で作成したファイルをS3の tnoraclexe バケットにアップロードします。
4)S3に保管したAMIをAPリージョンに登録
ec2-register --region ap-southeast-1 tnoraclexe/oracle10gXE32bitUniv2.manifest.xml
※ここでも region 引数を指定しています。
US Eastでは指定する必要なかったのですが、ほとんどのコマンドで region 引数を明示的に指定する必要があるようですね。
以上、長々と書いてしまいましたがなんとなくお分かりいただけましたでしょうか?
おまけ
US East と AP ネットワークレイテンシを計測した結果の画面スナップショットを掲載します。
ググルとすでにBLOGなどで掲載しているのを見つけることができますね。
結論から言うとAPリージョンのほうがUS Eastに比べると2.5倍くらい早いですね。
いままでレイテンシーが大きいのではと懸念されていた方もAPリージョンならその心配もない様に思います。
ちなみにAmazonが提供しているAMIはデフォルトではpingは通らない設定になっているのでWebコンソールのSecurity Group設定でpingを通す設定してください。
ピングを通す設定は以下の通りです。
Protocol FromPort ToPort IP
-------------------------------------------
icmp -1 -1 許可するIPアドレス
◆以下レイテンシーの計測結果
1)ローカルPCからUS EastとAsia Pacificリージョンにping実行結果
2)US Eastインスタンスからwww.nikkei.comへping実行結果
3)Asia Pacificインスタンスからwww.nikkei.comへping実行結果
以上 前後半2回に分けて紹介したEC2インスタンスのリージョン間移行手順。
みなさまのお役立てば幸いです。
ではまた。
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)インスタンス再起動
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の起動
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.
リージョンが正しくないと言って怒られます。
**********************************************************
若干、長くなったので後半は次の回に掲載することにします。
ではまた。
先月末に待望のアジア圏での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.
リージョンが正しくないと言って怒られます。
**********************************************************
若干、長くなったので後半は次の回に掲載することにします。
ではまた。
ラベル:
amazon,
cloud computing,
ec2,
techday
登録:
投稿 (Atom)