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

Function Compute:イベントハンドラー

最終更新日:Oct 18, 2024

このトピックでは、カスタムランタイムのイベントハンドラーの構造について説明します。 このトピックでは、カスタムランタイムでイベントハンドラーを使用する方法の例と、よくある質問へのリンクも提供します。

背景情報

カスタムランタイムでは、Function Compute共通ヘッダー、リクエスト本文、POSTメソッド、/invokeパス、および /initializeパスをHTTPサーバーに転送します。 共通ヘッダーを使用して、公式ランタイムのコンテキスト入力パラメーターに似たパラメーターを作成できます。 呼び出された関数のリクエストボディに基づいて、公式ランタイムのeventパラメーターに似た入力パラメーターを作成することもできます。

image

イベントハンドラーの署名Signatures for event handlers

関数がイベントハンドラーを使用する場合、HTTPサーバーは /invokeパスとPOSTメソッドに対応するロジックを実装する必要があります。 Function Computeは、リクエストを自動的にPOST /invokeにルーティングします。

パス

リクエスト

期待される応答

POST /invoke

重要

Content-Typeapplication/octet-streamである必要があります。

レスポンスボディ: 関数ハンドラーの戻り値。

サンプルコード

次のサンプルコードでは、Python 3.10ランタイムで記述されたFlask webフレームワークを使用しています。

フラスコ輸入フラスコからの

from flask import Flask
from flask import request
import sys

REQUEST_ID_HEADER = 'x-fc-request-id'

app = Flask(__name__)

@app.route("/invoke", methods = ["POST"])
def hello_world():
        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!", 200, [()]

if __name__ == '__main__':
        app.run(host='0.0.0.0',port=9000)
            

上記のサンプルコードでは、

  • @ app.route("/invoke", methods = ["POST"]): Flask webフレームワークを使用して、/invokeパスとPOSTメソッドを使用するhello_world関数を追加します。

  • rid = request.headers.get(REQUEST_ID_HEADER): リクエストヘッダーのリクエストIDを取得します。

  • data = request.stream.read(): リクエストボディを取得します。

  • return "Hello, World!": レスポンスボディを送信します。

重要

イベントハンドラーは、ステータスコードやレスポンスヘッダーを返すことはできません。 たとえば、Flask webフレームワークを使用する場合、return "Hello, World!", 400, [('Author', 'Aliyun-FC')] で返されるステータスコードとレスポンスヘッダーは有効になりません。

他のプログラミング言語の例

Serverless Devsを使用して、数回クリックするだけでアプリケーションをFunction Computeに移行できます。 次の例は、Serverless Devsを使用して、効率的な方法で関数をデプロイおよび呼び出す方法を示しています。 ビジネス要件に基づいてサンプルコードを変更できます。

よくある質問