Visual Studio を使用して関数を Azure Storage に接続する
Azure Functions を使用すると、独自の統合コードを記述しなくても、Azure サービスやその他のリソースを関数に接続できます。 これらのバインドは、入力と出力の両方を表し、関数定義内で宣言されます。 バインドからのデータは、パラメーターとして関数に提供されます。 "トリガー" は、特殊な種類の入力バインドです。 関数はトリガーを 1 つしか持てませんが、複数の入力および出力バインドを持つことができます。 詳細については、「Azure Functions でのトリガーとバインドの概念」を参照してください。
この記事では、Visual Studio を使用して、前のクイックスタートの記事で作成した関数を Azure Storage に接続する方法を説明します。 この関数に追加する出力バインドは、HTTP 要求のデータを Azure Queue storage キュー内のメッセージに書き込みます。
ほとんどのバインドでは、バインドされているサービスにアクセスするために関数が使用する、保存されている接続文字列が必要です。 作業を簡単にするために、関数アプリで作成したストレージ アカウントを使用します。 このアカウントへの接続は、既に AzureWebJobsStorage
という名前のアプリ設定に保存されています。
前提条件
この記事を読み始める前に、以下を用意する必要があります。
- Visual Studio クイックスタートのパート 1 を完了します。
- Azure Storage Explorer をインストールする。 Storage Explorer は、出力バインドによって生成されるキュー メッセージの調査に使用するツールです。 Storage Explorer は、macOS、Windows、Linux ベースのオペレーティング システムでサポートされます。
- Visual Studio から対象の Azure サブスクリプションにサインインします。
関数アプリの設定をダウンロードする
前のクイックスタートの記事では、必要なストレージ アカウントと共に Azure で関数アプリを作成しました。 このアカウントの接続文字列は、Azure のアプリ設定に安全に格納されています。 この記事では、同じアカウントのストレージ キューにメッセージを書き込みます。 関数をローカルで実行しているときにストレージ アカウントに接続するには、アプリ設定を local.settings.json ファイルにダウンロードする必要があります。
ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。
[ホスティング] の下の [発行] タブで、3 つのドット ( ... ) を展開し、 [Azure App Service の設定を管理する] を選択します。
[AzureWebJobsStorage] で、[リモート] の文字列値を [ローカル] にコピーし、[OK] を選択します。
接続に AzureWebJobsStorage
設定を使用するストレージ バインドは、ローカルで実行しているときに Queue storage に接続できるようになりました。
バインディング拡張機能を登録する
Queue storage の出力バインドを使用しているため、このプロジェクトを実行する前に Storage のバインド拡張機能をインストールしておく必要があります。 HTTP トリガーとタイマー トリガーを除き、バインドは拡張機能パッケージとして実装されます。
[ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。
コンソールで次の Install-Package コマンドを実行して、ストレージ拡張機能をインストールします。
Install-Package Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
これで、Storage の出力バインドをプロジェクトに追加できるようになります。
出力バインディングを追加する
C# プロジェクトでは、バインドは関数メソッドのバインド属性として定義されます。 具体的な定義は、お使いのアプリがインプロセス (C# クラス ライブラリ) で実行されるのか、分離ワーカー プロセスで実行されるのかによって異なります。
HttpExample.cs プロジェクト ファイルを開き、次の MultiResponse
クラスを追加します。
public class MultiResponse
{
[QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
MultiResponse
クラスを使用すると、outqueue
という名前のストレージ キューと HTTP 成功メッセージに書き込むことができます。 QueueOutput
属性は文字列配列に適用されるので、複数のメッセージをキューに送信できます。
ストレージ アカウントの接続文字列は Connection
プロパティによって設定されます。 この例では、既定のストレージ アカウントを既に使用しているため、Connection
を省略してもかまいません。
出力バインディングを使用するコードを追加する
バインドが定義されたら、そのバインドの name
を使用して、関数シグネチャの属性としてアクセスできます。 出力バインドを使用すると、認証、キュー参照の取得、またはデータの書き込みに、Azure Storage SDK のコードを使用する必要がなくなります。 Functions ランタイムおよびキューの出力バインドが、ユーザーに代わってこれらのタスクを処理します。
既存の HttpExample
クラスを次のコードに置き換えます。
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("HttpExample");
logger.LogInformation("C# HTTP trigger function processed a request.");
var message = "Welcome to Azure Functions!";
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString(message);
// Return a response to both HTTP trigger and storage output binding.
return new MultiResponse()
{
// Write a single message.
Messages = new string[] { message },
HttpResponse = response
};
}
}
関数をローカルで実行する
関数を実行するには、Visual Studio で F5 キーを押します。 ツールで HTTP 要求を処理できるように、ファイアウォールの例外を有効にすることが必要になる場合があります。 承認レベルは、ローカルで関数を実行するときには適用されません。
Azure Functions のランタイムの出力から、関数の URL をコピーします。
HTTP 要求の URL をブラウザーのアドレス バーに貼り付けて、要求を実行します。 次の図は、関数によって返されるローカル GET 要求に対するブラウザーでの応答です。
デバッグを停止するには、Visual Studio で Shift+F5 キーを押します。
出力バインディングを最初に使用するときに、outqueue
という名前の新しいキューが、Functions ランタイムによってストレージ アカウントに作成されます。 このキューが新しいメッセージと共に作成されたことを確認するために、Storage Explorer を使用します。
ストレージ エクスプローラーをアカウントに接続する
既に Azure Storage Explorer をインストールして Azure アカウントに接続している場合は、このセクションをスキップしてください。
Azure Storage Explorer ツールを実行し、左側の接続アイコンを選択して、 [アカウントの追加] を選択します。
[接続] ダイアログで、[Add an Azure account] (Azure アカウントを追加する) を選択し、お使いの Azure 環境を選択して、[サインイン...] を選択します。
自分のアカウントへのサインインが成功すると、そのアカウントに関連付けられている Azure サブスクリプションがすべて表示されます。 サブスクリプションを選択し、[エクスプローラーを開く] を選択します。
出力キューを確認する
Storage Explorer で、[Queues](キュー) ノードを展開して、outqueue という名前のキューを選択します。
このキューには、HTTP によってトリガーされる関数を実行したときにキューの出力バインディングが作成されたというメッセージが含まれます。 Azure の既定の
name
値で関数を呼び出した場合、キュー メッセージは「Name passed to the function: Azure」(関数に渡された名前: Azure) になります。関数を再度実行し、別の要求を送信すると、キューに新しいメッセージが表示されます。
ここで、更新された関数アプリを Azure に再発行します。
更新したアプリを再デプロイして検証する
ソリューション エクスプローラーで、プロジェクトを右クリックして [発行] を選択し、[発行] を選択してプロジェクトを Azure に再発行します。
デプロイが完了したら、もう一度ブラウザーを使用して、再デプロイされた関数をテストすることができます。 前のように、URL にクエリ文字列
&name=<yourname>
を追加します。もう一度ストレージ キューのメッセージを表示して、出力バインドによってキューに新しいメッセージが再生成されていることを確認します。
リソースをクリーンアップする
このコレクションの他のクイックスタートは、このクイックスタートに基づいています。 クイック スタート、チュートリアル、またはこのクイック スタートで作成したサービスのいずれかでの作業を引き続き行う場合は、リソースをクリーンアップしないでください。
Azure の "リソース" とは、関数アプリ、関数、ストレージ アカウントなどのことを指します。 これらは "リソース グループ" に分類されており、グループを削除することでグループ内のすべてのものを削除できます。
これで、これらのクイックスタートを完了するためのリソースが作成されました。 アカウントの状態とサービスの価格によっては、これらのリソースに対して課金される可能性があります。 リソースの必要がなくなった場合にそれらを削除する方法を、次に示します。
Azure Portal で、 [リソース グループ] ページに移動します。
関数アプリ ページからこのページに移動するには、[概要] タブを選択し、[リソース グループ] の下にあるリンクを選択します。
ダッシュボードからこのページに移動するには、 [リソース グループ] を選択してから、この記事用に使用したリソース グループを選択します。
[リソース グループ] ページで、含まれているリソースの一覧を確認し、削除するものであることを確認します。
[リソース グループの削除] を選択し、指示に従います。
削除には数分間かかることがあります。 実行されると、通知が数秒間表示されます。 ページの上部にあるベルのアイコンを選択して、通知を表示することもできます。
次のステップ
HTTP によってトリガーされる関数を、ストレージ キューにデータを書き込むように更新しました。 Functions の開発の詳細については、「Visual Studio を使用して Azure Functions を開発する」を参照してください。
次に、関数アプリに対して Application Insights の監視を有効にする必要があります。