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

Function Compute:概要

最終更新日:Nov 11, 2024

HTTPトリガーを使用すると、HTTPリクエストを使用して関数を呼び出すことができます。 HTTPトリガーは、webサービスの急速な開発などのシナリオで使用できます。 HTTPトリガーを使用する前に、HTTPトリガーの制限と、HTTPトリガーでサポートされるプロトコル (HTTP/HTTPS、WebSocket、gRPCプロトコルなど) の制限を理解していることを確認して、制限の超過による関数エラーを防止してください。 このトピックでは、HTTPトリガーの制限、呼び出し方法、認証方法、およびクロスオリジンリソース共有 (CORS) リクエストの処理について説明します。

使用上の注意

  • [認証方法][認証なし] に設定されている匿名HTTPトリガーを使用する場合、ID認証は必要ありません。 この場合、誰でもHTTPリクエストを送信して関数を呼び出すことができます。 これは、URL漏洩につながる可能性がある。 URLの漏洩を避けるために、リクエストヘッダーの [権限付与] フィールドを使用して、リクエストの有効性を確認できます。 詳細については、「HTTPトリガーの署名認証の設定」をご参照ください。

  • 2024年6月10日以降の国家サイバーセキュリティ規制によると、新しく作成されたHTTPトリガーを使用して、パブリックエンドポイントからAndroidパッケージキット (APK) ファイル (mimeタイプ: application/vnd.android. Package-archive) をダウンロードすることはできません。 HTTPパブリックエンドポイントからAPKファイルをダウンロードしようとすると、400エラーが報告されます。 詳細については、「HTTPトリガーのパブリックエンドポイントがを返さないのはなぜですか。apkファイル? 」をご参照ください。

  • 仮想IPアドレス (VIP) ローテーションメカニズムに注意してください。

    システムのレジリエンスとサービスの安定性を高めるために、Function ComputeはVIPローテーションメカニズムを実装しています。 具体的には、Function ComputeのHTTPトリガーのパブリックエンドポイントと内部エンドポイントに対応するVIPは、時々ローテーションされます。 VIP回転メカニズムは、インフラストラクチャの堅牢性の不可欠な部分を構成します。

    したがって、VIPのハードコーディングは、サービス中断を引き起こし得る。 サービスの堅牢性を確保するために、カスタムドメイン名を使用することを推奨します。 VIPの不適切な使用による障害は、Function Computeの補償範囲には含まれません。 VIPが不適切に使用されている場合は、設定を確認し、必要な調整を行います。

    CNAMEでカスタムドメイン名を使用してFunction Computeにアクセスできます。 詳細については、「カスタムドメイン名の設定」をご参照ください。

制限事項

HTTPトリガーを設定して使用する前に、HTTPトリガーの制限と、HTTP/HTTPS、WebSocket、gRPCプロトコルなど、HTTPトリガーでサポートされるプロトコルの制限に精通していることを確認してください。

トリガーの制限

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

  • デフォルトでは、HTTPトリガーによって提供される組み込みドメイン名はテスト専用です。 組み込みドメイン名の安定性は保証されておらず、オンラインサービスに影響を与える可能性があります。 外部オンラインサービスには組み込みドメイン名を使用しないことを推奨します。

    説明

    Webサイトサービスは、ICPファイリングを取得したドメイン名を使用してのみ提供できます。 カスタムドメイン名を設定し、ドメイン名を関数にバインドしてから、ドメイン名を使用してサービスを提供できます。 詳細については、「カスタムドメイン名の設定」をご参照ください。

HTTP/HTTPSの制限

説明

関数をトリガーするには、GET、POST、PUT、DELETE、HEAD、PATCH、およびOPTIONSのメソッドを使用できます。 HTTPおよびHTTPSプロトコルは、単純なリクエスト /レスポンスシナリオに適しています。 詳細については、「HTTPトリガーの設定と使用」をご参照ください。

  • HTTPリクエストの制限

    • x-fc- で始まるリクエストヘッダーや次のリクエストヘッダーは作成できません。

      • 接続

      • keep-alive

    • リクエストが次のいずれかの制限を超えた場合、システムは400ステータスコードとInvalidArgumentエラーを返します。

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

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

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

  • HTTP応答の制限

    • x-fc- で始まるカスタムレスポンスヘッダーまたは次のカスタムレスポンスヘッダーは使用できません。

      • 接続

      • content-length

      • 日付

      • keep-alive

      • サーバー

      • アップグレード

      • content-disposition: 添付

        説明

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

    • 応答が次のいずれかの制限を超えると、システムは502コードとBadResponseエラーを返します。

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

利点

HTTPトリガーとAPI Gatewayトリガーの両方を使用して、webアプリケーションを作成できます。 次の項目は、トリガーの各タイプを示します。

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

  • API Gatewayトリガー: API Gatewayトリガーを使用することもできます。 この場合、バックエンドサービスタイプをFunction Compute 3.0に設定し、関数タイプをHTTP Functionに設定し、バックエンドサービスアドレスを設定して同様の機能を実装します。 詳細は、「Function Compute」をご参照ください。

