AWS Fargate 용량 공급자 - Amazon Elastic Container Service

AWS Fargate 용량 공급자

AWS Fargate 용량 공급자에 대한 Amazon ECS에서는 Fargate와 Fargate 스팟 용량 모두를 Amazon ECS 태스크와 함께 사용할 수 있습니다. 용량 공급자에 대한 자세한 정보는 Amazon ECS 용량 공급자 생성 섹션을 참조하세요.

Fargate 스팟을 사용하면 Fargate 가격 대비 할인된 요금으로 중단 방지 Amazon ECS 태스크를 실행할 수 있습니다. Fargate 스팟은 여분의 컴퓨팅 용량에 대한 태스크를 실행합니다. AWS에 용량이 다시 필요한 경우 2분간 경고한 후에 태스크가 중단됩니다. 이에 대해서는 아래에 자세히 설명되어 있습니다.

Fargate 용량 공급자 고려 사항

Fargate 용량 공급자를 사용할 때는 다음 사항을 고려해야 합니다.

  • Fargate 스팟 용량 공급자는 Fargate의 Windows 컨테이너에 대해 지원되지 않습니다.

  • Fargate 스팟 용량 공급자는 ARM64 아키텍처를 사용하는 Linux 태스크에는 지원되지 않으며, Fargate 스팟은 X86_64 아키텍처를 사용하는 Linux 태스크만 지원합니다.

  • Fargate 및 Fargate Spot 용량 공급자는 생성할 필요가 없습니다. 모든 계정에서 사용할 수 있으며 클러스터와 연결되기만 하면 사용할 수 있습니다.

  • Fargate 및 Fargate Spot 용량 공급자를 기존 클러스터에 연결하려면 Amazon ECS API 또는 AWS CLI를 사용해야 합니다. 자세한 정보는 기존 클러스터에 Fargate 용량 공급자 추가 섹션을 참조하세요.

  • Fargate 및 Fargate Spot 용량 공급자는 예약되어 있으며 삭제할 수 없습니다. PutClusterCapacityProviders API를 사용하여 용량 공급자를 클러스터에서 연결 해제할 수 있습니다.

  • Amazon ECS 클래식 콘솔과 네트워킹 전용(Networking only) 클러스터 템플릿을 사용하여 새 클러스터를 생성할 경우 FARGATEFARGATE_SPOT 용량 공급자가 새 클러스터와 자동 연결됩니다.

  • Fargate Spot을 사용하려면 태스크에서 플랫폼 버전 1.3.0 이상(Linux)을 사용해야 합니다. 자세한 정보는 AWS Fargate 플랫폼 버전을 참조하세요.

  • Fargate 및 Fargate Spot 용량 공급자를 사용하는 태스크가 중지되면 태스크 상태 변경 이벤트가 Amazon EventBridge로 전송됩니다. 중지된 이유는 원인을 설명합니다. 자세한 정보는 작업 상태 변경 이벤트 섹션을 참조하세요.

  • 클러스터는 Fargate 및 오토 스케일링 용량 공급자를 혼합하여 포함할 수 있지만 용량 공급자 전략은 Fargate 또는 오토 스케일링 용량 공급자 중 하나만 포함할 수 있고 둘 다 포함할 수는 없습니다. 자세한 정보는 Amazon Elastic Container Service 개발자 안내서오토 스케일링 용량 공급자를 참조하세요.

Fargate Spot 종료 경고 처리

스팟 중단으로 인해 Fargate Spot 용량을 사용하는 태스크가 중지되면 태스크가 중단되기 전에 2분 간 경고가 전송됩니다. 경고는 태스크 상태 변경 이벤트로 Amazon EventBridge에 전송되고 실행 중인 태스크에 SIGTERM 신호로 전송됩니다. Fargate Spot을 서비스의 일부로 사용할 경우 서비스 스케줄러는 중단 신호를 수신하고 용량이 사용 가능한 경우 Fargate Spot에 대한 추가 태스크의 시작을 시도합니다. 태스크가 하나뿐인 서비스는 용량을 사용할 수 있을 때까지 중단됩니다.

태스크가 중지되기 전에 컨테이너가 정상적으로 종료되도록 하려면 다음을 구성할 수 있습니다.

  • 태스크가 사용 중인 컨테이너 정의에서 stopTimeout 초 이하의 120 값을 지정할 수 있습니다. stopTimeout 값을 지정하면 태스크 상태 변경 이벤트가 수신되는 순간부터 컨테이너가 강제로 중지되는 시점 사이의 시간이 제공됩니다. stopTimeout 값을 지정하지 않으면 기본값 30초가 사용됩니다. 자세한 정보는 컨테이너 제한 시간 섹션을 참조하세요.

  • SIGTERM 신호를 컨테이너 내에서 수신해야 정리 태스크를 수행할 수 있습니다. 이 신호를 처리하는 데 실패하면 태스크는 구성된 stopTimeout 이후에 SIGKILL 신호를 받는 데 실패하여 데이터가 손실되거나 오류가 발생할 수 있습니다.

다음은 Fargate Spot 중단에 대한 중지된 원인 및 중지 코드를 표시하는 태스크 상태 변경 이벤트의 조각입니다.

{ "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", ... } }

