このトピックでは、関数インスタンスのヘルスチェックの背景、制限、および動作について説明します。 このトピックでは、function Computeコンソールで関数インスタンスのヘルスチェックポリシーを設定する方法についても説明します。
背景情報
関数を作成し、独自のコンテナーイメージを関数ランタイム環境として使用するときに、カスタムランタイムの使用 または コンテナーイメージの使用 を選択した場合、カスタムランタイム環境が不安定になり、関数インスタンスの例外が発生する可能性があります。 Function Computeは、インスタンス例外によるリクエストの失敗を回避するために、関数インスタンスの定期的なヘルスチェックをサポートしています。
制限事項
ヘルスチェックポリシーは、カスタムランタイム環境で実行される関数インスタンスと、カスタムイメージを使用して起動されるインスタンスに対してのみ設定できます。
ヘルスチェックの動作
インスタンスの起動
このセクションでは、関数のヘルスチェックポリシーを設定した後の関数インスタンスの起動動作について説明します。
Initializerフックが定義されている場合は、最初に実行されます。 Initializerフックが定義されていない場合、最初のヘルスチェックが直接実行されます。
最初のヘルスチェックに合格した場合、インスタンスは正常と見なされます。 その後、定期的なヘルスチェックサイクルに入ります。 最初のヘルスチェックに失敗した場合、インスタンスは開始に失敗したと見なされ、ヘルスチェックプロセスは終了します。 その後、関連するエラーメッセージが報告されます。
連続したヘルスチェックの失敗の数が最大失敗の値に達した場合、関数インスタンスは異常と見なされます。 この場合、Function Computeは別のインスタンスを割り当ててリクエストを処理しようとします。
正常でないインスタンスの正常なヘルスチェックの数が成功した検出のしきい値の値に達すると、インスタンスは正常と見なされます。
[成功検出のしきい値] および [最大障害] を設定する方法の詳細については、「Function Computeコンソールでヘルスチェックポリシーを設定する」をご参照ください。
シングルヘルスチェック
このセクションでは、Function Computeでの単一のヘルスチェックの動作について説明します。
GETリクエストは、関数設定に基づいて指定されたHTTPパスに送信されます。
GETリクエストがタイムアウトせず、HTTPレスポンスステータスコードが400未満で200以上の場合、インスタンスはヘルスチェックに合格します。 それ以外の場合、インスタンスはヘルスチェックに失敗したと見なされます。
インスタンスがヘルスチェックに失敗した後の割り当て
関数インスタンスが正常でない場合、function Computeは別のインスタンスを割り当ててリクエストを実行しようとします。
Function Computeが新しいインスタンスの割り当てに成功した場合、リクエストは新しいインスタンスによって実行されます。
Function Computeが別のインスタンスを割り当ててリクエストをタイムリーに実行できなかった場合、ヘルスチェックエラーが返されます。 次のヘルスチェック中に新しいインスタンスが割り当てられます。
Function Computeコンソールでヘルスチェックポリシーを設定する
このトピックでは、カスタムランタイムの使用 から作成され、ランタイム環境がNode.js 14、[リクエストタイプ] が [イベントリクエスト] の関数のヘルスチェックポリシーを設定する方法について説明します。
ステップ1: 関数を作成する
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。
[関数] ページで、[関数の作成] をクリックします。
[関数の作成] ページで、カスタムランタイムの使用 を選択し、ビジネス要件に基づいてパラメーターを設定し、[作成] をクリックします。
次の表に、設定する必要があるパラメーターを示します。 他のパラメーターのデフォルト値を保持します。
パラメーター
説明
関数名
関数の名前を入力します。
リクエストタイプ
[イベントリクエスト] を選択します。
ランタイム環境
Node.js 14を選択します。
関数の詳細ページで、[コード] タブをクリックし、コードエディターで関数コードを編集し、コードをデプロイして関数を実行します。
次の例は、
index.js
のサンプルコードを提供します。'use strict'; // Constants const PORT = 9000; const HOST = '0.0.0.0'; const REQUEST_ID_HEADER = 'x-fc-request-id' const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(bodyParser.raw()); app.get('/readyz', (req, res) => { console.log(`receive health check`); res.status(200); console.log(`i am ready`); res.send('i am ready\n'); }); // invocation app.post('/invoke', (req, res) => { var rid = req.headers[REQUEST_ID_HEADER] console.log(`FC Invoke Start RequestId: ${rid}`) res.send('OK'); console.log(`FC Invoke End RequestId: ${rid}`) }); var server = app.listen(PORT, HOST); console.log(`Running on http://${HOST}:${PORT}`); server.timeout = 0; // never timeout server.keepAliveTimeout = 0; // keepalive, never timeout
上記のコードでは、
readyz
は、/readyzパスのHTTP GETリクエストを処理するために定義されたヘルスチェックポリシーのハンドラーです。 ステップ2を完了したら、このハンドラーを定期的に実行するように設定して、インスタンスが正常かどうかを確認できます。Function Computeは、関数インスタンスが異常であると判断した場合、別のインスタンスの割り当てを試みます。 Function Computeが別のインスタンスの割り当てに失敗した場合、ヘルスチェックエラーが返されます。
たとえば、前のサンプルコードのヘルスチェック用のコードスニペットを次のコードに置き換えると、500のエラーコードが返されます。
app.get('/readyz', (req, res) => { console.log(`receive health check`); res.status(500); console.log(`i am not ready`); res.send('i am not ready\n'); });
関数を再度実行すると、次の情報が返されます。
{ "ErrorCode": "FunctionNotStarted", "ErrorMessage": "check function health failed with status code: 500 " }
手順2: インスタンスのヘルスチェックポリシーの設定
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。
[関数] ページで目的の関数を見つけ、[操作] 列の [設定] をクリックします。
[ヘルスチェックの設定] セクションで、パラメーターを設定し、[保存] をクリックします。 下表に、各パラメーターを説明します。
パラメーター
説明
ヘルスチェック
ヘルスチェック機能を有効にするかどうかを指定します。 [有効化] を選択した場合、次のパラメーターを設定する必要があります。
リクエストパス
ヘルスチェックのHTTP GETパス。 Function Computeは、ヘルスチェックのためにHTTP GETリクエストをこのパスに送信します。 値はスラッシュ (/) で始める必要があります。
最初の検出の遅延
最初のヘルスチェックまでの待機時間を指定します。
検出間隔
HTTP GETリクエストの送信間隔を指定します。
タイムアウト期間
HTTP GETリクエストのタイムアウト時間を指定します。 タイムアウト期間が経過すると、リクエストは失敗したと見なされます。
最大失敗
HTTP GETリクエスト失敗のしきい値を指定します。 定期的なヘルスチェック中に、連続して失敗したHTTP GETリクエストの数が指定された値に達すると、インスタンスはヘルスチェックに失敗したと見なされます。
成功した検出のしきい値
HTTP GETリクエストの成功しきい値。 成功したHTTP GETリクエストの連続数がこの値に達すると、インスタンスはヘルスチェックに合格したと見なされます。
追加情報
Function Computeでは、API操作を呼び出してインスタンスのヘルスチェック機能を設定することもできます。 詳細については、以下のトピックをご参照ください。