View a markdown version of this page

Pengait lambda untuk penerapan 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.

Pengait lambda untuk penerapan layanan Amazon ECS

Pengait Lambda adalah fungsi Lambda yang dipanggil Amazon ECS pada tahap tertentu dari penerapan. Anda dapat menggunakan kait untuk menjalankan pengujian validasi, menerapkan kebijakan tata kelola, atau mengimplementasikan logika khusus 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 percobaan ulang dan hookDetails untuk meneruskan data di antara pemanggilan. Jika fungsi Anda tidak mengembalikan nilai 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 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 a callBackDelay di sampinghookStatus.

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

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

Melewati status dengan HookDetails

Bid hookDetails ang 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 di hookDetails samping status IN_PROGRESS hook. Amazon ECS meneruskan data ini kembali ke fungsi Anda pada pemanggilan berikutnya. Gunakan ini untuk mempertahankan status 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 menyertakan 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 payload 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 saat runtime hanya bertahan di antara pemanggilan hook yang sama dalam satu penerapan. Data tidak terbawa antara kait yang berbeda dalam penerapan yang sama atau hook 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 mengambil tindakan batas waktu yang dikonfigurasi.

Bidang Deskripsi
timeoutConfiguration.timeoutInMinutes Berapa lama menunggu. Kisaran 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.

Tahap 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 canary, kait Lambda dikonfigurasi pada PRODUCTION_TRAFFIC_SHIFT atau PRE_PRODUCTION_TRAFFIC_SHIFT dipanggil pada setiap langkah pergeseran lalu lintas.

Untuk informasi selengkapnya tentang kategori tahap siklus hidup, lihatPengait siklus hidup untuk penerapan layanan Amazon ECS.

Muatan siklus hidup

Struktur muatan umum

Saat Amazon ECS memanggil fungsi Lambda hook siklus hidup Anda, payload peristiwa berisi bidang tingkat atas berikut:

  • executionId- Pengidentifikasi unik untuk eksekusi kait ini.

  • lifecycleStage- Tahap siklus hidup saat ini (misalnya,PRODUCTION_TRAFFIC_SHIFT).

  • resourceArn- ARN sumber daya yang terkait dengan penyebaran.

  • executionDetails- Objek yang berisi informasi khusus 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 yang sedang dikerahkan.

  • testTrafficWeights- Peta ARN revisi layanan ke persentase bobot lalu lintas uji yang sesuai.

  • productionTrafficWeights- Peta ARN revisi layanan ke persentase bobot 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 digunakan, 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 sedang 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": {} } }

PERGESERAN PERGESERAN LALU LINTAS

Tahap ini terjadi ketika Amazon ECS mengalihkan lalu lintas uji ke revisi layanan hijau. Men testTrafficWeights ampilkan revisi hijau menerima 100% lalu lintas uji sementara 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": {} } }

POS_TEST_TRAFIC_SHIFT

Tahap ini terjadi setelah Amazon ECS menyelesaikan pergeseran lalu lintas uji. 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": {} } }

PERGESERAN LALU LINTAS SEBELUM PRODUKSI

Tahap ini terjadi sebelum Amazon ECS mengalihkan lalu lintas produksi ke revisi layanan hijau. Untuk penerapan linear dan canary, 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 } } }

PERGESERAN LALU LINTAS PRODUKSI

Tahap ini terjadi ketika Amazon ECS mengalihkan lalu lintas produksi ke revisi layanan hijau. Men productionTrafficWeights ampilkan revisi hijau menerima 100% 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 } } }

PERGESERAN LALU LINTAS PASCA PRODUKSI

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": {} } }

Pengait siklus hidup selama rollback

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

Tet targetServiceRevisionArn ap menjadi revisi hijau ARN karena masih menjadi target penerapan asli, meskipun lalu lintas bergeser menjauh darinya.

Contoh berikut menunjukkan PRODUCTION_TRAFFIC_SHIFT payload selama rollback. Perhatikan bahwa revisi biru (1920498462936580504) sekarang menerima 100% 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 dipanggil selama rollback, periksa. productionTrafficWeights Jika targetServiceRevisionArn (revisi hijau) memiliki bobot 0% dan revisi lainnya memiliki 100%, penerapan akan diputar kembali.