

# Amazon ECS 서비스 배포에 대한 수명 주기 후크
<a name="deployment-lifecycle-hooks"></a>

배포가 시작되면 수명 주기 단계가 진행됩니다. 이러한 단계는 IN\$1PROGRESS 또는 성공과 같은 상태일 수 있습니다. Amazon ECS가 사용자를 대신해 지정된 수명 주기 단계에서 실행하는 Lambda 함수인 수명 주기 후크를 사용할 수 있습니다. 함수는 다음 중 하나일 수 있습니다.
+ 15분 이내에 상태 확인을 검증하는 비동기 API.
+ 수명 주기 후크 완료를 평가하는 다른 비동기 프로세스를 시작하는 폴링 API.

함수 실행이 완료된 후 배포를 계속하려면 `hookStatus`를 반환해야 합니다. `hookStatus`가 반환되지 않거나 함수에 실패하면 배포가 롤백됩니다. 다음은 `hookStatus` 값입니다.
+ `SUCCEEDED` - 배포는 다음 수명 주기 단계로 계속 진행됨
+ `FAILED` - 배포는 마지막으로 성공한 배포로 롤백됩니다.
+ `IN_PROGRESS` - Amazon ECS는 짧은 시간 후에 함수를 다시 실행합니다. 기본적으로 30초 간격이지만 `hookStatus`와 함께 `callBackDelay`를 반환하여 이 값을 사용자 지정할 수 있습니다.

다음 예제에서는 사용자 지정 콜백 지연으로 `hookStatus`를 반환하는 방법을 보여줍니다. 이 예제에서 Amazon ECS는 기본 30초 대신 60초 후에 이 후크를 재시도합니다.

```
{
    "hookStatus": "IN_PROGRESS",
    "callBackDelay": 60
}
```

롤백이 수행되면 Amazon ECS는 다음 수명 주기 단계에 대해 수명 주기 후크를 실행합니다.
+ PRODUCTION\$1TRAFFIC\$1SHIFT
+ TEST\$1TRAFFIC\$1SHIFT

## 수명 주기 페이로드
<a name="service-deployment-lifecycle-payloads"></a>

 ECS 서비스 배포에 대한 수명 주기 후크를 구성하면 Amazon ECS는 배포 프로세스의 특정 단계에서 이 후크를 간접 호출합니다. 각 수명 주기 단계는 배포의 현재 상태에 대한 정보를 포함하는 JSON 페이로드를 제공합니다. 이 문서에서는 각 수명 주기 단계의 페이로드 구조를 설명합니다.

### 공통 페이로드 구조
<a name="common-payload-structure"></a>

 모든 수명 주기 단계 페이로드는 다음과 같은 공통 필드를 포함합니다.
+  `serviceArn` - 서비스의 Amazon 리소스 이름(ARN).
+  `targetServiceRevisionArn` - 배포 중인 대상 서비스 개정의 ARN.
+  `testTrafficWeights` - 해당 테스트 트래픽 가중치 백분율에 대한 서비스 개정 ARN의 맵.
+  `productionTrafficWeights` - 해당 프로덕션 트래픽 가중치 백분율에 대한 서비스 개정 ARN의 맵.

### 수명 주기 단계 페이로드
<a name="lifecycle-stage-payloads"></a>

#### RECONCILE\$1SERVICE
<a name="reconcile-service"></a>

 이 단계는 서비스가 조정될 때 배포 프로세스 시작 시점에 나타납니다. 다음은 이 수명 주기 단계의 페이로드 예제를 보여줍니다.

```
{
  "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService",
  "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892",
  "testTrafficWeights": {
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100,
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0
  },
  "productionTrafficWeights": {
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100,
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0
  }
}
```

 **이 단계에서 기대 사항:** 
+ 기본 태스크 세트 규모가 0%임

#### PRE\$1SCALE\$1UP
<a name="pre-scale-up"></a>

 이 단계는 새 태스크가 스케일 업되기 전에 나타납니다. 다음은 이 수명 주기 단계의 페이로드 예제를 보여줍니다.

```
{
  "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService",
  "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892",
  "testTrafficWeights": {},
  "productionTrafficWeights": {}
}
```

 **이 단계에서 기대 사항:** 
+ 그린 서비스 개정 태스크 규모가 0%임

#### POST\$1SCALE\$1UP
<a name="post-scale-up"></a>

 이 단계는 새 태스크가 스케일 업되고 정상 상태가 된 후에 나타납니다. 다음은 이 수명 주기 단계의 페이로드 예제를 보여줍니다.

