このトピックでは、カスタムランタイムのイベントハンドラーの構造について説明します。 このトピックでは、カスタムランタイムでイベントハンドラーを使用する方法の例と、よくある質問へのリンクも提供します。
背景情報
カスタムランタイムでは、Function Computeは共通ヘッダー、リクエスト本文、POSTメソッド、/invokeパス、および /initializeパスをHTTPサーバーに転送します。 共通ヘッダーを使用して、公式ランタイムのコンテキスト
入力パラメーターに似たパラメーターを作成できます。 呼び出された関数のリクエストボディに基づいて、公式ランタイムのevent
パラメーターに似た入力パラメーターを作成することもできます。
イベントハンドラーの署名Signatures for event handlers
関数がイベントハンドラーを使用する場合、HTTPサーバーは /invoke
パスとPOST
メソッドに対応するロジックを実装する必要があります。 Function Computeは、リクエストを自動的にPOST /invoke
にルーティングします。
パス | リクエスト | 期待される応答 |
POST |
重要
| レスポンスボディ: 関数ハンドラーの戻り値。 |
サンプルコード
次のサンプルコードでは、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を使用して、効率的な方法で関数をデプロイおよび呼び出す方法を示しています。 ビジネス要件に基づいてサンプルコードを変更できます。