すべてのプロダクト
Search
ドキュメントセンター

Function Compute:インスタンスのライフサイクルフック

最終更新日:Nov 09, 2025

インスタンスのライフサイクルフックを実装して設定すると、関連するインスタンスのライフサイクルイベントが発生したときに Function Compute が対応するフックを呼び出します。Node.js ランタイムは現在、Initializer と PreStop インスタンスのライフサイクルフックをサポートしています。

使用上の注意

インスタンスのライフサイクルフックは、標準の呼び出しリクエストと同じ方法で課金されます。ただし、その実行ログは [リアルタイムログ、関数ログ] または [高度なログ] でのみ表示できます。フックのログは [呼び出しリクエストリスト] には表示されません。詳細については、「インスタンスのライフサイクルフックのログを表示する」をご参照ください。

Initializer フック

Initializer フックは、関数インスタンスが開始された後、リクエストハンドラが実行される前に実行されます。Function Compute は、インスタンスのライフサイクル中に Initializer フックが 1 回だけ正常に実行されることを保証します。Initializer フックが最初の実行で失敗した場合、関数の呼び出しも失敗します。次の呼び出しでは、新しい関数インスタンスが作成され、initializer フックが実行されます。

説明

Initializer フックがタイムアウトまたは失敗した場合、サーバーは HTTP 200 ステータスコードを返します。エラーが初期化の失敗によって引き起こされたかどうかを判断するには、X-Fc-Error-Type:InitializationError 応答ヘッダーまたは応答本文の `errorMessage` フィールドを確認する必要があります。

Initializer フックには、context 入力パラメーターが 1 つだけあります。次のサンプルコードは、単純な Initializer フックを示しています。

ES モジュール

説明

この例は、Node.js 18 以降のランタイムのみをサポートします。

export const initialize = async (context) => {
  console.log('initializer');
  return "";
}

CommonJS モジュール

exports.initialize = function(context, callback) {
  console.log('initializer');
  callback(null, "");
};   

initialize は、Initializer フックの名前です。この名前は、Function Compute コンソール[Initializer Hook] に設定する値と一致させる必要があります。例えば、関数の [Initializer Hook]index.initialize に設定した場合、Function Computeindex.js ファイルから initialize メソッドをロードします。

メソッドのシグネチャ

  • 唯一の入力パラメーターは context で、これは呼び出し中に FC 関数にランタイムコンテキストを提供します。

  • フックは値を返しません。関数の実行を終了するには、コードで `return` または `callback` を呼び出す必要があります。

PreStop フック

PreStop フックは、関数インスタンスが破棄される前に実行されます。メソッドのシグネチャは Initializer フックと同じです。

次のサンプルコードは、単純な PreStop フックの例を示しています。

ES モジュール

説明

この例は、Node.js 18 以降のランタイムのみをサポートします。

export const preStop = async (context) => {
  console.log('preStop');
  return "";
}

CommonJS モジュール

module.exports.preStop = function(context, callback){
  console.log('preStop');
  callback(null, "");
}

ライフサイクルフックの設定

コンソールを使用した設定

Function Compute コンソールで、FC 関数の [設定] > [インスタンス設定] タブに移動して、[Initializer Hook][PreStop Hook] を設定します。詳細については、「インスタンスのライフサイクルを設定する」をご参照ください。フックのフォーマットは [ファイル名.メソッド名] です。例:

  • [Initializer Hook]index.initialize に設定します。これは index.js ファイルの initialize メソッドを指定します。

  • [PreStop Hook]index.preStop に設定します。これは index.js ファイルの preStop メソッドを指定します。

Serverless Devs ツールを使用した設定

Serverless Devs ツールを使用する場合、[Initializer Hook][PreStop Hook]s.yaml 設定ファイルに追加できます。

  • Initializer フックの設定

    props 設定の下に instanceLifecycleConfig.initializer フィールドを追加します。このフィールドには handlertimeout フィールドが含まれます。

  • PreStop フックの設定

    props 設定の下に instanceLifecycleConfig.preStop フィールドを追加します。このフィールドには handlertimeout フィールドが含まれます。

