

# Amazon ECS에서 AWS Fargate에 대한 태스크 사용 중지 및 유지 관리
<a name="task-maintenance"></a>

AWS에서는 AWS Fargate의 기본 인프라를 유지 관리합니다. AWS에서는 플랫폼 버전 개정을 인프라의 새 개정으로 교체해야 하는 시기를 결정합니다. 이를 작업 사용 중지라고 합니다. AWS에서는 플랫폼 버전 개정이 사용 중지되면 작업 사용 중지 알림을 보냅니다. 지원되는 플랫폼 버전을 정기적으로 업데이트하여 Fargate 런타임 소프트웨어 및 운영 체제 및 컨테이너 런타임과 같은 기본 종속성에 대한 업데이트를 포함하는 새 개정을 도입합니다. 최신 개정이 사용 가능해지면 모든 고객 워크로드가 Fargate 플랫폼 버전의 최신 개정에서 실행되도록 하기 위해 이전 개정을 사용 중지합니다. 수정 버전이 사용 중지되면 해당 수정 버전에서 실행 중인 모든 작업은 중지됩니다.

Amazon ECS 작업은 서비스 작업 또는 독립 실행형 작업으로 분류할 수 있습니다. 서비스 작업은 서비스의 일부로 배포되고 Amazon ECS 일정에서 제어합니다. 자세한 내용은 [Amazon ECS 서비스](ecs_services.md) 섹션을 참조하세요. 독립 실행형 작업은 예약된 작업(Amazon EventBridge에서 시작), AWS Batch 또는 AWS Step Functions와 같은 외부 스케줄러에서 시작하거나 직접 Amazon ECS `RunTask` API에서 시작하는 작업입니다. Amazon ECS 스케줄러가 자동으로 태스크를 대체하므로 서비스 태스크에 대한 태스크 사용 중지에 대응하여 어떤 조치도 취할 필요가 없습니다.

