AWS私的まとめ EC2/EBS/S3
November 23, 2011 Leave a comment
今更ながらAWSを始めたので私的まとめをしたいと思う。
AWS Free Usage Tireの枠内で色々と試してみたいと思います。
前提なんですけども、Windows7環境でXming使ってFedora 15上で操作してます。
無料利用枠抜粋
AWS の新規お客様は、以下の EC2 の月間サービスを1年間ご利用いただけます。
・Amazon EC2 Linux マイクロインスタンス使用(613 MB メモリと、32ビットと 64ビットプラットフォームサポート)750時間 – 毎月継続的に実行するのに十分な時間
・Elastic Load Balancing 750時間に 15 GB 分のデータ処理をプラス
・Amazon Elastic Block Storage 10 GB に加え、100万 I/O、スナップショット ストレージ 1 GB、10,000 スナップショット Get リクエスト、1,000 スナップショット Put リクエスト
・Amazon S3 ストレージ 5 GB、20,000 Get リクエスト、2,000 Put リクエスト
・すべての AWS サービスを総合して、帯域幅「送信(アウト)」15 GB
・Amazon SimpleDB マシン時間25時間とストレージ 1 GB
・Amazon Simple Queue Service 100,000 リクエスト
・Amazon Simple Notification Service 100,000 リクエスト、100,000 HTTP 通知、1,000 Eメール通知
・Amazon Cloudwatch 10メトリックス、10 アラーム、100万 API リクエスト
始め方の参考 – http://devugger.com/2011/10/use-amazon-ec2-by-aws-free-usage-tier/
無料利用枠とか料金表 – http://aws.amazon.com/jp/ec2/pricing/
ちょっと最近肩身が狭いので、こっち方面も本気だそうかと思います。
– EC2を試してみる
概要なんですけど、テンプレートマシンイメージからInstance作成して起動する感じです。 (当然ですがAMI自身も自分で作れます)
RootDeviceがS3だとInstanceは止めるとデータ消えるので後々データを再利用したい場合とかはとかEBSを使用します。
なのでS-3 Backed AMIだとデータ消えるけどEBS Backed AMIだとデータ消えません。
簡単な流れは以下の通り。 (今回は初回のAccout登録からの通しが前提)
- Account登録
- AWS Management ConsoleでEC2でLaunch Instane
- Basic 64-bit Amazon Linux AMI(Free Usage Tire対象な星印付)を選択して起動
- Key pairのダウンロードがある
- Security Policyの設定
- InstanceのPublic DNSを確認、Public DNS宛てにSSHする
- 公開鍵認証なので事前にダウンロードされるKey pairを使用してユーザー名ec2-userでログインする
ひと通りここまで操作可能な状態のInstanceが起動できる。登録までInstance起動までわずか数分。
Linuxであれば事前に<key pair name> .pemのpermissionを600にしてあげてからsshして下さい。
$ ssh -i <key pair name>.pem ec2-user@<public dns>__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|See /usr/share/doc/system-release/ for latest release notes.
There are 14 security update(s) out of 18 total update(s) available
[ec2-user@<private dns> ~]$
InstanceのStopはAWS Management Console上で該当のInstanceを右クリックStopでOK。
– Amazon EC2 API Toolsの導入
慣れてきたのでAWS Management Consoleで操作するのも飽きた頃だと思います。
そこでちょっとカッコいい感じのツールを入れて操作出来るようにしてあげます。
(Fedoraだと面倒ですけどUbuntuだとスッごい楽です。)
$ sudo yum -y install java java-devel
$ cd /opt
$ wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
$ sudo unzip ec2-api-tools.zip && sudo rm ec2-api-tools.zip
$ sudo ln -s ec2-api-tools-1.5.0.0 ec2-api-tools
$ sudo vi ~/.bash_profile
export JAVA_HOME=”/usr/lib/jvm/jre/”
export EC2_HOME=”/opt/ec2-api-tools”
export EC2_CERT=”~/Amazon/cert-xxxx.pem”
export EC2_PRIVATE_KEY=”~/Amazon/pk-xxxx.pem”
export EC2_URL=”https://ec2.ap-northeast-1.amazonaws.com”
PATH=$PATH:$EC2_HOME/bin
$ source ~/.bash_profile ; env | egrep “JAVA|EC2”
$ ec2ver
1.5.0.0 2011-11-01
EC2_CERTとEC2_PRIVATE_KEYはWeb UI上でAccount>Security Credentials>Create a new Certificateで作ってください。
Region毎にEC2_URLの環境変数を変えてあげる必要あります。 (今回はTokyoで動いてるInstance弄ります)
$ ec2-describe-instances
自分のInstanceが表示されると思います。
– EBS Snapshotを試してみる (EC2 API Tools)
WebUIからも出来ますが今回はEC2 API Toolsを使ってSnapshotを撮ります。
$ ec2-describe-instances
RESERVATION r-cab9a4cb 307431130248 quick-start-1
INSTANCE i-f7xfd2f7 ami-0a44f00b stopped manco1919 0 t1.micro 2011-11-23T13:26:19+0000 ap-northeast-1b aki-ee5df7ef monitoring-disabled ebs paravirtual xen sg-c03baac1 default
BLOCKDEVICE /dev/sda1 vol-1xx71075 2011-11-23T15:28:14.000Z
TAG instance i-f7xfd2f7 Name micro instance
$ ec2-create-snapshot
SNAPSHOT snap-5725fb3d vol-1xx71075 pending 2011-11-2xT1x:33:15+0000 307431×30248 8
$ ec2-describe-snapshots
SNAPSHOT snap-5725fb3d vol-1xx71075 completed 2011-11-2xT1x:33:15+0000 100% 307431×30248 8
SNAPSHOT snap-bbe937d1 vol-1xx71075 completed 2011-11-2xT1x:11:34+0000 100% 307431×30248 8
流れとしてはec2-describe-instancesでinstanceのvolume名を調べてec2-create-snapshotで該当volumeのsnapshotを作成するだけです。確認の為、最後ec2-describe-snapshotsしてます。
余談ですがEBS Snapshotは最後に撮った時点からの変更のあるブロックのみを保存する差分保存です。
– AWS SDK for Ruby
SDK reference – http://docs.amazonwebservices.com/AWSRubySDK/latest/_index.html
大変便利な物が公開されておりますので利用させてもらいます。
導入は凄く楽です。
$ sudo gem install aws-sdk
EC2 API Toolsのec2-describe-instancesの表示が気持ち悪いので、aws-sdk使って全regionのinstanceを表示するのを作って見ました。
https://github.com/r00t-z3r0/aws-sdk-script/blob/master/ec2-status.rb
#!/usr/bin/env ruby # # https://github.com/r00t-z3r0 # require File.expand_path(File.dirname(__FILE__) + '/config') AWS.config({ :max_retries => 8, }) AWS.memoize{ printf "started: " + Time.now.to_s + "\n" ec2 = AWS::EC2.new ec2.regions.each {|r| printf "#{r.name}\n" r.instances.each {|i| printf " instances:\t#{i.id},#{i.tags['Name']},#{i.status},#{i.key_name}" if i.status_code == 16 printf ",#{(Time.now.utc.to_i - i.launch_time.to_i).divmod(60*60)[0]}h,#{i.ip_address}\n" else printf ",0h\n" end } r.volumes.each {|v| v.attachments.each {|a| printf " volumes:\t#{a.instance.id}" } printf ",#{v.id},#{v.snapshot.id}\n" } r.snapshots.with_owner(:self).each {|s| printf " snapshots:\t#{s.volume_id},#{s.id},#{s.status},#{s.description}\n" } } } printf "finished: " + Time.now.to_s + "\n"
これでちょっとは操作しやすくなりました。
Auto Scaling, CloudWatch, Elastic Load Blancing 組み合わせとか早くやりたいです。