TimerTrigger/SpringBatch

Azure Storageエミュレータを利用してTimerTriggerによって動作するAzure Functionsの関数を実行してみた

Timer Triggerによって、一定時間が来たタイミングでAzure Functionsが動作するアプリケーションも作成する際、これまでは、local.settings.jsonの「AzureWebJobsStorage」にAzure Storageのアカウント名・アカウントキーを指定していた。

ただし、Azure Storageエミュレータを利用すると、Azure Storageにアクセスできない環境下でも、Timer Triggerを利用したAzure Functionsの開発を行うことができる。

今回は、Azure Storageエミュレータをインストールし、Azure Storageエミュレータを起動することで、Timer Triggerを利用したAzure Functionsをローカル環境で実行してみたので、その手順を共有する。

前提条件

下記記事のサンプルプログラムを作成済であること。

Azure Functions上でTimerTriggerによって動作するJavaアプリケーション(Spring Boot上)を作成してみたこれまでは、HTTPリクエストによりAzure Functionsが動作するアプリケーションのみ作成してきたが、Timer Trigge...

また、下記記事の「前提条件」の内容が完了していること。

Spring BootでSQL Serverに接続しMyBatisを利用してみた今回は、Spring Bootアプリケーションで接続するデータベースをSQL Serverに変更してみたので、そのサンプルプログラムを共...



やってみたこと

  1. Azure Storageエミュレータのインストール
  2. Azure Storageエミュレータの初期化
  3. Azure Storageエミュレータの起動と停止
  4. サンプルプログラムの修正内容と実行結果

Azure Storageエミュレータのインストール

Azure Storageエミュレータは、Webサイトからダウンロードしインストールできる。その手順は、以下の通り。

1) 下記サイトの「スタンドアロンのインストーラー 」リンクを押下し、Azure Storageエミュレータをダウンロードする。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-emulator

AzureStorageエミュレータのインストール_1

2) 以下の「microsoftazurestorageemulator.msi」がダウンロードされるので、これをダブルクリックする。
AzureStorageエミュレータのインストール_2

3) 以下の画面が表示されるため、チェックを入れて「Install」ボタンを押下する。
AzureStorageエミュレータのインストール_3_1

インストール途中の画面は以下の通り。なお、「このアプリがPCに変更を加えることを許可しますか?」とダイアログが出たら、「はい」を押下しインストールする。
AzureStorageエミュレータのインストール_3_2

4) インストールが完了すると以下の画面が表示されるため、「Finish」ボタンを押下する。
AzureStorageエミュレータのインストール_4

5) インストール後、アプリ検索欄に「Microsoft Azure Storage Emulator」と指定すると、以下のように、Azureストレージエミュレータがインストールされていることが確認できる。
AzureStorageエミュレータのインストール_5

6) 「C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator」フォルダ下に、以下のように、Azure Storageエミュレータがインストールされたことが確認できる。
AzureStorageエミュレータのインストール_6



Azure Storageエミュレータの初期化

初期化しない状態でエミュレータを起動しようとすると、下記エラーによりエミュレータの起動が行えない。
AzureStorageエミュレータの初期化_1_1

そのため、「AzureStorageEmulator.exe init /server (インストール済SQL Serverのサーバー名)」を実行し、Azure Storageエミュレータの初期化を行う。
AzureStorageエミュレータの初期化_1_2

なお、SQL Serverのサーバー名は、以下のように、SSMS(SQL Server Management Studio)でログインする際の「Server name」で確認できる。
AzureStorageエミュレータの初期化_1_3

また、「AzureStorageEmulator.exe」のコマンドについては、以下のサイトを参照のこと。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-emulator#storage-emulator-command-line-tool-reference



Azure Storageエミュレータの起動と停止

Azure Storageエミュレータの起動と停止を行う手順は、以下の通り。

1) 「Azure Storage Emulator」アプリを検索後、「開く」ボタンを押下する。
AzureStorageエミュレータの起動と停止_1

2)「AzureStorageEmulator.exe start」が自動的に実行され、Azure Storageエミュレータが起動したことが確認できる。
AzureStorageエミュレータの起動と停止_2

3) Azure Storageエミュレータを停止するには、「AzureStorageEmulator.exe stop」を実行する。
AzureStorageエミュレータの起動と停止_3



サンプルプログラムの修正内容と実行結果

前提条件の記事のサンプルプログラムを、Azure Storageエミュレータを参照するように修正する。なお、下記の赤枠は、前提条件のプログラムから変更したプログラムである。
サンプルプログラムの構成

修正したlocal.settings.jsonの内容は以下の通りで、AzureWebJobsStorageの参照先をAzure Storageエミュレータに変更している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/azure-functions-timer-trigger-manual/demoAzureFunc

Azure Storageエミュレータを起動後、ローカル環境で「mvn azure-functions:run」で実行した結果は以下の通りで、赤枠のログを確認すると、1分毎にTimerTriggerイベントが発生していることが確認できる。
サンプルプログラムの実行結果(正常時)

なお、Azure Storageエミュレータを停止した状態で、ローカル環境で「mvn azure-functions:run」で実行した結果は以下の通りで、エラーが発生していることが確認できる。
サンプルプログラムの実行結果(異常時)

要点まとめ

  • Azure Storageエミュレータを利用すると、Azure Storageにアクセスできない環境下でも、Timer Triggerを利用したAzure Functionsの開発を行うことができる。
  • Azure Storageエミュレータを起動するには、インストール済SQL Serverのサーバーを参照するよう、Azure Storageエミュレータを初期化する必要がある。