독립 실행형 태스크의 경우 태스크 사용 중지에 대응하여 추가적인 처리를 수행해야 할 수도 있습니다. 자세한 내용은 [Amazon ECS에서 독립 실행형 작업을 자동으로 처리할 수 있나요?](#task-retirement-standalone-tasks) 섹션을 참조하세요.

서비스 태스크의 경우 AWS 전에 먼저 이러한 태스크를 대체하지 않는 한, 태스크 사용 중지에 대한 어떤 조치도 취할 필요가 없습니다. Amazon ECS 스케줄러에서 태스크를 중지하는 경우 `maximumPercent`를 사용하며, 원하는 서비스 개수를 유지하기 위해 새 태스크를 시작합니다. 모범 사례를 따라 태스크 사용 중지의 영향을 최소화합니다. 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는 작업 사용 중지 통지 없이 호스트를 교체합니다.

## 태스크 사용 중지 공지 개요
<a name="task-retirement-notice"></a>

AWS에서 플랫폼 버전 개정을 사용 중지해야 한다고 표시하면 모든 리전에서 해당 플랫폼 버전 개정에서 실행 중인 모든 태스크를 식별합니다.

다음 그림은 새로운 개정 출시부터 플랫폼 개정 사용 중지까지 Fargate 플랫폼 버전 개정의 수명 주기를 보여줍니다.

![\[Fargate 태스크 사용 중지 수명 주기를 보여주는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/images/fargate-task-retirement.png)


다음 정보는 세부 사항을 제공합니다.
+ 새 플랫폼 버전 개정이 시작되면 모든 새 태스크는 이 개정에 따라 예약됩니다.
+ 예약되어 실행 중인 기존 태스크는 태스크 기간 동안 원래 적용되었던 개정에 그대로 유지되며 새 개정으로 마이그레이션되지 않습니다.
+ 예를 들어 서비스 업데이트 또는 Fargate 태스크 사용 중지와 같은 새로운 태스크는 출시 시점에 사용 가능한 최신 플랫폼 버전 개정에 따라 배치됩니다.

태스크 사용 중지 알림은 AWS Health 대시보드 및 등록된 이메일 주소로의 이메일을 통해 전송되며, 여기에는 다음 정보가 포함됩니다.
+ 작업 사용 중지 날짜 - 이 날짜 또는 이후에 작업이 중지됩니다.
+ 독립 실행형 작업의 경우 작업의 ID
+ 서비스 작업의 경우 서비스가 실행되는 클러스터의 ID와 서비스의 ID
+ 수행해야 하는 다음 단계

일반적으로 각 AWS 리전에서 서비스 및 독립 실행형 작업에 대해 각각 하나의 알림을 보냅니다. 하지만 경우에 따라 각 작업 유형에 대해 두 개 이상의 이벤트를 수신할 수 있습니다. 예를 들어 사용 중지할 작업이 너무 많아 알림 메커니즘의 한도를 초과하는 경우가 이에 해당합니다.

사용 중지가 예약된 작업은 다음과 같은 방법으로 식별할 수 있습니다.
+ Health Dashboard은 

  AWS Health 알림은 Amazon Storage Service와 같은 아카이브 스토리지에 대한 Amazon EventBridge, AWS Lambda 함수 실행과 같은 자동화된 작업 수행 또는 Amazon Simple Notification Service와 같은 기타 알림 시스템을 통해 전송될 수 있습니다. 자세한 내용을 알아보려면 [Amazon EventBridge를 사용하여 AWS Health 이벤트 모니터링](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html)을 참조하세요. Amazon Chime, Slack 또는 Microsoft Teams에 알림을 보내기 위한 샘플 구성은 GitHub의 [AWS Health Aware](https://github.com/aws-samples/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) https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html\\n(2) https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html\\n(3) https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-maintenance.html\\n(4) https://aws.amazon.com/support\\n\\nA list of your affected resources(s) can be found in the 'Affected resources' tab in the 'Cluster/ Service' format in the AWS Health Dashboard. \\n\\n"
              }
          ],
        "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에 대해 등록된 이메일로 이메일이 전송됩니다.

태스크 사용 중지를 준비하는 방법에 대한 자세한 내용은 [Amazon ECS에서 AWS Fargate 태스크 사용 중지 준비](prepare-task-retirement.md) 섹션을 참조하세요.

## 태스크 사용 중지를 옵트아웃할 수 있나요?
<a name="task-retirement-opt-out"></a>

아니요. AWS 공동 책임 모델의 일부로, AWS는 AWS Fargate의 기본 인프라를 관리하고 유지 보수할 책임이 있습니다. 여기에는 보안과 안정성을 보장하기 위한 주기적인 플랫폼 업데이트 수행이 포함됩니다. 이러한 업데이트는 AWS에 의해 자동으로 적용되며 고객이 옵트아웃할 수 없습니다. 이는 EC2 인스턴스에서 워크로드를 실행할 때와 비교하여 AWS에서 기본 플랫폼 유지 관리를 처리한다는 점에서 AWS Fargate를 사용할 때의 주요 이점입니다. 이 모델을 사용하면 인프라 유지 관리가 아닌 애플리케이션에 집중할 수 있습니다. AWS는 이러한 플랫폼 업데이트를 자동으로 적용함으로써 고객이 별도의 조치를 취하지 않아도 Fargate 환경을 최신 상태로 안전하게 유지할 수 있습니다. 따라서 Fargate에서 워크로드를 실행하기 위한 안정적이고 안전한 컨테이너화된 환경을 제공하는 데 도움이 됩니다.

## 다른 AWS 서비스를 통해 작업 사용 중지 알림을 받을 수 있나요?
<a name="task-retirement-event"></a>

AWS에서는 Health Dashboard 및 AWS 계정의 기본 이메일 연락처로 작업 사용 중지 알림을 보냅니다. Health Dashboard에서는 EventBridge를 비롯한 다른 AWS 서비스와의 다양한 통합을 제공합니다. EventBridge를 사용하여 통지 가시성을 자동화할 수 있습니다(예: 메시지를 ChatOps 도구로 전달). 자세한 내용은 [Solution overview: Capturing task retirement notifications](https://aws.amazon.com/blogs/containers/improving-operational-visibility-with-aws-fargate-task-retirement-notifications/)를 참조하세요.

## 태스크 사용 중지가 예약된 이후에 태스크 사용 중지를 변경할 수 있나요?
<a name="task-retirement-change"></a>

 아니요. 해당 일정은 기본값 7일인 태스크 사용 중지 대기 시간을 기준으로 설정됩니다. 시간이 더 필요한 경우 대기 시간을 14일로 구성할 수 있습니다. 자세한 내용은 [2단계: 태스크 사용 중지 알림을 캡처하여 팀에 알리고 조치 취하기](prepare-task-retirement.md#prepare-task-retirement-capture-task-events) 섹션을 참조하세요.

2025년 12월 18일부터 Amazon ECS에서는 Fargate 작업에 대해 [Amazon EC2 이벤트 기간](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)을 구성할 수 있습니다. 사용 중지 시간을 정확하게 제어해야 하는 경우, 예를 들어 업무 시간 중 서비스 중단을 피하기 위해 주말에 사용 중지를 예약하고자 할 때, 태스크, 서비스 또는 클러스터에 대해 Amazon EC2 이벤트 기간을 구성할 수 있습니다([1단계: 태스크 대기 시간 설정 또는 Amazon EC2 이벤트 기간 사용](prepare-task-retirement.md#prepare-task-retirement-set-time) 참조). 이 구성의 변경 내용은 향후 예약될 사용 중지에만 적용됩니다. 현재 예약된 사용 중지는 영향을 받지 않습니다. 또한 Fargate 태스크에 대해 Amazon EC2 이벤트 기간을 구성하면, 태스크 사용 중지 대기 시간 설정보다 우선적으로 적용됩니다. 추가 문의 사항이 있는 경우 지원에 문의하세요.

## Amazon ECS는 서비스의 일부인 태스크를 어떻게 처리하나요?
<a name="task-retirement-service-works"></a>

서비스 태스크의 경우 AWS 전에 먼저 이러한 태스크를 대체하지 않는 한, 태스크 사용 중지에 대응하여 어떤 조치도 취할 필요가 없습니다. Amazon ECS 스케줄러에서 태스크를 중지하는 경우 최소 정상 상태 백분율을 사용하며, 원하는 서비스 개수를 유지하기 위해 새 작업을 시작합니다. Fargate 사용 중지의 영향을 최소화하려면 Amazon ECS 모범 사례에 따라 워크로드를 배포해야 합니다. 예를 들어, 상태 비저장 애플리케이션을 웹 또는 API 서버와 같은 Amazon ECS 서비스로 배포하는 경우, 고객은 여러 개의 태스크 복제본을 배포하고 minimumHealthyPercent를 100%로 설정해야 합니다. 기본적으로 서비스의 최소 상태 백분율은 100%입니다. 따라서 Fargate가 태스크 사용 중지를 시작하면 Amazon ECS는 먼저 새 태스크를 예약한 다음 해당 태스크가 실행될 때까지 기다렸다가 이전 태스크를 사용 중지합니다. 태스크 사용 중지의 일환으로 서비스 태스크는 서비스 규모를 조정하거나 구성 변경 내용을 배포하거나 태스크 정의 개정을 배포할 때 동일한 방식으로 정기적으로 대체됩니다. 태스크 사용 중지 프로세스를 준비하려면 [Amazon ECS에서 AWS Fargate 태스크 사용 중지 준비](prepare-task-retirement.md) 섹션을 참조하세요.

## Amazon ECS에서 독립 실행형 작업을 자동으로 처리할 수 있나요?
<a name="task-retirement-standalone-tasks"></a>

 아니요. AWS에서는 `RunTask`, 예약된 작업(예: EventBridge 스케줄러를 통해), AWS Batch 또는 AWS Step Functions에 의해 시작된 독립 실행형 작업에 대한 대체 작업을 생성할 수 없습니다. Amazon ECS는 서비스의 일부인 작업만 관리합니다.

## 태스크 사용 중지 중 서비스 가용성 문제 해결
<a name="task-retirement-service-availability"></a>

Amazon ECS가 태스크 사용 중지 중에 대체 태스크를 시작할 수 없는 경우 서비스 가용성에 영향을 미칠 수 있습니다. 이는 다음과 같은 잘못된 고객 구성으로 인해 발생할 수 있습니다.
+ 누락되었거나 잘못 구성된 IAM 역할
+ 대상 서브넷의 용량 부족
+ 보안 그룹 구성 오류
+ 태스크 정의 오류

Amazon ECS가 대체 태스크를 시작할 수 없는 경우 사용 중지된 태스크가 대체 없이 중지되므로 서비스의 사용 가능한 용량이 줄어들고 잠재적으로 서비스 중단이 발생할 수 있습니다. 서비스의 태스크 수와 Amazon CloudWatch 지표를 모니터링하여 사용 중지 이벤트 중에 대체 태스크가 성공적으로 시작되도록 합니다.

# Amazon ECS에서 AWS Fargate 태스크 사용 중지 준비
<a name="prepare-task-retirement"></a>

태스크 사용 중지를 준비하려면 다음 작업을 수행하세요.

1. 태스크 사용 중지 대기 시간을 설정하거나 Amazon EC2 이벤트 기간을 사용합니다.

1. 태스크 사용 중지 알림을 캡처하여 팀원에게 알릴 수 있습니다.

1. 서비스 업데이트 시 force-deployment 옵션을 사용하여 서비스의 모든 태스크가 최신 플랫폼 개정에서 실행되도록 할 수 있습니다. 이 단계는 선택 사항입니다.

## 1단계: 태스크 대기 시간 설정 또는 Amazon EC2 이벤트 기간 사용
<a name="prepare-task-retirement-set-time"></a>

 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](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting-default.html) 및 [put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)을 참조하세요.

**fargateEventWindows 계정 설정 사용**

2025년 12월 18일부터 Amazon ECS에서는 Fargate 작업에 대해 [Amazon EC2 이벤트 기간](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)을 구성할 수 있습니다. 사용 중지 시간을 정확하게 제어해야 하는 경우, 예를 들어 업무 시간 중 서비스 중단을 피하기 위해 주말에 사용 중지를 예약하고자 할 때, 태스크, 서비스 또는 클러스터에 대해 Amazon EC2 이벤트 기간을 구성할 수 있습니다.

이벤트 기간을 사용하는 경우, Fargate는 사용자 조치로 중지되거나 하드웨어 성능 저하와 같은 치명적인 상태 이벤트가 발생하지 않는 한, 태스크가 다음 사용 가능한 이벤트 기간 내에서 사용 중지되기 전 최소 3일 이상 실행되도록 보장합니다.

`fargateEventWindows` 계정 설정을 `enabled`로 설정합니다. 이 설정은 루트 사용자 또는 관리자 권한이 있는 사용자 계정으로 다음 API 중 하나를 사용하여 구성할 수 있습니다. `put-account-setting-default` 또는 `put-account-setting`.

 각 Amazon EC2 이벤트 기간은 주당 최소 4시간 이상 열려 있어야 하며, 각 시간 범위는 최소 2시간이어야 합니다. 대규모 클러스터 및 서비스의 경우, 이벤트 기간을 길게 설정(8시간 이상)하거나 최소 3일마다 한 번씩 발생하는 더 잦은 시간 범위를 구성하는 것을 권장합니다. Amazon EC2 이벤트 기간과 관련된 추가 고려 사항은 [사용 설명서](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html#event-windows-considerations)에서 확인할 수 있습니다. 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-window` API를 사용하며, 시간 범위 또는 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" \
                      --name myEventWindowName
  ```

  또는 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" \
                      --name myEventWindowName
  ```
+ 그런 다음 EC2 `associate-instance-event-window` API를 사용하여 이벤트 기간을 특정 서비스, 클러스터 또는 계정 내 모든 태스크와 연결할 수 있습니다.
  + ECS 서비스 태스크의 경우

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:serviceArn,Value=your-service-arn}]"
    ```
  + ECS 클러스터의 경우

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:clusterArn,Value=your-cluster-arn}]"
    ```
  + 이벤트 기간을 계정 내 모든 태스크와 연결하려면

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:fargateTask,Value=true}]"
    ```

여러 개의 키-값 쌍을 사용하여 여러 서비스 또는 클러스터에 이벤트 기간을 연결할 수 있습니다.

Fargate는 다음 순서로 각 태스크에 대한 이벤트 기간을 선택합니다.
+ 태스크 서비스에 연결된 이벤트 기간이 있으면 사용합니다. 독립형 태스크 또는 비관리형 태스크에는 적용되지 않습니다.
+ 태스크의 클러스터에 연결된 이벤트 기간이 있으면 사용합니다.
+ 모든 Fargate 태스크에 설정된 이벤트 기간이 있으면 사용합니다.
+ 태스크에 해당하는 이벤트 기간이 없으면 `fargateTaskRetirementWaitPeriod` 설정이 적용됩니다.

** Fargate 태스크 유지 관리를 위한 이벤트 기간 구성**

여러 ECS 서비스를 운영하며 서로 다른 가용성 요구 사항이 있는 경우, 정밀한 태스크 사용 중지 제어가 필요합니다. 다음과 같이 여러 이벤트 기간을 구성할 수 있습니다.
+ **모든 Fargate 태스크 기본 유지 관리**: 사용량이 적은 시간대(매일 자정 12시\$1오전 4시)에 루틴 유지 관리용 이벤트 기간을 생성하고, ` aws:ecs:fargateTask` 태그를 사용하여 모든 Fargate 태스크와 연결합니다.
+ **개발 클러스터 주말 전용 유지 관리**: 주말 중단이 허용되는 서비스가 있는 개발 클러스터의 경우, 24시간 주말 기간(토요일\$1일요일, 종일)을 생성하고, 클러스터 ARN과 함께 `aws:ecs:clusterArn` 태그로 클러스터에 연결합니다.
+ **미션 크리티컬 서비스의 제한된 기간**: 평일 높은 가동 시간이 필요한 미션 크리티컬 결제 처리 서비스의 경우, 유지 관리를 주말 이른 아침(토\$1일, 자정 12시\$1오전 4시)으로 제한하고, 서비스 ARN과 함께 `aws:ecs:serviceArn` 태그로 특정 서비스에 연결합니다.

이렇게 구성하면 결제 서비스는 주말 전용 이벤트 기간을 사용하고, 개발 클러스터 서비스 및 태스크는 주말 24시간 기간을 사용하며, 나머지 Fargate 태스크는 기본 일일 유지 관리 기간을 사용합니다.

자세한 내용은 *Amazon Elastic Container Service API 참조*의 [put-account-setting-default](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting-default.html) 및 [put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)을 참조하세요.

## 2단계: 태스크 사용 중지 알림을 캡처하여 팀에 알리고 조치 취하기
<a name="prepare-task-retirement-capture-task-events"></a>

태스크 사용 중지가 예정되어 있으면 AWS는 AWS Health Dashboard와 AWS 계정의 기본 이메일 연락처로 태스크 사용 중지 알림을 보냅니다. AWS Health Dashboard에서는 Amazon EventBridge를 비롯한 다른 AWS 서비스와의 다양한 통합을 제공합니다. EventBridge를 사용하여 태스크 사용 중지 알림에서 자동화를 구축할 수 있습니다. 예를 들어, 메시지를 ChatOps 도구로 전달하여 예정된 사용 중지의 가시성을 높입니다. AWS Health 인식은 AWS Health Dashboard의 기능과 조직 전체에 알림을 배포할 수 있는 방법을 보여주는 리소스입니다. 태스크 사용 중지 알림을 Slack과 같은 채팅 애플리케이션으로 전달할 수 있습니다.

다음 그림은 솔루션 개요를 보여줍니다.

![\[Fargate 태스크 사용 중지 공지를 캡처하기 위한 Fargate 솔루션을 보여주는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/images/fargate-task-retirement-solution.png)


다음 정보는 세부 사항을 제공합니다.
+ 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 함수를 트리거합니다. 자세한 내용은 [수신 웹후크](https://slack.com/marketplace/A0F7XDUAZ-incoming-webhooks)를 참조하세요.

코드 예제는 Github의 [Capturing AWS Fargate Task Retirement Notifications](https://github.com/aws-samples/capturing-aws-fargate-task-retirement-notifications/tree/main)를 참조하세요.

## 3단계: 태스크 대체 제어
<a name="prepare-task-retirement-change-time"></a>

태스크 사용 중지의 정확한 타이밍을 제어할 수는 없지만 대기 시간을 정의할 수는 있습니다. 원하는 일정에 따라 태스크를 대체하는 것을 제어하려면 태스크 사용 중지 공지를 캡처하여 태스크 사용 중지 날짜를 먼저 파악하면 됩니다. 그런 다음 서비스를 다시 배포하여 대체 태스크를 시작하고 독립 실행형 태스크도 마찬가지로 대체할 수 있습니다. 롤링 배포를 사용하는 서비스의 경우 사용 중지 시작 시간 전에 `force-deployment` 옵션과 함께 `update-service`를 사용하여 서비스를 업데이트합니다.

다음 `update-service` 예제에서는 `force-deployment` 옵션을 사용합니다.

```
aws ecs update-service —-service service_name \ 
    --cluster cluster_name \
     --force-new-deployment
```

블루/그린 배포를 사용하는 서비스의 경우 AWS CodeDeploy에서 새 배포를 생성해야 합니다. 배포를 생성하는 방법에 대한 자세한 내용은 **AWS Command Line Interface 참조의 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html)를 참조하세요.