以下は設定例です。

edition: 3.0.0
name: hello-world-app
access: default         # キーのエイリアス。

resources:
  hello_world:
    component: fc3 # コンポーネントの名前。Serverless Devs 自体はゲーム機のようなもので、特定のビジネス機能はありません。コンポーネントはゲームカートリッジのようなものです。コンソールにさまざまなカートリッジを挿入して、さまざまな機能を利用します。同様に、さまざまなコンポーネントを使用して、さまざまなビジネス機能を実装します。
    # actions:       # カスタム実行ロジック。アクションの詳細については、https://docs.serverless-devs.com/serverless-devs/yaml#%E8%A1%8C%E4%B8%BA%E6%8F%8F%E8%BF%B0actions をご参照ください。
    props:
      region: cn-hangzhou # 変数の使用方法の詳細については、https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC をご参照ください。
      functionName: nodejs-fc-hooks
      description: "serverless devs による Node.js ライフサイクルフック"
      runtime: nodejs20
      code: ./code
      handler: index.handler
      memorySize: 128
      timeout: 30
      instanceLifecycleConfig:
        preStop:
          handler: index.preStop
          timeout: 3
        initializer:
          handler: index.initialize
          timeout: 3
      internetAccess: true
      logConfig: auto

Serverless Devs の YAML 設定仕様の詳細については、「一般的な Serverless Devs コマンド」をご参照ください。

インスタンスのライフサイクルフックのログを表示する

ライフサイクルフックのログは [ログ] で表示できます。

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数管理] > [関数] を選択します。

  2. 上部のナビゲーションバーでリージョンを選択します。[関数] ページで、ターゲット関数をクリックします。

  3. 関数詳細ページで、[関数のテスト] タブをクリックし、[関数のテスト] をクリックしてから、[ログ] > [関数ログ] を選択します。

    [ログ] タブで、関数の呼び出しログと Initializer ログを表示できます。例:

    2023-09-06 11:18:10FC Initialize Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
    2023-09-06 11:18:10load code for handler:index.initialize
    2023-09-06 11:18:102023-09-06 11:18:10 1-64f7ef72-64caf1ff0046194d9a26bbd7 [verbose] initializer
    2023-09-06 11:18:10FC Initialize End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
    2023-09-06 11:18:10FC Invoke Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
    2023-09-06 11:18:10load code for handler:index.handler
    2023-09-06 11:18:10FC Invoke End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7

    各関数インスタンスは一定期間キャッシュされ、すぐには破棄されないため、PreStop フックのログをすぐに表示することはできません。PreStop フックをすばやくトリガーするには、関数の設定または関数コードを更新します。更新が完了すると、[関数ログ] で PreStop フックのログを表示できます。次のサンプルコードに例を示します。

    2023-09-06 11:08:10FC PreStop Start RequestId: 944bca62-b209-47a1-9e48-2723647bce0a
    2023-09-06 11:08:10load code for handler:index.preStop
    2023-09-06 11:08:102023-09-06 11:08:10 944bca62-b209-47a1-9e48-2723647bce0a [verbose] preStop
    2023-09-06 11:08:10FC PreStop End RequestId: 944bca62-b209-47a1-9e48-2723647bce0a

サンプルプログラム

Function Compute は、Initializer フックと PreStop フックを使用するサンプル MySQL プログラムを提供します。この例では、Initializer フックは環境変数から MySQL データベース設定を取得し、MySQL 接続を作成し、接続性をテストします。PreStop フックは MySQL 接続を閉じます。

詳細については、「nodejs14-mysql」をご参照ください。

参考

インスタンスのライフサイクルフックの詳細については、「インスタンスのライフサイクルを設定する」をご参照ください。