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

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

最終更新日:Jun 18, 2025

HTTP トリガーは、関数 URL と呼ばれる関数の HTTP(S) エンドポイントを提供し、HTTP リクエストを介して関数を直接呼び出すことができます。 このトピックでは、HTTP トリガーを使用して関数コンピューティングの組み込みランタイムで関数を呼び出す方法について説明します。 カスタムランタイムでのトリガーの使用方法については、「Web 関数」をご参照ください。

考慮事項

関数コンピューティング 3.0 では、カスタムランタイムまたはカスタムコンテナランタイムで実行される関数を呼び出す HTTP トリガーのメカニズムは、関数コンピューティング 2.0 と同じです。 ただし、HTTP トリガーが組み込みランタイムで実行される関数を呼び出す方法には、顕著な違いがあります。 詳細については、次のセクションをご参照ください。

呼び出しプロセス

組み込みランタイムでは、クライアントが関数 URL を呼び出すと、Function Compute はリクエストをイベントオブジェクト(event)にマッピングし、そのイベントオブジェクトを関数に渡します。関数の実行が完了すると、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 の場合、このパラメーターの値は /example です。 この値は URL エンコードされていることに注意してください。 デコードされたパスについては、requestContext.http.path をご参照ください。

/example

body

リクエスト本文。 マッピングプロセス中に、関数コンピューティングはバイナリデータの Base64 エンコーディングを実行します。

Hello FC!

isBase64Encoded

リクエスト本文が Base64 エンコードされているかどうかを指定します。 有効な値: true および false。

false

headers

リクエストヘッダーのリスト。キーと値のペアで表示されます。 1 つのキーに複数の値がある場合、それらの値はコンマ (,) で区切られます。

関数コンピューティング 3.0 が HTTP リクエストをイベントオブジェクトに変換するマッピングプロセスでは、各リクエストヘッダーキーの最初の文字が大文字に変換されます。これは正規化プロセスと呼ばれます。 詳細については、「HTTP トリガーを使用して関数を呼び出すと、ヘッダーキーの最初の文字が大文字になるのはなぜですか?」をご参照ください。

{"Header1": "value1", "Header2": "value1,value2"}

queryParameters

リクエストのクエリパラメーター。 たとえば、リクエスト URL が https://{url-id}.{region}.fcapp.run/example?key1=value1 の場合、このパラメーターの値は、キーが key1、値が value1 の JSON オブジェクトです。 1 つのキーに複数の値がある場合、それらの値はコンマ (,) で区切られます。たとえば、{"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.run

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.run/example?name=Jane の場合、このパラメーターの値は /example です。

/example

requestContext.http.protocol

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

HTTP/1.1

requestContext.http.sourceIp

リクエストを行う直接 TCP 接続の送信元 IP アドレス。 この IP アドレスは、接続を直接確立するピア IP アドレス (RemoteAddr) を指します。具体的には、サーバーに直接接続するクライアントのアドレス、またはクライアントが使用する最後のプロキシのアドレスです。

11.11.XX.XX

requestContext.http.userAgent

user-agent リクエストヘッダーの値。

PostmanRuntime/7.32.3

requestContext.requestId

リクエスト ID。 この ID を使用して、関数に関連する呼び出しログを追跡できます。

1-64f6cd87-*************

requestContext.time

リクエストのタイムスタンプ。

2023-09-05T06:41:11Z

requestContext.timeEpoch

リクエストのタイムスタンプ (UNIX 時間)。

1693896071895

リクエストマッピングロジック

Function Compute は、受信 HTTP リクエストをイベントオブジェクトにマッピングしてから、そのイベントオブジェクトを関数のハンドラに渡します。マッピングロジックは次のとおりです。

  • HTTP リクエストのヘッダーは、event headers にマッピングされます。

  • HTTP リクエストのクエリ文字列パラメーターは、queryParameters にマッピングされます。

  • HTTP リクエストのコンテキスト情報は、requestContext にマッピングされます。

  • POST リクエストのリクエスト本文は、body にマッピングされます。

Base64 エンコーディングメカニズム

Function Compute が HTTP リクエストをイベントオブジェクト(event)にマッピングする場合、リクエストヘッダーの Content-Type の値をチェックして、Base64 エンコードを実行する必要があるかどうかを判断します。

  • Content-Type の値がテキスト表現を示している場合、関数コンピューティングは Base64 エンコーディングを実行せず、isBase64Encoded パラメーターは eventfalse に設定されます。

  • それ以外の場合、リクエスト本文は Base64 エンコーディングを使用してテキスト形式に変換され、isBase64Encoded パラメーターは true に設定されます。

