Function Compute は HTTP トリガーをサポートしており、HTTP リクエストを使用して関数を呼び出すことができます。関数は HTTP リクエストを処理し、結果を返します。このトピックでは、Function Compute コンソールで HTTP トリガーを設定し、それを使用して関数を呼び出す方法について説明します。
前提条件
ステップ 1: トリガーの作成
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーでリージョンを選択します。[関数] ページで、対象の関数をクリックします。
関数の詳細ページで、[トリガー] タブをクリックし、[トリガーの作成] をクリックします。
[トリガーの作成] パネルでパラメーターを設定し、[OK] をクリックします。
設定項目
操作
例
トリガータイプ
HTTP トリガーを選択します。
HTTP トリガー
名前
カスタムトリガー名を入力します。
http-trigger
バージョンまたはエイリアス
デフォルト値は LATEST です。別のバージョンまたはエイリアスのトリガーを作成するには、まず関数の詳細ページの [バージョンまたはエイリアス] ドロップダウンリストからそのバージョンを選択する必要があります。バージョンとエイリアスの概要については、「バージョンの管理」および「エイリアスの管理」をご参照ください。
LATEST
リクエストメソッド
この HTTP トリガーをトリガーできるメソッドを指定します。
GET, POST, PUT, DELETE
インターネット URL を無効にする
デフォルトでは、このオプションは無効になっており、パブリックドメイン名からトリガーにアクセスできます。
このオプションを有効にすると、HTTP トリガーにデフォルトのパブリックドメイン名は提供されません。その後、パブリックドメイン名を使用して関数を呼び出すと、
access denied due to function internet URL is disableエラーが報告されます。カスタムドメイン名によるアクセスは影響を受けません。いいえ
認証メソッド
Function Compute が HTTP リクエストを認証するために使用するメソッドを選択します。次の値が利用可能です:
認証なし: HTTP リクエストに身分認証は必要ありません。匿名アクセスがサポートされています。誰でも HTTP リクエストを送信して関数を呼び出すことができます。
署名認証: HTTP リクエストには身分認証が必要です。署名認証のサンプルコードについては、「署名を使用して HTTP トリガー URL にアクセスする」をご参照ください。
Basic 認証: HTTP リクエストには身分認証が必要です。Basic 認証のサンプルコードについては、「HTTP トリガーの Basic 認証を設定する」をご参照ください。
JWT 認証: HTTP リクエストには JWT 認証が必要です。詳細については、「HTTP トリガーの JWT 認証を設定する」をご参照ください。
Bearer 認証: HTTP リクエストには Bearer 認証が必要です。詳細については、「HTTP トリガーの Bearer 認証を有効にする」をご参照ください。
認証なし
トリガーを作成した後、[バージョンまたはエイリアス]、[リクエストメソッド]、[認証メソッド] などの設定項目を変更できます。
ステップ 2: コードの作成とデプロイ
HTTP トリガーを作成した後、関数コードを作成できます。
関数の詳細ページで、[コード] タブをクリックします。コードエディタでコードを作成し、[コードのデプロイ] をクリックします。サンプルコードについては、Function Compute ドキュメントの セクションにある、さまざまなランタイムのハンドラドキュメントをご参照ください。
ステップ 3: 関数のテスト
方法 1: コンソールを使用して関数をテストする
[関数の詳細] ページで、[コード] タブをクリックします。
同期呼び出し
[関数のテスト] をクリックします。
非同期呼び出し
[テスト機能] の横にある
アイコンをクリックし、[非同期呼び出し] を選択します。その後、[テスト機能] をクリックします。
実行が完了したら、[コード] タブで結果を表示できます。
方法 2: cURL を使用して関数をテストする
関数の詳細ページで、[トリガー] タブをクリックします。HTTP トリガーの [設定情報] 列で、パブリックエンドポイントを取得します。

