

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kait siklus hidup untuk penerapan layanan Amazon ECS
<a name="deployment-lifecycle-hooks"></a>

Ketika penerapan dimulai, itu berlangsung melalui tahapan siklus hidup. Setiap tahap bisa dalam keadaan seperti `IN_PROGRESS` atau`SUCCEEDED`. Anda dapat menggunakan kait siklus hidup, yang merupakan fungsi Lambda yang dijalankan Amazon ECS atas nama Anda pada tahapan siklus hidup yang ditentukan. Setiap pemanggilan menyertakan payload JSON dengan informasi tentang status penerapan saat ini.

## Pengait siklus hidup
<a name="lifecycle-hook-status"></a>

Kait siklus hidup adalah fungsi Lambda yang dipanggil Amazon ECS pada tahap penerapan tertentu. Anda dapat menggunakan hook untuk menjalankan pengujian validasi, menegakkan kebijakan tata kelola, atau menerapkan langkah persetujuan manual sebelum penerapan berlangsung.

Saat Amazon ECS memanggil hook Anda, fungsi Anda harus mengembalikan objek JSON yang berisi bidang. `hookStatus` Anda dapat secara opsional menyertakan `callBackDelay` untuk mengontrol waktu coba lagi dan `hookDetails` meneruskan data di antara pemanggilan. Jika fungsi Anda tidak mengembalikan yang valid`hookStatus`, atau jika gagal, Amazon ECS mengembalikan penerapan.

### Nilai HookStatus
<a name="hook-status-values"></a>

Berikut ini adalah `hookStatus` nilai yang valid:
+ `SUCCEEDED`— Penerapan berlanjut ke tahap siklus hidup berikutnya.
+ `FAILED`- Amazon ECS mengembalikan penerapan ke revisi layanan terakhir yang berhasil.
+ `IN_PROGRESS`- Amazon ECS memanggil fungsi lagi setelah penundaan. Secara default, penundaan adalah 30 detik. Anda dapat menyesuaikan nilai ini dengan mengembalikan `callBackDelay` di samping`hookStatus`.

Contoh berikut menunjukkan cara mengembalikan `hookStatus` dengan penundaan callback kustom. Dalam contoh ini, Amazon ECS mencoba ulang hook setelah 60 detik, bukan 30 detik default:

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

### Melewati status dengan HookDetails
<a name="hook-details"></a>

`hookDetails`Bidang ini adalah kamus yang dapat Anda gunakan untuk meneruskan data ke dalam fungsi kait siklus hidup Anda. Ada dua cara untuk mengisi`hookDetails`:
+ **Saat pembuatan atau pembaruan layanan** — Tentukan `hookDetails` dalam konfigurasi kait siklus hidup dalam definisi layanan Anda. Amazon ECS meneruskan data ini ke fungsi Anda pada setiap pemanggilan. Gunakan ini untuk membuat kait Anda dapat digunakan kembali di beberapa layanan dengan meneruskan konfigurasi khusus layanan.
+ **Saat runtime melalui respons IN\_PROGRESS** - Kembali `hookDetails` bersama status hook. `IN_PROGRESS` Amazon ECS meneruskan data ini kembali ke fungsi Anda pada pemanggilan berikutnya. Gunakan ini untuk mempertahankan status di antara pemanggilan tanpa penyimpanan eksternal.

Contoh berikut menunjukkan konfigurasi kait siklus hidup dalam definisi layanan yang meneruskan nama bucket S3 ke fungsi:

```
{
    "hookTargetArn": "arn:aws:lambda:us-west-2:123456789012:function:my-approval-hook",
    "roleArn": "arn:aws:iam::123456789012:role/ecs-lambda-invoke-role",
    "lifecycleStages": [
        "POST_TEST_TRAFFIC_SHIFT"
    ],
    "hookDetails": {
        "S3_BUCKET_NAME": "my-approval-bucket"
    }
}
```