次の Content-Type 値は、テキスト表現を示しています。

  • text/*

  • application/json

  • application/ld+json

  • application/xhtml+xml

  • application/xml

  • application/atom+xml

  • application/javascript

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

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 に次のコマンドを入力して、上記の HTTP リクエストを送信できます。 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 に次のコマンドを入力して、上記の HTTP リクエストを送信できます。 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 に設定するだけです。

レスポンス構造体

レスポンス構造体のフォーマット

レスポンス構造体のフォーマットは次のとおりです。Function Compute は関数の出力を解析し、レスポンス構造体に変換し、この構造体を HTTP レスポンスにマッピングします。

{
    "statusCode": 200,
    "headers": {
        "Content-Type": "application/json",
        "Custom-Header-1": "Custom Value" // カスタムヘッダー
    },
    "isBase64Encoded": false,
    "body": "{\"message\":\"Hello FC!\"}"
}

レスポンスマッピングロジック

関数出力を解析した後、Function Compute はレスポンス構造体を HTTP レスポンスにマッピングします。

  • 関数が statusCode を含む有効な JSON を返す場合、マッピングプロセスは次のルールによって制御されます。

    • JSON の statusCode は、HTTP レスポンスの statusCode にマッピングされます。

    • JSON の Content-Type は、HTTP レスポンスの Content-Type にマッピングされます。 JSON に Content-Type パラメーターが含まれていない場合は、デフォルト値 application/json が使用されます。

    • JSON の body (関数出力)は、HTTP レスポンス body にマッピングされます。

    • JSON の isBase64Encoded パラメーターは、HTTP レスポンスの isBase64Encoded パラメーターにマッピングされます。 JSON に isBase64Encoded パラメーターが含まれていない場合は、デフォルト値「false」が使用されます。

  • 関数が statusCode を含まない有効な JSON を返す場合、または JSON 以外の形式でデータを返す場合、Function Compute は HTTP レスポンスを構築するために次の仮定を行います。

    • statusCode は 200 です。

    • Content-Typeapplication/json です。

    • body は関数出力です。

    • isBase64Encoded は false です。

結論として、Function Compute は関数から返されたデータを HTTP レスポンスに変換し、クライアントに返送します。

  • statusCode は、HTTP レスポンスのステータスコードにマッピングされます。

  • headers は、HTTP レスポンスヘッダーにマッピングされます。

  • body は、HTTP レスポンス本文にマッピングされます。 isBase64Encoded パラメーターが存在し、その値が true の場合、body データは HTTP レスポンス本文にマッピングされる前にバイナリ形式にデコードされます。

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

このセクションでは、関数出力がレスポンス構造体にどのように解析され、その構造体がクライアントの HTTP レスポンスにどのようにマッピングされるかを示します。 クライアントが HTTP(S) エンドポイントを介して関数を呼び出すと、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
Date: Tue, 05 Sep 2023 07:21:11 GMT

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
Date: Tue, 05 Sep 2023 07:27:35 GMT

{"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-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 デコードメカニズム

関数が isBase64Encoded パラメーターの値が true である有効な JSON を返す場合、Function Compute は JSON body に対して Base64 デコードを実行し、デコードされたデータを HTTP 応答本文にマッピングします。

JSON body のデコードに失敗した場合、Function Compute はエラーを報告しません。代わりに、JSON body の値をクライアントに直接返します。

HTTP 応答ヘッダー

関数 URL の呼び出しでは、Function Compute によって自動的に追加される応答ヘッダー 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'", // モジュール 'index' をインポートできません
    "errorType": "ImportModuleError", // モジュールのインポートエラー
    "stackTrace": [
        "ModuleNotFoundError: No module named 'not_exist_module'" // モジュール not_exist_module という名前のモジュールが見つかりません
    ]
}

ただし、関数 URL 呼び出しの場合、Function Compute はエラーメッセージを非表示にし、Internal Server Error のみを返します。HTTP ステータスコードは 502 です。次のサンプルコードは例を示しています。

HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment // 添付ファイル
Content-Type: application/json // アプリケーション/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 の組み込みランタイムでコードを記述している場合は、ハンドラに関する以下のトピックが役立つ場合があります。