Azure Functionsプロジェクト開発の基本的な流れ:特集: Visual Studio 2017で始めるAzure Functions開発(2/3 ページ)
Azure Functionsはインフラ管理不要で、小規模なプログラムコードを実行するための仕組みだ。Visual Studioでその開発を行うための基本的な手順を見てみよう。
プロジェクトの新規作成
VS 2017のメニューバーから[ファイル]−[新規作成]−[プロジェクト]を選択して、[新しいプロジェクト]ダイアログの左側のペーンで[Visual C#]−[Cloud]をクリックすると次のような表示になる。
ここで[Azure Functions]プロジェクトテンプレートを選択して、プロジェクト名などを適宜入力し、[OK]ボタンをクリックしよう。これでAzure Functionsプロジェクトが新規に作成される。ただし、ソリューションエクスプローラーを見ると分かる通り、プロジェクト作成直後にはC#コードを含んだソースファイルはない。
Azure Functionsに関係あるファイルは、host.jsonファイルとlocal.settings.jsonファイルの2つだけだ。これらは次の用途で使用する。
- host.jsonファイル: 関数をホストする構成を記述する
- local.settings.json: 関数をローカルな開発環境で実行する際の設定を記述する
host.jsonファイルに記述した構成は、このプロジェクトで記述する関数をAzure上で実行するときと、ローカル環境で実行するときの両者で使用される。一方、local.settings.jsonファイルはあくまでもローカル環境で実行する際の設定を行うためのものだ。host.jsonファイルの内容はデフォルトで空({}のみ)になっている。local.settings.jsonファイルの内容は次のようになっている。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": ""
}
}
IsEncrypted設定は設定内容をローカルマシンのキーを利用して暗号化するかどうかを指定するもの。Azureに発行したAzure Functionsプロジェクトの設定内容をローカル環境にダウンロードする際にIsEncrypted設定がtrueだと、その内容が暗号化される。
Values設定にはローカル環境で関数を実行する際に使用する設定を記述していく。ただし、多くの場合に必須なのはAzureWebJobsStorage設定だけだ(HTTPをトリガーとして実行される関数では省略可能)。これは関数をAzure Functionsのランタイムで実行する際に使用するAzureストレージアカウントへの接続文字列を指定する。ここに先ほどコピーをした接続文字列をペーストしておく。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "DefaultEnd…… 省略 ……core.windows.net/;",
"AzureWebJobsDashboard": ""
}
}
AzureWebJobsDashboard設定は関数の実行ログの保存先となるAzureストレージアカウントへの接続文字列を設定する。本稿ではこの設定は省略する。その他の設定項目については「ローカル設定ファイル」ページを参照されたい。
関数の追加
使用するストレージアカウントを設定したら、C#で関数を記述してみよう。これにはソリューションエクスプローラーでプロジェクトを右クリックして、コンテキストメニューから[追加]−[新しい項目]を選択する。すると、[新しい項目の追加]ダイアログが表示されるので、そこから[Azure Function]を選択して、ファイル名を指定し、[追加]ボタンをクリックする。
すると、以下のようなダイアログが表示される。
ここでは関数を実行するための「トリガー」と、実行に必要な設定を行う。例えば、[Blob trigger]を選択すると、先ほど設定したストレージアカウントで提供されているBLOBコンテナに何かのファイルがアップロードされたら、関数が実行される。[Timer trigger]を選択すると、一定の時間間隔で関数が実行されるようになる(何らかのバッチ処理を行う際に使えるだろう)。あるいはWebhookを選択すれば、何らかのWebサービスに、関数呼び出しに使用するURLを設定しておくことで、そのWebサービスで特定の事象が発生したら、それをトリガーとして関数を実行できる。
このように、さまざまなイベントをトリガーとして、単機能の関数を呼び出すのがAzure Functionsの基本的な構造となっている。
ここでは、上の画像にもあるように一番上の[Blob trigger]をトリガーとした関数を作成してみよう。このときに設定する項目は[Connection]と[Path]の2つとなる(トリガーごとに設定項目は異なる)。
[Connection]には先ほどストレージアカウントへの接続文字列を設定した「AzureWebJobsStorage」を指定すればよい。[Path]はこの関数の実行時に使用されるストレージアカウントにあるBLOBコンテナを指定するものだ。ここではデフォルトの「samples-workitems」のままとする(ただし、現在の状態では「samples-workitems」コンテナがストレージアカウントに存在しないので、後でこれを作成する必要がある)。
この状態で[OK]ボタンをクリックすると、C#のソースコードが生成され、ソリューションエクスプローラーに追加される。生成されたコードは次のようになっている(改行を適宜挿入している)。
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
namespace FunctionApp1
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run(
[BlobTrigger("samples-workitems/{name}",
Connection = "AzureWebJobsStorage")]Stream myBlob,
string name, TraceWriter log)
{
log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}
}
}
RunメソッドがAzure Functionsのランタイムによって実行される。FunctionName属性はこの関数の名前だ。Azureへの発行時にはここで指定した属性を基に、Azure上で関数を実行するために必要な情報がfunction.jsonファイルへとまとめられる。
myBlobパラメーターにも属性が指定されているが、これは先ほど関数を新規作成した際に指定した接続文字列の設定と、Pathの設定が含まれている。BLOBコンテナに追加されたファイルの名前はnameパラメーターでアクセスできる。追加されたファイル本体についてはmyBlobパラメーターでアクセスできる。logパラメーターはログの書き出し先となる。
ここではこの内容のまま、関数をデバッグ実行してみよう。ただし、その前にCloud Explorerなどで「samples-workitems」という名前のBLOBコンテナを作成しておこう。Cloud Explorerでこれを行うには、Azure Functionsプロジェクトで使用するストレージアカウントを右クリックして、コンテキストメニューから[BLOB コンテナーの作成]を選択して、コンテナの名前を入力する。
BLOBコンテナを作成すると、次のようにコンテナに保存されているコンテンツを一覧するウィンドウが表示される。が、作成直後なので、まだコンテナには何もない。ウィンドウ上部にはアップロードを行うためのボタン(上向きの矢印)があるので、後でこれを使ってファイルをアップロードすることにしよう。
これでデバッグ実行の準備が整ったので、デバッグ実行をしてみよう。
Copyright© Digital Advantage Corp. All Rights Reserved.