カスタムランタイムでは、HTTP サーバーがイベント駆動型の呼び出しを <code code-type="xCode" data-tag="code">POST /invoke エンドポイント経由で処理します。Function Compute は、イベントペイロードおよび共通ヘッダーをこのエンドポイントに転送し、サーバーは応答ボディとして結果を返します。
クイックスタート
以下の Python 3.10 向け Flask の例は、最小限のイベントハンドラを示しています。
from flask import Flask, request
REQUEST_ID_HEADER = 'x-fc-request-id'
app = Flask(__name__)
@app.route("/invoke", methods=["POST"])
def handler():
# 共通ヘッダーからリクエスト ID を抽出
rid = request.headers.get(REQUEST_ID_HEADER)
print("FC Invoke Start RequestId: " + rid)
# イベントペイロードを読み取り
data = request.stream.read()
print(str(data))
print("FC Invoke End RequestId: " + rid)
# 応答ボディを返す
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9000)主なポイント:
@app.route("/invoke", methods=["POST"])により、<code code-type="xCode" data-tag="code">POST /invokeパスに対するハンドラが登録されます。<code code-type="xCode" data-tag="code">request.headers.get(REQUEST_ID_HEADER)により、共通ヘッダーからリクエスト ID を読み取ります。<code code-type="xCode" data-tag="code">request.stream.read()により、リクエストボディからイベントペイロードを読み取ります。<code code-type="xCode" data-tag="code">return "Hello, World!"は、応答本文を呼び出し元に送信します。
仕組み
関数が呼び出されると、Function Compute はリクエストを 3 つのステップで HTTP サーバーにルーティングします。
Function Compute は、実行時コンテキスト(リクエスト ID、関数名、一時的な資格情報など)を含む共通ヘッダーとともに、イベントペイロードをリクエストボディとして、HTTP サーバーの
POST /invokeに送信します。HTTP サーバーがイベントを処理し、ビジネスロジックを実行します。
サーバーは応答ボディとして結果を返します。Function Compute はこのボディを呼び出し元に配信します。
また、新しいインスタンスが起動する際に、Function Compute は POST /initialize リクエストを送信します。モデルの読み込みやデータベース接続の確立など、1 回限りの初期化処理が必要な場合は、このパスを実装してください。
リクエストおよび応答の仕様
リクエスト
| コンポーネント | 詳細 |
|---|---|
| メソッドとパス | <code code-type="xCode" data-tag="code">POST /invoke |
| ヘッダー | 共通ヘッダー(x-fc-request-id、関数のメタデータ、一時的な資格情報など)。 |
| 本文 | 関数の入力 — InvokeFunction API を呼び出す際に指定したペイロード。 |
| Content-Type | <code code-type="xCode" data-tag="code">application/octet-stream |
応答
関数の結果を応答ボディとして返します。呼び出し元は、このボディを呼び出しの出力として受信します。
イベントハンドラは応答ボディのみを返します。状態コードおよび応答ヘッダーは無視されます。たとえば、Flask のハンドラが <code code-type="xCode" data-tag="code">return "Hello, World!", 400, [('Author', 'Aliyun-FC')] を返しても、状態コード 400 や Author ヘッダーは有効になりません。
その他の言語での例
Serverless Devs を使用すると、数回のクリック操作でアプリケーションを Function Compute に移行できます。以下の例では、Serverless Devs を用いて関数を効率的にデプロイおよび呼び出す方法を示します。サンプルコードは、ご自身のビジネス要件に応じて変更可能です。