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