jmeterをmacにインストールしてとりあえず使ってみるところまで試してみました。
環境は Mac OSX10.9でjmeterのバージョンは2.11です。

手順

インストール

  • 公式サイトからバイナリをダウンロード
  • 任意のディレクトリとかに移動して解凍
  • 起動してみる

    sh [jmeter展開したディレクトリ]/apache-jmeter-2.11/bin/jmeter
    

簡単なテストをしてみる

  • スレッドグループを作成

    編集⇒追加⇒Threads⇒スレッドグループで作成

    ここでスレッド数やRamp-Up数、ループ回数等を指定する。

    • スレッド数 : テスト中に起動するスレッド数(ユーザ数みたいな意味)
    • Ramp-Up数 : 上で設定したスレッド数を何秒間で生成するかを決定する。
      例えばスレッド数が10でRamp-Up数が5だったら5秒間で10スレッドが生成される。
    • ループ回数 : 一つのテストケースを何回繰り返すか設定。無限ループ設定も可能。

    なのでスレッド数10、Ramp-Up数5、ループ回数100の場合
    5秒間で合計1000リクエスト(秒間同時接続数2(10/5))となる。

  • サンプラー(HTTPリクエスト)を作成

    スレッドグループ上で右クリック⇒追加⇒サンプラー⇒HTTPリクエストで作成

    ここでホストやリクエストタイプ(GET/POST等)、リクエストパラメータの指定を行う。

  • リスナーを作成

    テストの実行結果を色々な表示で可視化する。
    個人的によく使うのは以下の二つ。

    • 統計レポート

      テストの結果をサマリで確認できる。
      負荷テストとかはここを見てればとりあえず良さそう。

    • 結果ツリー

      各アクセスのrequest/responseの内容が確認できる。
      負荷テスト時等はメモリ圧迫したりするので必ずoffにする。

  • テストを実行してみる

    メニューバーの実行、もしくは緑三角ボタンを押してテストを実行する。
    事前に作成したリスナーに結果が表示されるので確認。

ちょっと応用

  • URLパラメータにランダムな値を動的に設定する

    下記のようにHTTPリクエストのサンプラー設定画面内のparametersにURLパラメータを設定する。
    その際値の方を${__Random(0,300)}のように設定する。
    この場合、0から300の値がランダムにoパラメータに設定される。
    他にも色々関数があるので必要に合わせて。

  • URLパラメータとかパスの値をテキストファイルから読み込む

    • テキストファイルに読み込ませたいパラメータを書いて保存しておく。

      # test.txt
      test1
      test2
      test3
      
    • スレッドグループ上で追加⇒前処理⇒ユーザパラメータを作成する。

    • 作成したユーザパラメータを開き、「変数を追加」ボタンで変数を定義する。
    • 名前は任意でOK(仮にtestparamとする)、隣の欄に「${__StringFromFile(test.txt)}」のような形でファイルを読み込む。
      ファイルパスはjmeter起動時のディレクトリがカレントになるので適宜変更する。
    • 読み込んだ値を使用する箇所で「${testparam}」として記述すればファイルからパラメータ等を設定できる。
  • コマンドラインから実行

    サーバ上から別サーバへのアクセスをする場合等、
    コマンドラインから起動したい時は以下のようにする。

    # 事前に作成しておいたjmxファイルを引数にして実行する。
    # ログファイルが必要な場合は`-l`オプションを指定して出力可能。
    ~/xxx/bin/jmeter -n -t test.jmx -l test.log
    

まとめ

ロジックコントローラとか色々便利な機能が他にもあるけど、
とりあえず基本的なテストはこれでできるかな。
機会があればもうちょっと掘り下げた内容も書きます。


はじめに

稼働中のec2インスタンスのEBSボリュームをec2-api-toolsを使って
provisioned IOPS EBSに変更する方法を試してみました。
ec2-api-toolsのバージョンは1.6.12.2です。

手順

稼働中のインスタンスを停止する

ec2-stop-instances $instance_id

元になるEBSボリュームをdetachする

ec2-detach-volume $volume_id

EBSボリュームのスナップショットを作成する

ec2-create-snapshot $volume_id

Provisioned IOPS EBSを作成する

ec2-create-volume --availability-zone $zone --size 10 --type io1 --iops 4000 --snapshot $snapshot_id

作成したProvisioned IOPS EBSボリュームをインスタンスにatacheする

ec2-attach-volume --instance $instance_id --device /dev/sda $new_volume_id

