LoginSignup
5
3

More than 5 years have passed since last update.

同一のTaskDefinitionを環境変数を変えてECSクラスタ上で実行するベスト・プラクティス(模索中)

Last updated at Posted at 2018-03-06

AWS BatchやAWS Fargateについてはまだ詳細な調査ができていませんので。現状のお話。

Lambdaから、連続して run_task を実行したとする。
しかし、TaskDefinitionで定義しているメモリなどリソースが足りない場合、起動に失敗してしまうため、ここについては対策を考えたい。

環境変数を書き換えるには、 overrides 引数に ContainerOverrides を渡してあげればよい。
複数のTaskを起動したい場合は、try 以下をループする

client = boto3.client("ecs")
try:
  while flg:
    client.run_task(
      cluster="CLUSTERARNXXXX",
      taskDefinition="task-definition-name",
      overrides={
        "containerOverrides":[{
          "name": "container-name",
          "environment": [
            {"name": "XXX", "value": "XXX"}
          ]
        }]
      },
      count=1
    )   

次に、タスクが終了した際に、不要になったインスタンスを停止したい。


ecs = boto.client("ecs")
lci = ecs_client.list_container_instances(cluster="CLUSTERARN", status="ACTIVE")
num = len(lci) - 1
client = boto3.client("autoscaling")
response = client.update_auto_scaling_group(
  AutoScalingGroupName="GROUPNAME",
  MinSize=num,
  DesiedCapacity=num
)

ECSはTaskを動かしているインスタンスを強制的に停止することはないので、この方法で台数を最適な数に減らすことができる。

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