View a markdown version of this page

Eksekutor berurutan - AWS Elemental MediaTailor

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

Eksekutor berurutan

Kapan harus digunakan

A SEQUENTIAL_EXECUTOR menjalankan serangkaian fungsi satu per satu, secara berurutan. Setiap langkah dapat menggunakan hasil dari langkah-langkah sebelumnya.

Gunakan SEQUENTIAL_EXECUTOR ketika logika Anda memerlukan beberapa langkah yang bergantung pada hasil satu sama lain. Kasus penggunaan umum termasuk mengambil data identitas dan kemudian menggunakannya untuk mengambil segmen audiens, menjalankan langkah klasifikasi dan kemudian memanggil layanan eksternal yang berbeda secara kondisional berdasarkan hasilnya, dan membangun URL permintaan iklan yang kompleks dari beberapa sumber data.

Bidang konfigurasi

SEQUENTIAL_EXECUTORFungsi memiliki bidang berikut:

  • Runtime — Bahasa ekspresi. Atur ini keJSONATA.

  • FunctionList— Daftar berurutan dari 1 hingga 10 langkah. Setiap langkah menentukan FunctionId fungsi yang akan dijalankan. Secara opsional, Anda dapat menambahkan RunCondition ekspresi untuk mengontrol apakah langkah berjalan atau dilewati.

  • Output — Mendefinisikan nilai yang akan dihasilkan setelah semua langkah selesai. Setiap entri memetakan kunci keluaran (sepertiplayer_params.envelope) ke ekspresi yang dapat mereferensikan data yang dihasilkan oleh langkah apa pun dalam urutan. Jika dihilangkan, semua output dari fungsi individu dalam urutan digunakan.

  • TimeoutMilliseconds(wajib) — Waktu maksimum untuk menyelesaikan seluruh urutan. Jika urutan melebihi batas waktu ini, membu MediaTailor ang semua output dari urutan.

Eksekusi yang dipesan dan aliran data

MediaTailor menjalankan setiap langkah dalam urutan dari pertama hingga terakhir. Setelah setiap langkah selesai, nilai-nilai yang dihasilkannya digabungkan menjadi serangkaian hasil yang berjalan. Langkah selanjutnya dapat mengakses data sesi asli ditambah semua nilai yang dihasilkan oleh langkah-langkah sebelumnya.

Data sementara adalah mekanisme utama untuk meneruskan data antar langkah. Ketika fungsi menulis ke temp.* kunci, langkah selanjutnya dapat membaca nilai itu. Parameter pemain dan bidang permintaan iklan yang ditulis oleh langkah-langkah sebelumnya juga terlihat untuk langkah selanjutnya.

catatan

Data sementara menerima jenis data apa pun, termasuk objek dan array. Parameter pemain dan bidang permintaan iklan hanya menerima string, angka, boolean, dan null).

Per-step kondisi jalankan

Setiap langkah dalam urutan memiliki RunCondition bidang opsional. Bidang ini berisi ekspresi yang mengembalikan true ataufalse. MediaTailor mengevaluasi RunCondition ekspresi segera sebelum menjalankan langkah itu.

Jika RunCondition ekspresi dievaluasi kefalse, MediaTailor melewatkan langkah seluruhnya dan pindah ke langkah berikutnya. Jika RunCondition bidang dihilangkan, langkah selalu berjalan.

{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }

Mekanisme ini memungkinkan Anda membangun pipeline bersyarat. Misalnya, Anda dapat menjalankan pengambilan identitas di langkah 1, lalu menjalankan pencarian segmen secara kondisional di langkah 2 hanya jika langkah 1 mengembalikan identitas yang valid.

Cara kerja blok keluaran

Blok keluaran pada a SEQUENTIAL_EXECUTOR mengontrol apa yang dihasilkan urutan setelah semua langkah selesai:

  • Blok keluaran hadir — MediaTailor mengevaluasi ekspresi dalam blok keluaran terhadap keadaan akumulasi akhir dan hanya menyimpan output tersebut. Setiap output yang dihasilkan oleh langkah-langkah sebelumnya yang tidak direferensikan dalam blok output berurutan dibuang.

  • Blok keluaran tidak ada - MediaTailor menyimpan semua akumulasi output dari semua langkah secara langsung.

Tip

Hilangkan blok output saat Anda ingin keluaran setiap fungsi melewatinya. Tambahkan blok output saat Anda perlu memfilter, mengganti nama, atau mengubah hasil yang terakumulasi sebelum menyimpannya.

Konfigurasi waktu habis

Bid TimeoutMilliseconds ang menetapkan batas waktu untuk seluruh urutan. Batas waktu ini mencakup semua langkah, termasuk panggilan HTTP yang dilakukan oleh fungsi. Jika urutan melebihi batas waktu, membuang MediaTailor semua output dari urutan dan melanjutkan seolah-olah tidak ada fungsi yang dilampirkan.

HTTP_REQUESTFungsi individu masih menghormati RequestTimeoutMilliseconds pengaturan mereka sendiri. Batas waktu urutan bertindak sebagai batas luar yang membatasi total waktu eksekusi.

Contoh: Coba lagi pada kegagalan HTTP

Contoh ini memanggil API identitas dan secara otomatis mencoba lagi jika panggilan pertama mengembalikan kesalahan server. Ini menggunakan dua fungsi HTTP_REQUEST yang diatur oleh SEQUENTIAL_EXECUTOR.

Langkah 1 — Primary fetch (fetchIdentity):

{ "FunctionId": "fetchIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }

Langkah 2 - Coba lagi pada kegagalan (retryIdentity):

{ "FunctionId": "retryIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity-fallback.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }

Urutan (identityWithRetry):

{ "FunctionId": "identityWithRetry", "FunctionType": "SEQUENTIAL_EXECUTOR", "SequentialExecutorConfiguration": { "Runtime": "JSONATA", "TimeoutMilliseconds": 2000, "FunctionList": [ { "FunctionId": "fetchIdentity" }, { "FunctionId": "retryIdentity", "RunCondition": "{%temp.statusCode >= 500%}" } ], "Output": { "player_params.envelope": "{%temp.envelope%}" } } }

Cara kerjanya:

  1. fetchIdentitymemanggil API identitas dan menulis kode status dan amplop ketemp.*.

  2. Jika kode status 500 atau lebih tinggi, langkah 2 mengevaluasi true dan retryIdentity berjalan. RunCondition Ini mengganti temp.statusCode dan temp.envelope dengan respons coba lagi.

  3. Jika panggilan pertama berhasil, langkah 2 dilewati.

  4. Blok Output urutan menulis temp.envelope keplayer_params.envelope.