インスタンスがEBS-Optimizedインスタンスでなければ、
以下コマンドで対応するインスタンスに変更する(この例ではm1.largeに変更)

ec2-modify-instance-attribute --instance-type m1.large $instance_id

EBS-optimizedにコンバートする

ec2-modify-instance-attribute --ebs-optimized True $instance_id

作成したEBS-Optimizedインスタンスを起動する

ec2-start-instances $instance_id

まとめ

DBの大量インサートとかIOバウンドな処理をする時は良さそうですね。


前提

稼働中のec2インスタンスのタイプをec2 api toolsを使って
変更する方法を試してみます。
ec2-api-toolsのバージョンは1.6.12.2です。

手順

  • インスタンスを停止する

    ec2stop $instance_id
    
  • インスタンスタイプを変更する

    ec2-modify-instance-attribute --instance-type m1.large $instance_id
    # SYNOPSIS: ec2minatt
    
  • インスタンスを起動する

    ec2-start-instances $instance_id
    # SYNOPSIS: ec2start
    

まとめ

簡単にインスタンスのスペックを変更できるのでいい感じです。
普段は最低限のスペックのインスタンスタイプで稼働させておいて
必要な時に一時的にハイスペックなタイプに変更できたりとても便利です。
次回は、EBSのタイプ変更(provisioned IOPS EBS)を試してみる予定です。


前提

前回からの続きで、今回は作成したEC2インスタンスのスナップショットを取得して
そこからAMIを作成、インスタンスをリストアするところまでやってみました。
手順的には省いてますが対象インスタンスが起動中の場合は、
一応停止してからの方がよいと思います。

手順

  • ebsボリューム情報を確認する

    ec2-describe-volumes
    # SYNOPSIS: ec2dvol
    
  • スナップショットを作成する

    # -d : スナップショットの概要
    # 上で確認したvolume idを設定
    ec2-create-snapshot -d 'snapshot test' $volumeid
    
  • 作成したスナップショットからAMIを作成する

    # -n : amiの名前
    # -d : amiの概要
    # --root-device-name : インスタンスのルートデバイス
    # -b ルートデバイスと対応するsnapshotのid
    # -a : アーキテクチャ
    # --kernel : 元インスタンスのkernelID(ec2-describe-instancesで確認)
    ec2-register -n test_ami -d 'test ami' --root-device-name /dev/sda -b /dev/sda=$snapshotoid -a x86_64 --kernel aki-44992845
    
  • 作成したAMIからインスタンスを作成、起動する

    ec2-run-instances $amiid --group first_group --key django_aws --instance-count 1 --instance-type m1.small --availability-zone ap-northeast-1a --instance-initiated-shutdown-behavior stop
    

まとめ

これで作成したスナップショット時点にいつでも戻れるようになりました。
何かの検証作業する時とか、すぐにやり直しが出来るようになるので便利です。
次回もec2 api tools使ってインスタンスタイプの変更をやってみる予定です。


前提

端末からAWSのapiを使ってec2を操作してみました。
今回はec2 api toolsを使ってインスタンスを
作成、起動、停止、削除まで試してみました。
ちなみに作成するインスタンスはCentOS6系で、検証環境はOSX 10.8です。

