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

Function Compute:ウェブ関数

最終更新日:Mar 25, 2026

このトピックでは、カスタムランタイムにおけるウェブ関数の呼び出しメソッド、制限事項、およびコード例について説明します。

背景情報

カスタムランタイムは、HTTP サーバーをホストできます。Function Compute は、関数呼び出しリクエストを HTTP リクエストに変換してサーバーに送信します。その後、サーバーのレスポンスを関数呼び出しレスポンスに変換し、クライアントに返します。

image

関数は、次の 2 つの方法で呼び出すことができます。

  • HTTP 呼び出し (推奨):HTTP トリガーまたはカスタムドメイン名を使用して、HTTP 経由で関数を呼び出します。

  • API 呼び出し:SDK またはイベントソースを使用して、InvokeFunction API で関数を呼び出します。

HTTP サーバーのリクエストとレスポンスのフォーマットは、呼び出しメソッドによって異なります。

制限事項

  • 各関数バージョンまたはエイリアスに対して作成できる HTTP トリガーは 1 つだけです。詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。

  • HTTP リクエストの制限

    • リクエストヘッダーには、x-fc- で始まるカスタムフィールドや、以下の予約済みフィールドを含めることはできません。

      • connection

      • keep-alive

    • リクエストが以下の制限を超えた場合、Function Compute はステータスコード 400 とエラーコード InvalidArgument を返します。

      • ヘッダーサイズ:ヘッダー内のすべてのキーと値の合計サイズは 8 KB を超えることはできません。

      • パスサイズ:すべてのクエリパラメーターを含むパスの合計サイズは 4 KB を超えることはできません。

      • ボディサイズ:同期呼び出しリクエストボディの合計サイズは 32 MB を超えることはできません。非同期呼び出しリクエストボディの合計サイズは 128 KB を超えることはできません。

  • HTTP レスポンスの制限

    • レスポンスヘッダーには、x-fc- で始まるカスタムフィールドや、以下の予約済みフィールドを含めることはできません。

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        説明

        セキュリティ上の理由から、Function Compute が提供するデフォルトの `aliyuncs.com` ドメインを使用する場合、サービスは自動的に content-disposition: attachment ヘッダーをレスポンスに追加します。これにより、ブラウザではレスポンスが添付ファイルとしてダウンロードされます。この制限を解除するには、カスタムドメイン名を設定する必要があります。

    • レスポンスが以下の制限を超えた場合、Function Compute はステータスコード 502 とエラーコード BadResponse を返します。

      • ヘッダーサイズ:ヘッダー内のすべてのキーと値の合計サイズは 8 KB を超えることはできません。

  • 補足情報

    カスタムドメイン名に関数をバインドすることで、さまざまな HTTP アクセスパスを関数にマッピングできます。詳細については、「カスタムドメイン名を設定する」をご参照ください。

HTTP 呼び出し (推奨)

HTTP 呼び出しの場合、Function Compute はパススルーモードを使用します。クライアントからの HTTP リクエストを HTTP サーバーに転送し、サーバーのレスポンスをクライアントに返します。一部のシステム予約済みフィールドはパススルーされません。詳細については、「制限事項」をご参照ください。

リクエストヘッダー

HTTP トリガーまたはカスタムドメイン名を使用して関数を呼び出す際に、リクエストヘッダーを設定してリクエストの動作をコントロールできます。以下の表に、これらのリクエストヘッダーを説明します。

パラメーター

タイプ

必須

説明

X-Fc-Invocation-Type

String

いいえ

Sync

呼び出しメソッド。詳細については、「呼び出しメソッド」をご参照ください。有効値:

  • Sync:同期呼び出し。

  • Async:非同期呼び出し。

X-Fc-Log-Type

String

いいえ

Tail

レスポンスに実行ログを含めるかどうかを指定します。有効値:

  • Tail:リクエストに対して生成されたログの最後の 4 KB を返します。

  • None:実行ログを返しません。これがデフォルト値です。

レスポンスヘッダー

HTTP トリガーまたはカスタムドメイン名を使用して関数を呼び出すと、レスポンスには Function Compute によって追加されたヘッダーが含まれます。以下の表に、これらのレスポンスヘッダーを説明します。

