Azure Cosmos DB Emulator がついに Linux 版に対応したので早速試してみた
この記事について
Microsoft Azure の NoSQL サービスである Azure Cosmos DB
ですが、新しい Linux Emulator の情報が公開され、パブリックプレビュー扱いになりました!!!
これまで、Azure Cosmos DB のエミュレーターは Windows 環境でしか利用できず、Docker で作成する場合はWindows コンテナーでのみ作成可能
という制約がありました。そのため、私のような macOS ユーザーにおいては、エミュレーターを使用してローカル環境だけで開発を行うことが難しく、Azure 上に 400 RU/s の無償枠環境を作成し、オンライン環境を維持することが必須となっていました。
今回、新しく Linux Emulator が登場したことによって、オフライン環境下でも Azure Cosmos DB を使用したアプリ開発ができることになり、開発環境の自由度があがり、さらにお財布に優しい環境が整ってきています。
というわけで、今回は、パブリックプレビュー公開された Azure Cosmos DB Linux Emulator 環境を早速構築していきます!
構築にあたっての制約など
詳しくは公式情報 (https://aka.ms/linux-emulator) を参照して欲しいのですが、2021/05/14 時点では、大きな部分としては以下の制約が案内されています。
- エミュレーターの
Data Explorer
ペインは現在、SQL API のみを完全にサポート (MongoDB を次はサポートするよう対応予定とのこと) - 作成できるのは
プロビジョニングされたスループット
モードのアカウントのみであり、サーバレスモードはサポート外 - Intel CPU 環境のみサポートしており、Apple M1 環境はサポート外
- エミュレーターの環境は、常に Azure Cosmos DB サービスの最新状態と同期しているわけでは無い
- エミュレーターは
試用版
という扱いになっており、利用可能期間が設定されている模様 - コンテナーを動かすには、少なくとも 2 コアの CPU、3 GB 以上のメモリを割り当てること
エミュレーターを動かす際の制約についての詳細は、以下を参照してください。
macOS で Linux Emulator を動かしてみる
では、実際に Linux エミュレーターを Docker 環境上に構築していきます。
いつものように、公式情報を参考に docker-compose.yaml
を作成し、コンテナー環境を作成していきます。
環境情報
今回、検証に使用した環境のバージョン情報などは以下の通りです。
- macOS Big Sur: 11.3.1
- Docker Desktop: 3.3.3
- Engine: 20.10.6
- Compose: 1.29.1
ローカル環境の IP アドレスを取得
Azure Cosmos DB SDK for .NET/Java を使用してダイレクトモード設定を構成する際に必要となるローカル環境の IP アドレス情報を取得します。
ここで定義する$ipaddr
変数については、後続の docker-compose.yaml
ファイル内、およびコンテナー起動時に使用します。
ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"
docker-compose.yaml 作成
コンテナー環境情報を定義する docker-compose.yaml
ファイルを作成していきます。
version: '3.1'
# version: '2'
services:
linux-emulator:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
container_name: azure-cosmos-emulator
tty: true
ports:
- 8081:8081
- 10251:10251
- 10252:10252
- 10253:10253
- 10254:10254
- 10255:10255
environment:
- AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10
- AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true
- AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr
# cpus: "2.0" # Use this param at v2
# mem_limit: 3g # Use this param at v2
deploy: # Use these param at v3 & add `–compatibility` when compose up
resources:
limits:
cpus: "2.0"
memory: 3g
コンテナー起動
作成した docker-compose.yaml
を使用して、コンテナーを起動します。
version 3.x
の docker-compose.yaml
を使用している場合は、コンテナー起動時のコマンドに注意してください。
# version: 3.x の場合
docker-compose --compatibility up -d
# version: 2 の場合
docker-compose up -d
実行後、コンテナーが Pull され、無事に起動できることを確認できるはずです。
docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------------------------------
azure-cosmos-emulator /usr/local/bin/cosmos/start.sh Up 0.0.0.0:10251->10251/tcp,:::10251->10251/tcp,
0.0.0.0:10252->10252/tcp,:::10252->10252/tcp,
0.0.0.0:10253->10253/tcp,:::10253->10253/tcp,
0.0.0.0:10254->10254/tcp,:::10254->10254/tcp,
0.0.0.0:10255->10255/tcp,:::10255->10255/tcp,
0.0.0.0:8081->8081/tcp,:::8081->8081/tcp
証明書のインストール
実際にコンテナー内にあるエミュレーター環境には、Web ブラウザを介してアクセスすることになります。
その際、HTTPS
でアクセスすることになるので、証明書を Mac 端末にインポートしておく必要があります。
以下のコマンドを実行して、エミュレーター用の証明書をダウンロードします。
curl -k https://$ipaddr:8081/_explorer/emulator.pem > emulatorcert.crt
実行すると、emulatorcert.crt
という名前のファイルが作成されるはずです。これは自己署名証明書(いわゆるオレオレ証明書)というやつです。
実際にブラウザ経由でエミュレーターの UI に接続する際は、この証明書を使いたいので、キーチェーンに登録していきます。
Launchpad からキーチェーンアクセス
を選択して開きます。
画面左上のメニューからファイル
-> 読み込む...
を選択 (または Command
+ Shift
+ I
を入力) し、証明書のインポート画面を表示します。
ファイル選択の画面で、先ほど作成した emulatorcert.crt
ファイルを選択し、インポートを行います。
画面から、自己署名署名書がインポートされたことを確認してください。
証明書の信頼設定
証明書をインポートしても、証明書が信頼されていなければアクセスできないので、信頼するように設定を行います。
先ほどインポートを行った証明書をダブルクリックし、証明書情報の詳細を表示します。
信頼
タブを開き、この証明書を使用するとき
のプルダウンで設定されている選択値を常に信頼に変更します。
設定を変更すると、以下のように、証明書が信頼状態に変更されるはずです。
Web UI にアクセス
これで、Azure Cosmos DB Linux Emulator の UI にアクセスできるようになったので、ブラウザを起動してアクセスしてみます。
URL は https://localhost:8081/_explorer/index.html
です。
後は通常と同じように SDK から接続するだけ
あとは、これまで同様、Azure Cosmos DB の プライマリ/セカンダリ接続文字列などを使用して、Cosmos DB Linux Emulator に接続すれば、従来と同様の形で開発を始められます。
まとめ
今回は、新しく登場した Azure Cosmos DB Linux Emulator の環境構築方法についてみてみました。
Azure Cosmos DB は、本当に公式ドキュメントをはじめ、リリースされている内容が非常に丁寧なのですが、今回のリリース情報も非常に素晴らしかったです。
正直公式ドキュメント見れば誰でも構築が簡単にできるレベルでしたので、私のこの記事に有用性があるかはわかりませんが、英語苦手、という人向けに、公式の日本語訳ドキュメントがリリースされるまでの参考情報となれば幸いです。
Discussion