概要

AWS Lambda を使用して複数 Region から分散して Web 負荷テストが実行できるツール Goad を使ってみる。

アーキテクチャ

公式サイトに Demo があるので、自分のサイトにもお試しできる

Goad インストール

適当な場所にバイナリをダウンロードして解凍するだけ

$ wget https://github.com/gophergala2016/goad/releases/download/gopher-gala/goad-gopher-gala-linux-x86-64.zip
$ unzip goad-gopher-gala-linux-x86-64.zip
Archive:  goad-gopher-gala-linux-x86-64.zip
  inflating: goad

Goad の使い方

option 参照

$ ./goad --help
Usage of ./goad:
  -c uint
        number of concurrent requests (default 10)
  -m string
        HTTP method (default "GET")
  -n uint
        number of total requests to make (default 1000)
  -r string
        AWS regions to run in (comma separated, no spaces) (default "us-east-1,eu-west-1,ap-northeast-1")
  -t uint
        request timeout in seconds (default 15)
  -u string
        URL to load test (required)

Goad の実行

Credential を環境変数にセットする

export AWS_ACCESS_KEY_ID="AKXXXXXXXXXXXXXXXXXX"
export AWS_SECRET_ACCESS_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

AWSで作成したインスタンス(t2.micro)に対して、3箇所(us-east-1,eu-west-1,ap-northeast-1)から load testing 実行

$ ./goad -c 10 -n 10000 -r us-east-1,eu-west-1,ap-northeast-1 -m GET -u http://54.249.83.184
Regional results

Region: ap-northeast-1
   TotReqs   TotBytes    AvgTime   AvgReq/s  AvgKbps/s
      3334      63 MB     0.004s     849.60   15591.43
   Slowest    Fastest   Timeouts  TotErrors
    0.013s     0.001s          0          0
Region: us-east-1
   TotReqs   TotBytes    AvgTime   AvgReq/s  AvgKbps/s
      1936      36 MB     0.464s       7.34     134.62
   Slowest    Fastest   Timeouts  TotErrors
    0.482s     0.293s          0          0
Region: eu-west-1
   TotReqs   TotBytes    AvgTime   AvgReq/s  AvgKbps/s
      1352      25 MB     0.661s       5.75     105.49
   Slowest    Fastest   Timeouts  TotErrors
    0.456s     0.436s          0          0

Overall

   TotReqs   TotBytes    AvgTime   AvgReq/s  AvgKbps/s
      6622     124 MB     0.272s     431.07    7910.76
   Slowest    Fastest   Timeouts  TotErrors
    0.482s     0.001s          0          0
HTTPStatus   Requests
       200       6622

Apache Access ログ

52.16.167.156 - - [27/Jan/2016:05:27:16 +0000] "GET / HTTP/1.1" 200 18792 "-" "Mozilla/5.0 (compatible; Goad/1.0; +https://goad.io)"
52.16.167.156 - - [27/Jan/2016:05:27:17 +0000] "GET / HTTP/1.1" 200 18792 "-" "Mozilla/5.0 (compatible; Goad/1.0; +https://goad.io)"
52.16.167.156 - - [27/Jan/2016:05:27:17 +0000] "GET / HTTP/1.1" 200 18792 "-" "Mozilla/5.0 (compatible; Goad/1.0; +https://goad.io)"
54.172.10.160 - - [27/Jan/2016:05:27:17 +0000] "GET / HTTP/1.1" 200 18792 "-" "Mozilla/5.0 (compatible; Goad/1.0; +https://goad.io)"
54.172.10.160 - - [27/Jan/2016:05:27:17 +0000] "GET / HTTP/1.1" 200 18792 "-" "Mozilla/5.0 (compatible; Goad/1.0; +https://goad.io)"

AWS コンソールから確認すると Function が作成されている

CloudWatch で負荷確認

NetWorkOut で 20MB 程度でた

AWSアカウントがあれば ab 並にお手軽に負荷テストができる