手順

  • API Toolsをamazonの以下リンクからダウンロード
    http://aws.amazon.com/developertools/351
  • 適当な場所に展開(今回は/usr/local/opt)
  • 扱いやすいようにシンボリックリンクを貼っておく

    cd /usr/local/opt
    ln -s ec2-api-tools-1.6.12.2 ec2-api-tools
    
  • 環境変数をセットする(.bash_profileの編集)

    vi ~/.bash_profile
    #以下を追加する
    
    JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    EC2_HOME=/usr/local/opt/ec2-api-tools
    EC2_CERT=/Users/xxx/work/amazon_work/cert.pem
    EC2_PRIVATE_KEY=/Users/xxx/work/amazon_work/pk.pem
    PATH=$PATH:$EC2_HOME/bin
    export JAVA_HOME EC2_HOME EC2_CERT EC2_PRIVATE_KEY PATH
    # 東京リージョンにする場合は以下を設定
    export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
    
  • 動作確認してみる(使用可能なリージョン一覧を表示されます)

    ec2-describe-regions
    # SYNOPSIS : ec2dre
    
  • awsに登録しているkeypairを確認する

    ec2-describe-keypairs
    # SYNOPSIS : ec2dkey
    # KEYPAIR   [登録済みkeypair名]  xx:xx:xx のように表示されていればOK
    
  • セキュリティグループの作成

    ec2-add-group first_group --description 'first security group'
    # GROUP sg-3b3e133a first_group first security group
    
  • 作成したセキュリティグループのinbound設定をする

    ec2-authorize first_group --protocol tcp --port-range 22 --cidr '0.0.0.0/0'
    ec2-authorize first_group --protocol tcp --port-range 80 --cidr '0.0.0.0/0'
    
  • EC2インスタンスを作成する

    ec2-run-instancesコマンドで作成する。
    とりあえず最低限の前準備が出来たのでec2のインスタンスを作成してみる。
    パラメータが多いので以下簡単に概要

    AMI識別子(ブートイメージ)
    --group セキュリティグループ(複数指定可能)
    --key 使用するkeypair
    --instance-count 起動するインスタンスの数
    --instance-type インスタンスタイプ(マイクロとかラージとか)
    --availability-zone AZ。指定しない場合、適当に場所が選択されてしまうようなので設定する
    --disable-api-termination TerminationProtectionの設定
    --instance-initiated-shutdown-behavior シャットダウン時の挙動(stop/terminate)
    

    よく使いそうなインスタンスタイプ(2014/02時点)

    t1.micro    1   変数  0.615   EBS のみ  $0.020 /1 時間
    m1.small    1   1   1.7 1 x 160 $0.060 /1 時間
    m1.medium   1   2   3.75    1 x 410 $0.120 /1 時間
    m1.large    2   4   7.5 2 x 420 $0.240 /1 時間
    m3.xlarge   4   13  15  2 x 40 SSD  $0.450 /1 時間
    m3.2xlarge  8   26  30  2 x 80 SSD  $0.900 /1 時間
    

    AMI識別子を調べる為にami一覧を取得する。
    今回はCentOSの公式インスタンス(64bit版)を探す為にこんなコマンドで探した。

    ec2-describe-images -o 'aws-marketplace' --filter "name=CentOS-6-x86_64*"
    # 結果の中に[ami-xxxx]みたいな感じで出力されるのがAMI識別子
    

    コマンドはこんな感じ

    ec2-run-instances ami-31e86030 --group first_group --key xxxx --instance-count 1 --instance-type t1.micro --availability-zone ap-northeast-1a --disable-api-termination --instance-initiated-shutdown-behavior stop
    
    # ディスクの拡張やエフェラメルディスクをマウントする場合のオプション
    # ルートデバイスのサイズを30Gに変更する
    -b /dev/sda=:30
    # エフェメラルディスクもマウントする
    -b /dev/sdb=ephemeral0
    
  • 作成したインスタンスを確認してみる

    ec2-describe-instances
    # SYNOPSIS: ec2din
    
    # RESERVATION r-097bbd0e  708359476534    first_group INSTANCE    i-1e136319  ami-31e86030    ec2-54-199-101-205.ap-northeast-1.compute.amazonaws.com ip-10-160-131-243.ap-northeast-1.compute.internal   running django_aws  0   [marketplace: aacglxeowvn5hy8sznltowyqe]    t1.micro    2014-01-24T03:15:10+0000    ap-northeast-1a aki-44992845            monitoring-disabled 54.199.101.205  10.160.131.243          ebs paravirtual xen     sg-3b3e133a default false   BLOCKDEVICE /dev/sda    vol-d34db9d9    2014-01-24T03:15:13.000Z    false
    
  • sshで接続してみる

    ssh -i xxx.pem root@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
    
  • ※ディスクを拡張している場合

    # 現状のディスクの状況を確認
    fdisk -l
    # 拡張する(デバイス名は適宜変更)
    resize2fs /dev/xvde
    
  • EC2を停止する

    ec2-stop-instances i-47951940
    # SYNOPSIS: ec2stop
    
  • TerminationProtectionを解除する

    ec2-modify-instance-attribute i-47951940 --disable-api-termination false
    # SYNOPSIS : ec2minatt
    
  • EC2インスタンスをterminateする

    ec2-terminate-instances i-47951940
    # SYNOPSIS : ec2kill
    
  • 不要になったVolumesを削除する

    # 現在のvolume一覧を取得する(削除するvolumeのIDを確認)
    ec2-describe-volumes
    # volumeIDを指定して削除
    ec2-delete-volume vol-c9b641c3
    

まとめ

とりあえずこれでec2インスタンスの
作成、起動、停止、削除のサイクルが出来ました。
ちなみに各コマンドの詳細な使い方は
それぞれのコマンドに-hオプションをつけると見れます。
次回はスナップショット取ったり、そこからリストアしたりとかしてみる予定です。