```
{
  "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService",
  "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892",
  "testTrafficWeights": {},
  "productionTrafficWeights": {}
}
```

 **이 단계에서 기대 사항:** 
+ 그린 서비스 개정 태스크 규모가 100%임
+ 그린 서비스 개정의 태스크가 정상 상태임

#### TEST\$1TRAFFIC\$1SHIFT
<a name="test-traffic-shift"></a>

 이 단계는 테스트 트래픽이 그린 서비스 개정 태스크로 전환될 때 나타납니다.

다음은 이 수명 주기 단계의 페이로드 예제를 보여줍니다.

```
{
  "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService",
  "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892",
  "testTrafficWeights": {
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100,
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0
  },
  "productionTrafficWeights": {}
}
```

 **이 단계에서 기대 사항:** 
+ 테스트 트래픽이 그린 서비스 개정 태스크로 이동하는 중입니다.

#### POST\$1TEST\$1TRAFFIC\$1SHIFT
<a name="post-test-traffic-shift"></a>

 이 단계는 테스트 트래픽이 새 태스크로 완전히 전환된 후에 나타납니다.

다음은 이 수명 주기 단계의 페이로드 예제를 보여줍니다.

```
{
  "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService",
  "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892",
  "testTrafficWeights": {},
  "productionTrafficWeights": {}
}
```

 **이 단계에서 기대 사항:** 
+ 테스트 트래픽의 100%가 그린 서비스 개정 태스크로 이동했습니다.

#### PRODUCTION\$1TRAFFIC\$1SHIFT
<a name="production-traffic-shift"></a>

 이 단계는 프로덕션 트래픽이 그린 서비스 개정 태스크로 전환될 때 나타납니다.

```
{
  "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService",
  "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892",
  "testTrafficWeights": {},
  "productionTrafficWeights": {
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100,
    "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0
  }
}
```

 **이 단계에서 기대 사항:** 
+ 프로덕션 트래픽이 그린 서비스 개정으로 이동하는 중입니다.

#### POST\$1PRODUCTION\$1TRAFFIC\$1SHIFT
<a name="post-production-traffic-shift"></a>

 이 단계는 프로덕션 트래픽이 그린 서비스 개정 태스크로 완전히 전환된 후에 나타납니다.

```
{
  "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService",
  "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892",
  "testTrafficWeights": {},
  "productionTrafficWeights": {}
}
```

 **이 단계에서 기대 사항:** 
+ 프로덕션 트래픽의 100%가 그린 서비스 개정 태스크로 이동했습니다.

### 수명 주기 단계 범주
<a name="lifecycle-stage-categories"></a>

 수명 주기 단계는 다음과 같은 두 가지 범주로 구분됩니다.

1.  **단일 간접 호출 단계** - 이 단계는 서비스 배포 중에 한 번만 간접 호출됩니다.
   + PRE\$1SCALE\$1UP
   + POST\$1SCALE\$1UP
   + POST\$1TEST\$1TRAFFIC\$1SHIFT
   + POST\$1PRODUCTION\$1TRAFFIC\$1SHIFT

1.  **반복 간접 호출 단계** - 롤백 작업이 수행되는 경우와 같이 서비스 배포 중에 이 단계는 여러 번 간접 호출될 수 있습니다.
   + TEST\$1TRAFFIC\$1SHIFT
   + PRODUCTION\$1TRAFFIC\$1SHIFT

### 수명 주기 후크 중 배포 상태
<a name="deployment-status-during-lifecycle-hooks"></a>

 수명 주기 후크가 실행되는 동안 배포 상태는 모든 수명 주기 단계에서 `IN_PROGRESS`입니다.


| 수명 주기 단계 | 배포 상태 | 
| --- | --- | 
| RECONCILE\$1SERVICE | IN\$1PROGRESS | 
| PRE\$1SCALE\$1UP | IN\$1PROGRESS | 
| POST\$1SCALE\$1UP | IN\$1PROGRESS | 
| TEST\$1TRAFFIC\$1SHIFT | IN\$1PROGRESS | 
| POST\$1TEST\$1TRAFFIC\$1SHIFT | IN\$1PROGRESS | 
| PRODUCTION\$1TRAFFIC\$1SHIFT | IN\$1PROGRESS | 
| POST\$1PRODUCTION\$1TRAFFIC\$1SHIFT | IN\$1PROGRESS | 