入力バインディングと出力バインディングの種類を確認する
多くのソフトウェア ソリューションにおいて、データへのアクセスとデータの処理は重要なタスクです。 次のシナリオを考えてみましょう。
- 着信データを Azure Blob Storage から Azure Cosmos DB に移動する方法を実装するよう依頼された。
- 社内の別のコンポーネントで処理するために、受信メッセージをキューに投稿する必要がある。
- サービスでキューからゲーマー スコアを取得し、オンライン スコアボードを更新する必要がある。
これらの例はすべて、データの移動に関するものです。 データ ソースと送信先はシナリオによって異なりますが、パターンは似ています。 データ ソースに接続し、データを読み書きします。 Azure Functions では、バインディングを使用してデータやサービスと統合できるようにします。
バインディングとは
Azure Functions では、バインディングによって、コード内からデータに接続する宣言型の方法が提供されます。 バインディングにより、関数内で一貫した方法でデータ ストリームと簡単に統合できるようになります。 さまざまなデータ要素へのアクセスを提供する複数のバインディングを使用できます。 特定の接続ロジック (データベース接続や Web API インターフェイスなど) のコードを書く必要なくデータ ソースに接続できるため、この統合は強力です。
バインディングの種類
関数で使用できるバインディングには、次の 2 種類があります。
入力バインディング - データ ソースに接続します。 関数は、これらの入力ソースからデータを読み取ることができます。
出力バインディング - データの送信先に接続します。 関数は、これらの出力先にデータを書き込むことができます。
"トリガー" もあります。これは、関数を実行させる特殊な種類の入力バインディングです。 たとえば、Azure Event Grid の通知をトリガーとして構成できます。 イベントが発生すると、関数が実行されます。
サポートされるバインディングの種類
バインディングの "種類" は、データを読み取るまたは送信する場所を定義します。 Web 要求に応答するためのバインディングと、幅広い Azure サービスやサードパーティ サービスと直接やり取りするためのさまざまなバインディングがあります。
バインディングの種類は、入力、出力、またはその両方として使用できます。 たとえば、関数を Blob Storage 出力バインドに書き込むことができますが、Blob Storage の更新によって別の関数をトリガーできます。
一般的なバインディングの種類:
- Blob Storage
- Azure Service Bus キュー
- Azure Cosmos DB
- Azure Event Hubs
- 外部ファイル
- 外部テーブル
- HTTP エンドポイント
これらの種類はほんの一部にすぎません。 ほかにも多くの種類があります。また、関数には、さらに多くのバインディングを追加する拡張モデルもあります。
バインディングのプロパティ
すべてのバインディングには 3 つのプロパティが必要ですが、使用しているバインディングとストレージの種類によっては、さらに多くのプロパティを指定する必要がある場合があります。
名前 - データにアクセスするために使用する関数パラメーターを定義します。 たとえば、キュー入力バインディングでは、このプロパティはキュー メッセージ コンテンツを受け取る関数パラメーターの名前になります。
種類 - バインディングの種類を特定します。 たとえば、やり取りを行いたいデータまたはサービスの種類です。
方向 - データが流れている方向を示します。 たとえば、それは入力バインディングですか、それとも出力バインディングですか?
さらに、ほとんどのバインドの種類では、4 つ目のプロパティも必要です。
- 接続 - 接続文字列が含まれたアプリ設定キーの名前を指定します。 バインディングでは、アプリ設定に保存された接続文字列を使用して、関数コードの外部にシークレットを保持します。 接続文字列によって、コードの構成が簡単になり、セキュリティが強化されます。
バインディングを作成する
バインディングは JSON で定義されます。 バインディングは関数の構成ファイルで構成されます。このファイルは function.json という名前で、関数コードと同じフォルダーにあります。
"入力バインディング" のサンプルを詳しく見てみましょう。
...
{
"name": "headshotBlob",
"type": "blob",
"path": "thumbnail-images/{filename}",
"connection": "HeadshotStorageConnection",
"direction": "in"
},
...
このバインディングを作成するには、次の手順に従います。
function.json ファイルにバインディングを作成します。
name
変数の値を指定します。 この例では、変数に BLOB データが保持されます。ストレージの
type
を指定します。 前の例では、Blob Storage を使用しています。コンテナーとそこに格納される項目名を指定する、
path
を指定します。path
プロパティは、BLOB トリガーを使用するときに必要です。ここに示されている、パスのファイル名部分を中かっこで囲んだスタイルで指定する必要があります。 この構文では、他のバインディングと関数のコード内でその BLOB の名前を参照できるようにする "バインディング式" を作成します。 この例では、filename という名前の関数のパラメーターに、関数をトリガーした BLOB のファイル名が入力されます。アプリケーションの設定ファイルで定義されている
connection
文字列設定名を指定します。 この名前は、ストレージ アカウントに接続するための接続文字列を検索するキーとして使われます。direction
をin
として定義します。 これにより、BLOB からデータを読み取ります。
バインディングは、関数でデータに接続するために使用されます。 この例では、関数によってサムネイルとして処理するために、入力バインディングを使用してユーザー画像を接続しました。