API Gatewayトリガーと比較して、HTTPトリガーは次の利点を提供します。

  • HTTPトリガーは、開発者が簡単に学習および使用できます。 これにより、デバッグプロセスが簡素化され、開発者はFunction Computeを使用してwebアプリケーションとAPIをすばやく構築できます。

  • HTTPトリガーを使用して、リクエスト処理を最適化できます。 HTTPトリガーは、効率的な要求および応答形式をサポートします。 リクエストをJSON形式にエンコードまたはデコードする必要はありません。 これにより、パフォーマンスが向上します。

  • Function Computeの機能とパフォーマンスのテストに慣れているHTTPテストツールを使用できます。

  • Alibaba Cloud CDNやMNS (Message Service) など、Webhookをサポートする他のサービスにHTTPトリガーを簡単に接続できます。

呼び出しメソッドInvocation methods

関数は、同期モードまたは非同期モードで呼び出すことができます。 同期呼び出し中に、イベントが関数によって処理された後に結果が返されます。 非同期呼び出し中、Function Computeはリクエストを保持し、リクエストの実行が完了するのを待たずにすぐにレスポンスを返します。

同期呼び出し

デフォルトでは、HTTPトリガーは同期モードで関数を呼び出します。 詳細については、「同期呼び出し」をご参照ください。

非同期呼び出し

"X-Fc-Invocation-Type":"Async" リクエストヘッダーを追加することで、HTTPトリガーを使用してリクエストレベルで非同期モードの関数を呼び出すことができます。 "X-Fc-Stateful-Async-Invocation-Id":"g6u *****"

非同期呼び出しが成功すると、Function Computeはリクエストを受信したことを示す202コードを返します。 さらに、Function Computeはリクエストヘッダーを使用してリクエストIDを返します。 IDのフォーマットは、「X − Fc − Request − Id」: 「80bf7 **** 281713e1」である。

説明

Function Computeから返されたステータスコードが202でない場合、非同期呼び出しは失敗します。 呼び出し失敗の原因の詳細については、「再試行メカニズムの設定」をご参照ください。

特定のシナリオでは、非同期呼び出しリクエストを送信した後、Function Computeの実行を延期することができます。 Function Computeの実行を延期する場合は、x-fc-async-delay HTTPリクエストヘッダーをコードに追加できます。 ヘッダーの値の範囲は (0,3600) です。 単位は秒です。 Function Computeは、x-fc-async-delayに指定された期間が経過した後に関数を呼び出します。 詳細については、「概要」トピックの「関数の延期呼び出し」セクションをご参照ください。

関連ドキュメント

  • 非同期呼び出しの詳細については、「概要」をご参照ください。

  • 非同期タスクの詳細については、「概要」をご参照ください。

認証

HTTPトリガーの認証を設定できます。 HTTPトリガーの認証を設定した後、関数がリクエストを処理する前に、外部リクエストは認証を通過する必要があります。

HTTPトリガーには、署名認証とJSON Webトークン (JWT) 認証を設定できます。

署名認証

HTTPトリガーに対して署名認証ポリシーが設定されている場合、割り当てられたAccessKey IDとAccessKeyシークレットを使用してリクエストに署名する必要があります。 AccessKey IDとAccessKeyシークレットは、認証のためにFunction Computeに渡されます。 詳細については、「HTTPトリガーの署名認証の設定」をご参照ください。

この認証方法は非常に安全ですが、署名アルゴリズムをクライアントで実装する必要があり、コストがかかります。 さらに、AccessKey IDとAccessKeyシークレットはクライアントに保存する必要があります。 その結果、AccessKey IDとAccessKeyシークレットが漏洩する可能性があります。 この問題に対処するには、Security Token Service (STS) トークンを使用できます。 しかしながら、特定のアーキテクチャの複雑さが導入される。

JWT認証

JWTは、APIの承認とアクセスのための一般的で安全なメカニズムです。 JavaScriptやwebフロントエンドなどのセキュリティの低いクライアントシナリオに適しています。 詳細については、「HTTPトリガーのJWT認証の設定」をご参照ください。

CORSリクエスト処理

デフォルトでは、Function Computeはオリジン間の呼び出しを許可します。 次の項目は、Function Computeのレスポンスヘッダーのデフォルト設定を示しています。

  • Access-Control-Allow-Origin: リクエストのオリジンヘッダー。

  • Access-Control-Allow-Credentials: 資格情報を許可するかどうか。 デフォルト値はtrueです。

  • Access-Control-Expose-Headers: Function Computeのカスタムヘッダー。

よくある質問

リスニングポートを設定する必要がありますか?

関数を作成するときは、Web関数を選択した場合にのみリスニングポートを設定する必要があります。

関数の呼び出しに長い時間が必要な場合はどうすればよいですか?

499ステータスコードがクライアントに返され、クライアントがリクエストをキャンセルした場合はどうすればよいですか?

  • クライアントで499ステータスコードが返されると、関数インスタンスが再起動されます。 ファンクションインスタンスのヘルスチェックを設定して、インスタンスの再起動を防ぐことができます。 詳細については、「クライアントで499エラーが発生した後、関数インスタンスが再起動されるのはなぜですか。 」をご参照ください。

  • クライアントで関数の呼び出しがタイムアウトした場合、時間のかかるロジックを新しい関数のコードに移動できます。 次に、新しい関数を非同期モードで呼び出します。 クライアントで呼び出しを開始するときに、非同期呼び出しモードを使用することもできます。

実行中の関数の設定を更新するにはどうすればよいですか?

  • 関数設定は、関数の実行が完了した後にのみ更新されます。 関数の設定を更新した後も、実行中のリクエストに対して以前の設定が有効になります。 更新された設定は、後続のリクエストに対して有効になります。

  • 現在の関数を削除し、設定がビジネス要件を満たす別の関数を作成できます。