オーラベースのロゴ
オーラベースドキュメント
ドキュメント›Edge Functions›Errors, timeouts and retries

エラー、タイムアウト、再試行

何か問題が発生したときに invoke が返す内容を読み取る方法、および安全に再度呼び出すことができるタイミングを確認する方法。

9 分 読み取り·レベル 中間·2026/10/12 に改訂
この英語のテキストはフランス語のオリジナルから自動的に生成されたもので、まだレビューされていません。
このページは自動翻訳されました。英語版が正式です。
#
解剖学

1. エラーオブジェクト

invoke は { data, error } を返し、決してスローしません。 error は AuraErrorであるため、 isAuraError(error) は true です。 2 つのサブクラスにより、誰が失敗したかがわかります。

classify.tstypescript
import { FunctionsHttpError, FunctionsRelayError } from '@aurabase/aurabase-js'

const { data, error } = await aura.functions.invoke('checkout', { body })

if (error instanceof FunctionsHttpError) {
  // 関数はエラーステータスで応答しました。コードをデバッグします。
} else if (error instanceof FunctionsRelayError) {
  // プラットフォームが失敗しました。関数の応答が返されませんでした。
} else if (error) {
  // 呼び出しがクライアント上でキャンセルまたは拒否されました (タイムアウト、invalid_body、no_session)。
}
フィールド意味
error.statusHTTP ステータス。 0 は、クライアントで障害が発生したことを意味します (応答なし)。
error.code安定した識別子 (例: NOT_FOUND、 QUOTA_EXCEEDED、 timeout、 invalid_body)。
error.message関数が返したテキスト、またはプラットフォームの説明。
error.contextFunctionsHttpErrorの場合: 関数が返した本文 (解析された JSON またはテキスト)。
error.details生のエラー本体。プラットフォーム エラーの場合は、 error.request_idが含まれます。
#
診断

2. どのエラーですか?

実行中のスタックに対して観察された動作。クォータ行はバックエンドのエラー マッピングに従いますが、テストではトリガーされませんでした。

何が起こったのかクラスstatuscodemessage
機能が存在しませんFunctionsHttpError404NOT_FOUND「…機能は「いや」、解決不能です」
関数はテキストを含む 500 を返しますFunctionsHttpError500http_500そのテキスト
関数は 503 自体を返しますFunctionsHttpError503http_503あなたが返したもの
あなたの関数はスローしますFunctionsHttpError500http_500「内部サーバーエラー」
関数が timeout_secs を超えていますFunctionsHttpError500または503http_500 / http_503「関数の実行に失敗しました」または「関数が HTTP 503 を返しました」
ランタイムに到達できませんFunctionsRelayError503SERVICE_UNAVAILABLE関数が実行されなかったことを説明します
応答する前にネットワークに障害が発生するFunctionsRelayError0network_errorネットワークエラー
プランのクォータが使い果たされたFunctionsHttpError403QUOTA_EXCEEDEDクォータメッセージ
1 人のクライアントからの電話が多すぎるFunctionsHttpError429rate_limit_exceeded待機メッセージ
リクエスト本文が大きすぎますFunctionsRelayError503SERVICE_UNAVAILABLE「最大ペイロードサイズを超えました」
キャンセルしたか、timeout が経過しましたAuraError0timeout「関数の呼び出しが中止またはタイムアウトしました」
本文をJSONとして送信することはできませんAuraError0invalid_body避けるべきタイプの名前を付ける
関数からの 503 はプラットフォームの障害ではありません

独自のコードが 502、 503 、または 504を返す場合、 FunctionsHttpErrorが返されます。クラスはステータス番号ではなく、誰が回答したかを示します。

2 つの失敗は別のものに見える

約 256 KiB を超えるリクエスト本文は 503 SERVICE_UNAVAILABLEで拒否され、約 300 KB 以上の レスポンス は 50 秒のテスト内では返されませんでした。 の制限を参照してください。再試行しても役に立ちません。送信するデータを減らすか、ストレージを使用します。

#
再試行

3. 再試行するかどうかを決定する

SDK は呼び出しを再試行しません。関数には副作用がある可能性があり、POST の繰り返しはデフォルトでは安全ではありません。以下の表を使用して決定してください。

失敗機能は実行されましたか?再試行しても安全ですか?
プラットフォームからの 503 (FunctionsRelayError)いいえ、ランタイムに到達できませんでしたはい、短いバックオフ付き
429いいえはい、error.retryAfter の遅延後
403 QUOTA_EXCEEDEDいいえいいえ、割り当てがリセットされるかプランを変更するまでは
status 0 (network_error)不明関数が冪等である場合のみ
クライアント上の timeout不明関数が冪等である場合のみ
FunctionsHttpError 5xxはい、部分的または完全に関数が冪等である場合のみ
FunctionsHttpError 4xxはいいいえ: リクエストを修正します
retry.tstypescript
import { FunctionsRelayError } from '@aurabase/aurabase-js'

async function invokeWithRetry(name: string, body: unknown, attempts = 3) {
  for (let i = 0; i < attempts; i++) {
    const res = await aura.functions.invoke(name, { body })
    const safe = res.error instanceof FunctionsRelayError && res.error.status === 503
    if (!res.error || !safe) return res
    await new Promise((r) => setTimeout(r, 2 ** i * 500))
  }
  return aura.functions.invoke(name, { body })
}
代わりに関数をべき等にしてください

プラットフォームは呼び出しの重複を排除せず、 Idempotency-Keyを無視します。支払いや電子メールの場合は、body に渡すキーを保存し、関数の開始時に確認します。

#
時間

4. タイムアウト

3 つのクロックが同時に実行されます。

時計デフォルトどこを変更するか
あなたのクライアントresponseTypeごとに30秒クライアント オプションの invoke(…, { timeout })、 { signal }、または requestTimeoutMs
機能30 秒、1 ~ 300関数の permissions.timeout_secs
ゲートウェイ380 sプロジェクトごとに構成できない

関数が timeout_secsを超えると、ランタイムは関数をキャンセルし、その遅延の後に呼び出しは失敗し、上記の 500 または 503 が表示されます。原因は、raw モードの error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) に表示されます。クライアント timeoutの代わりにこのエラーを表示するには、クライアント timeout を関数の timeout_secs の少し上に設定します。

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // お客様よりキャンセルされました。機能がまだ実行されている可能性があります。
}

数秒を超える作業の場合、は、接続を開いたままにするのではなく、ジョブ をキューに入れます。

#
デバッグ

5. 原因を見つける

  • プラットフォーム エラーにはリクエスト ID: error.details.error.request_idが含まれます。サポートに連絡するときにそれを引用してください。
  • aura functions logs <name> は、最近の HTTP リクエストをメソッド、パス、ステータス、期間、リクエスト ID とともにリストします。関数が console.log または console.errorで何を書いたかは表示されません。その出力はランタイム自体のログに残り、プラットフォーム オペレーターのみが読み取ることができます。このギャップとその他の現在のギャップについては、の制限 を参照してください。
  • 呼び出しの識別子は関数に転送されません。自分の ID を headers に渡してログに記録します。