コマンドラインで cURL コマンドを実行して、関数をテストします。
同期呼び出し
以下は例です。
https://example.cn-shenzhen.fcapp.runを前のステップで取得した HTTP トリガーのパブリックエンドポイントに置き換えます。$pathを呼び出したい API 操作の名前に置き換えます。curl -v https://example.cn-shenzhen.fcapp.run/$path説明Web 関数の呼び出し: Flask アプリケーションの場合、Python 関数のルートが
@app.route('/test')として定義されている場合は、$pathをtestに置き換えます。ルートが@app.route('/')として定義されている場合は、HTTP トリガーのパブリックエンドポイントを直接呼び出します。イベント関数の呼び出し: HTTP トリガーのパブリックエンドポイントを直接呼び出します。
コマンドが実行されると、Function Compute はコードの実行結果を返します。
非同期呼び出し
以下は例です。
https://example.cn-shenzhen.fcapp.runを HTTP トリガーのパブリックエンドポイントに置き換えます。$pathを呼び出したい API 操作の名前に置き換えます。curl -v -H "X-Fc-Invocation-Type: Async" https://example.cn-shenzhen.fcapp.run/$path説明Web 関数の呼び出し: Flask アプリケーションの場合、Python 関数のルートが
@app.route('/test')として定義されている場合は、$pathをtestに置き換えます。ルートが@app.route('/')として定義されている場合は、HTTP トリガーのパブリックエンドポイントを直接呼び出します。イベント関数の呼び出し: HTTP トリガーのパブリックエンドポイントを直接呼び出します。
コマンドが実行されると、Function Compute はリクエストの受信結果を返します。
202ステータスコードは、リクエストが正常に送信されたことを示します。その他のステータスコードは、呼び出し中にエラーが発生したことを示します。エラーコードの原因の詳細については、「FAQ (トラブルシューティング)」をご参照ください。
方法 3: (非推奨) ブラウザを使用して関数をテストする
関数の詳細ページで、[トリガー] タブをクリックします。対象の HTTP トリガーの [設定情報] 列で、パブリックエンドポイントを取得します。このエンドポイントをブラウザのアドレスバーに入力し、Enter キーを押します。
実行が完了すると、ブラウザは実行結果を含むファイルを返します。
(オプション) API Gateway を使用して関数を保護する
Function Compute は HTTP リクエストの匿名アクセスをサポートしています。これは、誰でも HTTP リクエストを送信して関数を呼び出せることを意味します。未承認のユーザーが関数にアクセスして不要なリソース消費やセキュリティリスクを引き起こすのを防ぐために、身分認証を有効にして HTTP 関数を API Gateway と統合できます。IP アクセス制御プラグイン、JWT 認証プラグイン、BasicAuth プラグインなどの API Gateway プラグインを使用して、HTTP 関数を保護できます。
Function Compute コンソールで、対象の関数を見つけます。関数の詳細ページで、[トリガー] タブをクリックします。対象の HTTP トリガーの [アクション] 列で、[編集] をクリックします。
[トリガーの編集] パネルで、[インターネット URL を無効にする] スイッチをオンにします。
API Gateway コンソールにログインし、HTTP 関数が存在するリージョンに切り替えます。
グループと API を作成します。
API を作成して、外部アプリケーションが指定された方法で内部関数サービスを呼び出せるようにすることができます。API グループを使用して、複数の関連する API 操作を整理および管理できます。これにより、統一されたセキュリティポリシーとトラフィックシェーピングメジャーを簡単に実装できます。
API Gateway コンソールの左側のナビゲーションウィンドウで、[API 管理] > [グループ管理] を選択します。[グループの作成] をクリックします。
[グループの作成] ダイアログボックスで、[インスタンス] を選択します。[グループ名] を
FC-Groupに、[BasePath] を/に設定します。次に、[OK] をクリックします。対象グループの [アクション] 列で、[API 管理] をクリックします。次に、[API の作成] をクリックします。[基本情報] タブで、次の情報を設定し、[次へ] をクリックします。

