4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CosmosDBエミュレータとAzureストレージエミュレータをdockerで動かしてAzureのローカル開発環境に利用する

Posted at

はじめに

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ファイル

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ファイルのサンプル

.env
LOCAL_HOST_IPV4=192.168.0.10

起動

docker-compose up
docker-composeの起動ログ
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 

image.png

Azure Data ExplorerからCosmosDBエミュレータやAzuriteを触ってみる

Azure Data Explorerを利用すると、CosmosDBエミュレータやAzureストレージエミュレータのデータを見たり変更できます。

スクリーンショット 2021-09-23 0.01.30.png

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?