View a markdown version of this page

Kait Lambda untuk penyebaran layanan Amazon ECS - Amazon Elastic Container Service

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

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 validhookStatus, atau jika gagal, Amazon ECS mengembalikan penerapan.

Nilai HookStatus

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

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

hookDetailsBidang ini adalah kamus yang dapat Anda gunakan untuk meneruskan data ke fungsi kait siklus hidup Anda. Ada dua cara untuk mengisihookDetails:

  • 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 kembaliIN_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

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

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

Muatan siklus hidup

Struktur muatan umum

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

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

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

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

Tahap ini terjadi ketika Amazon ECS menggeser lalu lintas uji ke revisi layanan hijau. testTrafficWeightsPertunjukan 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

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

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

Tahap ini terjadi ketika Amazon ECS menggeser lalu lintas produksi ke revisi layanan hijau. productionTrafficWeightsPertunjukan 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

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

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.

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