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 ファイルにダウンロードする必要があります。

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。

  2. [ホスティング] の下の [発行] タブで、3 つのドット ( ... ) を展開し、 [Azure App Service の設定を管理する] を選択します。

    アプリケーション設定を編集する

  3. [AzureWebJobsStorage] で、[リモート] の文字列値を [ローカル] にコピーし、[OK] を選択します。

接続に AzureWebJobsStorage 設定を使用するストレージ バインドは、ローカルで実行しているときに Queue storage に接続できるようになりました。

バインディング拡張機能を登録する

Queue storage の出力バインドを使用しているため、このプロジェクトを実行する前に Storage のバインド拡張機能をインストールしておく必要があります。 HTTP トリガーとタイマー トリガーを除き、バインドは拡張機能パッケージとして実装されます。

  1. [ツール] メニューで、[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] の順に選択します。

  2. コンソールで次の 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
        };
    }
}

関数をローカルで実行する

  1. 関数を実行するには、Visual Studio で F5 キーを押します。 ツールで HTTP 要求を処理できるように、ファイアウォールの例外を有効にすることが必要になる場合があります。 承認レベルは、ローカルで関数を実行するときには適用されません。

  2. Azure Functions のランタイムの出力から、関数の URL をコピーします。

    Azure ローカル ランタイム

  3. HTTP 要求の URL をブラウザーのアドレス バーに貼り付けて、要求を実行します。 次の図は、関数によって返されるローカル GET 要求に対するブラウザーでの応答です。

    ブラウザーでの関数 localhost の応答

  4. デバッグを停止するには、Visual Studio で Shift+F5 キーを押します。

出力バインディングを最初に使用するときに、outqueue という名前の新しいキューが、Functions ランタイムによってストレージ アカウントに作成されます。 このキューが新しいメッセージと共に作成されたことを確認するために、Storage Explorer を使用します。

ストレージ エクスプローラーをアカウントに接続する

既に Azure Storage Explorer をインストールして Azure アカウントに接続している場合は、このセクションをスキップしてください。

  1. Azure Storage Explorer ツールを実行し、左側の接続アイコンを選択して、 [アカウントの追加] を選択します。

    Microsoft Azure Storage Explorer に Azure アカウントを追加する方法のスクリーンショット。

  2. [接続] ダイアログで、[Add an Azure account] (Azure アカウントを追加する) を選択し、お使いの Azure 環境を選択して、[サインイン...] を選択します。

    Azure アカウント ウィンドウへのサインインのスクリーンショット。

自分のアカウントへのサインインが成功すると、そのアカウントに関連付けられている Azure サブスクリプションがすべて表示されます。 サブスクリプションを選択し、[エクスプローラーを開く] を選択します。

出力キューを確認する

  1. Storage Explorer で、[Queues](キュー) ノードを展開して、outqueue という名前のキューを選択します。

    このキューには、HTTP によってトリガーされる関数を実行したときにキューの出力バインディングが作成されたというメッセージが含まれます。 Azure の既定の name 値で関数を呼び出した場合、キュー メッセージは「Name passed to the function: Azure」(関数に渡された名前: Azure) になります。

    Azure Storage Explorer に表示されたキュー メッセージのスクリーンショット。

  2. 関数を再度実行し、別の要求を送信すると、キューに新しいメッセージが表示されます。

ここで、更新された関数アプリを Azure に再発行します。

更新したアプリを再デプロイして検証する

  1. ソリューション エクスプローラーで、プロジェクトを右クリックして [発行] を選択し、[発行] を選択してプロジェクトを Azure に再発行します。

  2. デプロイが完了したら、もう一度ブラウザーを使用して、再デプロイされた関数をテストすることができます。 前のように、URL にクエリ文字列 &name=<yourname> を追加します。

  3. もう一度ストレージ キューのメッセージを表示して、出力バインドによってキューに新しいメッセージが再生成されていることを確認します。

リソースをクリーンアップする

このコレクションの他のクイックスタートは、このクイックスタートに基づいています。 クイック スタート、チュートリアル、またはこのクイック スタートで作成したサービスのいずれかでの作業を引き続き行う場合は、リソースをクリーンアップしないでください。

Azure の "リソース" とは、関数アプリ、関数、ストレージ アカウントなどのことを指します。 これらは "リソース グループ" に分類されており、グループを削除することでグループ内のすべてのものを削除できます。

これで、これらのクイックスタートを完了するためのリソースが作成されました。 アカウントの状態サービスの価格によっては、これらのリソースに対して課金される可能性があります。 リソースの必要がなくなった場合にそれらを削除する方法を、次に示します。

  1. Azure Portal で、 [リソース グループ] ページに移動します。

    関数アプリ ページからこのページに移動するには、[概要] タブを選択し、[リソース グループ] の下にあるリンクを選択します。

    関数アプリのページから削除するリソース グループの選択を示すスクリーンショット。

    ダッシュボードからこのページに移動するには、 [リソース グループ] を選択してから、この記事用に使用したリソース グループを選択します。

  2. [リソース グループ] ページで、含まれているリソースの一覧を確認し、削除するものであることを確認します。

  3. [リソース グループの削除] を選択し、指示に従います。

    削除には数分間かかることがあります。 実行されると、通知が数秒間表示されます。 ページの上部にあるベルのアイコンを選択して、通知を表示することもできます。

次のステップ

HTTP によってトリガーされる関数を、ストレージ キューにデータを書き込むように更新しました。 Functions の開発の詳細については、「Visual Studio を使用して Azure Functions を開発する」を参照してください。

次に、関数アプリに対して Application Insights の監視を有効にする必要があります。