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

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

最終更新日:Aug 22, 2026

HTTP トリガーは、関数 URL と呼ばれる HTTP(S) エンドポイントとして関数を公開します。クライアントが関数 URL を呼び出すと、Function Compute は HTTP リクエストをイベントオブジェクトに変換し、関数ハンドラに渡します。関数が値を返した後、Function Compute はその出力を HTTP レスポンスにマッピングし、クライアントに送信します。

このトピックは、組み込みランタイムにおける HTTP トリガーの動作について説明します。カスタムランタイムについては、「Web 関数」をご参照ください。

Function Compute 3.0 では、ビルトインランタイムにおける HTTP トリガーの動作が Function Compute 2.0 とは大きく異なります。詳細については、「仕組み」をご参照ください。カスタムランタイムおよびカスタムコンテナランタイムの場合、動作は Function Compute 2.0 と同じです。

仕組み

image

クライアントが関数 URL を呼び出すと、次のようになります。

  1. Function Compute は HTTP リクエストをイベントオブジェクト (event) にマッピングします。

  2. イベントオブジェクトが関数ハンドラに渡されます。

  3. 関数が値を返した後、Function Compute はその出力を HTTP レスポンスにマッピングし、クライアントに返します。

リクエスト構造体

フォーマット

Function Compute は、受信した 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 エンコードされたリクエストパスです。https://{url-id}.{region}.fcapp.run/example のようなリクエスト URL の場合、この値は /example です。デコードされたパスについては、requestContext.http.path をご参照ください。 /example
body リクエストボディです。バイナリデータは Base64 エンコードされます。 Hello FC!
isBase64Encoded リクエストボディが Base64 エンコードされているかどうかを示します。有効な値:truefalse false
headers HTTP トリガーで関数を呼び出すと、ヘッダーキーの先頭文字が大文字になるのはなぜですか? {"Header1": "value1", "Header2": "value1,value2"}
queryParameters JSON オブジェクトとして表されるクエリパラメーターです。https://{url-id}.{region}.fcapp.run/example?key1=value1 のような URL の場合、この値は {"key1": "value1"} です。同じキーに複数の値がある場合は、カンマで区切られます。 {"parameter1": "value1", "parameter2": "value1,value2"}
requestContext リクエスト ID、タイムスタンプ、呼び出し元情報など、追加のリクエストメタデータです。
requestContext.accountId 関数を所有する Alibaba Cloud アカウントの ID です。 123456*********
requestContext.domainName HTTP トリガーのドメイン名です。 <http-trigger-id>.<region-id>.fcapp.run
requestContext.domainPrefix HTTP トリガーのドメインプレフィックスです。 <http-trigger-id>
requestContext.http HTTP リクエストに関する詳細情報です。
requestContext.http.method HTTP メソッドです。有効な値:GETPOSTPUTHEADOPTIONSPATCHDELETE GET
requestContext.http.path デコードされたリクエストパスです。https://{url-id}.{region}.fcapp.run/example?name=Jane のようなリクエスト URL の場合、この値は /example です。 /example
requestContext.http.protocol リクエストプロトコルです。 HTTP/1.1
requestContext.http.sourceIp 直接 TCP 接続のピア IP (RemoteAddr) です。下記の注をご参照ください。 11.11.XX.XX
requestContext.http.userAgent user-agent リクエストヘッダーの値です。 PostmanRuntime/7.32.3
requestContext.requestId 呼び出しログをトレースするためのリクエスト ID です。 1-64f6cd87-*************
requestContext.time ISO 8601 フォーマットのリクエストタイムスタンプです。 2023-09-05T06:41:11Z
requestContext.timeEpoch UNIX 時間 (ミリ秒) のリクエストタイムスタンプです。 1693896071895
警告

sourceIp は、直接の TCP 接続のピア IP であり、必ずしも元のクライアント IP ではありません。リクエストがプロキシによって転送されない場合、sourceIp はクライアントの IP です。リクエストが 1 つ以上のプロキシを通過する場合、sourceIp は最後のプロキシの IP です。リクエストがプロキシを通過する場合に元のクライアント IP を取得するには、X-Forwarded-For ヘッダーを読み取ります。詳細については、「HTTP トリガーが組み込みランタイムを使用する関数を呼び出す際に、クライアントの元の IP アドレスを取得する方法」をご参照ください。

マッピングロジック

Function Compute は、次のように HTTP リクエストをイベントオブジェクトにマッピングします。

  • HTTP リクエストヘッダー → event.headers

  • HTTP クエリパラメーター → event.queryParameters

  • リクエストコンテキスト(リクエスト ID、タイムスタンプ、呼び出し元 ID) → event.requestContext

  • POST リクエストボディ → event.body

Base64 エンコーディング

Function Compute は、リクエストボディを Base64 エンコードするかどうかを判断するために、Content-Type ヘッダーを確認します。

