Amazon ECS에 Fargate Spot 용량 공급자를 사용하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 4월 5일

Amazon Elastic Container Service(Amazon ECS)에 AWS Fargate Spot 용량 공급자를 사용하고 싶습니다.

간략한 설명

시작하기 전에 다음 사항에 유의하세요.

  • AWS 명령줄 인터페이스(AWS CLI) 또는 Amazon ECS API만 사용하여 Fargate Spot 용량 공급자를 Amazon ECS 클러스터와 연결할 수 있습니다.
  • Fargate 또는 Fargate Spot 용량 공급자는 삭제할 수 없습니다.
  • 클러스터에서 Fargate 또는 Fargate Spot 용량 공급자를 연결 해제할 수 있습니다.

참고: Fargate Spot 용량은 예비 용량에서 실행되므로 내결함성이 뛰어난 태스크를 실행하는 데 적합합니다. AWS는 필요 시 예비 용량을 회수할 수 있습니다. 이 시나리오에서는 태스크가 2분 전 경고와 함께 중단됩니다. 자세한 내용은 AWS Fargate 용량 공급자를 참조하세요.

해결 방법

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

클러스터를 Fargate Spot 용량 공급자와 연결

1.    새 Fargate 클러스터를 생성하고 AWS 관리 콘솔 또는 다음 AWS CLI 명령을 사용하여 Fargate Spot 용량 공급자를 클러스터와 연결합니다.

$ aws ecs create-cluster --cluster-name your_Fargate_cluster_name --capacity-providers FARGATE_SPOT --region your_region

참고: AWS 관리 콘솔을 네트워킹 전용 클러스터 템플릿과 함께 사용하는 경우 Fargate 클러스터 및 Fargate Spot 용량 공급자가 자동으로 연결되는 Fargate 클러스터를 생성할 수 있습니다.

2.    (선택 사항) Amazon ECS 클러스터에서 자동으로 생성된 Fargate Spot 용량 공급자를 연결 해제하려면 다음 명령을 실행합니다.

$ aws ecs put-cluster-capacity-providers --cluster your_FargateCluster_name --capacity-providers FARGATE_SPOT --default-capacity-provider-strategy your_existing_default_capacity_provider --region your_region

Fargate Spot 용량 공급자가 Amazon ECS 클러스터와 연결되어 있는지 확인

Fargate Spot 용량 공급자가 Amazon ECS 클러스터와 연결되어 있는지 확인하려면 다음 명령을 실행합니다.

$ aws ecs describe-clusters --cluster your_cluster_name --region your_region

참고: 위 명령의 출력에는 용량(Capacity) 섹션이 포함됩니다. 이 섹션에는 Amazon ECS 클러스터와 연결된 용량 공급자가 포함됩니다.

기존 Amazon ECS 클러스터 추가 또는 Fargate Spot 용량 공급자와 연결

참고: AWS 관리 콘솔을 사용하여 Fargate Spot 용량 공급자를 추가하거나 기존 클러스터에 연결할 수 없습니다. 대신 AWS CLI 명령줄을 사용합니다.

기존 클러스터를 추가하거나 Fargate Spot 용량 공급자와 연결하려면 다음 명령을 실행합니다.

$ aws ecs put-cluster-capacity-providers --cluster your_Fargate_cluster_name --capacity-providers FARGATE_SPOT your_existing_capacity_provider1 --default-capacity-provider-strategy your_existing_default_capacity_provider_strategy --region your_region

중요: 용량 공급자를 덮어쓰지 않으려면 위의 명령에 기존의 모든 용량 공급자와 용량 공급자 전략을 포함하세요. 명령에 포함되지 않은 용량 공급자는 클러스터에서 연결 해제됩니다.

Fargate Spot 용량 종료 알림 처리

스팟 중단으로 인해 Fargate Spot 용량 공급자에서 실행 중인 태스크가 중지되면 Amazon ECS에 의해 태스크가 강제로 중지되기 2분 전에 경고가 표시됩니다. 경고는 Amazon EventBridge에 태스크 변경 이벤트로 전송되고 실행 중인 태스크에 SIGTERM 신호로 전송됩니다. 태스크가 서비스의 일부인 경우 서비스 스케줄러는 Fargate Spot 용량 공급자에서 추가 태스크 시작을 계속 시도합니다. 서비스 스케줄러는 이러한 추가 실행을 시도하여 중단 신호를 수신한 후 용량을 사용할 수 있는지 확인합니다.

1.    이벤트 패턴을 사용하여 Amazon ECS 태스크 상태 변경 이벤트에 대한 EventBridge 규칙을 생성합니다.

2.    컨테이너의 정상적인 종료를 위한 시간을 지정하려면 태스크 정의의 컨테이너 정의(Containers Definitions) 섹션에서 StopTimeout 값을 120초 이하로 설정합니다.

참고: 기본 StopTimeout 값은 30초입니다. 정리 작업 수행을 위해서는 컨테이너 내에서 SIGTERM 신호를 수신해야 합니다. 신호가 처리되지 않으면 태스크는 구성된 StopTimeout 값 다음에 SIGKILL 신호를 수신합니다. 신호 실패로 인해 데이터가 손실되거나 손상될 수 있습니다.

다음은 태스크 상태 변경 TerminationNotice 이벤트의 예입니다.

{
  "version": "0",
  "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab",
  "detail-type": "ECS Task State Change",
  "source": "aws.ecs",
  "account": "111122223333",
  "resources": [
    "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef"
  ],
  "detail": {
    "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default",
    "createdAt": "2016-12-06T16:41:05.702Z",
    "desiredStatus": "STOPPED",
    "lastStatus": "RUNNING",
    "stoppedReason": "Your Spot Task was interrupted.",
    "stopCode": "TerminationNotice",
    "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE",
    ...
  }
}

Fargate Spot 용량 공급자를 사용하여 태스크 실행 또는 서비스 생성

중요: Fargate Spot 용량 공급자에게는 AWS Fargate 플랫폼 버전 1.3.0이 필요합니다.

팁: SIGTERM 신호를 수신할 때 독립 실행형 태스크를 정상적으로 종료하려면 StopTimeout120초로 설정하는 것이 좋습니다.

Fargate Spot 용량 공급자를 사용하여 태스크를 실행하려면 다음 명령을 실행합니다.

aws ecs run-task \
   --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \
   --cluster your_FargateCluster_name \
   --task-definition your_task-def-family:revision \
   --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
   --count your_integer \
   --region your_region

Fargate Spot 용량 공급자를 사용하여 서비스 생성

Fargate Spot 용량 공급자를 사용하는 Amazon ECS 서비스를 생성하려면 다음 명령을 실행합니다.

aws ecs create-service \ 
   --service-name your_FargateService_name \
   --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
   --cluster your_FargateCluster_name \
   --service-name your_FargateService \
   --task-definition your_task-def-family:revisio> \
   --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
   --desired-count your_integer \
   --region your_region

태스크가 Fargate Spot 용량 공급자에서 실행 중인지 확인

태스크에서 Fargate 용량 공급자를 사용하고 있는지 확인하려면 다음 명령을 실행합니다.

$ aws ecs describe-tasks --cluster your_cluster_name --tasks your_task_ID --region your_region

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?