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

Function Compute:HTTPリクエストで関数を呼び出すHTTPトリガーを設定する

最終更新日:Dec 10, 2024

Function ComputeはHTTPトリガーをサポートしています。 HTTPトリガーで設定された関数は、HTTPリクエストによって呼び出すことができます。 関数はHTTPリクエストを受信して処理し、呼び出し元に応答を返します。 このトピックでは、Function ComputeコンソールでHTTPリクエストで関数を呼び出すHTTPトリガーを設定する方法について説明します。

前提条件

関数が作成されます。 詳細については、「イベント関数の作成」トピックの「関数の作成」をご参照ください。

ステップ1: トリガーを作成する

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。

  3. 機能の詳細ページで、[設定] タブをクリックします。 左側のナビゲーションウィンドウで、[トリガー] をクリックします。 次に、[トリガーの作成] をクリックします。

  4. トリガーの作成パネルで、パラメーターを設定し、OKをクリックします。

    パラメーター

    説明

    トリガータイプ

    作成するトリガーのタイプ。 [HTTPトリガー] を選択します。

    HTTPトリガー

    名前

    HTTPトリガーの名前。

    httpトリガー

    バージョンまたはエイリアス

    HTTPトリガーを作成する関数のバージョンまたはエイリアス。 デフォルト値はLATESTです。 別のバージョンまたはエイリアスのHTTPトリガーを作成する場合は、[バージョンまたはエイリアス] ドロップダウンリストからそのバージョンまたはエイリアスを選択します。 バージョンとエイリアスの詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。

    LATEST

    リクエストメソッド

    HTTPトリガーをトリガーするために使用できるメソッド。

    GET、POST、PUT、DELETE

    インターネットURLの無効化

    パブリックエンドポイントを使用してHTTPトリガーへのアクセスを許可するかどうかを指定します。 デフォルトでは、このパラメーターは [いいえ] に設定されています。

    [はい] を選択した場合、HTTPトリガーにデフォルトのパブリックエンドポイントは提供されません。 この場合、パブリックエンドポイントを使用して関数を呼び出すと、関数によってアクセスが拒否されたインターネットURLが無効になりますエラーが報告されます。 カスタムドメイン名を使用して関数を呼び出すことができます。

    不可

    認証方法

    HTTPリクエストの認証に使用されるメソッド。 値の値:

    • 認証なし: Function Computeは関数への匿名アクセスをサポートし、HTTPリクエストを認証しません。 すべてのユーザーがHTTPリクエストを使用して関数を呼び出すことができます。

    • 署名認証: HTTPリクエストにはID認証が必要です。 署名認証のサンプルコードの詳細については、「HTTPトリガーの署名認証の設定」トピックの「リクエストに署名を使用してHTTPトリガーのURLにアクセスする」をご参照ください。

    • JWT認証: Function Computeは、JSON Web Tokens (JWT) に基づいてHTTPリクエストを認証します。 詳細については、「HTTPトリガーのJWT認証の設定」をご参照ください。

    認証なし

    HTTPトリガーの作成後、ビジネス要件に基づいて、HTTPトリガーのバージョンまたはエイリアスリクエストメソッドインターネットURLの無効化認証方法などの一部のパラメーターを変更できます。

ステップ2: コードの書き込みとデプロイ

HTTPトリガーの作成後、関数のコードを記述できます。

[関数の詳細] ページで、[コード] タブをクリックし、コードエディターで関数コードを編集し、[デプロイ] をクリックします。 さまざまなプログラミング言語のサンプルコードは、Function Computeドキュメントの [ユーザーガイド] > [コード開発] から入手できます。

ステップ3: 関数のテスト

方法1: function Computeコンソールで関数をテストする

関数の詳細ページで、コードタブをクリックします。

  • 同期呼び出し

    [テスト関数] をクリックします。

  • 非同期呼び出し

    [テスト関数] の横にあるdownアイコンをクリックし、[非同期呼び出し] を選択し、[テスト関数] をクリックします。

テストが完了したら、[コード] タブでテスト結果を表示します。

方法2: cURLを使用して関数をテストする

機能の詳細ページで、[設定] タブをクリックします。 左側で、[トリガー] をクリックします。 HTTPトリガーの設定で、その後のテスト用にパブリックエンドポイントをコピーします。

