Amazon ECS에서 AWS Fargate 태스크 퇴역 및 유지 관리

Amazon ECS에서 AWS Fargate 태스크 퇴역 및 유지 관리

AWS는 AWS Fargate의 기반 인프라 유지 관리를 담당해요. AWS는 인프라를 위해 플랫폼 버전 개정을 새 개정으로 교체해야 하는 시점을 결정해요. 이를 태스크 퇴역(task retirement)이라고 해요.

출처: 문서

본문

플랫폼 버전 개정이 퇴역하면 AWS는 태스크 퇴역 알림을 보내요. 우리는 지원되는 플랫폼 버전을 정기적으로 업데이트해 Fargate 런타임 소프트웨어와 운영 체제 및 컨테이너 런타임 같은 기반 종속성에 대한 업데이트가 포함된 새 개정을 도입해요. 새 개정이 제공된 후에는 모든 고객 워크로드가 Fargate 플랫폼 버전의 최신 개정에서 실행되도록 이전 개정을 퇴역시켜요. 개정이 퇴역하면 해당 개정에서 실행 중인 모든 태스크가 중지돼요.

Amazon ECS 태스크는 서비스 태스크(service tasks) 또는 독립 실행형 태스크(standalone tasks)로 분류할 수 있어요. 서비스 태스크는 서비스의 일부로 배포되며 Amazon ECS 스케줄러가 제어해요. 자세한 내용은 Amazon ECS services 를 참고해 주세요. 독립 실행형 태스크는 Amazon ECS RunTask API로 직접, 또는 예약 태스크(Amazon EventBridge가 시작), AWS Batch, AWS Step Functions 같은 외부 스케줄러로 시작되는 태스크예요.

서비스 태스크의 경우 Amazon ECS 스케줄러가 태스크를 자동으로 교체하므로 태스크 퇴역에 대응해 어떤 조치도 취할 필요가 없어요. 독립 실행형 태스크의 경우 퇴역에 대응해 추가 처리를 수행해야 할 수 있어요. 자세한 내용은 Can Amazon ECS automatically handle standalone tasks? 를 참고해 주세요.

서비스 태스크의 경우 AWS보다 먼저 이 태스크를 교체하려는 경우가 아니라면 태스크 퇴역에 대해 행동할 필요가 없어요. Amazon ECS 스케줄러가 태스크를 중지할 때 maximumPercent 를 사용하고 서비스의 desired count를 유지하기 위해 새 태스크를 시작해요. 태스크 퇴역의 영향을 최소화하려면 모범 사례를 따라 주세요. REPLICA 서비스 스케줄러를 사용하는 서비스의 기본 maximumPercent 값은 200%예요. 따라서 AWS Fargate가 태스크 퇴역을 시작하면 Amazon ECS는 먼저 새 태스크를 스케줄링하고 실행될 때까지 기다린 후 이전 태스크를 퇴역시켜요. maximumPercent 값을 100%로 설정하면 Amazon ECS는 태스크를 먼저 중지한 다음 교체해요.

독립 실행형 태스크 퇴역의 경우 AWS는 태스크 퇴역 날짜 또는 그 이후에 태스크를 중지해요. 태스크가 중지되면 Amazon ECS는 교체 태스크를 시작하지 않아요. 이러한 태스크가 계속 실행되도록 해야 한다면 알림에 표시된 시간 전에 실행 중인 태스크를 중지하고 교체 태스크를 시작해야 해요. 따라서 고객은 독립 실행형 태스크의 상태를 모니터링하고 필요하다면 중지된 태스크를 교체하는 로직을 구현할 것을 권장해요.

어떤 시나리오에서든 태스크가 중지되면 describe-tasks 를 실행할 수 있어요. 응답의 stoppedReason 은 ECS is performing maintenance on the underlying infrastructure hosting the task 입니다.

태스크 유지 관리는 새 플랫폼 버전 개정이 필요할 때 적용돼요. 기반 Fargate 호스트에 문제가 있으면 Amazon ECS는 태스크 퇴역 알림 없이 호스트를 교체해요.

태스크 퇴역 알림 개요 AWS가 플랫폼 버전 개정을 퇴역이 필요하다고 표시하면 모든 Region에서 해당 플랫폼 버전 개정에서 실행 중인 모든 태스크를 식별해요.

