はじめに
Azure Queue Storageトリガーとは Azure Storage Accountの特定のQueueにメッセージが追加された時にAzure Functionsアプリを実行してくれるトリガーです。
Azure Queue Storageトリガーを使ったアプリをデバッグするにはStorage Accountが必要となりますが、そのためにAzure上にStorage Accountを作るのは面倒ですよね。
こんな時のためにStorage AccountのエミュレーターであるAzuriteが提供されています。
今回はこれを使ってローカルでデバッグする環境を作っていきます。
エミュレーターにはAzure ストレージ エミュレーターというのもありますがAzuriteとは別物です。
こちらの利用は非推奨になってになっているので誤ってインストールしないようにしましょう。
構築環境
今回構築する環境の一覧です。
- Windows 10
- Node.js = 16.15.0
- Azurite = 3.17.1
- Azure Functions Core Tools = 4.0.4544
- Microsoft Azure Storage Explorer = 1.24.2
各種インストール
Node.jsのインストール
AzuriteやAzure Functions Core ToolsにはNode.jsが必要となるのでインストールします。
AzuriteはNode.js 8.0以上が必要となります。すでにインストール済みでもバージョンに気を付けてください。
ダウンロードページから推奨版となっている方を選択しダウンロードします。
インストーラーを実行し、Node.jsをインストールします。
コマンドプロンプトを開き以下のコマンドを実行して正常にインストールされていることを確認します。(コマンドプロンプトをすでに開いていた場合は一度閉じて開きななおすこと)
コメントアウト部分のような出力があったらOKです。
node -v
#v16.15.0
Azuriteのインストール
npmを使ってインストールします。
コマンドプロンプトを開き、以下のコマンドを実行します。
npm install -g azurite
以下のコマンドを実行してインストールできているか確認します。
azurite -v
#3.17.1
Azure Functions Core Toolsのインストール
Azure Functions Core ToolsはAzure Functionsアプリの開発、デバッグ、デプロイなどに必要となるツールです。
npmを使ってインストールします。
以下のコマンドを実行してインストールします。
npm i -g azure-functions-core-tools@4 --unsafe-perm true
以下のコマンドを実行してインストールできているか確認します。
func -v
#4.0.4544
Microsoft Azure Storage Explorerのインストール
Microsoft Azure Storage ExplorerはStorage Accountを操作するためのGUIを提供するアプリです。Azure Portal上でできるようなことがこのアプリを通して行うことができます。
今回はこのアプリを使ってエミュレーターを操作します。
CUIで操作したい場合はAzure CLIを使うことで操作できますが、詳しい説明は省きます。
ダウンロードページの今すぐダウンロードからインストーラーをダウンロードします。
インストーラーを実行してMicrosoft Azure Storage Explorerをインストールします。
Microsoft Azure Storage Explorerを起動しておきます。
Azuriteに接続する設定を行う
Microsoft Azure Storage Explorerを起動した際に「Select Resource」というウィンドウが表示されていると思います。このウィンドウの一番下にある「Local storage emulator」を選択してください。
設定項目がいくつかありますが、デフォルトで大丈夫です。
Nextをクリックして次の画面に行き、Connectをクリックします。
Azure Functionsアプリを作成する
ひな形を作る
コマンドプロンプトを開いて以下のコマンドを実行します。
このコマンドを実行することでAzure Functionsアプリのひな形を対話形式で作ることができます。作業ディレクトリ内にfunc-app
というフォルダが作成されるので作業ディレクトリに気を付けてください。
func new func-app
どの実行環境を使うかを聞かれます。今回はnode
を選択します。
javascriptかtypescriptかを聞かれます。今回はjavascript
を選択します。
どのトリガーで起動するアプリのひな形を作成するか聞かれます。今回はAzure Queue Storage trigger
を選択します。
関数アプリの名前を聞かれます。今回はデフォルトのQueueTrigger
でいいので空白のままエンターを押します。
これでひな形が完成しました。
接続先の設定を行う
先ほど作成したアプリはQueueに追加されたメッセージをトリガーとして起動するためStorage Accountに接続する設定を行う必要があります。
func-app/local.settings.json
を開きます。
このファイルはアプリをローカルで実行する際の設定や環境変数などを書くための物です。
AzureWebJobsStorage
の値がUseDevelopmentStorage=true
であることを確認します。もし、違った値が設定されている場合はUseDevelopmentStorage=true
に設定します。この設定を行うことでAzuriteに接続してくれます。
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "node",
"AzureWebJobsStorage": "UseDevelopmentStorage=true"
}
}
func-app/QueueTrigger/function.json
を開きます。
以下のようにconnection
にAzureWebJobsStorage
を設定します。
また、queueName
の値がjs-queue-items
であることを覚えておいてください。これはどのQueueに追加されたメッセージをトリガーとするかを決めている重要な部分です。
{
"bindings": [
{
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in",
"queueName": "js-queue-items",
"connection": "AzureWebJobsStorage"
}
]
}
Queueを作成する
エミュレーターにQueueを作成します。
まず、Azuriteを起動します。
コマンドプロンプトで以下のコマンドを実行してください。
この時、作業ディレクトリがfunc-app
内であるかを確認してから実行してください。
作業ディレクトリ内にazurite
というフォルダが作られ、エミュレーターに必要なデータが格納されます
azurite --location azurite
Microsoft Azure Storage Explorerを開きます。
local-1の横の三角をクリックしてメニューを開きます。
Queuesを右クリックしてCreate Queueをクリックします。
するとQueueが作成され、名前が入力できるようになるのでjs-queue-items
を入力します。
名前を入力し終わると画面右に作成したQueueのタブが開きます。
Azure Functionsアプリを起動する
Azuriteを実行しているコマンドプロンプトとは別のコマンドプロンプトを開きます。
作業ディレクトリがfunc-app
であることを確認してから以下のコマンドを実行します。
func start
メッセージを追加してアプリの動作を確認する
Queueにメッセージを追加してアプリが動作するか確認します。
Microsoft Azure Storage Explorerを開きます。
作成したQueueを選択してAdd Messageをクリックします。
Message textにhello world
を入力してOKをクリックします。
Azure Functionsアプリを実行しているコマンドプロンプトの画面を開きます。
追加したメッセージをトリガーとして関数が実行されていることが確認できました。
Microsoft Azure Storage Explorerに戻り、Refreshをクリックします。
すると追加したメッセージが消え、正常に処理されたことが分かります。
おわりに
Azure Queue storageトリガーで動くAzure Functionsアプリをローカルでデバッグする環境を構築しました。
Azure Queue storageトリガーは便利そうなのでうまく使っていきたいですね。