Function Compute は HTTP トリガーをサポートしています。HTTP トリガーが設定された関数は、HTTP リクエストを送信することで呼び出すことができます。関数はリクエストを処理し、結果を呼び出し元に返します。このトピックでは、Function Compute コンソールで HTTP トリガーを設定し、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 トリガーエンドポイントにアクセスする」をご参照ください。
Bearer 認証:HTTP リクエストは認証が必要です。Basic 認証のサンプルコードについては、「HTTP トリガーの Basic 認証を設定する」をご参照ください。
JWT 認証:HTTP リクエストは JSON Web トークン (JWT) を使用して認証する必要があります。詳細については、「HTTP トリガーの JWT 認証を設定する」をご参照ください。
Bearer 認証:HTTP リクエストは Bearer 認証を使用して認証する必要があります。詳細については、「HTTP トリガーの Bearer 認証を有効化する」をご参照ください。
認証なし
トリガー作成後、バージョンまたはエイリアス、リクエストメソッド、および 認証方法 などの構成を変更できます。
ステップ 2:コードの記述とデプロイ
HTTP トリガーを作成したら、関数コードを記述します。
関数詳細ページで、コード タブをクリックします。コードエディタにコードを記述し、デプロイメントコード をクリックします。 サンプルコードについては、Function Compute ドキュメントの セクションにある、各ランタイムのハンドラドキュメントをご参照ください。
ステップ 3:関数のテスト
方法 1:コンソールを使用した関数のテスト
関数の詳細 ページで、コード タブをクリックします。
同期呼び出し
関数のテスト をクリックします。
非同期呼び出し
「関数のテスト」の右側にある
アイコンをクリックし、「非同期呼び出し」を選択してから、もう一度「関数のテスト」をクリックします。
実行完了後、コード タブで結果を確認します。
方法 2:cURL を使用した関数のテスト
関数詳細ページで、トリガー タブをクリックします。対象の HTTP トリガーの 設定 列からパブリックエンドポイントを取得します。

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

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

ドメイン名解決管理ページに移動します。Alibaba Cloud の場合、ドメイン名解決管理ページは https://dnsnext.console.alibabacloud.com です。ドメイン名一覧ページで、管理対象のドメイン名を見つけ、そのドメイン名のリンクをクリックして管理ページに移動します。
説明中国本土の独立ドメイン名には、Alibaba Cloud による ICP 登録が必要であるか、または Alibaba Cloud に ICP 登録を移管する必要があります。
API Gateway コンソールで、左側のナビゲーションウィンドウから API 管理 > API グループ を選択します。独立したドメイン セクションに移動します。ページ右下にあるドメイン名バインド用のボタンをクリックし、ご利用のドメイン名を入力して OK をクリックします。これでドメイン名が正常にバインドされます。

これらの手順を完了すると、ご利用のドメイン名経由で HTTP 関数にアクセスできるようになります。また、以下のプラグインを作成・バインドして、HTTP 関数を保護することもできます。
エラーのトラブルシューティング
エラーは主に次の 2 つのカテゴリに分類されます。
リクエストエラー:送信されたリクエストが必要な基準を満たしていない場合に発生します。応答で 4xx の状態コードが返されます。
関数エラー:関数コードに問題がある場合に発生します。5xx の状態コードが返されます。
以下の表では、リクエストエラーおよび関数エラーが発生する可能性のあるシナリオを説明し、問題のトラブルシューティングを迅速に行えるように支援します。
エラーの種類 | HTTP 状態コード | 原因分析 | 課金対象 |
リクエストエラー | 400 | リクエストがリクエスト制限を超えています。詳細については、「HTTP トリガーの概要」をご参照ください。 | いいえ |
400 | 認証を必要とする関数を呼び出すリクエストに、Date または Authorization 情報が含まれていません。 | いいえ | |
403 | 認証を必要とする関数を呼び出すリクエストの署名が正しくありません。つまり、Authorization が誤っています。署名計算には Date が使用され、署名の有効期限は 15 分間のみであるため、署名が有効期限切れになることがあります。一般的な原因として、認証を必要とする HTTP トリガーに対するリクエストヘッダーに含まれる Date が現在時刻から 15 分以上離れているため、署名が有効期限切れになっていることが挙げられます。 | いいえ | |
403 | リクエストで、HTTP トリガーに設定されていないリクエストメソッドが使用されています。たとえば、HTTP トリガーが GET リクエストのみを受け付けるように設定されているにもかかわらず、POST リクエストが送信された場合などです。 | いいえ | |
404 | HTTP トリガーが設定されていない関数に対して HTTP リクエストが送信されました。 | いいえ | |
ユーザー速度制限 | 429 | 速度制限がかかっています。同時実行数を減らすか、Function Compute 開発チームに連絡して同時実行数の上限を引き上げてください。 | いいえ |
関数エラー | 502 | 関数の戻り値が応答制限を超えています。詳細については、「HTTP トリガーの概要」をご参照ください。 | はい |
502 | 関数コードに構文エラーまたは例外が発生しています。 | はい | |
502 | HTTP ハンドラを使用しない関数に対して HTTP リクエストが送信されました。 | はい | |
システムエラー | 500 | Function Compute でシステムエラーが発生しました。再度操作を試行してください。 | いいえ |
システム速度制限 | 503 | Function Compute のシステム速度制限エラーです。指数バックオフモードで再試行してください。 | いいえ |
問題が解決しない場合は、DingTalk グループ (ID:64970014484) に参加して、Function Compute エンジニアにサポートを依頼してください。。