[server] Amazon ECS-서비스의 모든 작업을 어떻게 다시 시작합니까?

외부 데이터 소스에서 일부 구성 파일을로드하는 작업이 있습니다. 설정이 업로드 된 후 설정이 모든 인스턴스로 전파되도록 서비스의 모든 작업을 다시 시작할 수 있기를 원합니다.

모든 서비스를 다시 시작하는 가장 좋은 방법은 무엇입니까?

‘작업 수’를 0으로 설정 한 다음 백업하는 ‘해결 방법’이 있습니다. 그러나 이것이 반드시 수행되어야하는 방식이 아니며 가동 중지 시간이 있습니다.



답변

AWS CLI 도구 사용 :

aws ecs update-service --force-new-deployment --service my-service


답변

당신이 원하는 것은 본질적으로 서비스를 재배치하는 것과 같습니다.

다운 타임없이 서비스를 재배치하려면 다음을 수행하십시오.

  1. 현재 작업 정의를 기반으로 새 작업 정의를 등록합니다 (동일한 세부 사항 포함).
  2. 기존 서비스를 새 작업 정의와 연결하여 UpdateService를 호출하십시오.

그러면 새 작업 정의에 대한 새 작업이 시작된 다음 이전 작업 정의에 대한 이전 작업이 종료되어 다운 타임없이 작업이 효과적으로 다시 시작됩니다.

참조 : UpdateService


답변

이것은 나를 위해 일했다 :

aws ecs list-tasks --cluster <cluster_name> | jq -r ".taskArns[]" | awk '{print "aws ecs stop-task --cluster <cluster_name> --task \""$0"\""}' | sh

그런 다음 동일한 인스턴스에서 작업을 다시 만듭니다.

새 인스턴스가 필요한 경우 다음을 사용하십시오.

aws ecs list-services --cluster <cluster_name> | jq -r ".serviceArns[]" | awk '{print "aws ecs update-service --cluster <cluster_name> --force-new-deployment  --service \""$0"\""}' | sh


답변

ECS의 빌딩 블록으로서의 작업은 StopTask 호출에 의해 중지 될 수 있습니다 . 서비스는 동일한 API 호출로 중지 될 수있는 기본 작업으로 구성됩니다. 여기에 누락 된 부분 만 정의 된 패밀리 매개 변수를 사용 하여 ListTasks 호출의 결과를 둘러싼 것 입니다. 나는 이것을 도울 수있는 간단한 Lambda 함수 를 작성했다 .


답변

위의 @ user326608의 답변을 확장하고 있습니다 (통찰력에 감사드립니다!).

모든 작업을 중지하여 클러스터대한 모든 서비스에 대한 모든 작업을 다시 시작 합니다. 각 서비스는 자동으로 시작됩니다 X새 작업의 수, X서비스의입니다 desired task count.

#!/bin/bash

index=0
taskArn=$(aws ecs list-tasks --cluster ${CLUSTER_NAME} --query "taskArns[${index}]" --output text)

until [ "$taskArn" = "None" ]
do
  aws ecs stop-task --cluster ${CLUSTER_NAME} --task $taskArn
  ((index++))
  taskArn=$(aws ecs list-tasks --cluster ${CLUSTER_NAME} --query "taskArns[${index}]" --output text)
done


답변

Amazon 문서에 따르면 UpdateService API 호출을 사용하여 해당 작업을 스크립팅 할 수있는 것 같습니다 . 이전 링크에서 사용 가능한 일부 코드 샘플이 있으므로 적응할 수 있어야합니다. 작업 구성 업데이트가 문제의 가장 우아한 해결책이 된 후 적절한 작업 정의를 사용하여 서비스를 다시로드하는 스크립트를 작성하는 것처럼 보입니다.

ECS와 함께 AWS CLI를 사용하는 방법에 대한 추가 문서가 있는데, 이는 서비스 다시 시작을 일괄 스크립팅으로 처리하는 가장 쉬운 방법 인 것 같습니다.


답변

위대한 https://github.com/fdfk/ecsServiceRestart 작동

python ecsServiceRestart.py restart --services="app app2" --cluster=test