如何阻止LoadBalancer自动重启已停止的ECS任务?
问题描述
当前部署了Lambda与ECS服务,由Lambda负责控制ECS任务的启动与停止。在调用stop_task接口停止ECS任务时,已停止的任务会被LoadBalancer立即重新拉起。
最初梳理了两类待验证的可行方案:
- 调用
stop_task停止任务的同步停用LoadBalancer - 单独关闭LoadBalancer的自动重唤起功能,确认该方式是否可实现
初始停止任务Lambda代码
import json import boto3 ecs = boto3.client('ecs') def lambda_handler(event, context): temp = ecs.list_tasks( cluster='ss-dev-cluster' ) for t in temp['taskArns']: response = ecs.stop_task( cluster='ss-dev-cluster', task=t ) print(response) ''' failures = response['failures'] if len(failures) != 0: print(failures) return { 'statusCode': 500, 'body': json.dumps('NG!') } ''' return { 'statusCode': 200, 'body': json.dumps('OK!') }
问题解决
问题已解决
感谢@MarkB提供的思路,不再使用run_task和stop_task接口控制任务启停,改为调用update_service接口修改Fargate服务的desiredCount参数实现启停控制,调整后的Lambda代码如下:
import json import boto3 import os ecs = boto3.client('ecs') def lambda_handler(event, context): response = ecs.update_service( cluster=os.environ['cluster'], desiredCount=1, service=os.environ['service'], )
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