Content-Type isBase64Encoded Body の処理
text/* false そのまま渡される
application/json false そのまま渡される
application/ld+json false そのまま渡される
application/xhtml+xml false そのまま渡される
application/xml false そのまま渡される
application/atom+xml false そのまま渡される
application/javascript false そのまま渡される
その他の値 true 関数に渡す前に Base64 エンコードされる

リクエストマッピングの例

GET

HTTP リクエスト イベントオブジェクト
GET /?parameter1=value1&parameter2=value2 HTTP/1.1 {"version":"v1","rawPath":"/","headers":{"Accept":"*/*","User-Agent":"CurlHttpClient"},"queryParameters":{"parameter1":"value1","parameter2":"value2"},"body":"","isBase64Encoded":true,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"GET","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}}

CLI からこのリクエストを送信するには (https://example.cn-hangzhou.fcapp.run をご自身の関数 URL に置き換えます):

curl -v "https://example.cn-hangzhou.fcapp.run?parameter1=value1&parameter2=value2"

POST

HTTP リクエスト イベントオブジェクト
POST / HTTP/1.1
Content-Type: application/json
{"version":"v1","rawPath":"/","headers":{"Accept":"*/*","Content-Length":"20","Content-Type":"application/json","User-Agent":"curl/8.7.1"},"queryParameters":{},"body":"{\"message\": \"Hello\"}","isBase64Encoded":false,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"POST","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}}

CLI からこのリクエストを送信するには(https://example.cn-hangzhou.fcapp.run をお使いの関数 URL に置き換えてください):

curl -v -H "Content-Type: application/json" -d '{"message": "Hello"}' "https://example.cn-hangzhou.fcapp.run"
リクエストボディを強制的に Base64 エンコードするには、Content-Typeapplication/x-www-form-urlencoded に設定します。

レスポンス構造体

フォーマット

関数の出力は、HTTP レスポンスにマッピングされる前にレスポンス構造体に解析されます。

{
    "statusCode": 200,
    "headers": {
        "Content-Type": "application/json",
        "Custom-Header-1": "Custom Value"
    },
    "isBase64Encoded": false,
    "body": "{\"message\":\"Hello FC!\"}"
}

マッピングロジック

Function Compute は、出力が statusCode フィールドを含む有効な JSON であるかどうかに基づいて、関数の出力を HTTP 応答にマッピングします。

出力がstatusCode を含む有効な JSON の場合:

応答構造体フィールド HTTP 応答
statusCode ステータスコード
headers["Content-Type"] Content-Type ヘッダー (指定がない場合、デフォルトは application/json)
body 応答本文
isBase64Encoded 送信前に本文を Base64 デコードするかどうか (指定がない場合、デフォルトは false)

出力が statusCode を含まない有効な JSON、または JSON ではない場合:

Function Compute は次のデフォルト値を使用します。

フィールド デフォルト値
statusCode 200
Content-Type application/json
body 関数の出力をそのまま使用
isBase64Encoded false

レスポンスマッピングの例

以下の例は、関数の出力が解析を経て最終的な HTTP レスポンスになるまでの流れを示しています。

文字列レスポンスの出力

関数の出力 解析されたレスポンス構造体 HTTP レスポンス (クライアントが受信)
Hello World! {"statusCode":200,"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

Hello World!

JSON レスポンスの出力

関数の出力 解析されたレスポンス構造体 HTTP レスポンス (クライアントが受信)
{"message": "Hello World!"} {"statusCode":200,"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

{"message": "Hello World!"}

カスタムレスポンスの出力

関数の出力 解析されたレスポンス構造体 HTTP レスポンス (クライアントが受信)
{"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 201 OK
Content-Type: application/json
My-Custom-Header: Custom Value
X-Fc-Request-Id: 1-64f6dcb3-e787580749d3ba13b047ce14

{"message": "Hello world!"}

Base64 デコーディング

関数が、isBase64Encodedtrue に設定された有効な JSON を返す場合、Function Compute は HTTP レスポンスボディにマッピングする前に body を Base64 デコードします。デコードに失敗した場合、Function Compute はエラーを報告せずに body の値を直接返します。

レスポンスヘッダー

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

エラーハンドリング

HTTP トリガーによる呼び出しと直接 API 呼び出しでは、関数のエラー処理が異なります。

呼び出しタイプ エラー動作 HTTP ステータスコード
直接 API 呼び出し エラーメッセージがレスポンスボディで返される 200
HTTP トリガー (関数 URL) エラーメッセージは非表示になり、 Internal Server Error が返されます 502

例えば、Python の ModuleNotFoundError が発生した直接 API 呼び出しは、以下のエラー詳細を返します。

{
    "errorMessage": "Unable to import module 'index'",
    "errorType": "ImportModuleError",
    "stackTrace": [
        "ModuleNotFoundError: No module named 'not_exist_module'"
    ]
}

HTTP トリガー経由で呼び出された関数でエラーが発生した場合、クライアントは次のようなレスポンスを受け取ります。

HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Content-Length: 21

Internal Server Error

X-Fc-Request-Id 値を使用して、関数の呼び出しログでエラーの詳細を検索します。

関連ドキュメント

ビルトインランタイム用の関数コードを作成している場合は、ご利用の言語のハンドラドキュメントをご参照ください。