Visual Studio を使用して関数を Azure Storage に接続するConnect functions to Azure Storage using Visual Studio

Azure Functions を使用すると、独自の統合コードを記述しなくても、Azure サービスやその他のリソースを関数に接続できます。Azure Functions lets you connect Azure services and other resources to functions without having to write your own integration code. これらのバインドは、入力と出力の両方を表し、関数定義内で宣言されます。These bindings, which represent both input and output, are declared within the function definition. バインドからのデータは、パラメーターとして関数に提供されます。Data from bindings is provided to the function as parameters. "トリガー" は、特殊な種類の入力バインドです。A trigger is a special type of input binding. 関数はトリガーを 1 つしか持てませんが、複数の入力および出力バインドを持つことができます。Although a function has only one trigger, it can have multiple input and output bindings. 詳細については、「Azure Functions でのトリガーとバインドの概念」を参照してください。To learn more, see Azure Functions triggers and bindings concepts.

この記事では、Visual Studio を使用して、前のクイックスタートの記事で作成した関数を Azure Storage に接続する方法を説明します。This article shows you how to use Visual Studio to connect the function you created in the previous quickstart article to Azure Storage. この関数に追加する出力バインドは、HTTP 要求のデータを Azure Queue storage キュー内のメッセージに書き込みます。The output binding that you add to this function writes data from the HTTP request to a message in an Azure Queue storage queue.

ほとんどのバインドでは、バインドされているサービスにアクセスするために関数が使用する、保存されている接続文字列が必要です。Most bindings require a stored connection string that Functions uses to access the bound service. 作業を簡単にするために、関数アプリで作成したストレージ アカウントを使用します。To make it easier, you use the Storage account that you created with your function app. このアカウントへの接続は、既に AzureWebJobsStorage という名前のアプリ設定に保存されています。The connection to this account is already stored in an app setting named AzureWebJobsStorage.

前提条件Prerequisites

この記事を読み始める前に、以下を用意する必要があります。Before you start this article, you must:

  • [Visual Studio クイックスタートのパート 1][./functions-create-first-function-vs-code.md] を完了します。Complete [part 1 of the Visual Studio quickstart][./functions-create-first-function-vs-code.md].

  • Visual Studio から対象の Azure サブスクリプションにサインインします。Sign in to your Azure subscription from Visual Studio.

関数アプリの設定をダウンロードするDownload the function app settings

前のクイックスタートの記事では、必要なストレージ アカウントと共に Azure で関数アプリを作成しました。In the previous quickstart article, you created a function app in Azure along with the required Storage account. このアカウントの接続文字列は、Azure のアプリ設定に安全に格納されています。The connection string for this account is stored securely in app settings in Azure. この記事では、同じアカウントのストレージ キューにメッセージを書き込みます。In this article, you write messages to a Storage queue in the same account. 関数をローカルで実行しているときにストレージ アカウントに接続するには、アプリ設定を local.settings.json ファイルにダウンロードする必要があります。To connect to your Storage account when running the function locally, you must download app settings to the local.settings.json file.

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。In Solution Explorer, right-click the project and select Publish.

  2. [アクション][Azure App Service の設定を編集する] を選択します。Under Actions, select Edit Azure App Service Settings.

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

  3. [AzureWebJobsStorage] で、 [リモート] の文字列値を [ローカル] にコピーし、 [OK] を選択します。Under AzureWebJobsStorage, copy the Remote string value to Local, and then select OK.

接続に AzureWebJobsStorage 設定を使用するストレージ バインドは、ローカルで実行しているときに Queue storage に接続できるようになりました。The storage binding, which uses the AzureWebJobsStorage setting for the connection, can now connect to your Queue storage when running locally.

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

Queue storage の出力バインドを使用しているため、このプロジェクトを実行する前に Storage のバインド拡張機能をインストールしておく必要があります。Because you're using a Queue storage output binding, you need the Storage bindings extension installed before you run the project. HTTP トリガーとタイマー トリガーを除き、バインドは拡張機能パッケージとして実装されます。Except for HTTP and timer triggers, bindings are implemented as extension packages.

  1. [ツール] メニューで、 [NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール] の順に選択します。From the Tools menu, select NuGet Package Manager > Package Manager Console.

  2. コンソールで次の Install-Package コマンドを実行して、ストレージ拡張機能をインストールします。In the console, run the following Install-Package command to install the Storage extensions:

    Install-Package Microsoft.Azure.WebJobs.Extensions.Storage -Version 3.0.6
    

これで、Storage の出力バインドをプロジェクトに追加できるようになります。Now, you can add the storage output binding to your project.

出力バインディングを追加するAdd an output binding

C# クラス ライブラリ プロジェクトでは、バインドは関数メソッドのバインド属性として定義されます。In a C# class library project, the bindings are defined as binding attributes on the function method. その後、function.json ファイルは、これらの属性に基づいて自動的に生成されます。The function.json file is then auto-generated based on these attributes.

