次の方法で共有


HTTP によってトリガーされない関数を手動で実行する

この記事では、特殊な形式の 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 エンドポイントにのみキーを送信する必要があります。

  1. Azure ポータルで関数アプリに移動し、App Keys を選択してから、_master キーを選択します。

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

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

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

関数を呼び出す

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

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

    ログからのメッセージが表示された [コード + テスト] ページを示すスクリーンショット。

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

    価値
    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 ポータルで関数に戻ります。 ログを確認すると、関数の手動呼び出しによるメッセージが表示されます。

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

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

次のステップ