制限事項
ワーカープラグインの実行時の上限、レート制限、リクエストと応答の扱い、ディスパッチャが返すエラーを説明します。
実行の上限
1回の呼び出しごと に、次の上限があります。 上限を超えると、その呼び出しは例外で終了します。
| 項目 | 上限 |
|---|---|
| CPU時間 | 1回の呼び出しにつき1,000ミリ秒 |
| サブリクエスト | 1回の呼び出しにつき50回 |
CPU時間には、外部APIやDurable Objectsの応答を待つ時間は含まれません。
レート制限
ワーカープラグインへのリクエスト数には、組織ごとに上限があります。
| 項目 | 内容 |
|---|---|
| 上限 | 1組織につき60秒あたり10,000リクエスト |
| 数える単位 | 組織。利用者ごと、ルームごとには数えません |
| 対象 | /ext/{組織ID}/以下へのすべてのリクエスト(静的ファイル、APIのリクエスト、WebSocketの接続の開始) |
| 超えたときの応答 | 429 {"message":"too many requests"}。Retry-After: 60が付きます |
- 上限を超えたリクエストには、ディスパッチャが429を返します。リクエストはワーカープラグインに届かず、ログにも記録されません。
- 他の組織のリクエストは、自組織の上限に影響しません。
- 上限は組織全体で共有されます。1人の利用者が大量にリクエストすると、同じ組織の他の利用者のリクエストも429になります。
- 上限の判定は概算です。短時間にリクエストが集中すると、上限を超えて 届くことがあります。
- 確立済みのWebSocketで送受信するメッセージは、リクエスト数に含まれません。
配信されるホスト
ワーカープラグインは、次のホストでのみ配信されます。
- 組織のサブドメイン(
https://{組織ID}.metatell.app/ext/{組織ID}/) - 組織に登録されたカスタムドメイン
それ以外のホストでは404(not found)になります。
metatell.appや他の組織のサブドメインからは呼び出せません。
外部サービスのWebhookの受信先やiframeのsrcにも、組織のサブドメインまたはカスタムドメインのURLを指定してください。
リクエストの扱い
| 対象 | 扱い |
|---|---|
| パス | 先頭の/ext/{組織ID}を除いて転送します |
| クエリ、メソッド、ボディ | そのまま転送します |
Authorizationヘッダー | そのまま転送します。ディスパッチャは検証しません |
| Cookie | CloudFront-で始まるCookieを除いて転送します |
/__metatellと/__metatell/以下 | プラットフォームの予約パスです。404になり、ワーカープラグインには届きません |
| Service Workerのスクリプトの取得 | 403になります。Service Workerは使えません |
応答の扱い
| 対象 | 扱い |
|---|---|
Set-Cookie | Domain属性を除きます。Cookieは配信したホストだけで有効になります |
Clear-Site-Data | 除きます |
Service-Worker-Allowed | 除きます |
X-Content-Type-Options | nosniffを付けます(WebSocketを除く) |
Content-Security-Policy | ディスパッチャは付けません |
nosniffが付くため、応答には正しいContent-Typeを指定してください。
Cookieの名前に制限はありません。
外部のサイトにiframeで埋め込む場合は、CookieにSameSite=None; Secure; Partitionedを指定してください。
ブラウザのストレージ
ワーカープラグインが配信する画面は、metatell本体と同じオリジンで動作します。
localStorage、sessionStorage、IndexedDB、Cookieはmetatell本体と共有されます。
秘匿情報や個人情報は保存せず、サーバー側で管理してください。
ディスパッチャのエラー
ディスパッチャ自身が返すエラーは次のとおりです。 これ以外の応答は、ワーカープラグインの応答です。
| ステータス | ボディ | 状況 |
|---|---|---|
| 400 | {"message":"organizationId is required"} | パスに組織IDがない |
| 403 | {"message":"service workers are not allowed"} | Service Workerのスクリプトを取得しようとした |
| 404 | {"message":"worker plugin is not provisioned"} | 組織にワーカープラグインが登録されていない |
| 404 | {"message":"not found"} | 予約パスへのリクエスト、または配信されないホストからのリクエスト |
| 429 | {"message":"too many requests"} | レート制限を超えた。Retry-After: 60が付く |
| 502 | {"message":"worker plugin is unavailable"} | ワーカープラグインへの転送に失敗した |
ログ
ログの記録と確認方法は、ログを参照してください。