Azure Functions でコードをオンデマンドで実行する

完了

関数アプリを作成したので、関数をビルド、構成、実行する方法について確認しましょう。

トリガー

関数はイベント駆動型です。つまり、イベントに応答して実行されるということです。 関数を開始するイベントの種類を、トリガーと呼びます。 各関数は、トリガーを 1 つだけ使って構成する必要があります。

Azure では、次のサービスに対してトリガーをサポートしています。

サービス トリガーの説明
Blob Storage 新しい、または更新された BLOB が検出されたときに関数を開始します。
Azure Cosmos DB 挿入および更新が検出されたときに関数を開始します。
Event Grid Event Grid からイベントを受信したときに関数を開始します。
HTTP HTTP 要求で関数を開始します。
Microsoft Graph イベント Microsoft Graph から受信した Webhook に応答して関数を開始します。 このトリガーの各インスタンスは、それぞれ Microsoft Graph の 1 つのリソースの種類に応答できます。
Queue Storage キューで新しい項目を受け取ったときに関数を開始します。 キュー メッセージは、関数への入力として提供されます。
Service Bus Service Bus キューからのメッセージに応答して関数を開始します。
Timer スケジュールに従って関数を開始します。

バインド

バインドは、データとサービスを関数に接続するための宣言型の方法です。 バインドによって、さまざまなデータ ソースとやりとりされます。つまり、データ ソースに接続して、接続を管理するために、自分で関数にコードを記述する必要はないということです。 ユーザーの代わりに、プラットフォームによってその複雑さがバインド コードの一部として処理されます。 各バインドの方向は 1 つです。コードでは、"入力" バインドからデータを読み取り、"出力" バインドにデータを書き込みます。 各関数には、関数によって処理された入出力データを管理するために、0 個またはそれ以上のバインドを割り当てることができます。

トリガーとは、何らかのコードの実行を開始する機能を持つ入力バインドの一種です。

Azure には、各種のストレージ サービスとメッセージング サービスに接続するために、多数のバインドが用意されています。

サンプル バインドを定義する

入力バインド (トリガー) と出力バインドで関数を構成する例を見てみましょう。 Azure Queue Storage に新しいメッセージが表示されるたびに Azure Table Storage に新しい行を書き込むとします。 このシナリオは、Azure Queue Storage トリガーと Azure Table storage の出力バインドを使用して実装できます。

次のスニペットは、このシナリオの function.json ファイルです。

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "name": "$return",
      "type": "table",
      "direction": "out",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

今回の JSON 構成では、myqueue-items という名前のキューにメッセージが追加されたとき、関数がトリガーされるように指定されています。 次に、関数の戻り値が Azure Table Storage の outTable テーブルに書き込まれます。 PowerShell 関数の場合、出力バインディングは Push-OutputBinding コマンドレットを使用して明示的に書き込まれます。

この例は、関数にバインディングを構成する方法を単純に示しています。 出力を SendGrid バインドを使用する電子メールに変更したり、アーキテクチャ内のその他のコンポーネントに通知するために Service Bus にイベントを配置したりできます。また、さまざまなサービスにデータをプッシュするように、複数の出力バインドを含めることもできます。

ヒント

Azure portal で function.json の内容を表示および編集するには、[ホーム] ページから関数アプリを選択し、右側のペインで [JSON ビュー] を選択します。 [リソース JSON] ビューには、Resource ID と編集可能な JSON コードが表示されます。 JSON ビューを閉じるには、ペインの右上隅にある [X] を選択します。

Azure portal で関数を作成する

Azure には、一般的なシナリオに使用できる関数テンプレートがいくつか事前に定義されています。

  • クイック スタート
  • カスタム関数

関数テンプレート

Azure の [関数の作成] ペインで最初の関数を作成するときに、定義済みのトリガーを関数に選択できます。 選択した内容に基づいて、入力データの受信時にイベント ログ エントリを作成するなど、既定のコードと構成情報が Azure によって生成されます。

[関数の追加] ペインからテンプレートを選択すると、最も一般的な開発環境、トリガー、依存関係に簡単にアクセスできます。 Azure portal で関数を作成する場合は、20 を超えるテンプレートから選択できます。 作成したコードは、さらにカスタマイズできます。

