実行環境とレート制限
この記事では、関数の実行環境、レート制限、および実行制限について説明します。
2024年6月15日に、アカウントごとの関数ごとのログメッセージの許容量と、すべての関数のアカウントごとの合計ログメッセージの許容量に制限を導入します。詳細は、関数の制限を参照してください。
実行環境
関数の実行環境は、GraalVM JavaScriptランタイム上に構築され、ECMAScript 2020互換のコードを実行します。
関数の制限
- 関数は、関数用のAPIとライブラリに記載されているライブラリを除き、サードパーティのライブラリを使用することはできません。
- 関数は32MBのメモリを持っています。
関数が32MB以上のメモリを使用しようとすると、次のエラーがログに書き込まれます:
Exception 400 BAD REQUEST - OutOfMemoryError: memory limit 32 mb is exceeded.
- 最大関数サイズは64KBで、これは約1500行のコードに相当します。
64KB以上の関数は、サイズが縮小されるまで保存できません。 - 関数のログメッセージは以下のように制限されます:
- アカウントごとの関数ごとの制限:1分あたりのログメッセージは5MBです。この制限に達すると、関数のログは1分間スロットリングされます。関数がスロットリングされているとき、情報メッセージはログに書き込まれません。エラーメッセージと警告メッセージは引き続きログに書き込まれます。完全なログは1分後に再開されます。
- すべての関数のアカウント制限:1分あたりのログメッセージは50MBです。現在、ログはスロットリングされません。この制限を超えると、Tealiumはログメッセージの数を制限するように要求する場合があります。
ランタイムバージョン
関数の実行環境、つまりランタイムバージョンは、関数のタイプにより異なります:
- データ変換関数 – 現在のランタイムバージョンはTransformation V0です。詳細は、データ変換関数についてを参照してください。
- イベントと訪問の関数 – 最新のランタイムバージョンはAction V3です。既存の関数はAction V2を使用しており、これは非推奨です。詳細は以下を参照してください:
関数のランタイムバージョンは、コードエディタのコードタブに表示されます。以下に示すように:
ランタイムバージョンは新機能を提供するために更新されることがあります。新しいランタイムバージョンが利用可能になると、以下のようなメッセージが関数概要ページに表示されます:
Tealiumが新しいランタイムバージョンをリリースすると、古いバージョンは非推奨となり、最終的には廃止されます。使用中のランタイムバージョンが非推奨になったり、廃止されたりしたときには、関数概要画面と関数のコードタブにメッセージが表示されます。
データ変換関数の実行時間制限
データ変換関数には以下の実行制限があります:
- 1時間の実行時間/分 または
- 250,000回の呼び出し/分(1時間あたり15mm)
- 各関数呼び出しの実行時間は150ミリ秒
関数が150ミリ秒の実行時間を超えると、次のエラーがログに書き込まれます:
Invocation timeout limit of 150 milliseconds is exceeded
これらの実行制限は、アカウントと地域に基づいています。アカウントのすべての関数の実行時間と呼び出し回数の合計は、これらの制限を超えることはできません。
いずれかの制限を超えると、関数の実行は一時的に停止(スロットリング)されます。次のメッセージが関数概要に表示され、スロットリングされた関数の隣に黄色の警告アイコンが表示されます:
スロットリングされた関数の詳細を表示する方法については、関数統計を表示するを参照してください。
イベントと訪問の関数の実行時間制限
イベントと訪問の関数には以下の実行制限があります:
- 実行レート:1分あたり180,000回の呼び出し
- 実行時間:1分あたり8時間
- 各関数呼び出しの実行時間:10秒
関数が10秒の実行時間を超えると、次のエラーがログに書き込まれます:
Exception 504 - Invocation timeout limit of 10000 milliseconds is exceeded.
実行レートと実行時間:例1
この例では、外部APIと通信する関数が呼び出しごとに約100msかかると仮定します。また、アカウントに構成されている関数は1つだけで、この関数の平均実行レートは1秒あたり1000回の呼び出しとします。
1分間の時間窓内での実行レートと実行時間は以下の通りです:
実行レート = 1000 * 60 * 1分 = 1分あたりの呼び出し回数60,000回
実行時間 = 1000回/秒 * 100 ms / 1000 = 100分 = 1分あたりの実行時間1.66時間
この場合、実行レートと実行時間はどちらも制限以下です。
実行レートと実行時間:例2
この例では、一時的に外部APIのパフォーマンスが低下し、関数の実行時間が呼び出しごとに800msになると仮定します。つまり、実行時間は8倍に増加します。
実行時間 = (1000回/秒 * 100 ms / 1000) * 8 = 800分 = 1分あたりの実行時間13.28時間。
この場合、1分あたりの実行時間は13.28時間で、これは最大8時間/分を超えています。関数の呼び出しはスロットリングされる可能性があります。
最終更新日 :: 2024年September月19日