LoginSignup
4
3

More than 5 years have passed since last update.

ECSクラスタのCPUとメモリをCloudWatchメトリックスで取得してみた

Posted at

ECSのメトリックス(クラスタ毎のCPUとメモリ。サービス毎のCPUとメモリ)が取れるようになったようなので試してみたことのメモ。
今回はクラスタのCPUとメモリを取得。

【AWS発表】EC2 Container Serviceの新しいメトリクス: ClusterとService

参考

負荷のかかるDockerを作る

負荷のかかるDockerをまずはローカルで作ります。

yesコマンドを実行し続けるDockerfileを作成

Dockerfile
FROM ubuntu:latest

MAINTAINER toshihirock

CMD yes > /dev/null

ビルド、実行

# build
$docker build -t toshihirock/stress-cpu:latest .

# run
$docker run -d --name stress-cpu toshihirock/stress-cpu

Dockerの負荷を確認してみる

$docker stats --no-stream=true stress-cpu
CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
stress-cpu          71.23%              204.8 kB/1.046 GB   0.02%               1.457 kB/738 B

良い感じ。

終わったので削除。

# stop
$docker stop stress-cpu

# delete
$docker rm stress-cpu

イメージをDocker Hubに登録

$docker login

$docker push toshihirock/stress-cpu

ECSで使うIAMロールの設定

ECSで使うIAMロールをあらかじめ作成しておきます。

  • ECSの許可
  • CloudWatchの許可

を行う必要があります。(以前に作ったECSのIAMロールを使おうとしたらCloudWatchへの許可がなかったため、メトリックスが取れなかった。。。)

ECSで試す

CLIからやります。
詳細は以前に書いたので今回はざっくり。

CLIでECS(EC2 Container Serviceを)を試す

#creaete cluster
$aws ecs create-cluster --cluster-name MyCluster

#launch instance and register cluster using userdata
$aws ec2 run-instances \
--image-id  ami-8aa61c8a \
--instance-type t2.micro \
--subnet-id subnet-d949e1ae \
--iam-instance-profile Name=ecs-full-access \
--user-data IyEvYmluL2Jhc2gNCmVjaG8gRUNTX0NMVVNURVI9TXlDbHVzdGVyID4+IC9ldGMvZWNzL2Vjcy5jb25maWc= \
--security-group-ids sg-baca56df \
--key-name HogefugakKey \
|jq -r '.Instances[].InstanceId'

# create task file
$vi stress-cpu-task.json
stress-cpu-task.json
[
  {
    "image": "toshihirock/stress-cpu",
    "name": "stress-cpu",
    "cpu": 10,
    "memory": 500,
    "essential": true,
    "environment": []
  }
]
# register task
$aws ecs register-task-definition --family stress-cpu  --container-definitions file://stress-cpu-task.json

$aws ecs run-task --cluster MyCluster --task-definition stress-cpu:1

コンソールで確認し、stress-cpuのタスクが実行されていて、少し経過したらクラスタメリトックスにCPUほぼ100%使っている感じになればOKです。(この時のキャプチャを撮り忘れました。。。。)

インスタンスを追加してみる

負荷が高いのでインスタンスを一つ追加して変化を確認します。

$aws ec2 run-instances \
--image-id  ami-8aa61c8a \
--instance-type t2.micro \
--subnet-id subnet-d949e1ae \
--iam-instance-profile Name=ecs-full-access \
--user-data IyEvYmluL2Jhc2gNCmVjaG8gRUNTX0NMVVNURVI9TXlDbHVzdGVyID4+IC9ldGMvZWNzL2Vjcy5jb25maWc= \
--security-group-ids sg-baca56df \
--key-name HogefugakKey \
|jq -r '.Instances[].InstanceId'

確かにインスタンス追加後にがくっと減っていますね。(起動後すぐに減っているのは一度確認したため。。。)

Screen Shot 2015-08-20 at 8.05.06 AM.png

思ったこと

つらつら書きますが、間違ってたらコメントいただけると嬉しいです。

  • 今回の機能を使えば負荷に応じてEC2のオートスケールが可能
  • ただし、単純にEC2がオートスケールするでタスク(Docker)が新規に増えて負荷が分散されるわけではないので何かしら仕組みなりが必要
  • そうなるとそもそも単純なシステムの場合、OpsWorksを使うなりの方がシンプルで分かりやすい?

どういう時にECSを使うと便利なのか自分自身でいまいち消化できてないのでもう少し勉強します。。。

4
3
0

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
4
3