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

Function Compute:Web 関数

最終更新日:Sep 10, 2026

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

背景情報

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

image

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

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

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

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

制限

  • 関数の各バージョンまたはエイリアスに対して作成できる 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

        説明

        セキュリティ上の理由から、FC のデフォルトの aliyuncs.com ドメインを使用する場合、サーバーはレスポンスヘッダーに content-disposition: attachment ヘッダーを強制的に追加します。このヘッダーにより、レスポンスはブラウザーで添付ファイルとしてダウンロードされます。この制限を解除するには、「カスタムドメイン名の設定」をご参照ください。

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

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

  • その他の使用上の注意

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

HTTP 呼び出し (推奨)

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

リクエストヘッダー

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

名前

タイプ

必須

例

説明

X-Fc-Invocation-Type

文字列

いいえ

Sync

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

  • Sync: 同期呼び出し。

  • Async: 非同期呼び出し。

X-Fc-Log-Type

文字列

いいえ

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 です。

  • method は POST です。

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

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

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

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

Invoke API リクエスト変換の例

呼び出しリクエスト

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 レスポンス

呼び出しレスポンス

< 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 レスポンスでは、StatusCode と x-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 ヘッダーを含めます。