image

  • 同期呼び出し

    次のコマンドを実行します。 コマンドの実行後、結果が返されます。

    curl -v https://http-***.cn-shenzhen.fcapp.run/$path

    サンプルコマンド:

    curl -v https://http-***.cn-shenzhen.fcapp.run/test
  • 非同期呼び出し

    次のコマンドを実行します。 コマンドの実行後、Function Computeが非同期呼び出しリクエストを受信したかどうかを示す結果が返されます。 202が返された場合、リクエストは成功しました。 別のステータスコードが返された場合、リクエストエラーが発生しました。 ステータスコードの詳細については、このトピックの「トラブルシューティング」セクションをご参照ください。

    curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/$path

    サンプルコマンド:

    curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/test

(推奨されない) 方法3: ブラウザで関数をテストする

  1. 機能の詳細ページで、[設定] タブをクリックします。 左側のウィンドウで、[トリガー] をクリックします。 HTTPトリガーの設定で、パブリックエンドポイントをコピーし、ブラウザのアドレスバーにパブリックエンドポイントを貼り付けてから、Enterキーを押します。

  2. テストが完了すると、ブラウザはテスト結果を返します。

(オプション) API Gatewayを使用して関数を保護する

デフォルトでは、Function Computeは関数への匿名アクセスをサポートし、HTTPリクエストを認証しません。 すべてのユーザーがHTTPリクエストを使用して関数を呼び出すことができます。 リソースの無駄を防ぎ、不正アクセスによるセキュリティリスクを軽減するために、ID認証を有効にし、HTTP機能をAPI Gatewayに接続できます。 IPアドレスベースのアクセス制御プラグイン、JWT認証プラグイン、またはAPI Gatewayの基本認証プラグインを使用して、HTTP機能を保護できます。

  1. Function Computeコンソールの [関数] ページで、管理する関数を見つけ、関数名をクリックします。 機能の詳細ページで、[設定] タブをクリックします。 左側のウィンドウで、[トリガー] をクリックします。 管理するHTTPトリガーを見つけて、[操作] 列の [変更] をクリックします。

  2. [トリガーの変更] パネルで、インターネットURLを無効にするパラメーターをはい.

    image

  3. にログインします。API GatewayコンソールHTTP関数が存在するリージョンに切り替えます。

  4. APIグループとAPIを作成します。

    外部アプリケーションは、特定のメソッドで作成したAPIを呼び出して、関連する関数を呼び出すことができます。 APIグループは、統合セキュリティおよびトラフィックポリシーに基づいてAPIを管理するために使用されます。

    1. API Gatewayコンソールにログインします。 左側のナビゲーションウィンドウで、[APIの管理] > [APIグループ] を選択します。 [APIグループ] ページで、右上隅の [グループの作成] をクリックします。

    2. [グループの作成] ダイアログボックスで、[インスタンス] ドロップダウンリストからインスタンスを選択し、[グループ名] パラメーターを [FC-Group] に、[BasePath] パラメーターを /に設定し、[確認] をクリックします。

    3. 左側のナビゲーションウィンドウで、[APIの管理]> [API] を選択します。 [API] ページで、[APIの作成] をクリックします。 [基本情報] ステップで、次のパラメーターを設定し、[次へ] をクリックします。

      image

    4. [APIリクエストの定義] ステップで、[リクエストパス] パラメーターを /に設定し、他のパラメーターにデフォルト値を使用して、[次へ] をクリックします。

      image

    5. [バックエンドサービスの定義] ステップで、[トリガーパス] パラメーターをhttps:// ***-*** .cn-hangzhou-vpc.fcapp.ru nなどのHTTPトリガーの内部エンドポイントに設定し、次の図に基づいて他のパラメーターを設定し、[次へ] をクリックします。

      image

    6. [応答の定義] ステップで、デフォルトの設定を維持し、[作成] をクリックします。 APIの作成後、APIページでAPIを見つけ、[操作] 列の [発行] をクリックします。

  5. APIをデバッグします。 作成したAPIは、API Gatewayが提供するオンラインデバッグツールを使用してデバッグできます。 これにより、公開前にAPIの問題をトラブルシューティングして解決し、APIが期待どおりに機能するかどうかを確認できます。 APIがデバッグに合格した場合、APIはFunction Computeに接続されます。

    1. API Gatewayコンソールにログインします。 左側のナビゲーションウィンドウで、[APIの呼び出し] > [デバッグ] を選択します。

    2. [デバッグAPI] ページで、作成した [FCテスト] APIを選択し、[リクエストの送信] をクリックします。 次の図は、設定が成功したことを示す返された情報を示しています。

      image

  6. バックエンド署名プラグインを作成します。 Alibaba CloudアカウントのAccessKey IDAccessKey secretkeysecretを設定します。 次に、作成したAPIにプラグインをバインドします。 詳細については、「概要」をご参照ください。

    image

  7. CNAMEを使用して、API Gatewayが提供する第2レベルのドメイン名にドメイン名を解決します。

    1. API Gatewayコンソールにログインします。 左側のナビゲーションウィンドウで、[APIの管理] > [APIグループ] を選択します。 [APIグループ] ページで、作成したAPIグループの名前をクリックします。 表示されるページで、パブリックの第2レベルドメイン名をコピーします。image

    2. Alibaba Cloud DNS コンソールにログインします。 ドメイン名を見つけて、ドメイン名の詳細ページに移動します。 詳細ページで、管理するDNSレコードを見つけ、[操作] 列の [変更] をクリックします。

      image

      説明

      独立したドメイン名を中国本土内のリージョンのAPIグループにバインドする場合は、Alibaba Cloud ICPファイリングシステムでドメイン名のICPファイリングを申請するか、サービスプロバイダーとしてAlibaba Cloudをドメイン名のICPファイリング情報に追加する必要があります。

    3. API Gatewayコンソールにログインします。 左側のナビゲーションウィンドウで、[APIの管理] > [APIグループ] を選択します。 [APIグループ] ページで、作成したAPIグループの名前をクリックします。 表示されるページで、[独立ドメイン] セクションを見つけます。 [独立ドメイン] セクションで、[ドメイン名のバインド] をクリックします。 [ドメイン名のバインド] ダイアログボックスで、ドメイン名を入力し、[確認] をクリックします。 ドメイン名がバインドされています。

      image

