関数のタイムアウト

関数の実行時間が長すぎる場合、システムは関数を終了またはスロットルする措置を講じます。このタイムアウト時間のデフォルトは 60 秒ですが、関数をデプロイするときに延長または短縮できます。

  • Cloud Functions(第 1 世代)の最大タイムアウト時間は 9 分(540 秒)です。
  • Cloud Functions(第 2 世代)の最大タイムアウト時間は、HTTP 関数の場合は 60 分(3,600 秒)、イベント ドリブン関数の場合は 9 分(540 秒)です。

関数の実行がタイムアウトに達すると、システム レスポンスは第 1 世代関数か第 2 世代の関数かによって異なるものになります。

  • 第 1 世代: HTTP エラー ステータス(通常は 408)を含むレスポンス メッセージが呼び出し元にすぐに返されるため、関数の実行が停止します。
  • 第 2 世代: HTTP 504 エラー ステータスのレスポンス メッセージが直ちに呼び出し元に返されます。関数インスタンスはスロットルされる可能性がありますが、自動的に終了するまで動作を続けます。関数が生成するレスポンス メッセージはすべて破棄され、呼び出し元には返されません。

第 2 世代の関数のこの動作により、予期しない副作用が発生する可能性があります。一般的な症状として、1 つのリクエストの作業とログが後続のリクエストに「リーク」されていることが表面化します。これを回避するには、次の方法で関数のタイムアウトを防ぎます。

  1. 予想される関数の実行時間より長いタイムアウトを設定します。
  2. 実行中の残り時間を追跡します。その後、クリーンアップを実行して早期にリターンします。

タイムアウト時間を設定する

関数のタイムアウト時間は、デプロイ時に Google Cloud CLI または Google Cloud コンソールで設定できます。

gcloud

gcloud CLI を使用してデプロイする場合は、--timeout フラグを使用します。

gcloud functions deploy YOUR_FUNCTION_NAME --timeout=TIMEOUT_DURATION ...

Google Cloud CLI で既存のタイムアウト時間を編集するには、新しいタイムアウト値を持つ関数を再デプロイします。

コンソール

Google Cloud コンソールで関数を作成するときにタイムアウト時間を設定するには:

  1. Google Cloud コンソールで Cloud Functions の概要ページに移動します。
  2. [関数を作成] をクリックします。
  3. 関数の必須フィールドを入力します。
  4. ページの最後にある [ランタイム、ビルド...] セクションを開き、[ランタイム] タブをクリックします。
  5. [タイムアウト] フィールドに秒数を入力します。

    Google Cloud コンソールで既存のタイムアウト時間を編集するには、関数の概要ページで関数の名前をクリックして、詳細ページに移動します。詳細ページで [編集] をクリックし、[ランタイム、ビルド...] セクションを展開して、[ランタイム] タブをクリックします。このタブで、[タイムアウト] フィールドの値を直接編集できます。