Ketika fungsi Anda kembali`IN_PROGRESS`, Anda juga dapat memasukkan `hookDetails` dalam respons. Amazon ECS menggabungkan data ini dan meneruskannya kembali pada pemanggilan berikutnya. Kasus penggunaan umum termasuk meneruskan penghitung metrik atau ARN sumber daya eksternal di antara pemanggilan.

```
{
    "hookStatus": "IN_PROGRESS",
    "callBackDelay": 30,
    "hookDetails": {
        "approvalChecked": true,
        "S3_BUCKET_NAME": "my-approval-bucket"
    }
}
```

Pada pemanggilan berikutnya, Amazon ECS menyertakan muatan `hookDetails` dalam acara bersama: `executionDetails`

```
{
  "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc",
  "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  },
  "hookDetails": {
    "approvalChecked": true,
    "S3_BUCKET_NAME": "my-approval-bucket"
  }
}
```

Fungsi Anda dapat membaca `event["hookDetails"]` untuk mengakses konfigurasi dan status dari pemanggilan sebelumnya.

**catatan**  
Data yang ditambahkan `hookDetails` pada saat runtime hanya bertahan di antara pemanggilan hook yang sama dalam satu penerapan. Data tidak terbawa di antara kait yang berbeda dalam penerapan yang sama atau kait yang sama dalam penerapan yang berbeda.

## Kategori tahap siklus hidup
<a name="lifecycle-stage-categories"></a>

Tahapan siklus hidup terbagi dalam dua kategori:

1. **Tahapan pemanggilan tunggal** - Amazon ECS memanggil tahapan ini hanya sekali selama penerapan layanan:
   + `RECONCILE_SERVICE`
   + `PRE_SCALE_UP`
   + `POST_SCALE_UP`
   + `POST_TEST_TRAFFIC_SHIFT`
   + `POST_PRODUCTION_TRAFFIC_SHIFT`

1. **Tahapan pemanggilan berulang —** Amazon ECS dapat memanggil tahapan ini beberapa kali selama penerapan layanan, termasuk selama rollback:
   + `TEST_TRAFFIC_SHIFT`
   + `PRODUCTION_TRAFFIC_SHIFT`

## Muatan siklus hidup
<a name="service-deployment-lifecycle-payloads"></a>

### Struktur muatan umum
<a name="common-payload-structure"></a>

Saat Amazon ECS memanggil fungsi Lambda kait siklus hidup Anda, payload acara berisi bidang tingkat atas berikut:
+ `executionId`— Pengenal unik untuk eksekusi hook ini.
+ `lifecycleStage`— Tahap siklus hidup saat ini (misalnya,`PRODUCTION_TRAFFIC_SHIFT`).
+ `resourceArn`— ARN dari sumber daya yang terkait dengan penyebaran.
+ `executionDetails`— Objek yang berisi informasi spesifik penerapan yang dijelaskan dalam daftar berikut.

Objek `executionDetails` berisi kolom-kolom berikut:
+  `serviceArn`— Nama Sumber Daya Amazon (ARN) dari layanan. 
+  `targetServiceRevisionArn`— ARN dari revisi layanan target sedang dikerahkan. 
+  `testTrafficWeights`— Peta ARN revisi layanan untuk persentase berat lalu lintas uji yang sesuai. 
+  `productionTrafficWeights`— Peta ARN revisi layanan untuk persentase berat lalu lintas produksi yang sesuai. 

Contoh berikut menunjukkan struktur acara lengkap yang diterima fungsi Lambda Anda:

```
{
  "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5",
  "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0
    }
  }
}
```

### Muatan tahap siklus hidup
<a name="lifecycle-stage-payloads"></a>

Bagian berikut menunjukkan contoh muatan untuk setiap tahap siklus hidup. Dalam contoh ini, revisi layanan hijau (`9313423515462893900`) adalah revisi baru yang diterapkan, dan revisi layanan biru (`1920498462936580504`) adalah revisi produksi yang ada.

#### PRE\_SCALE\_UP
<a name="pre-scale-up"></a>

