Fargate용 Amazon ECS 클러스터
Fargate용 Amazon ECS 클러스터
AWS Fargate 용량 공급자와 함께 Amazon ECS를 사용하면 작업에 Fargate 및 Fargate Spot 용량을 모두 사용할 수 있어요. Fargate Spot은 중단 허용 작업을 할인된 요금으로 실행할 수 있어요.
출처: 문서
본문
AWS Fargate 용량 공급자와 함께 Amazon ECS를 사용하면 Amazon ECS 작업에 Fargate와 Fargate Spot 용량을 모두 사용할 수 있습니다. Fargate Spot을 사용하면 중단 허용(interruption tolerant) Amazon ECS 작업을 Fargate 가격보다 할인된 요금으로 실행할 수 있습니다. Fargate Spot은 여유 컴퓨팅 용량에서 작업을 실행합니다. AWS가 용량을 다시 필요로 하면 작업은 2분 경고와 함께 중단됩니다. Fargate와 Fargate Spot 용량 공급자를 사용하는 작업이 중지되면 작업 상태 변경 이벤트가 Amazon EventBridge로 전송됩니다. 중지 이유는 원인을 설명합니다. 자세한 내용은 Amazon ECS task state change events를 참고하세요.
클러스터에는 Fargate와 Auto Scaling 그룹 용량 공급자가 혼합될 수 있습니다. 그러나 용량 공급자 전략에는 Fargate 또는 Auto Scaling 그룹 용량 공급자 중 하나만 포함될 수 있고 둘 다 포함될 수는 없습니다. 자세한 내용은 Auto Scaling Group Capacity Providers를 참고하세요.
용량 공급자를 사용할 때 다음을 고려하세요.
- 용량 공급자 전략과 연결하기 전에 용량 공급자를 먼저 클러스터와 연결해야 합니다.
- 용량 공급자 전략에 최대 20개의 용량 공급자를 지정할 수 있습니다.
- Auto Scaling 그룹 용량 공급자를 사용하는 서비스를 Fargate 용량 공급자를 사용하도록 업데이트할 수 없습니다. 반대의 경우도 마찬가지입니다.
- 용량 공급자 전략에서 콘솔에 용량 공급자에 대한
weight값을 지정하지 않으면 기본값1이 사용됩니다. API 또는 AWS CLI를 사용하면 기본값0이 사용됩니다. - 용량 공급자 전략 내에 여러 용량 공급자를 지정할 때는 용량 공급자 중 하나 이상이 0보다 큰
weight값을 가져야 합니다.weight가 0인 용량 공급자는 작업 배치에 사용되지 않습니다. 전략에 모두weight가 0인 여러 용량 공급자를 지정하면 해당 용량 공급자 전략을 사용하는RunTask또는CreateService작업이 실패합니다. - 용량 공급자 전략에서 하나의 용량 공급자만 정의된
base값을 가질 수 있습니다.base값을 지정하지 않으면 기본값0이 사용됩니다. - 클러스터에는 Auto Scaling 그룹 용량 공급자와 Fargate 용량 공급자가 모두 혼합될 수 있습니다. 그러나 용량 공급자 전략에는 Auto Scaling 그룹 또는 Fargate 용량 공급자 중 하나만 포함될 수 있고 둘 다는 포함될 수 없습니다.
- 클러스터에는 두 용량 공급자를 모두 사용하는 서비스와 독립형 작업이 혼합될 수 있습니다. 서비스를 시작 유형 대신 용량 공급자 전략을 사용하도록 업데이트할 수 있습니다. 그러나 그렇게 할 때는 새 배포를 강제해야 합니다.
Fargate Spot 종료 알림
매우 높은 수요 기간 동안 Fargate Spot 용량은 사용하지 못할 수 있습니다. 이로 인해 Fargate Spot 작업이 지연될 수 있습니다. 이 경우 Amazon ECS 서비스는 필요한 용량을 사용할 수 있을 때까지 작업 시작을 재시도합니다. Fargate는 Spot 용량을 온디맨드 용량으로 교체하지 않습니다.
Fargate Spot 용량을 사용하는 작업이 Spot 중단으로 인해 중지되면 작업이 중지되기 전에 2분 경고가 전송됩니다. 경고는 작업 상태 변경 이벤트로 Amazon EventBridge에, 그리고 SIGTERM 신호로 실행 중인 작업에 전송됩니다. 서비스의 일부로 Fargate Spot을 사용하는 경우 이 시나리오에서 서비스 스케줄러가 중단 신호를 받고, 용량이 사용 가능하면 Fargate Spot에 추가 작업을 시작하려고 시도합니다. 작업이 하나뿐인 서비스는 용량을 사용할 수 있을 때까지 중단됩니다. 정상 종료에 대한 자세한 내용은 Graceful shutdowns with ECS를 참고하세요.
작업이 중지되기 전에 컨테이너가 정상적으로 종료되도록 하려면 다음을 구성할 수 있습니다.
- 작업이 사용하는 컨테이너 정의에
stopTimeout값 120초 이하를 지정할 수 있습니다. 기본stopTimeout값은 30초입니다. 작업 상태 변경 이벤트가 수신된 시점과 컨테이너가 강제로 중지되는 시점 사이에 더 많은 시간을 확보하려면 더 긴stopTimeout값을 지정할 수 있습니다. 자세한 내용은 Container timeouts를 참고하세요. - 정리 작업을 수행하려면 컨테이너 내부에서 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": "SpotInterruption",
"taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE",
...
}
}
다음은 Amazon ECS 작업 상태 변경 이벤트에 대한 EventBridge 규칙을 만드는 데 사용되는 이벤트 패턴입니다. detail 필드에서 클러스터를 선택적으로 지정할 수 있습니다. 그렇게 하면 해당 클러스터에 대한 작업 상태 변경 이벤트를 받게 됩니다.