

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

# Kait Lambda untuk penyebaran layanan Amazon ECS
<a name="lambda-lifecycle-hooks"></a>

Kait Lambda adalah fungsi Lambda yang dipanggil Amazon ECS pada tahap penerapan tertentu. Anda dapat menggunakan hook untuk menjalankan pengujian validasi, menerapkan kebijakan tata kelola, atau menerapkan logika kustom 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 penyebaran 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 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.

## Konfigurasi waktu habis
<a name="lambda-hook-timeout"></a>

Anda dapat mengonfigurasi batas waktu untuk kait Lambda menggunakan. `timeoutConfiguration` Jika fungsi Lambda tidak kembali `SUCCEEDED` atau `FAILED` sebelum batas waktu berakhir, Amazon ECS akan mengambil tindakan batas waktu yang dikonfigurasi.


| Bidang | Deskripsi | 
| --- | --- | 
| timeoutConfiguration.timeoutInMinutes | Berapa lama menunggu. Rentang yang valid: 1 hingga 1.440 (24 jam). Default: 1.440 menit. | 
| timeoutConfiguration.action | Tindakan yang harus diambil jika batas waktu berakhir. Nilai-nilai yang valid: ROLLBACK, CONTINUE. Default: ROLLBACK. | 

## Tahapan siklus hidup yang didukung
<a name="lambda-hook-supported-stages"></a>

Anda dapat mengonfigurasi kait Lambda pada tahapan siklus hidup berikut:
+ `RECONCILE_SERVICE`
+ `PRE_SCALE_UP`
+ `POST_SCALE_UP`
+ `TEST_TRAFFIC_SHIFT`
+ `POST_TEST_TRAFFIC_SHIFT`
+ `PRE_PRODUCTION_TRAFFIC_SHIFT`
+ `PRODUCTION_TRAFFIC_SHIFT`
+ `POST_PRODUCTION_TRAFFIC_SHIFT`

Untuk penerapan linier dan kenari, kait Lambda dikonfigurasi pada `PRODUCTION_TRAFFIC_SHIFT` atau dipanggil pada setiap langkah pergeseran lalu `PRE_PRODUCTION_TRAFFIC_SHIFT` lintas.

Untuk informasi selengkapnya tentang kategori tahap siklus hidup, lihat. [Kait siklus hidup untuk penerapan layanan Amazon ECS](deployment-lifecycle-hooks.md)

## 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`- Pengidentifikasi unik untuk eksekusi hook ini.
+ `lifecycleStage`- Tahap siklus hidup saat ini (misalnya,`PRODUCTION_TRAFFIC_SHIFT`).
+ `resourceArn`- ARN 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": {}
  }
}
```

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

Tahap ini terjadi sebelum Amazon ECS mengalihkan lalu lintas produksi ke revisi layanan hijau. Untuk penerapan linier dan kenari, tahap ini dipanggil sebelum setiap langkah pergeseran lalu lintas.

```
{
  "executionId": "a2b3c4d5-e6f7-8901-abcd-ef1234567890",
  "lifecycleStage": "PRE_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
    }
  }
}
```

#### 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 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.