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 Storageエミュレータのインストール
Azure Storageエミュレータは、Webサイトからダウンロードしインストールできる。その手順は、以下の通り。
1) 下記サイトの「スタンドアロンのインストーラー 」リンクを押下し、Azure Storageエミュレータをダウンロードする。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-emulator
2) 以下の「microsoftazurestorageemulator.msi」がダウンロードされるので、これをダブルクリックする。
3) 以下の画面が表示されるため、チェックを入れて「Install」ボタンを押下する。
インストール途中の画面は以下の通り。なお、「このアプリがPCに変更を加えることを許可しますか?」とダイアログが出たら、「はい」を押下しインストールする。
4) インストールが完了すると以下の画面が表示されるため、「Finish」ボタンを押下する。
5) インストール後、アプリ検索欄に「Microsoft Azure Storage Emulator」と指定すると、以下のように、Azureストレージエミュレータがインストールされていることが確認できる。
6) 「C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator」フォルダ下に、以下のように、Azure Storageエミュレータがインストールされたことが確認できる。
Azure Storageエミュレータの初期化
初期化しない状態でエミュレータを起動しようとすると、下記エラーによりエミュレータの起動が行えない。
そのため、「AzureStorageEmulator.exe init /server (インストール済SQL Serverのサーバー名)」を実行し、Azure Storageエミュレータの初期化を行う。
なお、SQL Serverのサーバー名は、以下のように、SSMS(SQL Server Management Studio)でログインする際の「Server name」で確認できる。
また、「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」アプリを検索後、「開く」ボタンを押下する。
2)「AzureStorageEmulator.exe start」が自動的に実行され、Azure Storageエミュレータが起動したことが確認できる。
3) Azure Storageエミュレータを停止するには、「AzureStorageEmulator.exe stop」を実行する。
サンプルプログラムの修正内容と実行結果
前提条件の記事のサンプルプログラムを、Azure Storageエミュレータを参照するように修正する。なお、下記の赤枠は、前提条件のプログラムから変更したプログラムである。
修正したlocal.settings.jsonの内容は以下の通りで、AzureWebJobsStorageの参照先をAzure Storageエミュレータに変更している。
1 2 3 4 5 6 7 8 9 | { "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java", "MAIN_CLASS":"com.example.DemoAzureFunction", "AzureWebJobsDashboard": "" } } |
その他のソースコード内容は、以下のサイトを参照のこと。
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エミュレータを初期化する必要がある。