関数をテンプレートから作成すると、構成ファイル、function.json、ソース コード ファイル、index.js など、複数のファイルが作成されます。

[関数アプリ] メニューの [関数] カテゴリで [関数] を選択すると、関数アプリの関数を作成または編集できます。

関数アプリで作成した関数を選択すると、[関数] ペインが開きます。 [関数] メニューから [Code + Test](コードとテスト) を選ぶと、コマンド バー テストのアクションにアクセスして、コードをテストして実行する、変更を保存または破棄する、または発行された URL を取得することができます。 コマンド バーの [Test/Run](テスト/実行) を選択すると、要求にクエリ文字列と値を含めてユース ケースを実行できます。 コード ボックスの上にある関数のパスに、開いているファイルの名前が表示されます。 ドロップダウンから特定のファイル、たとえば function. json を選択して、テストまたは編集できます。

関数コードとテスト エディターに [Test/Run]\(テスト/実行\) の展開されたビューが表示され、メニュー オプションが強調表示されているスクリーンショット。

上の画像で、右側のペインに [入力][出力] のタブがあります。 [入力] タブを選択して、クエリ パラメーターを追加し、クエリ文字列の値を指定することで、関数をビルドしてテストできます。 [出力] タブには、要求の結果が表示されます。

Azure 関数をテストする

関数を作成したら、テストする必要があります。 これには 2 つの方法があります。

  • 手動で実行する
  • Azure portal 自体からテストする

関数を手動で実行する

構成されたトリガーを手動でトリガーすることによって、関数を開始できます。 たとえば、HTTP トリガーを使用している場合、Postman や cURL などのツールを使用して、関数エンドポイント URL への HTTP 要求を開始することができます。これは関数の定義から利用できます ([関数の URL の取得])。

Azure portal でテストする

ポータルにも、関数をテストするための便利な手段が用意されています。 上記のスクリーンショットについて前述したように、 このペインで [実行]を選択すると、結果が [出力] タブに自動的に表示され、[ログ] ペインが開いて状態が表示されます。

監視と Application Insights ダッシュボード

関数を監視する機能は、開発環境および本番環境にに対して重要です。 Azure portal から提供されている監視ダッシュボードは、Application Insights の統合を有効にしてオンにします。 [関数アプリ] メニューで、[設定] の下の [Application Insights] を選択し、[Application Insights を有効にする][適用] の順に選択します。 ダイアログ ボックスで [はい] を選択します。 Application Insights ダッシュボードを使用すると、Application Insights によって設定されたタイムスタンプ、結果コード、期間、操作 ID が表示され、関数操作の履歴を簡単に確認できます。

HTTP 関数の Application Insights ダッシュボードに関数の結果とそれに対応する HTTP 状態コードが表示され、[監視] メニュー項目が強調表示されているスクリーンショット。

[ストリーミング ログ] ペイン

Azure portal で Application Insights を有効にした後、関数をデバッグできるようにログ ステートメントを追加できます。 各言語の呼び出されたメソッドに "logging" オブジェクトが渡されます。これを使用して、テストの実行時に [Code + Test](コードとテスト) ペインの [ログ] ペインにログ情報を追加できます。

次のコード スニペットは、ログ メッセージを作成する方法を示しています。

  • JavaScript では、context オブジェクトがハンドラーに渡されます。

    context.log('Enter your logging statement here');
    
  • C# の log.LogInformation メソッドでは、log オブジェクトが、関数を処理する C# メソッドに渡されます。

    log.LogInformation("Enter your logging statement here");
    
  • PowerShell では、Write-Host コマンドレットを使用してログに書き込みます。

    Write-Host "Enter your logging statement here"
    

エラー、失敗、警告、異常

[関数] メニューの [調査] カテゴリからメトリックまたはオプションを使用すると、パフォーマンスの監視、失敗の診断、またはコード内のコンパイル エラーや警告から、ロール別の使用統計まで、関数アプリを管理するための多数の定義済みブックを構成できます。