HTTP によってトリガーされない関数を手動で実行する
この記事では、特殊な形式の HTTP 要求を介して、HTTP によってトリガーされない関数を手動で実行する方法について説明します。
開発中やトラブルシューティング中など、一部のコンテキストでは、間接的にトリガーされる Azure 関数を "オンデマンド" で実行することが必要になる場合があります。 間接的なトリガーの例として、スケジュールに対する関数、イベントの結果として実行される関数などがあります。
この記事で説明する手順は、Azure portal の関数の [コードとテスト] タブの [テスト/実行] 機能を使用することと同じです。 また、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 portal または Azure CLI を使用して取得できます。
注意事項
マスター キーによって付与された関数 app の権限が昇格しているため、このキーを第三者と共有したり、アプリケーションに配布したりしないでください。 HTTPS エンドポイントにのみキーを送信する必要があります。
Azure portal で関数アプリに移動し、 [アプリ キー] 、
_master
キーの順に選択します。[キーの編集] セクションで、キーの値をクリップボードにコピーして、 [OK] を選択します。
関数を呼び出す
Azure portal で、関数アプリの上部に移動し、関数を選択します。
[コードとテスト] を選択し、その後 [ログ] を選択します。 HTTP テスト ツールから手動で関数を実行したときにログに記録された関数のメッセージがここに表示されます。
HTTP テスト ツールで、定義した要求の場所を要求 URL として使用します。HTTP 要求メソッドが POST であることを確認し、次の 2 つの要求ヘッダーを含めます。
Key Value x-functions-key
クリップボードから貼り付けたマスター キーの値。 Content-Type
application/json
POST 要求のペイロード/本文が
{ "input": "<TRIGGER_INPUT>" }
であることを確認します。 指定する特定の<TRIGGER_INPUT>
はトリガーの種類によって異なりますが、指定できるのは文字列、数値、またはブール値のみです。 Azure Service Bus などの JSON ペイロードを使用するサービスの場合、テスト JSON ペイロードをエスケープし、文字列としてシリアル化する必要があります。関数に入力データを渡さない場合でも、POST 要求の本文として空のディクショナリ
{}
を指定する必要があります。 詳しくは、 「HTTP によってトリガーされない関数を手動で実行する」をご覧ください。HTTP POST 要求を送信します。 応答は HTTP 202 (Accepted) 応答となるはずです。
次に、Azure portal で関数に戻ります。 ログを確認すると、関数の手動呼び出しによるメッセージが表示されます。
トリガーに送信されるデータにアクセスする方法は、トリガーの種類と関数言語によって異なります。 詳細については、特定トリガーの参照の例を参照してください。