このトピックでは、Function Computeの関数インスタンスのヘルスチェックの背景、制限、および動作について説明します。 このトピックでは、function Computeコンソールで関数インスタンスのヘルスチェックポリシーを設定する方法についても説明します。
背景
カスタムランタイムおよびカスタムコンテナランタイムで実行されるWeb関数は不安定で、関数インスタンスが機能するときに例外が発生する可能性があります。 Function Computeのヘルスチェック機能を使用して、関数インスタンスのヘルスチェックを定期的に実行し、異常なインスタンスによる呼び出しの失敗を防ぐことができます。
制限事項
web機能インスタンスのみがヘルスチェック機能をサポートしています。
ヘルスチェックの動作
インスタンススタートアップ
このセクションでは、関数のヘルスチェックポリシーを設定した後の関数インスタンスの起動動作について説明します。
関数がInitializerフックを定義している場合、最初にInitializerフックが実行されます。 関数がInitializerフックを定義していない場合は、最初のヘルスチェックが直接実行されます。
最初のヘルスチェックに合格した場合、インスタンスは正常と見なされます。 その後、インスタンスは定期的なヘルスチェックサイクルに入ります。 最初のヘルスチェックに失敗した場合、インスタンスは起動に失敗したと見なされ、ヘルスチェックプロセスは終了します。 その後、関連するエラーメッセージが報告されます。
連続したヘルスチェックの失敗数が [最大失敗] パラメーターの指定値に達した場合、関数インスタンスは異常と見なされます。 次に、Function Computeは他のインスタンスを割り当ててリクエストを処理します。
正常でないインスタンスの正常なヘルスチェックの数が [成功した検出のしきい値] パラメーターの指定された値に達すると、インスタンスは正常と見なされます。
[成功検出のしきい値] および [最大障害] パラメーターの設定方法の詳細については、「Function Computeコンソールでヘルスチェックポリシーを設定する」をご参照ください。
シングルヘルスチェック
各ヘルスチェックで、Function Computeは次の操作を実行します。
関数インスタンスの設定に基づいて、指定されたHTTPパスにGETリクエストが送信されます。
GETリクエストがタイムアウトせず、HTTPレスポンスステータスコードが400未満で200以上の場合、インスタンスはヘルスチェックに合格します。 それ以外の場合、インスタンスはヘルスチェックに失敗したと見なされます。
インスタンスがヘルスチェックに失敗した後の割り当て
関数インスタンスが異常な場合、Function Computeは別のインスタンスを割り当ててリクエストを実行しようとします。
Function Computeが別のインスタンスを正常に割り当てた場合、リクエストはインスタンスによって実行されます。
Function Computeが別のインスタンスを適時に割り当てることに失敗した場合、ヘルスチェックエラーが返されます。 次のヘルスチェック中に新しいインスタンスが割り当てられます。
ヘルスチェックポリシーの設定
このセクションでは、Function Computeコンソールでヘルスチェックポリシーを設定する方法について説明します。 Web functionを選択して作成され、RuntimeがNode.js 18の関数を例として使用します。
ステップ1: 関数を作成する
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、[関数の作成] をクリックします。
関数の作成ページで、関数を作成する方法を選択し、次のパラメーターを設定し、作成をクリックします。
この例では、Web Functionメソッドが選択されています。 次の表に、設定する必要があるパラメーターを示します。 他のパラメーターのデフォルト値を保持します。
パラメーター
説明
関数名
関数の名前を入力します。
ランタイム
関数のランタイムを指定します。 この例では、Node.js 18が選択されています。
関数設定ページで、[コード] タブをクリックします。 コードエディターで、関数のコードを編集します。 次に、コードをデプロイして関数を実行します。
次の例では、のサンプルコードを示します。
'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が別のインスタンスの割り当てに失敗した場合、ヘルスチェックエラーが返されます。
手順2: 関数インスタンスのヘルスチェックポリシーの設定
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。
関数の詳細ページで、設定タブをクリックします。
左側のナビゲーションウィンドウで、[ヘルスチェック] タブをクリックし、[変更] をクリックします。 [ヘルスチェック] ページで、ビジネス要件に基づいてパラメーターを設定し、[OK] をクリックします。 下表にパラメーターを示します。
パラメーター
説明
ヘルスチェック
ヘルスチェック機能を有効にするかどうかを指定します。 [有効化] を選択した場合、次のパラメーターを設定します。
リクエストパス
ヘルスチェックのHTTP GETパス。 Function Computeは、ヘルスチェックのパスにHTTP GETリクエストを送信します。 値はスラッシュ (/) で始める必要があります。
最初の検出の遅延
最初のヘルスチェックの前に待つ時間。
検出間隔
HTTP GETリクエストが送信される間隔。
タイムアウト期間
HTTP GETリクエストのタイムアウト期間。 タイムアウト期間が経過すると、リクエストは失敗したと見なされます。
最大失敗
HTTP GETリクエスト失敗の許容最大数。 定期的なヘルスチェック中に指定された値に達すると、関数インスタンスはヘルスチェックに失敗したと見なされます。
成功した検出のしきい値
HTTP GETリクエストの成功しきい値。 指定された値に達すると、関数インスタンスはヘルスチェックに合格したと見なされます。
手順3: ヘルスチェックの設定の確認
関数の詳細ページで、[コード] タブをクリックし、[関数のテスト] をクリックして、関数が期待どおりに実行できるかどうかを確認します。
ステップ1のサンプルコードを実行します。 OKが返された場合、関数インスタンスは正常と見なされます。
コード内のヘルスチェックパーツを次のコードに置き換え、[コードのデプロイ] をクリックします。 コードがデプロイされたら、もう一度 [Test Function] をクリックして、関数の実行結果を表示します。
次のコードスニペットは、変更されたコードを示しています。
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'); });
コードを実行すると、関数インスタンスのヘルスチェック結果で500エラーコードが返されます。 関数インスタンスを再度実行すると、次のコードが返されます。
{ "RequestId": "1-65081d42-e4895cbc7d6252bda643****", "Code": "FunctionNotStarted", "Message": "The function http server cannot be started. check function health failed with status code: 500 " }
詳細情報
Function Computeでは、コンソールに加えて、API操作を呼び出してインスタンスのヘルスチェックを設定することもできます。 詳細については、「UpdateFunction」をご参照ください。