この記事では、特殊な形式の HTTP 要求を介して、HTTP によってトリガーされない関数を手動で実行する方法について説明します。
開発中やトラブルシューティング中など、一部のコンテキストでは、間接的にトリガーされるAzure関数を "オンデマンド" で実行することが必要になる場合があります。 間接トリガーの例としては、 スケジュール上の関数 や 、イベントの結果として実行される関数などがあります。
この記事で説明する手順は、Azure ポータルの Test/Run 関数の Code + Test タブの機能を使用することと同じです。 Visual Studio Codeを使用して、関数を手動で実行することもできます。
前提条件
この記事内の例では、HTTP テスト ツールを使用します。 データを安全に保つツールを選択するようにしてください。 詳細については、「HTTP テスト ツール」を参照してください。
要求の場所を定義する
HTTP によってトリガーされていない関数を実行するには、Azureに要求を送信して関数を実行する方法が必要です。 この要求の送信に使用される URL には特定の形式があります。
-
ホスト名: 関数アプリの名前と、 azurewebsites.net またはカスタム ドメインから構成される関数アプリのパブリックな場所。 ステージングに使用される デプロイ スロット を操作する場合、ホスト名の部分は運用ホスト名であり、
-<slotname>が追加されます。 前の例では、stagingという名前のスロットの URL がmyfunctiondemos-staging.azurewebsites.netされます。 -
フォルダー パス: HTTP 要求を介して HTTP によってトリガーされていない関数にアクセスするには、パス
admin/functionsを介して要求を送信する必要があります。/admin/パスの下の API には、承認がある場合にのみアクセスできます。 - 関数名: 実行する関数の名前。
関数アプリで管理者エンドポイントに要求を行う場合は、次の考慮事項が適用されます。
-
/admin/パスの下の任意のエンドポイントに要求を行う場合は、要求のx-functions-keyヘッダーにアプリのマスター キーを指定する必要があります。 - ローカルで実行する場合、認可は必須ではなく、関数のマスター キーも不要です。
x-functions-keyヘッダーを省略して関数を直接呼び出すことができます。 - デプロイ スロット内の関数アプリ エンドポイントにアクセスする場合は、スロット固有のマスター キーと共に、要求 URL でスロット固有のホスト名を使用してください。
マスター キーを取得する
マスター キーは、Azure ポータルから取得することも、Azure CLIを使用して取得することもできます。
注意事項
マスター キーによって付与される関数アプリの昇格されたアクセス許可のため、このキーをサード パーティと共有したり、アプリケーションに配布したりしないでください。 HTTPS エンドポイントにのみキーを送信する必要があります。
Azure ポータルで関数アプリに移動し、App Keys を選択してから、
_masterキーを選択します。
[ キーの編集] セクションで、キーの値をクリップボードにコピーし、[ OK] を選択します。
関数を呼び出す
Azure ポータルで、関数アプリの上部に移動し、関数を選択します。
[ コードとテスト] を選択し、[ログ] を選択 します。 HTTP テスト ツールから手動で関数を実行したときにログに記録された関数のメッセージがここに表示されます。
HTTP テスト ツールで、定義した要求の場所を要求 URL として使用します。HTTP 要求メソッドが POST であることを確認し、次の 2 つの要求ヘッダーを含めます。
鍵 価値 x-functions-keyクリップボードから貼り付けたマスター キーの値。 Content-Typeapplication/jsonPOST 要求ペイロード/本文が
{ "input": "<TRIGGER_INPUT>" }されていることを確認します。 指定する特定の<TRIGGER_INPUT>はトリガーの種類によって異なりますが、指定できるのは文字列、数値、またはブール値のみです。 Azure Service Busなどの JSON ペイロードを使用するサービスの場合、テスト JSON ペイロードをエスケープし、文字列としてシリアル化する必要があります。入力データを関数に渡さない場合でも、POST 要求の本文として空のディクショナリ
{}を指定する必要があります。 特定の非HTTPトリガーに関する詳細については、参照記事をご覧ください。HTTP POST 要求を送信します。 応答は HTTP 202 (Accepted) 応答となるはずです。
次に、Azure ポータルで関数に戻ります。 ログを確認すると、関数の手動呼び出しによるメッセージが表示されます。
トリガーに送信されるデータにアクセスする方法は、トリガーの種類と関数言語によって異なります。 詳細については、 特定のトリガーの参照例を参照してください。