View a markdown version of this page

SEQUENTIAL_EXECUTOR - AWS Elemental MediaTailor

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

SEQUENTIAL_EXECUTOR

Quando utilizzare

A SEQUENTIAL_EXECUTOR esegue una serie di funzioni una alla volta, in ordine. Ogni passaggio può utilizzare i risultati dei passaggi precedenti.

SEQUENTIAL_EXECUTORUtilizzalo quando la tua logica richiede più passaggi che dipendono dai risultati reciproci. I casi d'uso più comuni includono il recupero dei dati di identità e il loro utilizzo per recuperare segmenti di pubblico, l'esecuzione di una fase di classificazione e quindi la chiamata condizionale a diversi servizi esterni in base al risultato e la creazione di URL complessi di richieste di annunci da più fonti di dati.

Campi di configurazione

Una SEQUENTIAL_EXECUTOR funzione ha i seguenti campi:

  • Runtime: il linguaggio delle espressioni. Imposta questo valore suJSONATA.

  • FunctionList— Un elenco ordinato da 1 a 10 passaggi. Ogni passaggio specifica FunctionId la funzione da eseguire. Facoltativamente, è possibile aggiungere un'RunConditionespressione per controllare se il passaggio viene eseguito o saltato.

  • Output: definisce i valori da produrre dopo il completamento di tutti i passaggi. Ogni voce associa una chiave di output (ad esempioplayer_params.envelope) a un'espressione che può fare riferimento ai dati prodotti da qualsiasi fase della sequenza. Se omesso, viene utilizzato tutto l'output delle singole funzioni della sequenza.

  • TimeoutMilliseconds(obbligatorio) — Il tempo massimo di completamento dell'intera sequenza. Se la sequenza supera questo timeout, MediaTailor scarta tutto l'output della sequenza.

Esecuzione ordinata e flusso di dati

MediaTailor esegue ogni passaggio della sequenza dal primo all'ultimo. Al termine di ogni passaggio, i valori prodotti vengono uniti in un set di risultati in esecuzione. I passaggi successivi possono accedere ai dati della sessione originale e a tutti i valori prodotti dai passaggi precedenti.

I dati temporanei sono il meccanismo principale per il passaggio dei dati tra i passaggi. Quando una funzione scrive su una temp.* chiave, il passaggio successivo consente di leggere quel valore. I parametri del player e i campi di richiesta degli annunci scritti nei passaggi precedenti sono visibili anche nei passaggi successivi.

Nota

I dati temporanei accettano qualsiasi tipo di dati, inclusi oggetti e matrici. I parametri del giocatore e i campi di richiesta degli annunci (accettano solo stringhe, numeri, valori booleani e null).

Per-step condizioni di esecuzione

Ogni passaggio della sequenza ha un RunCondition campo opzionale. Questo campo contiene un'espressione che restituisce true ofalse. MediaTailor valuta l'RunConditionespressione immediatamente prima di eseguire quel passaggio.

Se l'RunConditionespressione restituisce afalse, MediaTailor salta completamente il passaggio e passa a quello successivo. Se il RunCondition campo viene omesso, il passaggio viene sempre eseguito.

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

Questo meccanismo consente di creare pipeline condizionali. Ad esempio, è possibile eseguire un recupero dell'identità nel passaggio 1, quindi eseguire in modo condizionale una ricerca di segmenti nel passaggio 2 solo se il passaggio 1 ha restituito un'identità valida.

Come funziona il blocco di output

Il blocco di output su a SEQUENTIAL_EXECUTOR controlla ciò che la sequenza produce dopo il completamento di tutti i passaggi:

  • Blocco di output presente: MediaTailor valuta le espressioni nel blocco di output rispetto allo stato finale accumulato e salva solo tali output. Tutti gli output prodotti dai passaggi precedenti che non sono referenziati nel blocco di output sequenziale vengono scartati.

  • Blocco di output assente: MediaTailor salva direttamente tutti gli output accumulati da tutti i passaggi.

Suggerimento

Omettete il blocco di output quando volete che l'output di ogni funzione passi. Aggiungi un blocco di output quando devi filtrare, rinominare o trasformare i risultati accumulati prima di salvarli.

Configurazione del timeout

Il TimeoutMilliseconds campo imposta una scadenza per l'intera sequenza. Questo timeout copre tutti i passaggi, incluse le chiamate HTTP effettuate dalle funzioni. Se la sequenza supera il timeout, MediaTailor elimina tutto l'output della sequenza e procede come se non fosse associata alcuna funzione.

HTTP_REQUESTLe singole funzioni rispettano comunque le proprie impostazioni. RequestTimeoutMilliseconds Il timeout della sequenza funge da limite esterno che limita il tempo totale di esecuzione.

Esempio: riprova in caso di errore HTTP

Questo esempio chiama un'API di identità e riprova automaticamente se la prima chiamata restituisce un errore del server. Utilizza due funzioni HTTP_REQUEST orchestrate da un SEQUENTIAL_EXECUTOR.

Fase 1 — Primary fetchIdentity fetch ():

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

Passaggio 2: riprova in caso di errore ()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%}" } } }

Sequenza (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%}" } } }

Come funziona:

  1. fetchIdentitychiama l'API di identità e scrive il codice di stato e la busta sutemp.*.

  2. Se il codice di stato è 500 o superiore, RunCondition il passaggio 2 valuta true e retryIdentity viene eseguito. Sovrascrive temp.statusCode e temp.envelope riprova.

  3. Se la prima chiamata ha avuto esito positivo, il passaggio 2 viene saltato.

  4. La sequenza in cui il blocco Output scrivetemp.envelope. player_params.envelope