Amazon ECS에서 AWS Fargate 태스크 사용 중지 준비
태스크 사용 중지를 준비하려면 다음 작업을 수행하세요.
-
태스크 사용 중지 대기 시간을 설정하거나 Amazon EC2 이벤트 기간을 사용합니다.
-
태스크 사용 중지 알림을 캡처하여 팀원에게 알릴 수 있습니다.
-
서비스 업데이트 시 force-deployment 옵션을 사용하여 서비스의 모든 태스크가 최신 플랫폼 개정에서 실행되도록 할 수 있습니다. 이 단계는 선택 사항입니다.
1단계: 태스크 대기 시간 설정 또는 Amazon EC2 이벤트 기간 사용
Fargate가 태스크 사용 중지를 시작하는 시간을 구성하는 계정 설정 옵션은 fargateTaskRetirementWaitPeriod 및 fargateEventWindows입니다.
fargateTaskRetirementWaitPeriod 계정 설정 사용
Fargate에서 작업 사용 중지를 시작하는 시간을 구성할 수 있습니다. 기본 대기 기간은7일입니다. 업데이트를 즉시 적용해야 하는 워크로드의 경우 즉시 설정(0)을 선택합니다. 시간이 더 필요한 경우 7 또는 14일 옵션을 구성할 수 있습니다.
최신 플랫폼 수정 버전을 더 빨리 받으려면 짧은 대기 기간을 선택하는 것이 좋습니다.
put-account-setting-default 또는 put-account-setting을 루트 사용자 또는 관리 사용자로 실행하여 대기 기간을 구성합니다. name에는 fargateTaskRetirementWaitPeriod 옵션을 사용하고 value 옵션을 다음 값 중 하나로 설정합니다.
-
0- AWS는 알림을 보내고 영향을 받은 작업을 즉시 사용 중지합니다. -
7- AWS는 알림을 보내고 7일 기다린 후 영향을 받은 작업을 사용 중지합니다. 이 값이 기본값입니다. -
14- AWS는 알림을 보내고 14일 기다린 후 영향을 받은 작업을 사용 중지합니다.
자세한 내용은 Amazon Elastic Container Service API 참조의 put-account-setting-default 및 put-account-setting을 참조하세요.
fargateEventWindows 계정 설정 사용
2025년 12월 18일부터 Amazon ECS에서는 Fargate 작업에 대해 Amazon EC2 이벤트 기간을 구성할 수 있습니다. 사용 중지 시간을 정확하게 제어해야 하는 경우, 예를 들어 업무 시간 중 서비스 중단을 피하기 위해 주말에 사용 중지를 예약하고자 할 때, 태스크, 서비스 또는 클러스터에 대해 Amazon EC2 이벤트 기간을 구성할 수 있습니다.
이벤트 기간을 사용하는 경우, Fargate는 사용자 조치로 중지되거나 하드웨어 성능 저하와 같은 치명적인 상태 이벤트가 발생하지 않는 한, 태스크가 다음 사용 가능한 이벤트 기간 내에서 사용 중지되기 전 최소 3일 이상 실행되도록 보장합니다.
fargateEventWindows 계정 설정을 enabled로 설정합니다. 이 설정은 루트 사용자 또는 관리자 권한이 있는 사용자 계정으로 다음 API 중 하나를 사용하여 구성할 수 있습니다. put-account-setting-default 또는 put-account-setting.
각 Amazon EC2 이벤트 기간은 주당 최소 4시간 이상 열려 있어야 하며, 각 시간 범위는 최소 2시간이어야 합니다. 대규모 클러스터 및 서비스의 경우, 이벤트 기간을 길게 설정(8시간 이상)하거나 최소 3일마다 한 번씩 발생하는 더 잦은 시간 범위를 구성하는 것을 권장합니다. Amazon EC2 이벤트 기간과 관련된 추가 고려 사항은 사용 설명서에서 확인할 수 있습니다. AWS Fargate는 사용자 조치로 중지되거나 하드웨어 성능 저하와 같은 치명적인 상태 이벤트가 발생하지 않는 한, 태스크가 사용 중지되기 전 최소 3일 이상 실행되도록 보장합니다.
중요
이벤트 기간 내에 태스크를 교체하는 것이 최선입니다. 이벤트 기간 외에 태스크가 사용 중지되는 것이 관찰되면 이벤트 기간을 늘리거나(8시간 이상) 빈도를 높이는 것(최소 3일마다 한 번)을 고려해야 합니다.
Fargate 태스크 사용 중지에 Amazon EC2 이벤트 기간을 적용하려면:
-
fargateEventWindows계정 설정을enabled로 설정합니다. 이 설정은 루트 사용자 또는 관리자 권한이 있는 사용자 계정으로 다음 API 중 하나를 사용하여 구성할 수 있습니다.put-account-setting-default또는put-account-setting. 이 설정은 Fargate 태스크에서 Amazon EC2 이벤트 기간 기능을 사용하기 위한 기능으로, 한 번만 활성화됩니다. -
AWS 콘솔 또는 AWS CLI를 통해 Amazon EC2 이벤트 기간을 생성합니다. CLI에서 이벤트 기간을 생성하려면 EC2
create-instance-event-windowAPI를 사용하며, 시간 범위 또는 cron 표현식을 지정할 수 있습니다. 응답에서 반환되는InstanceEventWindowId를 기록합니다.aws ec2 create-instance-event-window \ --time-range StartWeekDay=monday,StartHour=2,EndWeekDay=wednesday,EndHour=8\ --tag-specifications "ResourceType=instance-event-window,Tags=[{Key=K1,Value=V1" \ --namemyEventWindowName또는 cron 표현식을 사용하여 EC2 이벤트 기간을 생성할 수 있습니다.
aws ec2 create-instance-event-window \ --cron-expression"* 21-23 * * 2,3"\ --tag-specifications "ResourceType=instance-event-window,Tags=[{Key=K1,Value=V1" \ --namemyEventWindowName -
그런 다음 EC2
associate-instance-event-windowAPI를 사용하여 이벤트 기간을 특정 서비스, 클러스터 또는 계정 내 모든 태스크와 연결할 수 있습니다.-
ECS 서비스 태스크의 경우
aws ec2 associate-instance-event-window \ --instance-event-window-idiew-0abcdef1234567890\ --association-target "InstanceTags=[{Key=aws:ecs:serviceArn,Value=your-service-arn}]" -
ECS 클러스터의 경우
aws ec2 associate-instance-event-window \ --instance-event-window-idiew-0abcdef1234567890\ --association-target "InstanceTags=[{Key=aws:ecs:clusterArn,Value=your-cluster-arn}]" -
이벤트 기간을 계정 내 모든 태스크와 연결하려면
aws ec2 associate-instance-event-window \ --instance-event-window-idiew-0abcdef1234567890\ --association-target "InstanceTags=[{Key=aws:ecs:fargateTask,Value=true}]"
-
여러 개의 키-값 쌍을 사용하여 여러 서비스 또는 클러스터에 이벤트 기간을 연결할 수 있습니다.
Fargate는 다음 순서로 각 태스크에 대한 이벤트 기간을 선택합니다.
-
태스크 서비스에 연결된 이벤트 기간이 있으면 사용합니다. 독립형 태스크 또는 비관리형 태스크에는 적용되지 않습니다.
-
태스크의 클러스터에 연결된 이벤트 기간이 있으면 사용합니다.
-
모든 Fargate 태스크에 설정된 이벤트 기간이 있으면 사용합니다.
-
태스크에 해당하는 이벤트 기간이 없으면
fargateTaskRetirementWaitPeriod설정이 적용됩니다.
Fargate 태스크 유지 관리를 위한 이벤트 기간 구성
여러 ECS 서비스를 운영하며 서로 다른 가용성 요구 사항이 있는 경우, 정밀한 태스크 사용 중지 제어가 필요합니다. 다음과 같이 여러 이벤트 기간을 구성할 수 있습니다.
-
모든 Fargate 태스크 기본 유지 관리: 사용량이 적은 시간대(매일 자정 12시~오전 4시)에 루틴 유지 관리용 이벤트 기간을 생성하고,
aws:ecs:fargateTask태그를 사용하여 모든 Fargate 태스크와 연결합니다. -
개발 클러스터 주말 전용 유지 관리: 주말 중단이 허용되는 서비스가 있는 개발 클러스터의 경우, 24시간 주말 기간(토요일~일요일, 종일)을 생성하고, 클러스터 ARN과 함께
aws:ecs:clusterArn태그로 클러스터에 연결합니다. -
미션 크리티컬 서비스의 제한된 기간: 평일 높은 가동 시간이 필요한 미션 크리티컬 결제 처리 서비스의 경우, 유지 관리를 주말 이른 아침(토~일, 자정 12시~오전 4시)으로 제한하고, 서비스 ARN과 함께
aws:ecs:serviceArn태그로 특정 서비스에 연결합니다.
이렇게 구성하면 결제 서비스는 주말 전용 이벤트 기간을 사용하고, 개발 클러스터 서비스 및 태스크는 주말 24시간 기간을 사용하며, 나머지 Fargate 태스크는 기본 일일 유지 관리 기간을 사용합니다.
자세한 내용은 Amazon Elastic Container Service API 참조의 put-account-setting-default 및 put-account-setting을 참조하세요.
2단계: 태스크 사용 중지 알림을 캡처하여 팀에 알리고 조치 취하기
태스크 사용 중지가 예정되어 있으면 AWS는 AWS Health Dashboard와 AWS 계정의 기본 이메일 연락처로 태스크 사용 중지 알림을 보냅니다. AWS Health Dashboard에서는 Amazon EventBridge를 비롯한 다른 AWS 서비스와의 다양한 통합을 제공합니다. EventBridge를 사용하여 태스크 사용 중지 알림에서 자동화를 구축할 수 있습니다. 예를 들어, 메시지를 ChatOps 도구로 전달하여 예정된 사용 중지의 가시성을 높입니다. AWS Health 인식은 AWS Health Dashboard의 기능과 조직 전체에 알림을 배포할 수 있는 방법을 보여주는 리소스입니다. 태스크 사용 중지 알림을 Slack과 같은 채팅 애플리케이션으로 전달할 수 있습니다.
다음 그림은 솔루션 개요를 보여줍니다.
다음 정보는 세부 사항을 제공합니다.
-
Fargate는 AWS Health Dashboard에 태스크 사용 중지 알림을 보냅니다.
-
AWS Health Dashboard는 AWS 계정의 기본 이메일 연락처로 메일을 전송하고 EventBridge에 알립니다.
-
EventBridge에는 사용 중지 알림을 캡처하는 규칙이 있습니다.
이벤트 세부 정보 유형:
"AWS Health Event" and the Event Detail Type Code: "AWS_ECS_TASK_PATCHING_RETIREMENT"의 이벤트를 찾는 규칙 -
규칙은 Slack 수신 Webhook를 사용하여 정보를 Slack으로 전달하는 Lambda 함수를 트리거합니다. 자세한 내용은 수신 웹후크
를 참조하세요.
코드 예제는 Github의 Capturing AWS Fargate Task Retirement Notifications
3단계: 태스크 대체 제어
태스크 사용 중지의 정확한 타이밍을 제어할 수는 없지만 대기 시간을 정의할 수는 있습니다. 원하는 일정에 따라 태스크를 대체하는 것을 제어하려면 태스크 사용 중지 공지를 캡처하여 태스크 사용 중지 날짜를 먼저 파악하면 됩니다. 그런 다음 서비스를 다시 배포하여 대체 태스크를 시작하고 독립 실행형 태스크도 마찬가지로 대체할 수 있습니다. 롤링 배포를 사용하는 서비스의 경우 사용 중지 시작 시간 전에 force-deployment 옵션과 함께 update-service를 사용하여 서비스를 업데이트합니다.
다음 update-service 예제에서는 force-deployment 옵션을 사용합니다.
aws ecs update-service —-serviceservice_name\ --clustercluster_name\ --force-new-deployment
블루/그린 배포를 사용하는 서비스의 경우 AWS CodeDeploy에서 새 배포를 생성해야 합니다. 배포를 생성하는 방법에 대한 자세한 내용은 AWS Command Line Interface 참조의 create-deployment를 참조하세요.