はじめに
Azure Functionsアプリの開発と切ってもきれない関係にあるのが、AzureストレージとCosmosDBです。
この記事ではローカル開発環境用にDocker上でCosmosDBエミュレータとストレージエミュレータ(Azurite)を動かすためのdocker-compose用ファイルを紹介します。
基本的には公式ドキュメントのdockerコマンドの引数をdocker-compose用に書き直した程度です。
前提環境
- OS: MacOS(Intel)
- Docker Desktop for MacOS 4.0.1
- docker-compose 1.29.2
※CosmosDBのエミュレータは2021年9月時点ではIntelプロセッサのMacにしか対応してないです。
公式のドキュメント
docker-compose.ymlファイル
version: '3.7'
services:
cosmosdb:
container_name: cosmosdb
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
tty: true
restart: always
deploy:
resources:
limits:
cpus: '2.0'
memory: 3G
environment:
- AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10
- AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true
- AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$LOCAL_HOST_IPV4
ports:
- "8081:8081"
- "10251:10251"
- "10252:10252"
- "10253:10253"
- "10254:10254"
- "10255:10255"
azurite:
container_name: azurite
image: mcr.microsoft.com/azure-storage/azurite:latest
ports:
- "10000:10000"
- "10001:10001"
- "10002:10002"
volumes:
- ./data/azurite:/data
環境設定
Docker Desktop for MacOSのリソース設定
CosmosDBエミュレータの動作に
- CPUが2コア以上
- メモリが3GB以上
必要なので、Docker Desktop for MacOSのリソース割当を増やしておきます。
.envファイルの準備
CosmosDBエミュレータの動作にホストOS側のIPアドレスが必要になるため、
以下のコマンドでIPアドレスをしらべて、docker-compose.yml用の.envファイルの「LOCAL_HOST_IPV4」に設定します。
ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1
.envファイルのサンプル
LOCAL_HOST_IPV4=192.168.0.10
起動
docker-compose up
Attaching to cosmosdb, azurite
cosmosdb | This is an evaluation version. There are [171] days left in the evaluation period.
azurite | Azurite Blob service is starting at http://0.0.0.0:10000
azurite | Azurite Blob service is successfully listening at http://0.0.0.0:10000
azurite | Azurite Queue service is starting at http://0.0.0.0:10001
azurite | Azurite Queue service is successfully listening at http://0.0.0.0:10001
azurite | Azurite Table service is starting at http://0.0.0.0:10002
azurite | Azurite Table service is successfully listening at http://0.0.0.0:10002
cosmosdb | Starting
cosmosdb | Started 1/11 partitions
cosmosdb | Started 2/11 partitions
cosmosdb | Started 3/11 partitions
cosmosdb | Started 4/11 partitions
cosmosdb | Started 5/11 partitions
cosmosdb | Started 6/11 partitions
cosmosdb | Started 7/11 partitions
cosmosdb | Started 8/11 partitions
cosmosdb | Started 9/11 partitions
cosmosdb | Started 10/11 partitions
cosmosdb | Started 11/11 partitions
cosmosdb | Started
CosmosDB用エミュレータ用の証明書のダウンロードとインポート
(1)CosmosDBエミュレータから証明書をダウンロードする
curl -k https://localhost:8081/_explorer/emulator.pem > emulatorcert.crt
(2)ダウンロードした証明書をキーチェーンにインポートする
finderで証明書を表示して、ダブルクリックでインポートされます。
キーチェーン上での証明書の名前は「localhost」です。
(3)キーチェーンにインポートされた証明書を信頼する
※dockerコンテナが作り直されると、この証明書も作り直されるみたいです。
CosmosDBエミュレータをブラウザから触ってみる
以下のURLをブラウザから開くとCosmosDBエミュレータのWeb UIを操作することができます。
https://localhost:8081/_explorer/index.html
Azure Data ExplorerからCosmosDBエミュレータやAzuriteを触ってみる
Azure Data Explorerを利用すると、CosmosDBエミュレータやAzureストレージエミュレータのデータを見たり変更できます。