Tahap ini terjadi sebelum Amazon ECS meluncurkan tugas revisi layanan hijau. Revisi layanan hijau belum dimulai, dan tidak ada lalu lintas yang diarahkan ke sana.

```
{
  "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc",
  "lifecycleStage": "PRE_SCALE_UP",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

#### POST\_SCALE\_UP
<a name="post-scale-up"></a>

Tahap ini terjadi setelah Amazon ECS meluncurkan tugas revisi layanan hijau dan mereka sehat. Tugas hijau berjalan tetapi belum menerima lalu lintas apa pun.

```
{
  "executionId": "8b095b05-7bb0-4c56-a223-a3f61f4f9295",
  "lifecycleStage": "POST_SCALE_UP",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

#### TEST\_TRAFFIC\_SHIFT
<a name="test-traffic-shift"></a>

Tahap ini terjadi ketika Amazon ECS menggeser lalu lintas uji ke revisi layanan hijau. `testTrafficWeights`Pertunjukan revisi hijau menerima 100% lalu lintas uji sedangkan revisi biru menerima 0%. Lalu lintas produksi terus mengalir ke revisi biru.

```
{
  "executionId": "779085de-ab47-42bc-84ad-41f9914a8643",
  "lifecycleStage": "TEST_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0
    },
    "productionTrafficWeights": {}
  }
}
```

#### POST\_TEST\_TRAFFIC\_SHIFT
<a name="post-test-traffic-shift"></a>

Tahap ini terjadi setelah Amazon ECS menyelesaikan uji pergeseran lalu lintas. Revisi layanan hijau menangani 100% lalu lintas uji.

```
{
  "executionId": "3a0345ba-b029-404b-890d-7da2a4b266aa",
  "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

#### PRODUCTION\_TRAFFIC\_SHIFT
<a name="production-traffic-shift"></a>

Tahap ini terjadi ketika Amazon ECS menggeser lalu lintas produksi ke revisi layanan hijau. `productionTrafficWeights`Pertunjukan revisi hijau menerima 100% dari lalu lintas produksi sementara revisi biru menerima 0%.

```
{
  "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5",
  "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0
    }
  }
}
```

#### POST\_PRODUCTION\_TRAFFIC\_SHIFT
<a name="post-production-traffic-shift"></a>

Tahap ini terjadi setelah Amazon ECS menyelesaikan pergeseran lalu lintas produksi. Revisi layanan hijau sekarang menangani semua lalu lintas produksi.

```
{
  "executionId": "5f40ed04-7e54-437d-b95d-98bc872fec49",
  "lifecycleStage": "POST_PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

## Kait siklus hidup selama rollback
<a name="lifecycle-hooks-during-rollback"></a>

Tidak ada tahap `ROLLBACK` siklus hidup khusus. Ketika rollback terjadi, Amazon ECS memanggil kembali kait yang terdaftar di `PRODUCTION_TRAFFIC_SHIFT` dan `TEST_TRAFFIC_SHIFT` tahapan (tahap pemanggilan berulang). Selama rollback, `productionTrafficWeights` di payload menunjukkan lalu lintas bergeser kembali ke revisi biru.

`targetServiceRevisionArn`Masih ada revisi hijau ARN karena masih menjadi target penyebaran asli, meskipun lalu lintas yang bergeser menjauh darinya.

Contoh berikut menunjukkan `PRODUCTION_TRAFFIC_SHIFT` payload selama rollback. Perhatikan bahwa revisi biru (`1920498462936580504`) sekarang menerima 100% dari lalu lintas produksi, sedangkan revisi hijau (`9313423515462893900`) menerima 0%:

```
{
  "executionId": "70073435-cb99-457f-b900-6ee1dcad05ec",
  "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 0,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 100
    }
  }
}
```

Untuk menentukan apakah hook Anda sedang dipanggil selama rollback, periksa. `productionTrafficWeights` Jika `targetServiceRevisionArn` (revisi hijau) memiliki bobot 0% dan revisi lainnya memiliki 100%, penerapan akan bergulir kembali.