ウェブインコ

インコの技術メモ

Amazon EC2

■MySQLを外部から接続したい
インスタンスを複数立ててMySQLは他のサーバーから接続したい。
結構ハマったこと→セキュリティーグループにMySQLを追加。

■さしあたって使うものの概要
S3 : ファイル置場、ローカルからファイルの上げ下げを行う。S3←→EC2とかのやりとりも。
EC2
├Instances : サーバー本体。
├Volumes : 外付けディスク。EC2からしか見えない。マウントして使う。よくEBSと呼ばれる。
└Snapshots : バックアップイメージ。ここからVolumesを復活できる。

■Instances
インスタンスはリブート、ストップ、スタートがブラウザから出来ます。
ターミネイトは完全削除です。全部消えるので注意。
ec2-xx-xx-xx-xx.compute-1.amazonaws.com
xx-xx-xx-xxなのが外向きのIPです。リブートしたら変わります。
固定にしたいときにはそういう契約が追加であります。
しないときはあげっぱなしで良いのではないでしょうか。

■Volumes
インスタンスはAMIというイメージでバックアップが取れますが、/dev/sda1の10GB部分だけなので、大量のファイルはVolumesをくっつけて置きます。
ここに置いたものはSnapshotsで簡単にバックアップが取れるし復活できるので便利です。

■S3
ファイルのアップロードはEC2に直接WinSCPからでも出来ますが激重なので、いったんS3にあげてからEC2にコピーします。
S3にはブラウザのメニューからもアップできますが1ファイル辺り最大300MBまでです。
大きなファイルはFireFoxのアドオン「S3 Firefox Organizer」を使うと良いです。

■ツール
ローカルパソコンからEC2に命令できます。
最初に構築したり運用したりするときには、Linuxの中に入っていつものように作業することの他に、ローカルパソコンからEC2専用のコマンドをたたいて作業することになります。(ブラウザから出来ることが増えたので減りはしてます)
手前のLinuxにツールを入れた例。
jre-6u23-linux-i586-rpm.bin
をダウンロードしてWinSCPで手元のLinuxサーバーに置き実行権限を与える。
chmod a+x jre-6u23-linux-i586-rpm.bin
実行
./jre-6u23-linux-i586-rpm.bin
環境変数設定(ターミナル閉じるまで有効)
/home/admin/ec2/に解凍した場合
export JAVA_HOME=/usr
export EC2_HOME=/home/admin/ec2/ec2-api-tools
export PATH=$PATH:$JAVA_HOME/bin:$EC2_HOME/bin
export EC2_PRIVATE_KEY=/home/admin/ec2/pk-xxxxxx.pem
export EC2_CERT=/home/admin/ec2/cert-xxxxxx.pem
ec2ver
でバージョンがでたらOK

キーファイルはブラウザの管理画面から Account → Security Credentials → X.509証明書でダウンロードして置いてください。

■EBSのマウント
ブラウザからVolumesを作ります。
このときくっつけたいインスタンスと同じゾーン(us-east-1cみたいなの)にしないといけません。
容量は任意で。
できたらツールで以下のコマンド。
ec2-attach-volume -d /dev/sde -i i-xxxxxxxx vol-xxxxxxxx
 i-xxxxxxxx : インスタンスのID(EC2 Instance)
 vol-xxxxxxxx : EBSのVolumeID
 ↑ブラウザの管理画面で見れます。
 /dev/sde は sdc,sdd,...... などと試して空いているところを探してください。
yes | mkfs -t ext3 /dev/sde
mkdir /data
mount /dev/sdf /data
 /dataというディレクトリを作ってマウントした場合。

■EBSのバックアップ
ブラウザから EC2→Volumes Create Snapshot をしておきます。

■EBSから復旧
ブラウザから EC2→Snapshots Create Volume で新しいディスクを作ります。
できたら上と同じように以下コマンドを実行します。
ec2-attach-volume -d /dev/sdg -i i-xxxxxxxx vol-xxxxxxxx
mount /dev/sdf /data
 mkfsはいりません。

■S3→EC2
rubyでできたツールなので、まずrubyをインストールします。
yum install ruby
s3sync.tar.gz をダウンロードしてきてサーバー(インスタンス)に置きます。
以下/root/の下に置いた例。
cd /root
tar xvfz /some/where/s3sync.tar.gz
mkdir .s3conf
chmod 700 .s3conf

cat > ~/.s3conf/s3config.yml << E-O-F
aws_access_key_id: xxxxxxxxxxxxx
aws_secret_access_key: xxxxxxxxxxxxxxxxxxxxx
E-O-F

xxxxxxxxxxxxはブラウザの管理画面から Account → Security Credentials あたりにあります。
いちいちログインしなおさないといけなくて不便。

ディレクトリ構成はこう。
/root/.s3conf
/root/s3sync

◆バケット一覧表示
/root/s3sync/s3cmd.rb listbuckets
 hoge1
 hoge2

◆バケット内リスト
/root/s3sync/s3cmd.rb list hoge1

◆ファイル取得
/root/s3sync/s3cmd.rb get hoge1:hage1.tgz hage1.tgz

 一度使えなくなって、インスタンスを再起動したら直ったことが有ります。勘違いかもだけど。

■インスタンスを作るときの注意
なにとなくクイックスタートから選んでいたら、高機能高額のものになていました。
Community AMIs タブで 32-bit centos とかで検索したら安いのを選べます。
Account → Security Credentials → アカウントアクティビティ でときどき料金の確認をしよう。