パラメーター

説明

X-Fc-Request-Id

関数呼び出しの一意のリクエスト ID。

dab25e58-9356-4e3f-97d6-f044c4****

API 呼び出し

InvokeFunction API を使用する API 呼び出しの場合、Function Compute は API リクエストを HTTP リクエストに変換し、HTTP サーバーに転送します。変換は以下のルールに従います。

  • InvokeFunction リクエストの `event` パラメーターは、HTTP リクエストのボディに変換されます。

  • path/invoke に設定されます。

  • methodPOST に設定されます。

  • Content-Type ヘッダーは application/octet-stream に設定されます。

その後、Function Compute は HTTP サーバーからのレスポンスを InvokeFunction レスポンスに変換し、クライアントに返します。変換は以下のルールに従います。

  • HTTP レスポンスボディは InvokeFunction レスポンスボディに変換されます。

  • 変換時に HTTP レスポンスヘッダーとステータスコードは破棄されます。

InvokeFunction リクエストの変換

InvokeFunction リクエスト

受信した HTTP リクエスト

InvokeFunction リクエストのコンテンツ:

"hello world"
> POST /invoke HTTP/1.1
> Host: 21.0.X.X
> Content-Length: 11
>

**【中国語原文】**:

Invoke API レスポンスの例

HTTP レスポンス

Invoke レスポンス

< HTTP/1.1 200 OK
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 11
< Connection: keep-alive

hello world

hello world
< HTTP/1.1 400 Bad Request
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 28
< Connection: keep-alive

{"errorMessage":"exception"}
{"errorMessage":"exception"}

Function Compute のレスポンスコードとヘッダー

カスタムランタイムは、ユーザーが実装する HTTP サーバーです。各関数呼び出しは HTTP リクエストであるため、すべてのレスポンスにはレスポンスコードとレスポンスヘッダーが含まれます。

  • レスポンスコード StatusCode

    • 200:成功を示します。

    • 404:失敗を示します。

  • レスポンスヘッダー x-fc-status

    • 200:成功を示します。

    • 404:失敗を示します。

x-fc-status レスポンスヘッダーを使用して、ローカル関数が正常に実行されたかどうかを Function Compute にレポートします。

  • x-fc-status が設定されていない場合:Function Compute はデフォルトで呼び出しが成功したと見なします。関数で例外が発生してもそれがレポートされない場合、Function Compute は実行が成功したと判断します。これはビジネスロジックに影響しないかもしれませんが、以下の図に示すように、モニタリングと可観測性に影響します。

    image

  • x-fc-status が設定されている場合:関数で例外が発生した場合、x-fc-status レスポンスを使用して実行の失敗を Function Compute にレポートします。これにより、以下の図に示すように、エラースタックトレースもログに出力されます。image9runtimefc

説明

返される HTTP レスポンスでは、StatusCodex-fc-status の両方を設定してください。

コード例

関数にトリガーを設定した後、任意の言語で HTTP サーバーを実装できます。次の例では Python を使用します。

説明

このサンプルコードは、Python 環境と Flask ライブラリに依存します。このコードを実行するには、Web 関数を作成し、ランタイムとして Python 3.10 を選択してください。

import os
from flask import Flask
from flask import request

REQUEST_ID_HEADER = 'x-fc-request-id'
app = Flask(__name__)


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
    rid = request.headers.get(REQUEST_ID_HEADER)
    data = request.stream.read()
    print("Path: " + path)
    print("Data: " + str(data))
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

    

コードの説明は以下の通りです。

  • @app.route('/', defaults={'path': ''}):ルートパスに対応するデフォルトルートです。

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']):GET、POST、PUT、DELETE リクエストを処理するパスパラメーターを持つ動的ルートです。パスパラメーターの値は、path 引数として hello_world 関数に渡されます。

  • rid = request.headers.get(REQUEST_ID_HEADER):リクエストヘッダーから x-fc-request-id フィールドの値を取得します。

  • data = request.stream.read():リクエストコンテンツを読み取り、data 変数に割り当てます。

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]:"Hello, World!" を含むレスポンスボディを返し、ステータスコードを 200 に設定し、Function-Name ヘッダーを持つタプルを含みます。