このトピックでは、カスタムコンテナーランタイムのイベントハンドラーの構造、サンプルコード、およびFAQについて説明します。
背景
カスタムコンテナ関数の場合、function Computeは共通リクエストヘッダー、リクエスト本文、POSTメソッド、/invokeおよび /initializeパスをコンテナ内のHTTPサーバーに転送します。 function Computeでサポートされているランタイム (Goランタイムなど) から、contextやeventなどの関数シグネチャを使用できます。 リクエストヘッダーと本文を入力パラメーターとして使用して、関数のサービスロジックを定義することもできます。 詳細については、「カスタムランタイムのイベントハンドラー」をご参照ください。
関数の呼び出し
カスタムコンテナー関数がイベントハンドラーを使用する場合、HTTPサーバーは /invokeパスとPOSTメソッドに対してのみロジックを実装する必要があります。
パス | Request | 期待される応答 |
POST |
| レスポンスボディ: レスポンスコードとレスポンスヘッダーを含む関数ハンドラーの戻り値。
レスポンスヘッダーに x-fc-statusフィールドを含めて、ローカル関数が正常に呼び出されたかどうかをFunction Computeに報告できます。
説明 HTTPレスポンスで StatusCodeおよびx-fc-statusフィールドを指定することを推奨します。 |
サンプルコード
次のNode.js Expressの例では、関数インスタンスの初期化時にPOSTメソッドと /initializeパスがFunction Computeによって呼び出されます。 POSTメソッドと /invokeパスは、Function Computeが呼び出されるときにハンドラーとして機能します。 contextパラメーターとeventパラメーターは、req.headersとreq.bodyから取得され、呼び出しの結果がHTTP応答として返されます。
'use strict';
const express = require('express');
// The constants.
const PORT = 9000;
const HOST = '0.0.0.0';
const app = express();
// Parse the JSON-formatted request body.
app.use(express.json({type:['application/json', 'application/octet-stream']}))
// The example of the Initializer hook. You must configure the initializer hook when you create the function.
app.post('/initialize', (req, res) => {
console.log(req.body)
res.send('Hello FunctionCompute, /initialize\n');
});
// Invoke the event function.
app.post('/invoke', (req, res) => {
console.log(req.body)
res.send('Hello FunctionCompute, event function\n');
});
var server = app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
server.timeout = 0; // Never time out.
server.keepAliveTimeout = 0; // keepalive, never timeout他のプログラミング言語の例
Serverless Devsを使用して、数回クリックするだけでアプリケーションをFunction Computeに移行できます。 次の例は、Serverless Devsを使用して、効率的な方法で関数をデプロイおよび呼び出す方法を示しています。 ビジネス要件に基づいてサンプルコードを変更できます。
よくある質問
カスタムコンテナランタイムのリスニングポートは、カスタムコンテナランタイムで開始されたHTTPサーバーのリスニングポートと同じである必要がありますか。
カスタムコンテナランタイムで開始されたサービスでサードパーティサービスを呼び出すときにFunctionNotStartedエラーが発生した場合はどうすればよいですか?
「リクエストを完了する前に予期せず終了したプロセス」というエラーメッセージを含む502エラーが返された場合はどうすればよいですか?
Alibaba Cloudパブリックコンテナイメージを使用しない場合、Function Computeサービスロールにどのような権限を付与する必要がありますか。

