« Net::Amazon::EC2でEC2 API Toolsより高速にEBSのスナップショットを取得 | メイン | Amazon SQSに入門してみました »

2010年9月24日 (金)

Net::Amazon::EC2でEC2 API Toolsより高速にEBSのスナップショットを取得

こんにちは。フレクト 大橋です。

前回、EBS上に置いたMySQLのバックアップを取得する方法を紹介しましたが、
EC2 API Toolsを使ったEBSのスナップショット取得に5秒くらいかかってしまう
欠点がありました。
(※ 5秒かかるのは私たちが使っているベターホームレシピ(http:bhmb.jp)でのことで
 他の環境ではどうかは分かりませんが、それなりにかかると思います)
前回紹介した方法ではスナップショット取得中はファイルシステムへの書き込みを
ブロックしているので、運用中のサービスによっては5秒程度ブロックされるが嫌だったり
することもあると思います。
 
ところが以下を見てみると、スナップショット取得にEC2 API Toolsの
「ec2-create-snapshot」コマンドを使うより、PerlでNet::Amazon::EC2モジュールを
使った方が高速にスナップショット取得ができそうとのことなので
やってみました。
 
 
■ Net::Amazon::EC2を使ったEBSスナップショットの取得
 
cpanからNet::Amazon::EC2モジュールをインストールしてください。
cpanコマンドを使えば簡単にできると思います。Mooseが入っていないと
Mooseのインストールも必要になるため、若干時間がかかるかもしれません。
 
インストールしたあと、以下のようなスクリプトでEBSのスナップショット取得ができます。
Volume IDは各自の環境のものをご利用ください。またAmazon Web Serviceのアクセスキー、秘密鍵なども各自の環境のものをご利用ください。
 
#!/usr/bin/env perl
# ebs_snapshot.pl

use strict;
use warnings;

use Net::Amazon::EC2;

my $aws_access_key = $ENV{EC2_ACCESS_KEY};
my $aws_secret_key = $ENV{EC2_SECRET_KEY};
my $volume_id      = 'vol-xxxxxxx';

my $ec2 = Net::Amazon::EC2->new(
    AWSAccessKeyId  => $aws_access_key,
    SecretAccessKey => $aws_secret_key,
    region          => 'us-west-1',
);

my $snapshot = $ec2->create_snapshot(
    VolumeId    => $volume_id,
    Description => 'snapshot by Net::Amazon::EC2',
);

exit 0;
 
■ EC2 API Toolsとの比較
 
EC2 API Toolsを使うと以下のようなコマンドでスナップショットが取れます。
Volume IDに各自の環境のものをいれます。
 
> ec2-create-snapshot -d 'スナップショットの説明'  Volume-ID
 
EC2 API Toolsで私ども環境でEBSのスナップショット(40GB)を取得してみると、
timeコマンドでの計測ではだいたい4秒から5秒くらいかかっています。
環境はus-west-1のEC2上のインスタンスを使いました。(一部出力を省略しています)
 
【1回目】
# time ec2-create-snapshot -d command-line-test-01 vol-xxxxx
real     0m5.020s
user     0m4.408s
sys     0m0.205s
 
【2回目】
# time ec2-create-snapshot -d command-line-test-02 vol-xxxx
real     0m4.696s
user     0m4.603s
sys     0m0.151s
 
【3回目】
# time ec2-create-snapshot -d command-line-test-03 vol-xxxx
real     0m4.479s
user     0m4.590s
sys     0m0.165s
 
次にNet::Amazon::EC2を使ったスクリプトで計測してみました。
スクリプトは先ほど説明したPerlのスクリプトで、ebs_snapshot.plとしています。
EC2 API Toolsで計測した環境と同じ環境で試してみました。
 
【1回目】
# time perl ebs_snapshot.pl
real     0m1.256s
user     0m0.747s
sys     0m0.050s
 
【2回目】
# time perl ebs_snapshot.pl
real     0m1.468s
user     0m0.848s
sys     0m0.041s
 
【3回目】
# time perl ebs_snapshot.pl
real     0m1.331s
user     0m0.792s
sys     0m0.021s
 
だいたいこっちは1.2秒〜1.4秒くらいのスピードでできました。
EC2 API Toolsより3倍〜4倍くらいのスピード。計測方法が若干いい加減ですが、
速くなるのは間違いなさそうです。
こっちを使えば、バックアップ時に書き込みロックの時間を少し軽減できそうです。
また、コマンドライン操作でもストレスが減りますね。
 
■ なぜ速いのか&まとめ
 
詳細を調査したわけではないですが、単純にEC2 API ToolsはJavaでできていて
コマンドラインで実行すると起動すると実処理に入るまでが時間がかかることが
大きいです。あとはNet::Amazon::EC2はQuery APIを使っていて、EC2 API Toolsが
SOAPを使っているのも遅くなる要因にはあると思いますが、実時間がどれくらい
差があるのかは分かりません。
 
Amazon Web Servicesを操作するコマンドで、よく使うものは
Perl, Rubyなど起動の軽いスクリプトでQuery APIを使って運用ツールを作った方
が長期的には何かとストレスが小さいかな、と思います。
 
フレクトではAmazon Web Servicesを使ったプロダクトやソリューション事業を積極的に
実施しています。興味のある方はいつでも以下からご連絡ください。
 

トラックバック

このページのトラックバックURL:
http://bb.lekumo.jp/t/trackback/493401/32345197

Net::Amazon::EC2でEC2 API Toolsより高速にEBSのスナップショットを取得を参照しているブログ:

コメント

コメントを投稿

採用情報

株式会社フレクトでは、事業拡大のため、
・Salesforce/Force.comのアプリケーション開発
・HerokuやAWSなどのクラウドプラットフォーム上での
Webアプリケーション開発
をする、エンジニアを募集中です。

未経験でも、これからクラウドをやってみたい方、
是非ご応募下さい。

フレクト採用ページへ

プロフィール

執筆者:大橋 正興
株式会社フレクト 取締役

【得意分野/業務分野】

B2Cのサイト開発を主な業務領域とするシステムエンジニアです。あと、Salesforce.com認定デベロッパーです。AW、Salesforce、システム基盤構築・運用、サーバ/インフラ構築・運用が今の注力分野です。

【簡単な経歴】

埼玉県所沢市出身。1979年生まれ。大学からSFC。修士(政策・メディア)。ソニーエリクソンで携帯電話のアプリ・ミドル の先行開発に従事したあと、フレクトに参加。2009年6月より取締役。ベターホームレシピの開発ディレクション等、B2Cサイト構築においてアプリ開発やインフラ構築などに従事中。

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、セールスフォースパートナーです。
セールスフォースパートナー
また、heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。

Twitter

頻繁ではないですが、ときどきツイートしています。 お気軽にフォローしてください。

2021年3月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
ブログ powered by TypePad