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

Function Compute:イベントハンドラ

最終更新日:Mar 01, 2026

カスタムランタイムでは、HTTP サーバーがイベント駆動型の呼び出しを <code code-type="xCode" data-tag="code">POST /invoke エンドポイント経由で処理します。Function Compute は、イベントペイロードおよび共通ヘッダーをこのエンドポイントに転送し、サーバーは応答ボディとして結果を返します。

image

クイックスタート

以下の 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 サーバーにルーティングします。

  1. Function Compute は、実行時コンテキスト(リクエスト ID、関数名、一時的な資格情報など)を含む共通ヘッダーとともに、イベントペイロードをリクエストボディとして、HTTP サーバーの POST /invoke に送信します。

  2. HTTP サーバーがイベントを処理し、ビジネスロジックを実行します。

  3. サーバーは応答ボディとして結果を返します。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')] を返しても、状態コード 400Author ヘッダーは有効になりません。

その他の言語での例

Serverless Devs を使用すると、数回のクリック操作でアプリケーションを Function Compute に移行できます。以下の例では、Serverless Devs を用いて関数を効率的にデプロイおよび呼び出す方法を示します。サンプルコードは、ご自身のビジネス要件に応じて変更可能です。

よくある質問