上記の手順を完了すると、独自のドメイン名を使用してHTTP関数にアクセスできます。 次のプラグインを作成してAPIにバインドし、HTTP関数を保護することもできます。

トラブルシューティング

関数を呼び出すリクエストを送信すると、次のエラーが発生する可能性があります。

  • リクエストエラー: リクエストが特定の要件を満たしていない場合、リクエストエラーが発生します。 この場合、HTTPステータスコード4xxが返されます。

  • 関数エラー: 関数コードが無効な場合、関数エラーが発生します。 この場合、HTTPステータスコード5xxが返されます。

次の表に、リクエストエラーと関数エラーが発生するシナリオを示します。 エラーの原因に基づいてエラーをトラブルシューティングできます。

エラータイプ

HTTPステータスコード

原因

課金可能

Request error

400

リクエストがHTTPリクエストの制限を超えています。 詳細については、「概要」をご参照ください。

不可

400

ID認証が必要な関数のリクエストには、日付情報または権限情報が含まれていません。

不可

403

ID認証を必要とする関数のリクエストの署名が無効です。これは、認証情報が無効であることを示します。 日付情報は署名を計算するために使用され、署名は15分間のみ有効です。 アクセス認証が必要なHTTPトリガーを使用する場合、リクエストヘッダーの日付情報が15分以上前に生成された場合、署名は無効になります。

不可

403

リクエストは、HTTPトリガーで設定されていないメソッドを使用して送信されます。 たとえば、POSTメソッドを使用してHTTPリクエストを送信し、HTTPトリガーでGETメソッドのみが設定されている場合、このエラーが発生します。

不可

404

HTTPリクエストは、HTTPトリガーが設定されていない関数に送信されます。

不可

ユーザースロットリングエラー

429

あなたのトラフィックは抑制されています。 同時リクエストを減らすか、Function Computeのテクニカルサポートに連絡して同時実行設定を増やすことができます。

不可

関数エラー

502

関数のレスポンスがHTTPレスポンスの制限を超えています。 詳細については、「概要」をご参照ください。

502

関数のコードに構文エラーまたは例外があります。

502

HTTPハンドラ関数を使用しない関数にHTTPリクエストが送信されます。

システムエラー

500

Function Computeでシステムエラーが発生しました。 もう一度お試しください。

不可

システムスロットリングエラー

503

Function Computeではシステムスロットリングが有効になっています。 指数バックオフモードでもう一度お試しください。

不可

問題が解決しない場合は、DingTalkグループに参加します (ID:64970014484テクニカルサポートのFunction Computeの