다음 그림은 새 개정 시작부터 플랫폼 개정 퇴역까지의 Fargate 플랫폼 버전 개정의 수명 주기를 보여 줘요.

다음 정보는 세부 사항을 제공해요.

  • 새 플랫폼 버전 개정이 시작된 후 모든 새 태스크는 이 개정에 스케줄링돼요.
  • 스케줄링되어 실행 중인 기존 태스크는 태스크 수명 기간 동안 원래 배치된 개정에 남아 있으며 새 개정으로 마이그레이션되지 않아요.
  • 새 태스크는(예: 서비스 업데이트 또는 Fargate 태스크 퇴역의 일부로) 시작 시점에 사용 가능한 최신 플랫폼 버전 개정에 배치돼요.
  • 태스크 퇴역 알림은 AWS Health Dashboard와 등록된 이메일 주소로 이메일을 통해 전송되며 다음 정보가 포함돼요.
    • 태스크 퇴역 날짜 - 태스크는 이 날짜 또는 그 이후에 중지돼요.
    • 독립 실행형 태스크의 경우 태스크 ID.
    • 서비스 태스크의 경우 서비스가 실행되는 클러스터의 ID와 서비스의 ID.
    • 취해야 할 다음 단계.
  • 일반적으로 각 AWS Region에서 서비스 및 독립 실행형 태스크에 대해 각각 하나씩 알림을 보내요. 그러나 예를 들어 퇴역할 태스크가 너무 많아 알림 메커니즘의 한도를 초과하는 경우와 같은 특정 경우에는 태스크 유형별로 두 개 이상의 이벤트를 받을 수 있어요.

퇴역 예정 태스크는 다음 방법으로 식별할 수 있어요.

Health Dashboard AWS Health 알림은 Amazon EventBridge를 통해 Amazon Simple Storage Service 같은 아카이브 스토리지로 보내거나, AWS Lambda 함수 실행 같은 자동화된 작업을 수행하거나, Amazon Simple Notification Service 같은 다른 알림 시스템으로 보낼 수 있어요. 자세한 내용은 Monitoring AWS Health events with Amazon EventBridge 를 참고해 주세요. Amazon Chime, Slack 또는 Microsoft Teams로 알림을 보내는 샘플 구성은 GitHub의 AWS Health Aware 리포지토리를 참고해 주세요.

다음은 샘플 EventBridge 이벤트예요.

{
    "version": "0",
    "id": "3c268027-f43c-0171-7425-1d799EXAMPLE",
    "detail-type": "AWS Health Event",
    "source": "aws.health",
    "account": "123456789012",
    "time": "2023-08-16T23:18:51Z",
    "region": "us-east-1",
    "resources": [
        "cluster|service",
        "cluster|service"
    ],
    "detail": {
        "eventArn": "arn:aws:health:us-east-1::event/ECS/AWS_ECS_TASK_PATCHING_RETIREMENT/AWS_ECS_TASK_PATCHING_RETIREMENT_test1",
        "service": "ECS",
        "eventScopeCode": "ACCOUNT_SPECIFIC",
        "communicationId": "7988399e2e6fb0b905ddc88e0e2de1fd17e4c9fa60349577446d95a18EXAMPLE",
        "lastUpdatedTime": "Wed, 16 Aug 2023 23:18:52 GMT",
        "eventRegion": "us-east-1",
        "eventTypeCode": "AWS_ECS_TASK_PATCHING_RETIREMENT",
        "eventTypeCategory": "scheduledChange",
        "startTime": "Wed, 16 Aug 2023 23:18:51 GMT",
        "endTime": "Fri, 18 Aug 2023 23:18:51 GMT",
        "eventDescription": [
            {
                "language": "en_US",
                "latestDescription": "\\nA software update has been deployed to Fargate which includes CVE patches or other critical patches. No action is required on your part. All new tasks launched automatically uses the latest software version. For existing tasks, your tasks need to be restarted in order for these updates to apply. Your tasks running as part of the following ECS Services will be automatically updated beginning Wed, 16 Aug 2023 23:18:51 GMT.\\n\\nAfter Wed, 16 Aug 2023 23:18:51 GMT, the ECS scheduler will gradually replace these tasks, respecting the deployment settings for your service. Typically, services should see little to no interruption during the update and no action is required. When AWS stops tasks, AWS uses the minimum healthy percent (1) and launches a new task in an attempt to maintain the desired count for the service. By default, the minimum healthy percent of a service is 100 percent, so a new task is started first before a task is stopped. Service tasks are routinely replaced in the same way when you scale the service or deploy configuration changes or deploy task definition revisions. If you would like to control the timing of this restart you can update the service before Wed, 16 Aug 2023 23:18:51 GMT, by running the update-service command from the ECS command-line interface specifying force-new-deployment for services using Rolling update deployment type. For example:\\n\\n$ aws ecs update-service -service service_name \\n--cluster cluster_name -force-new-deployment\\n\\nFor services using Blue/Green deployment type with AWS CodeDeploy:\\nPlease refer to create-deployment document (2) and create new deployment using same task definition revision.\\n\\nFor further details on ECS deployment types, please refer to ECS Deployment Developer Guide (1).\\nFor further details on Fargate's update process, please refer to the AWS Fargate User Guide (3).\\nIf you have any questions or concerns, please contact AWS Support (4).\\n\\n(1) h..."
            }
        ],
      "affectedEntities": [
                {
                    "entityValue": "arn:aws:ecs:eu-west-1:111222333444:task/examplecluster/00805ce1d81940b5a37398e5a2c23333"
                },
                {
                    "entityValue": "arn:aws:ecs:eu-west-1:111222333444:task/examplecluster/00805ce1d81940b5a37398e5a2c25555"
                }
            ]
        ]
    }
}

