前回
これまでの関連記事は、下記のとおり
SpotFleet に設定した AutoScalling を試してみます。
AutoScaling の設定
AutoScaling の設定は下図のとおり
「ECSクラスタのCPU使用率」でアラームを設定しています。
CPU使用率が50%を超えるとスケールアウトします。
ECSインスタンスのCPU使用率を上昇
SSMのセッションマネージャで、ECSインスタンスにログインし、stressコマンドでCPU使用率を上昇させてスケールアップするか試してみます。
まず、ECSインスタンスにstress コマンドをインストールします。
$ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm $ sudo yum -y install stress
ECSインスタンスでstress コマンドを実行してCPU使用率をあげます。
$ stress -c 1 -q &
top コマンドでみると下図のとおり. CPU使用率は50%をこえています。
ECSインスタンスのCPU使用率は上昇しましたが、ECSクラスタのCPU使用率は、あまり上
昇しません。
スケールアウトしませんでした。
ECSタスクのCPU使用率を上昇
ECSタスクのCPU使用率を上昇させて、スケールアウトするか試してみます。
テストでは bffコンテナを使用しますが、
bff構築時に設定したCPU割り当て(256)が少ないので、このままだとテストできません。
なぜなら、stressコマンドでCPUを使いすぎてヘルスチェックでNGになり、コンテナがSTOPするからです。
なので、bffコンテナ定義を変更してCPUの割り当てを無効にします。
下記のように cfnテンプレート(cfn_ecs_service_bff.yml)を修正します。
ローカルのcfnディレクトリで下記のようにコマンドを実行して、bffのスタックを更新します。
$ make cfnbff CFNCMD=update-stack
ECSインスタンスで下記コマンドを実行し、bffコンテナに stress コマンドをコピーします。
# docker ps | grep bff_flask # docker cp /usr/bin/stress <container-id>:/root/.
各bffコンテナに入って、stressコマンドを実行します。
今回はECSサービスの AutoScalingは発動したくないので、CPU使用率を70%以下に抑えます。
# docker exec -it <container-id> bash # /root/stress -c 1 -q &
クラスタのCPU使用率が50%を超えてアラームが発生します。
アラームが発生すると、SpotFleet がスケールアウトして、インスタンスが1つ増えます。
[MEMO]
- ECSの capacity provider を使うと、タスクの増減にあわせて、自動的にインスタンスをAutoScalingしてくれる。(SpotFleetは使用しない)
https://dev.classmethod.jp/articles/ecs_on_ec2_capacity_provider/