

# 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 秒間隔ですが、この値は `callBackDelay` とともに `hookStatus` を返すことでカスタマイズできます。

次の例では、カスタムコールバックの遅延を使用して `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>

 ライフサイクルステージは 2 つのカテゴリに分類されます。

1.  **1 回の呼び出しステージ** – これらのステージは、サービスのデプロイ中に 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` になります。


| Lifecycle Stage | デプロイのステータス | 
| --- | --- | 
| 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 | 