HttpTrigger.cs プロジェクト ファイルを開き、次の using ステートメントを追加します。Open the HttpTrigger.cs project file and add the following using statement:

using Microsoft.Azure.WebJobs.Extensions.Storage;

次のパラメーターを Run メソッドの定義に追加します。Add the following parameter to the Run method definition:

[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg

msg パラメーターは ICollector<T> 型です。これは、関数の完了時に出力バインドに書き込まれるメッセージのコレクションを表します。The msg parameter is an ICollector<T> type, which represents a collection of messages that are written to an output binding when the function completes. この場合、出力は outqueue という名前のストレージ キューです。In this case, the output is a storage queue named outqueue. このストレージ アカウントの接続文字列は、StorageAccountAttribute で設定されます。The connection string for the Storage account is set by the StorageAccountAttribute. この属性は、ストレージ アカウントの接続文字列を含む設定を示し、クラス、メソッド、パラメーター レベルで適用できます。This attribute indicates the setting that contains the Storage account connection string and can be applied at the class, method, or parameter level. この例では、既定のストレージ アカウントを既に使用しているため、StorageAccountAttribute を省略できます。In this case, you could omit StorageAccountAttribute because you are already using the default storage account.

Run メソッドの定義は次のようになります。The Run method definition should now look like the following:

[FunctionName("HttpTrigger")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, ILogger log)

出力バインディングを使用するコードを追加するAdd code that uses the output binding

バインドが定義されたら、そのバインドの name を使用して、関数シグネチャの属性としてアクセスできます。After the binding is defined, you can use the name of the binding to access it as an attribute in the function signature. 出力バインドを使用すると、認証、キュー参照の取得、またはデータの書き込みに、Azure Storage SDK のコードを使用する必要がなくなります。By using an output binding, you don't have to use the Azure Storage SDK code for authentication, getting a queue reference, or writing data. Functions ランタイムおよびキューの出力バインドが、ユーザーに代わってこれらのタスクを処理します。The Functions runtime and queue output binding do those tasks for you.

msg 出力バインド オブジェクトを使用してキュー メッセージを作成するコードを追加します。Add code that uses the msg output binding object to create a queue message. このコードは、メソッドから制御が戻る前に追加します。Add this code before the method returns.

if (!string.IsNullOrEmpty(name))
{
    // Add a message to the output collection.
    msg.Add(string.Format("Name passed to the function: {0}", name));
}

この時点で、関数は次のようになります。At this point, your function should look as follows:

[FunctionName("HttpTrigger")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    if (!string.IsNullOrEmpty(name))
    {
        // Add a message to the output collection.
        msg.Add(string.Format("Name passed to the function: {0}", name));
    }
    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

関数をローカルで実行するRun the function locally

  1. 関数を実行するには、F5 キーを押します。To run your function, press F5. ツールで HTTP 要求を処理できるように、ファイアウォールの例外を有効にする必要がある場合もあります。You may need to enable a firewall exception so that the tools can handle HTTP requests. 承認レベルは、ローカルでの実行時には適用されません。Authorization levels are never enforced when running locally.

  2. Azure Functions のランタイムの出力から、関数の URL をコピーします。Copy the URL of your function from the Azure Functions runtime output.

    Azure ローカル ランタイム

  3. HTTP 要求の URL をブラウザーのアドレス バーに貼り付けます。Paste the URL for the HTTP request into your browser's address bar. この URL にクエリ文字列 ?name=<YOUR_NAME> を追加して、要求を実行します。Append the query string ?name=<YOUR_NAME> to this URL and execute the request. 関数によって返されたローカルの GET 要求に対するブラウザーでの応答を次に示します。The following shows the response in the browser to the local GET request returned by the function:

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

  4. デバッグを停止するには、Shift キーを押しながら F5 キーを押します。To stop debugging, press Shift + F5.

出力バインディングを最初に使用するときに、outqueue という名前の新しいキューが、Functions ランタイムによってストレージ アカウントに作成されます。A new queue named outqueue is created in your storage account by the Functions runtime when the output binding is first used. このキューが新しいメッセージと共に作成されたことを確認するために、Cloud Explorer を使用します。You'll use Cloud Explorer to verify that the queue was created along with the new message.

出力キューを確認するExamine the output queue

  1. Visual Studio の [表示] メニューで、 [Cloud Explorer] を選択します。In Visual Studio from the View menu, select Cloud Explorer.

  2. Cloud Explorer で、Azure サブスクリプションとストレージ アカウントを展開してから、関数で使用されているストレージ アカウントを展開します。In Cloud Explorer, expand your Azure subscription and Storage Accounts, then expand the storage account used by your function. ストレージ アカウント名を思い出せない場合は、local.settings.json ファイルの AzureWebJobsStorage 接続文字列設定を確認してください。If you can't remember the storage account name, check the AzureWebJobsStorage connection string setting in the local.settings.json file.

  3. [キュー] ノードを展開し、outqueue という名前のキューをダブルクリックして、Visual Studio でキューの内容を表示します。Expand the Queues node, and then double-click the queue named outqueue to view the contents of the queue in Visual Studio.

    このキューには、HTTP によってトリガーされる関数を実行したときにキューの出力バインディングが作成されたというメッセージが含まれます。The queue contains the message that the queue output binding created when you ran the HTTP-triggered function. Azure の既定の name 値で関数を呼び出した場合、キュー メッセージは「Name passed to the function: Azure」(関数に渡された名前: Azure) になります。If you invoked the function with the default name value of Azure, the queue message is Name passed to the function: Azure.

    Azure Storage Explorer に表示されたキュー メッセージ

  4. 関数を再度実行し、別の要求を送信すると、キューに新しいメッセージが表示されます。Run the function again, send another request, and you'll see a new message appear in the queue.

ここで、更新された関数アプリを Azure に再発行します。Now, it's time to republish the updated function app to Azure.

更新したアプリを再デプロイして検証するRedeploy and verify the updated app

  1. ソリューション エクスプローラーで、プロジェクトを右クリックして [発行] を選択し、 [発行] を選択してプロジェクトを Azure に再発行します。In Solution Explorer, right-click the project and select Publish, then choose Publish to republish the project to Azure.

  2. デプロイが完了したら、もう一度ブラウザーを使用して、再デプロイされた関数をテストすることができます。After deployment completes, you can again use the browser to test the redeployed function. 前のように、URL にクエリ文字列 &name=<yourname> を追加します。As before, append the query string &name=<yourname> to the URL.

  3. もう一度ストレージ キューのメッセージを表示して、出力バインドによってキューに新しいメッセージが再生成されていることを確認します。Again view the message in the storage queue to verify that the output binding again generates a new message in the queue.

リソースのクリーンアップClean up resources

このコレクションの他のクイック スタートは、このクイック スタートに基づいています。Other quick starts in this collection build upon this quick start. クイック スタート、チュートリアル、またはこのクイック スタートで作成したサービスのいずれかでの作業を引き続き行う場合は、リソースをクリーンアップしないでください。If you plan to work with subsequent quick starts, tutorials, or with any of the services you have created in this quick start, do not clean up the resources.

Azure のリソースとは、Function App、関数、ストレージ アカウントなどのことを指します。Resources in Azure refers to function apps, functions, storage accounts, and so forth. これらはリソース グループに分類されており、グループを削除することでグループ内のすべてのものを削除できます。They are grouped into resource groups, and you can delete everything in a group by deleting the group.

これらのクイックスタートを完了するためにリソースを作成しました。You created resources to complete these quickstarts. これらのリソースには、アカウントの状態サービスの価格に応じて課金される場合があります。You may be billed for these resources, depending on your account status and service pricing. リソースの必要がなくなった場合にそれらを削除する方法を、次に示します。If you don't need the resources anymore, here's how to delete them:

  1. Azure Portal で、 [リソース グループ] ページに移動します。In the Azure portal, go to the Resource group page.

    Function App ページからこのページに移動するには、 [概要] タブを選択してから、 [リソース グループ] の下にあるリンクを選択します。To get to that page from the function app page, select the Overview tab and then select the link under Resource group.

    Function App ページから削除するリソース グループを選択します。

    ダッシュボードからこのページに移動するには、 [リソース グループ] を選択してから、このクイックスタート用に使用したリソース グループを選択します。To get to that page from the dashboard, select Resource groups, and then select the resource group that you used for this quickstart.

  2. [リソース グループ] ページで、含まれているリソースの一覧を確認し、削除するものであることを確認します。In the Resource group page, review the list of included resources, and verify that they are the ones you want to delete.

  3. [リソース グループの削除] を選択し、指示に従います。Select Delete resource group, and follow the instructions.

    削除には数分かかることがあります。Deletion may take a couple of minutes. 実行されると、通知が数秒間表示されます。When it's done, a notification appears for a few seconds. ページの上部にあるベルのアイコンを選択して、通知を表示することもできます。You can also select the bell icon at the top of the page to view the notification.

次の手順Next steps

HTTP によってトリガーされる関数を、ストレージ キューにデータを書き込むように更新しました。You've updated your HTTP triggered function to write data to a Storage queue. Functions の開発の詳細については、「Visual Studio を使用して Azure Functions を開発する」を参照してください。To learn more about developing Functions, see Develop Azure Functions using Visual Studio.

次に、関数アプリに対して Application Insights の監視を有効にする必要があります。Next, you should enable Application Insights monitoring for your function app: