[メモ] Cosmos DB を無償で使う方法 #AzureCosmosDB 

# 目的（モチベーション）
- 最近、Cosmos DBの話題が多いため、検証や開発時に無償で使う方法をメモしときます。

# Cosmos DBとは（[MS公式サイト](https://azure.microsoft.com/ja-jp/services/cosmos-db/)より）
あらゆるスケールに対応するグローバル分散型マルチモデル データベース サービス
- 透過的なマルチマスター レプリケーションによるターンキー グローバル分散により、高可用性と短い待機時間を実現します。
- 10 ミリ秒未満の待ち時間と 99.999 パーセントの高可用性。あらゆる規模を保証し、SLA の対象となります。
- エラスティックな自動スケーリングにより、コストを制御しながらパフォーマンスを最大化するための容量に対する需要に対応します。
- Cassandra、MongoDB、SQL、Gremlin、Etcd、Table 用のワイヤ プロトコル互換 API エンドポイントを含むマルチモデル。
  - Jupyter ノートブックの組み込みサポートを含みます。

### 筆者解釈:relaxed:
- グローバルにスケールアウト可能で、超早く、既存のNoSQL製品と互換性を持つAPIやSQLでのクエリを提供する、クラウド時代のDBです。

# Cosmos DBを無償で使う方法
- 参考：[Azure Cosmos DB での開発とテストのコストを最適化する](https://docs.microsoft.com/ja-jp/azure/cosmos-db/optimize-dev-test)

## Azure Cosmos DB エミュレーター (ローカルにダウンロード可能なバージョン)
- Azure Cosmos DB エミュレーターは Azure Cosmos DB クラウド サービスによく似ており、ローカルにダウンロードできます。
-  ネットワークに接続していなくても、コストをかけずに、Azure Cosmos DB API を使用してコードの記述とテストを行うことができます。
- 参考：[ローカルでの開発とテストに Azure Cosmos Emulator を使用する](https://docs.microsoft.com/ja-jp/azure/cosmos-db/local-emulator)

### 環境構築時に参考になりそうな記事
- [Windowsにインストールしてエミュレーターを使用する方法](https://docs.microsoft.com/ja-jp/azure/cosmos-db/local-emulator#installation)
- [Docker for Windows でエミュレーターを使用する方法](https://docs.microsoft.com/ja-jp/azure/cosmos-db/local-emulator#running-on-docker)
- [CosmosDB利用時に参考にした情報まとめ - Azure Cosmos DB Emulator] (https://qiita.com/zaki_zaki/items/ccc5d12e636f40e24a23#azure-cosmos-db-emulator)

### 想定する用途
- ローカルでの開発・検証時の用途に適していると考えます。

## Azure Cosmos DB を無料で試す
- データベースとコレクションを作成し、クラウドの Azure Cosmos DB で実験することができる、無料のエクスペリエンスを30日間利用できます。
  - ターンキー グローバル配信、SLA、整合性モデルなどの Azure Cosmos DB のプレミアムな機能を無料で評価できます。
  - 最大 25 個の Azure Cosmos コンテナーと 10,000 RU/秒のスループットを備えたデータベースを作成できます。
  -  Azure アカウントをサブスクライブしたり、クレジット カードを使用したりせずに、サンプル アプリケーションを実行できます。
- 参考：[Azure Cosmos DB を無料で試す](https://azure.microsoft.com/ja-jp/try/cosmosdb/)

### 想定する用途
- プレミアムな機能も含めて評価する場合の用途に適していると考えます。

## Azure 無料アカウント（無償利用枠）を使用する。
- Azure Cosmos DB に無償利用枠「Free レベル（Free Tier）」の提供が始まり、以下の範囲内であれば無償で利用できます。
  - 最初の 400 RU/秒と 5 GB のストレージを無料で利用できます。
  - また、共有スループット データベースを使用する場合は、データベース レベルで 400 RU/秒を共有する最大 25 個のコンテナーを作成できます。
- 範囲を超えた場合は、超えた分が課金されますが、Azureサブスクリプションを無料アカウントで作っている場合は、他サービスと同様に無効化されるだけと思われます。
  - 参考：[無効な Azure サブスクリプションを再度有効にする - 使用制限に達している](https://docs.microsoft.com/ja-jp/azure/cost-management-billing/manage/subscription-disabled#you-reached-your-spending-limit)

### 環境構築時に参考になりそうな記事
- [2020年から始める Azure Cosmos DB - 環境構築](https://qiita.com/ymasaoka/items/3784c64baf30bbe7b761)

### 想定する用途
- 開発・検証だけでなくサービス開始時や小規模サービスでの用途に適していると考えます。

# 捕捉
### RU/秒とは
- 秒あたりの要求ユニット (RU/秒) 
- 以下、[MS公式サイト](https://azure.microsoft.com/ja-jp/pricing/details/cosmos-db/)から抜粋
  - プロビジョニング スループットは、様々なデータベース操作 (挿入、読み込み、置換、アップサート、削除、クエリなど) に使用される、秒あたりの要求ユニット (RU/秒) で表されます。
  - たとえば、1K のアイテムを 1 秒あたり 1 回の結果整合性のある読み込みを行う処理には 1 RU/秒が十分であり、1 秒あたり 1K のアイテムを 1 回書き込む処理には 5 RU/秒で十分です。


# 参考
- [Azure Cosmos DB の概要](https://docs.microsoft.com/ja-jp/azure/cosmos-db/introduction)
- [Azure Cosmos DB のドキュメント](https://docs.microsoft.com/ja-jp/azure/cosmos-db/)
- [Azure Cosmos DBの調査]()
- [.NET 用 Azure Cosmos DB ライブラリ](https://docs.microsoft.com/ja-jp/dotnet/api/overview/azure/cosmosdb?view=azure-dotnet)
- [ryuichi111stdの技術日記 - 「Azure Cosmos DB入門」目次](http://ryuichi111std.hatenablog.com/entry/2017/05/21/012928)
- [Cosmos DBに大量にデータを入れてみる](https://qiita.com/yasuhanda/items/ea884a2035d18adab11d)
- [CosmosDB Attachments to store larger data(information)](https://medium.com/@madhufuture/cosmosdb-attachments-to-store-larger-data-information-a3e560e457cf)