LoginSignup
0

More than 1 year has passed since last update.

docker composeを使って負荷試験環境をECS Fargate上に最速で立ち上げる

Posted at

初めに

生産技術部で製品の検査工程を担当しているエンジニアです。AWSに構築したシステムの負荷試験を行うために、AWS上に負荷試験環境を構築しました。AWS上で立ち上げることで十分に負荷をかけることができ、低コストで実現できますが、設定ファイルを準備するのは少し手間です。そこで、docker composeを利用し、短期間でECS Fargateにクラスタを構築する方法を紹介します。

負荷試験については無知なため、以下の本を参考にさせていただき、Locustを導入してみました。

Amazon Web Services負荷試験入門―クラウドの性能の引き出し方がわかる

ご参考

以下の2つの記事にdocker composeでの立ち上げ方が詳しく記載されています。これらの記事を参考にdocker composeでの立ち上げを試しています。

設定ファイルの準備

まずは、Dockerfileを準備します。

Dockerfile
FROM locustio/locust:latest

COPY ./ /mnt/locust

Locustで実行するPythonファイルを準備します。

locustfile.py
from locust import HttpUser, task

class HelloWorldUser(HttpUser):
    @task
    def hello_world(self):
        self.client.get("/hello")
        self.client.get("/world")

dockerコマンドを利用してビルドし、AWS CLIを用いてECRにイメージをプッシュします。

#!/bin/sh

docker context use default

aws ecr get-login-password --region ${AWS_REGION}| docker login --username AWS --password-stdin ${ECR_URI}

for SERVICE in locust filebeat;
do
  docker image build -t ${ECR_URI}:${SERVICE} ${SERVICE}/
  docker image push ${ECR_URI}:${SERVICE}
done

docker-compose.yamlファイルにLocustを設定します。x-aws-*を設定することで、VPCやClusterを指定でき、さまざまな環境に合わせて柔軟に対応できます。設定できる内容はDockerのドキュメントに記載されています。

docker-compose.yaml
version: '3'

x-aws-vpc: ${AWS_VPC}

services:
  master:
    image: ${ECR_URI}:locust
    ports:
      - "8089:8089"
    command: -f /mnt/locust/locustfile.py --master -H http://master:8089
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: '2'
          memory: 4096M
  worker:
    image: ${ECR_URI}:locust
    command: -f /mnt/locust/locustfile.py --worker --master-host master
    deploy:
      replicas: 2
      resources:
        limits:
          cpus: '2'
          memory: 4096M

ECS Fargateへのデプロイ

ECS用のコンテキストを作成します。

# demo_ecs_contextを作成
$ docker context create ecs demo_ecs_context

作成したコンテキストに切り替えます。

# demo_ecs_contextを使用
$ docker context use demo_ecs_context
# contextを元に戻す
$ docker context use default
# context一覧を確認する
$ docker context ls
# 作成したcontextを削除する
$ docker context rm demo_ecs_context

切り替えたコンテキストで起動すると、CloudFormationの実行が開始します。CloudFormationのコンソールから起動状態が確認できます。ECSだけで無くCloudMap、ELB、SecurityGroupなども自動で生成されるため、細かい設定が不要です。

$ docker compose up

うまく立ち上がらない時

この方法は、パブリックサブネットが2つ以上必要であることや、同じアベイラビリティゾーンに複数のサブネットがあることなどの制約があり、うまく立ち上げることができない場合があります。

docker composeにはconvertコマンドが用意されており、エラーがなければ生成されるCloudFormationファイルを出力することができます。別のVPCなどで立ち上げてみて正常に立ち上がれば、convertコマンドでCloudFormationファイルを生成し、生成されたCloudFormationファイルを編集してCloudFormationで直接立ち上げてみることが簡単に調整できる方法です。

$ docker compose convert

最後に

docker composeを利用して、最速でECS Fargate上にLocustを作成することができました。ぜひお試しください。

locust-monitoring.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0