HTTPトリガーは、関数のHTTPおよびHTTPS URLを提供します。 HTTPトリガーによって提供されるURLを使用して、関数を直接呼び出すことができます。 このトピックでは、HTTPトリガーを使用して標準ランタイムで関数を呼び出す方法について説明します。
使用上の注意
Function Compute 3.0では、カスタムランタイムおよびカスタムコンテナランタイムで実行される関数のHTTPトリガーは、Function Compute 2.0のHTTPトリガーと同じです。 ただし、標準ランタイムで実行される関数のHTTPトリガーは、Function Compute 2.0のHTTPトリガーとは大きく異なります。 このトピックでは、HTTPトリガーを使用して標準ランタイムで関数を呼び出す方法について説明します。
呼び出しプロセス
クライアントが関数URLを呼び出すと、function Computeはリクエストをイベントオブジェクトのイベント
にマッピングし、イベント
を関数に渡します。 次いで、機能応答は、HTTP応答にマッピングされる。 Function Computeは、関数URLを介してHTTP応答をクライアントに送信します。
リクエスト構造体
リクエスト構造体の形式
次のサンプルコードは、リクエストの構造体形式を示しています。
{
"version": "v1",
"rawPath": "/example",
"body": "Hello FC!",
"isBase64Encoded": false,
"headers": {
"header1": "value1",
"header2": "value1,value2"
},
"queryParameters": {
"parameter1": "value1",
"parameter2": "value1,value2"
},
"requestContext": {
"accountId": "123456*********",
"domainName": "<http-trigger-id>.<region-id>.fcapp.run",
"domainPrefix": "<http-trigger-id>",
"http": {
"method": "GET",
"path": "/example",
"protocol": "HTTP/1.1",
"sourceIp": "11.11.11.**",
"userAgent": "PostmanRuntime/7.32.3"
},
"requestId": "1-64f6cd87-*************",
"time": "2023-09-05T06:41:11Z",
"timeEpoch": "1693896071895"
}
}
次の表に、パラメーターを示します。
パラメーター | 説明 | 例 |
version | イベントのペイロード形式のバージョン。 現在のバージョンはv1です。 | v1 |
rawPath | リクエストのURL。 たとえば、リクエストURLが | /example |
body | リクエスト本文。 リクエストのコンテンツがバイナリタイプの場合、ボディはBase64-encodedされます。 | こんにちはFC! |
isBase64Encoded | ボディがバイナリ型でBase64エンコードされている場合は、値をtrueに設定します。 それ以外の場合は、値をfalseに設定します。 | false |
headers | このパラメーターは、リクエストヘッダーのリストです。 このパラメーターの値は、キーと値のペアで表示されます。 キーに複数の値がある場合は、コンマ (,) で区切ります。 HTTPトリガーを使用して標準ランタイムで実行される関数を呼び出すと、function Compute 3.0はHTTPリクエストをHTTPトリガーのイベント形式に変換し、HTTPリクエストヘッダーのキーを正規化します。 この場合、ヘッダーキーの最初の文字は大文字になります。 詳細については、「」をご参照ください。HTTPトリガーを呼び出すと、ヘッダーキーの頭文字が大文字になるのはなぜですか。 | {"Header1": "value1", "Header2": "value1,value2"} |
queryParameters | 要求クエリパラメーター。 たとえば、リクエストURLが | { "parameter1": "value1" 、 "parameter2": "value1,value2" } |
requestContext | requestId、リクエストの時刻、許可された呼び出し元のIDなど、リクエストに関する追加情報を含むオブジェクト。 | |
requestContext.accountId | 関数を所有するAlibaba CloudアカウントのID。 | 123456 ********* |
requestContext.domainName | 関数HTTPトリガーのドメイン名。 | <http-trigger-id> 。<region-id>.fcapp.ru n |
requestContext.domainPrefix | 関数のHTTPトリガーのドメインプレフィックス。 | <http-trigger-id> |
requestContext.http | HTTPリクエストに関する詳細を含むオブジェクト。 | |
requestContext.http.method | リクエストで使用されるHTTPメソッド。 有効な値: GET、POST、PUT、HEAD、OPTIONS、PATCH、およびDELETE。 | GET |
requestContext.http.path | リクエストパス。 たとえば、リクエストURLが | /example |
requestContext.http.protocol | リクエストのプロトコル。 | HTTP/1.1 |
requestContext.http.sourceIp | 要求を開始する即時TCP接続の送信元IPアドレス。 このIPアドレスは、接続を直接確立するピアIPアドレス (RemoteAddr) 、具体的には、サーバーに直接接続するクライアントのアドレス、または最後のプロキシのIPアドレスです。
| 11.11.XX.XX |
requestContext.http.us erAgent | ユーザーエージェント要求ヘッダーの値。 | PostmanRuntime/7.32.3 |
requestContext.requestId | リクエスト ID。 このIDを使用して、関数に関連する呼び出しログを追跡できます。 | 1-64f6cd87-************ |
requestContext.time | リクエストのタイムスタンプです。 | 2023-09-05T06:41:11Z |
requestContext.timeEpoch | リクエストのタイムスタンプ (Unix時間) 。 | 1693896071895 |
Base64エンコードメカニズム
Function ComputeがHTTPリクエストをイベントオブジェクトのevent
にマッピングするとき、Function ComputeはリクエストヘッダーのContent-Type
の値に基づいてHTTPボディに対してBase64エンコーディングを実行するかどうかを決定します。
Content-Type
の値がテキストタイプを示している場合、Function Computeはレスポンスボディに対してBase64エンコードを実行しません。 そうでなければ、応答本文はBase64-encodedされる。
テキストタイプを示すContent-Type
値:
text/*
application/json
application/ld+json
application/xhtml+xml
application/xml
application/atom+xml
application/javascript
レスポンス構造体
レスポンスstruct形式
関数がレスポンスを返すと、function Computeはレスポンスを解析し、HTTPレスポンスに変換します。 次のサンプルコードは、解析されたレスポンス構造体の形式を示しています。
{
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Custom-Header-1": "Custom Value"
},
"isBase64Encoded": "false",
"body": "{\"message\":\"Hello FC!\"}"
}
Function Computeの解析ロジック
Function Computeは応答を解析し、HTTP応答を作成してクライアントに返します。
関数が
statusCode
を含む有効なJSONオブジェクトを返した場合、function Computeは次のロジックに基づいてレスポンスを解析します。statusCode
: この関数は、JSONオブジェクトのstatusCode
の値を返します。Content-Type
: この関数は、JSONオブジェクトのContent-Type
の値を返します。 デフォルトでは、JSONオブジェクトにContent-Type
が含まれていない場合、Content-Type
はapplication/json
です。body
: レスポンスボディ。 この関数は、JSONオブジェクトのbody
の値を返します。isBase64Encoded
: この関数は、JSONオブジェクトでisBase64Encoded
の値を返します。 JSONオブジェクトにisBase64Encoded
がない場合、デフォルト値はfalseです。
関数が
statusCode
を含まない有効なJSONオブジェクトを返した場合、または有効なJSONオブジェクトが返されなかった場合、function Computeは次の仮定を立てて応答構造体を構築します。statusCode
: デフォルト値は200です。Content-Type
: デフォルト値はapplication/json
です。body
: 応答本文。コード内の戻り値のデータです。isBase64Encoded
: デフォルト値はfalseです。
Function Computeは、関数レスポンス構造体をHTTPレスポンスにマップし、次のロジックに基づいてクライアントに返します。
statusCode
は、HTTPレスポンスのステータスコードにマッピングされます。headers
はHTTPレスポンスヘッダーにマッピングされます。body
はHTTPレスポンスボディにマップされます。isBase64Encoded
が存在し、値がtrueの場合、body
がBase64-decodedされ、HTTPレスポンスボディにマップされます。
例
このセクションでは、関数の出力を関数応答構造体およびHTTP応答にマッピングする例を示します。 クライアントがHTTPトリガー関数を呼び出すと、HTTP応答が返されます。
文字列レスポンスの出力
関数出力 | 解析関数の出力 | HTTP応答to clients |
|
|
|
JSON出力
関数出力 | 解析関数の出力 | HTTP応答to clients |
|
|
|
カスタム応答出力
関数出力 | 解析関数の出力 | HTTP応答to clients |
|
|
|
Base64デコードメカニズム
関数出力が有効なJSONオブジェクトで、isBase64Encoded
の値がtrue
の場合、function ComputeはJSONオブジェクトのbody
に対してBase64デコードを実行し、HTTPレスポンスボディを使用してデコードされたデータをクライアントに返します。
body
のデコードに失敗した場合、Function Computeはエラーを報告せず、body
の値をクライアントに直接返します。
HTTPレスポンスヘッダー
HTTPトリガーを使用して関数を呼び出す場合、レスポンスヘッダーには、function Computeによって自動的に追加されるレスポンスヘッダーX-Fc-Request-Id
が含まれます。 応答ヘッダは、要求の一意の識別子である。 X-Fc-Request-Id
を除いて、Function Computeは他のレスポンスヘッダーを自動的に追加しません。
コードでカスタム応答ヘッダーを返すことができます。 ただし、X-Fc-
で始まるレスポンスヘッダーと、Function Computeの次の予約済みレスポンスヘッダーはサポートされていません。
connection
content-length
date
keep-alive
server
content-disposition
レスポンスヘッダーで予約済みヘッダーを使用する場合、Function Computeはレスポンスヘッダーを無視します。
エラー処理
関数エラーが発生した場合、関数がAPI呼び出しによって呼び出された場合、エラーメッセージが返されます。 HTTPリターンコードは200
です。 たとえば、次のサンプルコードは、PythonのModuleNotFoundエラーに対する応答です。
{
"errorMessage": "Unable to import module 'index'",
"errorType": "ImportModuleError",
"stackTrace": [
"ModuleNotFoundError: No module named 'not_exist_module'"
]
}
ただし、関数がHTTPトリガーによって呼び出された場合、function Computeはエラーメッセージを非表示にし、HTTPリターンコード502
のInternal Server error
を直接返します。 次のサンプルコードは、HTTPレスポンスの例を示しています。
悪いゲートウェイ502
HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Date: Tue, 05 Sep 2023 07:58:09 GMT
Content-Length: 21
Internal Server Error
この場合、リクエストによって返されるX-Fc-Request-Id
を使用して、ログ内の特定のエラーメッセージを見つけることができます。
コード開発
Function Compute 3.0の標準ランタイムでコードを記述する場合は、ハンドラに関する次のトピックを参照してください。