이메일 AWS 계정 ID의 등록된 이메일로 이메일이 전송돼요.

태스크 퇴역 준비 방법은 Prepare for AWS Fargate task retirement on Amazon ECS 를 참고해 주세요.

태스크 퇴역 알림의 영향받는 리소스 상태 태스크 퇴역 알림에 나열된 각 영향받는 리소스에는 해당 태스크가 아직 퇴역을 기다리고 있는지 반영하는 상태가 있어요. 태스크의 퇴역이 보류 중인 동안 상태는 Impaired 예요. 이는 태스크가 여전히 퇴역 예정인 플랫폼 버전 개정에서 실행 중임을 나타내요. 태스크가 실행을 중지한 후에는 일반적으로 24시간 이내에 상태가 자동으로 Resolved 로 변경돼요. 이는 AWS가 태스크 유지 관리의 일부로 태스크를 퇴역시켰는지, 아니면 예정된 퇴역 전에 직접 태스크를 중지했거나 교체했는지와 관계없이 적용돼요. 알림의 모든 영향받는 리소스가 Resolved 되면 AWS는 퇴역 알림을 닫아요.

태스크 퇴역을 거부할 수 있나요? 아니요. AWS 공동 책임 모델의 일부로 AWS는 AWS Fargate의 기반 인프라 관리 및 유지 관리를 담당해요. 여기에는 보안과 안정성을 보장하기 위한 정기적인 플랫폼 업데이트 수행이 포함돼요. 이러한 업데이트는 AWS가 자동으로 적용하며 고객이 거부할 수 있는 것이 아니에요. 이는 EC2 인스턴스에서 워크로드를 실행하는 것과 달리 AWS Fargate를 사용하는 주요 이점으로, 기본 플랫폼 유지 관리 책임을 AWS가 처리한다는 것이에요. 이 모델을 사용하면 인프라 유지 관리보다는 애플리케이션에 집중할 수 있어요. AWS는 이러한 플랫폼 업데이트를 자동으로 적용함으로써 고객의 어떤 작업 없이도 Fargate 환경을 최신 상태로 안전하게 유지할 수 있어요. 이는 Fargate에서 워크로드를 실행하기 위한 안정적이고 안전한 컨테이너 환경을 제공하는 데 도움이 돼요.

다른 AWS 서비스를 통해 태스크 퇴역 알림을 받을 수 있나요? AWS는 Health Dashboard와 AWS 계정의 기본 이메일 연락처에 태스크 퇴역 알림을 보내요. Health Dashboard는 EventBridge를 포함한 다른 AWS 서비스에 대한 많은 통합을 제공해요. EventBridge를 사용해 알림의 가시성을 자동화할 수 있어요(예: 메시지를 ChatOps 도구로 전달). 자세한 내용은 Solution overview: Capturing task retirement notifications 를 참고해 주세요.

