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

Function Compute:Web 関数

最終更新日:Aug 23, 2026

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

背景情報

カスタムランタイムは、HTTP サーバーをホストできます。Function Compute (FC) は、関数呼び出しリクエストを HTTP リクエストに変換し、HTTP サーバーに送信します。その後、FC は HTTP サーバーからのレスポンスを関数呼び出しのレスポンスに変換し、クライアントに返します。次の図に、そのプロセスを示します。

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

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

  • API 呼び出し:SDK を使用して関数を呼び出したり、イベントソースを介して関数をトリガーしたりするなど、InvokeFunction API を呼び出して関数を実行します。

呼び出し方法によって、HTTP サーバーのリクエストとレスポンスの形式が異なります。

image

制限事項

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

  • HTTP リクエストの制限

    • リクエストヘッダーは、x-fc- で始まるカスタムフィールド、または次のカスタムフィールドをサポートしていません:

      • connection

      • keep-alive

    • リクエストが次の制限を超えると、ステータスコード 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 ヘッダーを強制的に追加します。このヘッダーがあると、レスポンスはブラウザで添付ファイルとしてダウンロードされるようになります。この制限を解除するには、カスタムドメイン名を設定してください。

    • レスポンスが次の制限を超えると、ステータスコード 502 とエラーコード BadResponse が返されます。

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

  • その他の使用上の注意

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

HTTP 呼び出し (推奨)

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

リクエストヘッダー

HTTP トリガーまたはカスタムドメイン名を使用して関数を呼び出す場合、FC ではリクエストヘッダーを設定してリクエストの動作を制御できます。次の表に、サポートされているリクエストヘッダーを示します。

名前

タイプ

必須

説明

X-Fc-Invocation-Type

String

任意

Sync

呼び出しタイプ。詳細については、「呼び出しタイプ」をご参照ください。有効値:

  • Sync:同期呼び出し。

  • Async:非同期呼び出し。

X-Fc-Log-Type

String

任意

Tail

レスポンスで返すログ。有効値:

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

  • None:リクエストログを返しません。これがデフォルト値です。

レスポンスヘッダー

HTTP トリガーまたはカスタムドメイン名を使用して関数を呼び出す場合、レスポンスには FC がデフォルトで追加するいくつかのレスポンスヘッダーが含まれています。次の表に、レスポンスヘッダーを示します。

名前

説明

X-Fc-Request-Id

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

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

API 呼び出し

InvokeFunction API を使用した呼び出しの場合、FC は InvokeFunction リクエストを HTTP リクエストに変換し、HTTP サーバーに送信します。変換ルールは次のとおりです。

  • InvokeFunction の event パラメーターは、HTTP リクエストのメッセージ本文に変換されます。

  • path/invoke です。

  • methodPOST です。

  • Content-Type メッセージヘッダーは application/octet-stream です。

FC は、HTTP サーバーのレスポンスを InvokeFunction のレスポンスに変換し、クライアントに返します。変換ルールは次のとおりです。

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

  • HTTP レスポンスヘッダーとステータスコードは、変換中に失われます。

Invoke API リクエスト変換の例

Invokeリクエスト

HTTP リクエスト (HTTP サーバーが受信するリクエスト)

Invoke API リクエストの内容:

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

hello world

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 レスポンスヘッダーを使用して、関数が正常に実行されたかどうかを FC に報告できます。

  • x-fc-status を設定しない場合:FC は、デフォルトで呼び出しが正常に実行されたと見なします。ただし、関数で例外が発生し、それが FC に報告されない場合があります。FC は実行をエラーなしと見なします。これはビジネスロジックに影響を与えないかもしれませんが、モニタリングとオブザーバビリティに影響します。コード例を次に示します。

        print("FC Invoke Start RequestId: " + rid)
        data = request.stream.read()
        print("Path: " + path)
        print("Data: " + str(data))
        # 例外をシミュレートして実行時エラーをトリガー
        raise Exception("mock exception")
        print("FC Invoke End RequestId: " + rid)
        return "Hello, World!"
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=9000)
  • x-fc-status を設定する場合:関数で例外が発生した場合、x-fc-status レスポンスヘッダーを使用して実行の失敗を FC に報告でき、エラースタック情報がログに出力されます。次の例に示すように、x-fc-status レスポンスヘッダーを 404 に設定すると、FC は呼び出しを失敗した実行として識別します。エラータイプは InvocationError で、返される結果は mock exception です。app.py のサンプルコードは次のとおりです。

    @app.route('/', defaults={'path': ''})
    @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
    def hello_world(path):
        rid = request.headers.get(REQUEST_ID_HEADER)
        print("FC Invoke Start RequestId: " + rid)
        try:
            raise Exception("mock exception")
        except Exception as e:
            print("FC Invoke End RequestId: " + rid + ", Error: Unhandled Exception")
            print(str(e))
            return str(e), 404, [('x-fc-status', '404')]
説明

返される 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 ヘッダーを含めます。