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

Function Compute:HTTPトリガーを使用して関数を呼び出す

最終更新日:Jul 15, 2024

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が https://{url-id}.{region}.fcapp.ru n/exampleの場合、元のパスは /exampleです。 rawPathパラメーターの値はURLエンコードされています。 URLのデコード後にパスを取得するには、requestContext.http.pathパラメーターを使用します。

/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が https://{url-id}.{region}.fcapp.ru n/example?key1=value1の場合、queryStringParameters値は、key1のキーとvalue1の値を含むJSONオブジェクトです。 キーに複数の値がある場合は、コンマ (,) で区切ります。たとえば、{"key1": "value1", "key2": "value2,value3"} です。

{

"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が https://{url-id}.{region}.fcapp.ru n/example?name=Janeの場合、パス値は /exampleです。

/example

requestContext.http.protocol

リクエストのプロトコル。

HTTP/1.1

requestContext.http.sourceIp

要求を開始する即時TCP接続の送信元IPアドレス。 このIPアドレスは、接続を直接確立するピアIPアドレス (RemoteAddr) 、具体的には、サーバーに直接接続するクライアントのアドレス、または最後のプロキシのIPアドレスです。

  • リクエストがプロキシによって転送されない場合、RemoteAddrはクライアントIPアドレスです。

  • 要求が1つ以上のプロキシによって転送される場合、RemoteAddrは最後のプロキシのIPアドレスです。

    説明

    HTTPリクエストヘッダーX-Forwarded-Forを使用して、クライアントの元の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-Typeapplication/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

こんにちは世界!

{
  "statusCode": "20"、
  "body": "Hello World!" 、
  "headers":{
    "content-type": "application/json"
  },
  "isBase64Encoded": false
} 
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 12
Content-Type: application/json
X-Fc-Request-Id: 1-64f6d6e7-e01edb1cce58240ed59b59d9
Date: Tue, 05 Sep 2023 07:21:11 GMT

Hello World!

JSON出力

関数出力

解析関数の出力

HTTP応答to clients

{"message": "Hello World!"}

{
  "statusCode": "20"、
  "body": "{\" message\": \" Hello World!\"}" 、
  "headers":{
    "content-type": "application/json"
  },
  "isBase64Encoded": false
} 
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 27
Content-Type: application/json
X-Fc-Request-Id: 1-64f6d867-7302fc1ac6338b6fd2adb782
Date: Tue, 05 Sep 2023 07:27:35 GMT

{"message": "Hello World!"}

カスタム応答出力

関数出力

解析関数の出力

HTTP応答to clients

{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Custom Value"
    },
    "body": {
        "message": "Hello, world!"
    },
    "isBase64Encoded": false
}
{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Custom Value"
    },
    "body": {
        "message": "Hello, world!"
    },
    "isBase64Encoded": false
}
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 27
Content-Type: application/json
Custom-Header-1: Custom Value
X-Fc-Request-Id: 1-64f6dcb3-e787580749d3ba13b047ce14
Date: Tue, 05 Sep 2023 07:45:55 GMT

{"message": "Hello world!"}

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リターンコード502Internal 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の標準ランタイムでコードを記述する場合は、ハンドラに関する次のトピックを参照してください。