스케줄링된 후 태스크 퇴역을 변경할 수 있나요? 아니요. 스케줄은 기본값이 7일인 태스크 퇴역 대기 시간에 기반해요. 더 많은 시간이 필요하면 대기 기간을 14일로 구성하도록 선택할 수 있어요. 자세한 내용은 Step 2: Capture task retirement notifications to alert teams and take actions 를 참고해 주세요. 2025년 12월 18일부터 Amazon ECS는 Fargate 태스크용 Amazon EC2 이벤트 윈도우를 구성할 수 있게 해 줘요. 태스크 퇴역의 정확한 시점에 대한 세밀한 제어가 필요하다면(예: 업무 시간 중 중단을 피하기 위해 주말로 예약) 태스크, 서비스 또는 클러스터에 Amazon EC2 이벤트 윈도우를 구성할 수 있어요. 이는 Step 1: Set the task wait time 또는 use Amazon EC2 event windows 를 참고해 주세요. 이 구성의 변경은 향후 예약될 퇴역에 적용돼요. 현재 예약된 퇴역은 영향을 받지 않아요. 또한 Fargate 태스크용 Amazon EC2 이벤트 윈도우를 구성하면 태스크 퇴역 대기 시간 구성보다 우선해요. 추가 우려 사항이 있으면 Support에 문의해 주세요.

Amazon ECS는 서비스의 일부인 태스크를 어떻게 처리하나요? 서비스 태스크의 경우 AWS보다 먼저 이 태스크를 교체하려는 경우가 아니라면 태스크 퇴역에 대해 행동할 필요가 없어요. Amazon ECS 스케줄러가 태스크를 중지할 때 minimum healthy percent를 사용하고 서비스의 desired count를 유지하기 위해 새 태스크를 시작해요. Fargate 태스크 퇴역의 영향을 최소화하려면 워크로드를 Amazon ECS 모범 사례에 따라 배포해야 해요. 예를 들어 웹 또는 API 서버 같은 무상태 애플리케이션을 Amazon ECS 서비스로 배포할 때 여러 태스크 레플리카를 배포하고 minimumHealthyPercent 를 100%로 설정해야 해요. 기본적으로 서비스의 minimum healthy percent는 100%예요. 따라서 Fargate가 태스크 퇴역을 시작하면 Amazon ECS는 먼저 새 태스크를 스케줄링하고 실행될 때까지 기다린 후 이전 태스크를 퇴역시켜요. 서비스 태스크는 서비스 스케일링, 구성 변경 배포 또는 태스크 정의 개정 배포 때와 마찬가지로 태스크 퇴역의 일부로 정기적으로 교체돼요. 태스크 퇴역 프로세스 준비에 대해서는 Prepare for AWS Fargate task retirement on Amazon ECS 를 참고해 주세요.

Amazon ECS가 독립 실행형 태스크를 자동으로 처리할 수 있나요? 아니요. AWS는 RunTask , 예약 태스크(예: EventBridge Scheduler 통해), AWS Batch 또는 AWS Step Functions로 시작되는 독립 실행형 태스크에 대한 교체 태스크를 만들 수 없어요. Amazon ECS는 서비스의 일부인 태스크만 관리해요.

태스크 퇴역 중 서비스 가용성 문제 해결 태스크 퇴역 중 Amazon ECS가 교체 태스크를 시작하지 못하면 서비스 가용성이 영향을 받을 수 있어요. 이는 다음과 같은 잘못된 고객 구성 때문에 발생할 수 있어요.

  • IAM 역할 누락 또는 잘못된 구성
  • 대상 서브넷의 용량 부족
  • 보안 그룹 잘못 구성
  • 태스크 정의 오류

Amazon ECS가 교체 태스크를 시작할 수 없을 때 퇴역된 태스크는 교체 없이 중지되어 서비스의 사용 가능한 용량을 줄이고 잠재적으로 서비스 중단을 일으킬 수 있어요. 퇴역 이벤트 중 교체 태스크가 성공적으로 시작되도록 서비스의 태스크 수와 Amazon CloudWatch 메트릭을 모니터링해 주세요.

더 알아보기 (Learn more)