다음은 Amazon ECS 태스크 상태 변경 이벤트에 대한 EventBridge 규칙을 만드는 데 사용되는 이벤트 패턴입니다. 필요에 따라 detail 필드에 클러스터를 지정하여 태스크 상태 변경 이벤트를 수신할 수 있습니다. 자세한 정보는 Amazon EventBridge 사용 설명서EventBridge 규칙 생성을 참조하세요.

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "clusterArn": [ "arn:aws:ecs:us-west-2:111122223333:cluster/default" ] } }

Fargate 용량 공급자를 사용하는 새 클러스터 생성

새 Amazon ECS 클러스터가 생성되면 클러스터와 연결할 하나 이상의 용량 공급자를 지정할 수 있습니다. 용량 공급자는 태스크를 실행할 인프라를 결정하는 용량 공급자 전략을 정의하는 데 사용합니다.

AWS Management Console을 사용할 때 FARGATEFARGATE_SPOT 용량 공급자는 네트워킹 전용 클러스터 템플릿을 사용하면 클러스터와 자동으로 연결됩니다. 자세한 정보는 클래식 콘솔을 사용하여 클러스터 생성 섹션을 참조하세요.

Fargate 용량 공급자를 사용하여 Amazon ECS 클러스터를 만드는 방법(AWS CLI)

다음 명령을 사용하여 새 클러스터를 만들고 Fargate 및 Fargate Spot 용량 공급자를 모두 새 클러스터와 연결합니다.

  • create-cluster(AWS CLI)

    aws ecs create-cluster \ --cluster-name FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region us-west-2

기존 클러스터에 Fargate 용량 공급자 추가

PutClusterCapacityProviders API를 사용하여 기존 Amazon ECS 클러스터에 대해 사용 가능한 용량 공급자 풀을 업데이트할 수 있습니다.

기존 클러스터에 Fargate 또는 Fargate Spot 용량 공급자를 추가하는 것은 AWS Management Console에서 지원되지 않습니다. 콘솔에서 새 Fargate 클러스터를 생성하거나 Amazon ECS API 또는 AWS CLI를 사용하여 기존 클러스터에 Fargate 또는 Fargate Spot 용량 공급자를 추가해야 합니다.

기존 클러스터에 Fargate 용량 공급자를 추가하는 방법(AWS CLI)

기존 클러스터에 Fargate 및 Fargate Spot 용량 공급자를 추가하려면 다음 명령을 사용합니다. 지정된 클러스터에 연결된 기존 용량 공급자가 있는 경우 추가하려는 새 용량 공급자 외에 기존의 모든 용량 공급자를 지정해야 합니다. PutClusterCapacityProviders API 호출에서 생략된 클러스터와 연결된 기존 용량 공급자는 클러스터에서 연결 해제됩니다. 기존 태스크에서 사용되지 않는 경우에만 클러스터에서 기존 용량 공급자의 연결을 해제할 수 있습니다. 클러스터의 기본 용량 공급자 전략에도 이러한 동일한 규칙이 적용됩니다. 클러스터에 기존의 기본 용량 공급자 전략이 정의된 경우 PutClusterCapacityProviders API 호출에 포함되어야 합니다. 그렇지 않으면 덮어씁니다.

  • put-cluster-capacity-providers(AWS CLI)

    aws ecs put-cluster-capacity-providers \ --cluster FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT existing_capacity_provider1 existing_capacity_provider2 \ --default-capacity-provider-strategy existing_default_capacity_provider_strategy \ --region us-west-2

Fargate 용량 공급자를 사용하여 태스크 실행

용량 공급자 전략을 지정함으로써 Fargate 또는 Fargate Spot 용량 공급자 중 하나를 사용하여 태스크를 실행하거나 서비스를 생성할 수 있습니다. 용량 공급자 전략이 제공되지 않으면 클러스터의 기본 용량 공급자 전략이 사용됩니다.

Fargate 또는 Fargate Spot 용량 공급자를 사용한 태스크 실행은 AWS Management Console에서 지원됩니다. AWS Management Console을 사용하는 경우 Fargate 또는 Fargate Spot 용량 공급자를 클러스터의 기본 용량 공급자 전략에 추가해야 합니다. Amazon ECS API 또는 AWS CLI를 사용할 때 용량 공급자 전략을 지정하거나 클러스터의 기본 용량 공급자 전략을 사용할 수 있습니다.

Fargate 용량 공급자를 사용하여 태스크를 실행하는 방법(AWS CLI)

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

  • run-task(AWS CLI)

    aws ecs run-task \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --count integer \ --region us-west-2
참고

Fargate Spot을 사용하여 독립 실행형 태스크를 실행할 때는 해당 태스크를 완료하고 종료하기 전에 중단될 수 있다는 점에 유의해야 합니다. 그러므로 SIGTERM 신호를 수신했을 때 2분 내에 적절히 종료하고 다시 시작할 수 있도록 애플리케이션을 코딩하는 것이 중요합니다. 자세한 정보는 Fargate Spot 종료 경고 처리 섹션을 참조하세요.

Fargate 용량 공급자를 사용하여 서비스 생성(AWS CLI_

Fargate 및 Fargate Spot 용량 공급자를 사용하여 서비스를 생성하려면 다음 명령을 사용합니다.

  • create-service(AWS CLI)

    aws ecs create-service \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --service-name FargateService \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --desired-count integer \ --region us-west-2