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 エンドポイントにのみキーを送信する必要があります。

  1. Azure portal で関数アプリに移動し、 [アプリ キー]_master キーの順に選択します。

    コピーするマスター キーを見つけます。

  2. [キーの編集] セクションで、キーの値をクリップボードにコピーして、 [OK] を選択します。

    マスター キーをクリップボードにコピーします。

関数を呼び出す

  1. Azure portal で、関数アプリの上部に移動し、関数を選択します。

  2. [コードとテスト] を選択し、その後 [ログ] を選択します。 HTTP テスト ツールから手動で関数を実行したときにログに記録された関数のメッセージがここに表示されます。

    ログからのメッセージが表示されている [Code + Test]\(コード + テスト\) ページを示すスクリーンショット。

  3. HTTP テスト ツールで、定義した要求の場所を要求 URL として使用します。HTTP 要求メソッドが POST であることを確認し、次の 2 つの要求ヘッダーを含めます。

    Key Value
    x-functions-key クリップボードから貼り付けたマスター キーの値。
    Content-Type application/json
  4. POST 要求のペイロード/本文が { "input": "<TRIGGER_INPUT>" } であることを確認します。 指定する特定の <TRIGGER_INPUT> はトリガーの種類によって異なりますが、指定できるのは文字列、数値、またはブール値のみです。 Azure Service Bus などの JSON ペイロードを使用するサービスの場合、テスト JSON ペイロードをエスケープし、文字列としてシリアル化する必要があります。

    関数に入力データを渡さない場合でも、POST 要求の本文として空のディクショナリ {} を指定する必要があります。 詳しくは、 「HTTP によってトリガーされない関数を手動で実行する」をご覧ください。

  5. HTTP POST 要求を送信します。 応答は HTTP 202 (Accepted) 応答となるはずです。

  6. 次に、Azure portal で関数に戻ります。 ログを確認すると、関数の手動呼び出しによるメッセージが表示されます。

    ログを表示して、マスター キーのテスト結果を確認します。

トリガーに送信されるデータにアクセスする方法は、トリガーの種類と関数言語によって異なります。 詳細については、特定トリガーの参照の例を参照してください。

次のステップ