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を動かしているインスタンスを強制的に停止することはないので、この方法で台数を最適な数に減らすことができる。