M1 MacだとCosmosDBエミュレータが動かなかったのでその記録

まずは、こちらを読んでいく。

現在、Linux エミュレーターでは、M1 チップと M2 チップで実行されている開発者マシンのサポートが制限されています。 

すでに詰んでいる気がするが、制限されているだけで使えないというわけではないのだろうか・・?
結論、最終的にやはり無理というのがわかった。
回避策もちゃんと書かれていた。

 一時的な回避策は、Windows 仮想マシンをインストールし、そのプラットフォームでエミュレーターを実行することです。

ただ、このためにWindows 仮想マシンをインストールするというのもめんどくさいから諦めた。

https://learn.microsoft.com/ja-jp/azure/cosmos-db/emulator

とにかく動かしてみよう。

以下を参考にcompose.yamlを作ります。

https://learn.microsoft.com/ja-jp/azure/cosmos-db/how-to-develop-emulator?tabs=docker-linux%2Ccsharp&pivots=api-nosql

compose.yaml

version: "3"
services:
  cosmosdb:
    image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
    environment:
      - AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10
      - AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true
    ports:
      - 8081:8081
      - 10251:10251
      - 10252:10252
      - 10253:10253
      - 10254:10254
    volumes:
      - ./data:/data

CosmosDBの直接接続ポートのデフォルトは10251,10252,10253,10254という情報を見ました。なので、念の為上記では10251,10252,10253,10254をマッピングしています。

windows – CosmosDB emulator can’t start since port is already in use – Stack Overflow

作成後、当該ディレクトリでdocker compose upします。

でエラーが出ます。

✔ Container cosmosdb-cosmosdb-1 Recreated 0.1s
Attaching to cosmosdb-cosmosdb-1
cosmosdb-cosmosdb-1 | ./cosmosdb-emulator: ERROR: Invalid mapping of address 0x40037da000 in reserved address space below 0x400000000000. Possible causes:
cosmosdb-cosmosdb-1 | 1) the process (itself, or via a wrapper) starts-up its own running environment sets the stack size limit to unlimited via syscall setrlimit(2);
cosmosdb-cosmosdb-1 | 2) the process (itself, or via a wrapper) adjusts its own execution domain and flag the system its legacy personality via syscall personality(2);
cosmosdb-cosmosdb-1 | 3) sysadmin deliberately sets the system to run on legacy VA layout mode by adjusting a sysctl knob vm.legacy_va_layout.
cosmosdb-cosmosdb-1 |
cosmosdb-cosmosdb-1 |
cosmosdb-cosmosdb-1 exited with code 1

Azure

Posted by takumioda