[API リクエストの定義] タブで、[リクエストパス] を
/に設定し、他のパラメーターはデフォルト値のままにして、[次へ] をクリックします。
[API バックエンドサービスの定義] タブで、[トリガーパス] を Function Compute トリガーの内部エンドポイント (例:
https://example.cn-hangzhou-vpc.fcapp.run) に設定します。図に示すように設定を構成し、[次へ] をクリックします。
[レスポンスの定義] タブで、デフォルトの構成を維持し、[作成] をクリックします。API が作成されたら、API の [アクション] 列で [公開] をクリックします。
API をデバッグします。API を公開する前に、API Gateway が提供するオンラインデバッグツールを使用して、API が期待どおりに機能するかどうかをテストできます。これにより、問題を迅速に発見して解決できます。デバッグが成功すると、API Gateway は Function Compute に接続されます。
API Gateway コンソールの左側のナビゲーションウィンドウで、[API 呼び出し] > [デバッグ] を選択します。
[デバッグ] ページで、作成した
FC-testAPI を選択し、[リクエストの送信] をクリックします。次の図に示す情報が表示された場合、設定は成功です。
[バックエンド署名] タイプのプラグインを作成します。
keyとsecretを Alibaba Cloud アカウントのAccessKey IDとAccessKey Secretに設定します。次に、プラグインを作成した API にバインドします。詳細については、「プラグインの概要」をご参照ください。
CNAME レコードを使用して、ドメイン名を API Gateway が提供する第 2 レベルドメインに解決します。
API Gateway コンソールの左側のナビゲーションウィンドウで、[API 管理] > [グループ管理] を選択します。パブリック第 2 レベルドメインをコピーします。

ドメイン名の名前解決管理ページに移動します。Alibaba Cloud DNS コンソールは https://dnsnext.console.alibabacloud.com で利用できます。ドメイン名リストで、管理したいドメイン名を見つけ、ドメイン名をクリックして管理ページに移動します。
説明中国本土リージョンの独立したドメイン名は、Alibaba Cloud からの ICP 登録 を取得するか、ICP 登録を Alibaba Cloud に転送する必要があります。
API Gateway コンソールの左側のナビゲーションウィンドウで、[API 管理] > [グループ管理] を選択します。[独立ドメイン] セクションに移動します。ページ右下隅のボタンをクリックしてドメイン名をバインドします。ドメイン名を入力して [OK] をクリックします。ドメイン名がバインドされます。

これらのステップを完了すると、ドメイン名を通じて HTTP 関数にアクセスできます。また、次のプラグインを作成して API にバインドし、HTTP 関数を保護することもできます。
トラブルシューティング
エラーは主に 2 つのタイプに分けられます:
リクエストエラーは、送信されたリクエストが必要な基準を満たしていない場合に発生します。レスポンスで 4xx ステータスコードが返されます。
関数エラーは、関数コードに問題がある場合に発生します。5xx ステータスコードが返されます。
次の表は、リクエストエラーと関数エラーが発生する可能性のあるシナリオを説明し、問題を迅速にトラブルシューティングするのに役立ちます。
エラータイプ | HTTP ステータスコード | 原因分析 | 課金対象 |
リクエストエラー | 400 | リクエストがリクエスト制限を超えています。詳細については、「HTTP トリガーの概要」をご参照ください。 | いいえ |
400 | 身分認証が必要な関数を呼び出すリクエストに、Date または Authorization 情報が含まれていません。 | いいえ | |
403 | 身分認証が必要な関数を呼び出すリクエストの署名が無効です。これは、Authorization 情報が正しくないことを意味します。Date は署名計算の一部であり、署名は 15 分後に有効期限が切れます。このエラーの一般的な原因は、アクセス認証が必要な HTTP トリガーを使用しているにもかかわらず、リクエストヘッダーの Date が 15 分以上前のものであることです。これにより、署名が無効になります。 | いいえ | |
403 | リクエストは、HTTP トリガーで設定されていないメソッドを使用しています。たとえば、HTTP トリガーで GET メソッドのみが設定されている場合に、POST メソッドを使用して HTTP リクエストを送信すると、このエラーが発生します。 | いいえ | |
404 | HTTP トリガーが設定されていない関数に HTTP リクエストが送信されました。 | いいえ | |
ユーザースロットリング | 429 | ユーザーのトラフィックがスロットリングされています。同時リクエストの数を減らすか、Function Compute 開発者チームに連絡して同時実行数の上限を引き上げてください。 | いいえ |
関数エラー | 502 | 関数の戻り値がレスポンス制限を超えています。詳細については、「HTTP トリガーの概要」をご参照ください。 | はい |
502 | 関数コードに構文エラーまたは例外があります。 | はい | |
502 | HTTP ハンドラを使用しない関数に HTTP リクエストが送信されました。 | はい | |
システムエラー | 500 | Function Compute のシステムエラーが発生しました。操作を再試行してください。 | いいえ |
システムスロットリング | 503 | Function Compute はシステムスロットリングを経験しています。エクスポネンシャルバックオフで再試行してください。 | いいえ |
問題が解決しない場合は、DingTalk ユーザーグループ (ID: 64970014484) に参加して、Function Compute のエンジニアに支援を依頼してください。