View a markdown version of this page

SEQUENTIAL_EXECUTOR - AWS Elemental MediaTailor

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SEQUENTIAL_EXECUTOR

どのようなときに使うか

は、一連の関数を一度に 1 つずつ順番にSEQUENTIAL_EXECUTOR実行します。各ステップは、その前のステップの結果を使用できます。

ロジックが相互に結果に依存する複数のステップを必要とするSEQUENTIAL_EXECUTOR場合に使用します。一般的なユースケースには、アイデンティティデータを取得し、それを使用して対象者セグメントを取得し、分類ステップを実行して、結果に基づいてさまざまな外部サービスを条件付きで呼び出し、複数のデータソースから複雑な広告リクエスト URLsを構築することが含まれます。

設定フィールド

SEQUENTIAL_EXECUTOR 関数には次のフィールドがあります。

  • ランタイム — 式言語。これを に設定しますJSONATA

  • FunctionList — 1~10 ステップの順序付きリスト。各ステップでは、実行する関数FunctionIdの を指定します。必要に応じて、ステップを実行するかスキップするかを制御するRunCondition式を追加できます。

  • 出力 — すべてのステップの完了後に生成する値を定義します。各エントリは、シーケンス内の任意のステップによって生成されたデータを参照できる式に出力キー ( などplayer_params.envelope) をマッピングします。省略すると、シーケンス内の個々の関数からのすべての出力が使用されます。

  • TimeoutMilliseconds (必須) — シーケンス全体が完了するまでの最大時間。シーケンスがこのタイムアウトを超えると、MediaTailor はシーケンスからのすべての出力を破棄します。

順序付けられた実行とデータフロー

MediaTailor は、最初から最後までの順序で各ステップを実行します。各ステップが完了すると、生成される値は実行中の結果のセットにマージされます。以降のステップでは、元のセッションデータと、前のステップで生成されたすべての値にアクセスできます。

一時データは、ステップ間でデータを渡すための主要なメカニズムです。関数がtemp.*キーに書き込むと、次のステップでその値を読み取ることができます。前のステップで書き込まれたプレイヤーパラメータと広告リクエストフィールドは、後のステップにも表示されます。

注記

一時データは、オブジェクトや配列を含む任意のデータ型を受け入れます。プレイヤーパラメータと広告リクエストフィールドは、文字列、数字、ブール値、null のみを受け入れます)。

ステップごとの実行条件

シーケンスの各ステップには、オプションの RunCondition フィールドがあります。このフィールドには、 trueまたは を返す式が含まれていますfalse。MediaTailor は、そのステップを実行する直前にRunCondition式を評価します。

RunCondition 式が と評価された場合false、MediaTailor はステップを完全にスキップし、次のステップに進みます。RunCondition フィールドを省略すると、ステップは常に実行されます。

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

このメカニズムにより、条件付きパイプラインを構築できます。たとえば、ステップ 1 で ID フェッチを実行し、ステップ 1 が有効な ID を返した場合にのみ、条件付きでステップ 2 でセグメントルックアップを実行できます。

出力ブロックの仕組み

の出力ブロックは、すべてのステップが完了した後にシーケンスが生成する内容SEQUENTIAL_EXECUTORを制御します。

  • 出力ブロックが存在する — MediaTailor は、出力ブロック内の式を最終的な累積状態と照らし合わせて評価し、それらの出力のみを保存します。シーケンシャル出力ブロックで参照されていない、前のステップで生成された出力は破棄されます。

  • 出力ブロックなし — MediaTailor は、すべてのステップから蓄積されたすべての出力を直接保存します。

ヒント

すべての関数の出力を渡す場合は、出力ブロックを省略します。保存する前に累積された結果をフィルタリング、名前変更、または変換する必要がある場合は、出力ブロックを追加します。

タイムアウト設定

TimeoutMilliseconds フィールドは、シーケンス全体の期限を設定します。このタイムアウトは、 関数によって行われた HTTP 呼び出しを含むすべてのステップをカバーします。シーケンスがタイムアウトを超えると、MediaTailor はシーケンスからのすべての出力を破棄し、関数がアタッチされていないかのように続行します。

個々のHTTP_REQUEST関数は、引き続き独自のRequestTimeoutMilliseconds設定を尊重します。シーケンスタイムアウトは、合計実行時間を制限する外部境界として機能します。

例: HTTP での再試行の失敗

この例では、ID API を呼び出し、最初の呼び出しがサーバーエラーを返すと自動的に再試行します。SEQUENTIAL_EXECUTOR によってオーケストレーションされた 2 つの HTTP_REQUEST 関数を使用します。

ステップ 1 — プライマリフェッチ (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%}" } } }

ステップ 2 — 失敗時に再試行する (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%}" } } }

シーケンス (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%}" } } }

仕組み:

  1. fetchIdentity は ID API を呼び出し、ステータスコードとエンベロープを に書き込みますtemp.*

  2. ステータスコードが 500 以上の場合、ステップ 2 RunConditionの は と評価trueされ、retryIdentity実行されます。再試行レスポンスtemp.envelopetemp.statusCodeと が上書きされます。

  3. 最初の呼び出しが成功すると、ステップ 2 はスキップされます。

  4. シーケンス出力ブロックは temp.envelopeに書き込みますplayer_params.envelope