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

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

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

간략한 설명

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

  • Fargate 및 Fargate Spot 용량 공급자는 생성할 필요가 없습니다. 모든 계정에서 사용할 수 있으며, 클러스터와 연결하기만 하면 사용할 수 있게 됩니다.
  • Fargate Spot 용량 공급자의 경우 ECS PutClusterCapacityProviders API 및 ECS put-cluster-capacity-providers CLI 명령 참조를 사용하여 기존 클러스터와 연결하면 됩니다. AWS 관리 콘솔을 사용하여 기존 클러스터에 Fargate Spot 용량 공급자를 추가하는 작업은 지원되지 않습니다.
  • Fargate와 Fargate Spot 용량 공급자는 예약되어 있으며 삭제할 수 없습니다. 클러스터에서 이를 연결 해제하려면 PutClusterCapacityProviders API를 사용할 수 있습니다.
  • Fargate Spot의 경우 태스크가 플랫폼 버전 1.3.0 이상(Linux의 경우)을 사용해야 하며 Fargate의 Windows 컨테이너에서는 Fargate Spot 용량 공급자를 지원하지 않습니다.

해결 방법

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

Fargate Spot 용량 공급자를 생성, 클러스터와 연결, 연결 해제

Fargate Spot 용량 공급자는 Amazon ECS 콘솔에서 네트워킹 전용 클러스터 템플릿을 사용해 생성하면 생성 시점에 자동으로 클러스터와 연결됩니다. 자세한 내용은 새 콘솔을 사용하여 Fargate 시작 유형에 대한 클러스터 생성을 참조하세요.

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

Fargate Spot 용량 공급자가 이미 연결되어 있지 않은 경우, PutClusterCapacityProviders API를 사용하거나 다음과 같은 AWS CLI 명령을 사용하여 용량 공급자를 클러스터와 연결할 수 있습니다.

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE FARGATE_SPOT \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --region <Region>

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

Fargate Spot 용량 공급자와 클러스터의 연결 해제

클러스터와 연결된 기존의 모든 용량 공급자 중에서 PutClusterCapacityProviders API 호출에서 생략된 것은 모두 해당 클러스터와의 연결이 해제됩니다. Amazon ECS와 Fargate Spot 용량 공급자의 연결을 해제하려면 다음과 같은 AWS CLI 명령을 실행합니다.

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 \
        --region <Region>

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

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

aws ecs describe-clusters \
        --cluster <Cluster_name> \
        --region <Region>

출력은 다음과 유사합니다.

Output:
      "capacityProviders": [
           "FARGATE",
           "FARGATE_SPOT"
      ]

참고: 앞선 명령의 출력에 Amazon ECS 클러스터와 연결된 용량 공급자를 포함한 capacityProviders 섹션이 포함됩니다.

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

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

aws ecs run-task \
        --cluster <Cluster_name> \
        --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_definition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --count <Number_of_Tasks> \
        --region <Region>

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

aws ecs create-service \ 
        --cluster <Cluster_name> \
        --service-name <Service_name> \
        --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_defintition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --desired-count <Number_of_tasks> \
        --region <Region>

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

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

aws ecs describe-tasks 
        --cluster <Cluster_name> \
        --tasks <TaskID> \
        --region <Region>

Amazon CloudWatch의 서비스당 Fargate OnDemand와 Fargate Spot 사용량을 추적하는 기능은 현재 지원되지 않습니다. 단, CloudWatch를 사용하면 Fargate OnDemand와 Spot의 총사용량 지표를 확인할 수 있습니다. 자세한 내용은 AWS Fargate 사용량 지표를 참조하세요.

FAQ

Fargate Spot 모범 사례는 어떤 것이 있나요?

  • Fargate Spot은 무상태, 내결함성 워크로드에는 아주 좋지만 중요한 워크로드의 경우 오로지 Spot Tasks에만 의존하면 안 됩니다. 대신 정규 Fargate Tasks를 혼합하여 구성합니다.
  • 중단은 SIGTERM 신호를 잡아 정상적으로 처리합니다. SIGTERM 신호가 수신되는 경우, StopTimeout120초로 설정하는 것이 좋습니다. 자세한 내용은 ECS를 사용한 정상 종료를 참조하세요.
  • Fargate Spot에서 실행되는 애플리케이션은 내결함성이어야 합니다.

FARGATE_SPOT 용량을 이용할 수 없으면 태스크는 어떻게 되나요?

ECS 스케줄러가 용량을 사용할 수 없어 태스크를 시작할 수 없는 경우, SERVICE_TASK_PLACEMENT_FAILURE 이벤트가 발생합니다. 태스크가 첫 단계인 프로비저닝(PROVISIONING)으로 진행되지 않으며 ECS 이벤트에 알림이 표시되지 않습니다. ECS 스케줄러는 계속해서 해당 태스크를 시작하려 시도합니다. 용량을 사용할 수 있게 되면 그때 SERVICE_STEADY_STATE 이벤트가 발생합니다.

사용 가능한 Fargate Spot 용량이 없으면 Fargate에 장애 조치가 발생하나요?

사용 가능한 FARGATE_SPOT 용량이 없을 때 FARGATE로 장애 조치되는 메커니즘은 불가능합니다.

ECS 서비스에서 용량 공급자를 사용할 때 태스크가 배치되는 방식을 예로 들면 어떤 것이 있나요?

이 예시의 경우, 다음과 같은 두 가지 용량 공급자를 포함한 용량 공급자 전략이 있습니다.

Provider 1: FARGATE      |  Base:2   Weight:1
Provider 2: FARGATE_SPOT |  Base:0   Weight:3

이 전략에 따르면, 기본값을 만족하면 FARGATE를 사용하여 실행하는 태스크 한 개마다 FARGATE_SPOT을 사용하는 태스크는 세 개가 됩니다. 적절한 수를 5로 설정하여 ECS 서비스를 생성하면 다음과 같은 결과가 생깁니다.

  • 태스크 2개가 FARGATE를 사용해 시작되어 기본값을 만족하고, 나머지 3개는 FARGATEFARGATE_SPOT1:3 비율로 나눠 가집니다.
  • 태스크 3개를 FARGATE를 사용해 실행하고, 태스크 2개는 FARGATE_SPOT을 사용하여 실행합니다.

이와 같은 전략을 사용하여, 발생한 크기 조정 이벤트에 따라 적절한 수가 9로 늘어납니다. ECS 스케줄러가 태스크 3개가 이미 FARGATE를 사용해 실행되었으며 기본값에 부합한 것을 확인합니다. 또한, PROVISIONING 상태인 새 태스크 4개가 FARGATEFARGATE_SPOT 사이에 1:3 비율로 나뉜 것도 확인할 수 있습니다. 마지막 남은 태스크 중 4개는 FARGATE를 사용하여, 태스크 5개는 FARGATE_SPOT을 사용하여 실행됩니다.


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


결제 또는 기술 지원이 필요합니까?