💻

Microsoft Build 2021 付近で発表された Azure Cosmos DB 関連アップデートまとめ

2021/05/26に公開

この記事について

この記事では、2021/5/26 〜 2021/5/28 (日本時間) で開催された Microsoft Build 2021 付近で公開された Azure Cosmos DB 関連のアップデート情報について触れていきます。

今回もアップデートはアツいです!

公式情報

公式情報については、以下を参照してください。

https://devblogs.microsoft.com/cosmosdb/build-2021-apps-at-any-scale/

https://devblogs.microsoft.com/cosmosdb/build-2021-secure-and-optimize/

https://news.microsoft.com/build-2021-book-of-news/

今回触れるアップデートの一覧

  • 一般提供開始 (GA)
    • Azure Cosmos DB サーバレスがすべての API に正式対応
    • Free Tier (無償枠) が 1,000 RU/s まで拡張
    • データアクセスに関する Azure Cosmos DB の Azure RBAC が正式対応
  • パブリックプレビュー
    • Azure Cosmos DB Linux エミュレータが登場
    • 統合キャッシュ機能が登場
  • プライベートプレビュー
    • ドキュメントの部分更新に対応
    • Always Encrypted for Azure Cosmos DB によるデータ暗号化に対応

一般提供開始 (GA)

Azure Cosmos DB サーバレスがすべての API に正式対応

2020/08/19 にパブリックプレビューが開始された Azure Cosmos DB サーバレスが一般提供開始になりました。
これまでは、SQL (Core) API がパブリックプレビュー、Cassandra API がプライベートプレビュー (2020/11/12 ~) の対応でしたが、一般提供開始に伴い、残りの API (MongoDB、Gremlin、Table) も対応がなされ、すべての API で利用可能となります。

Azure Cosmos DB サーバレスについては、後述の Free Tier (無償枠) の対象外となるため、プロビジョニングされたスループット (Provisioned Throughput) との使い分けは引き続き考慮が必要ですが、1000 RU/s 以上の要求があり、永続的に Cosmos DB のスループット (~ 5000 RU/s) を必要とせず、データとインデックス合わせて 50 GB の範囲内で済む実運用のユースケースにおいては、サーバレスモードという選択肢も含めることができるようになりました。

詳細については、以下のドキュメントを参照してください。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/set-throughput

https://devblogs.microsoft.com/cosmosdb/serverless-preview/

Free Tier (無償枠) が 1,000 RU/s まで拡張

2020/03/06 に登場した Azure Cosmos DB の Free Tier (無償枠) ですが、今回 無償枠の制限が 400 → 1,000 RU/s、 5 → 25 GB まで拡張されました。これによって、これまで以上に Azure Cosmos DB がお手軽に利用できるようになります。
すでに Azure Cosmos DB の無償枠が適用されたアカウントをお持ちの方は、無償適用の内容が 1,000 RU/s、25 GB のストレージとなるように自動更新 (適用) されます。
Free Tier が適用できる Cosmos DB アカウントの数については、従来通り 1 サブスクリプションあたり 1 アカウントです。

Free Tier の詳細については、以下を参照してください。

https://devblogs.microsoft.com/cosmosdb/build-apps-for-free-with-azure-cosmos-db-free-tier/

データアクセスに関する Azure Cosmos DB の Azure RBAC が正式対応

2021/03/02 に登場した データアクセスに関する RBAC が一般提供開始となりました。Azure AD に存在しているプロファイルにロールを適用して、Azure Cosmos DB 内に存在するデータのセキュリティを強化することができるようになりました。
データの読み取り/書き込み、クエリ実行などの操作に対する許可をプロファイル毎に定義することができ、クライアントが Cosmos DB に対して行うデータ操作について、制御が可能になります。
なお、現状では、組み込みロールについては、以下の 2 つが提供されるようになりました。それ以外のロールについては、Azure PowerShell または Azure CLI を使用して、カスタムロールで定義する必要があります。

ID 名前 許可されるアクション
00000000-0000-0000-0000-000000000001 Cosmos DB Built-in Data Reader Microsoft.DocumentDB/databaseAccounts/readMetadata
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed
00000000-0000-0000-0000-000000000002 Cosmos DB Built-in Data Contributor Microsoft.DocumentDB/databaseAccounts/readMetadata
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*

Azure Cosmos DB の RBAC については、以下を参照してください。

https://devblogs.microsoft.com/cosmosdb/role-based-access-control-preview/

パブリックプレビュー

Azure Cosmos DB Linux エミュレータが登場

Azure Cosmos DB のエミュレータに Linux 版が登場しました。これにより、Linux / macOS マシンでも、無料で、ローカル環境で Azure Cosmos DB について学習したり Azure Cosmos DB を使用したアプリ開発/ビルド/テストを行うことができるようになります。
これまでの Azure Cosmos DB エミュレータは、Windows 環境のみに対応となっており、Docker についても Windows コンテナーでの稼働となっていましたが、今回、Linux に対応ということで、エミュレータについてもかなり利用しやすい状況となります。
詳細については、別途、ブログを参照してください。

https://devblogs.microsoft.com/cosmosdb/build-2021-apps-at-any-scale/#spotlight-on-the-new-linux-emulator

https://zenn.dev/ymasaoka/articles/get-started-with-cosmosdb-linux-emulator

統合キャッシュ機能が登場

専用ゲートウェイによる Cosmos DB ドキュメントのキャッシュ機能が登場しました。読み取りが多いワークロードや、何回も同じアイテムを繰り返し読み取ったりする環境については、この統合キャッシュ機能を用いることで、読み取りの多いワークロードのコストを削減することができます。
2021/5/26 現在、この統合キャッシュ機能の利用については、以下の制約があります。

  • SQL API アカウントのみサポート
  • IP ファイアウォール、またはプライベートリンクが構成されているアカウントでは利用不可
  • 可用性ゾーンが有効になっているアカウントでは利用不可

専用ゲートウェイについては、以下の 3 つのサイズから選択して利用をすることができます。一度作成した後に、このサイズを変更することはできません。
マルチリージョンの Cosmos DB アカウントにおいてこの統合キャッシュ機能を利用する場合、専用ゲートウェイは各リージョン毎に指定した内容で作成されるため、課金については注意してください。
また、パブリックプレビューのため、この専用ゲートウェイには SLA の適用はありません。

Sku vCPU メモリ
D4 4 16 GB
D8 8 32 GB
D16 16 64 GB

専用ゲートウェイにてキャッシュされたデータに対する読み取りとクエリ実行については、RU (要求ユニット) が使用されることはありません。そのため、専用ゲートウェイにおけるアイテムキャッシュ、およびクエリキャッシュについては RU 消費ゼロで利用することができます。
ただし、統合キャッシュの一貫性については 結果整合性 (Eventual) のみがサポートとなるため、それ以外の一貫性 (強固、有界整合性制約、セッション、整合性のあるプレフィックス) を指定した読み取りについては、常にこの統合キャッシュがバイパスされ利用できない点、注意が必要です。

詳細については、以下を参照してください。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/integrated-cache

https://docs.microsoft.com/ja-jp/azure/cosmos-db/dedicated-gateway

https://docs.microsoft.com/ja-jp/azure/cosmos-db/how-to-configure-integrated-cache

https://docs.microsoft.com/ja-jp/azure/cosmos-db/integrated-cache-faq

プライベートプレビュー

ドキュメントの部分更新に対応

Azure Cosmos DB 内に存在している 1 ドキュメント内の特定フィールド/プロパティに対して、パスレベルの更新が実行可能になりました。
2021/5/26 現在、この機能はプライベートプレビューとなるため、機能を利用したい希望者は、専用フォームから申請を行ってください。

https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR5VsJDEls71JudfaPwmEjSFUQlA0VDNNQkFOMDZGOENCQU0yV1VCTzg1My4u

これまでは、ドキュメントを更新する際は、

  • 更新対象となるドキュメントの明示的な読み取り
  • オプティミスティック同時実行制御 (OCC) のチェック
  • クライアント側からのドキュメント置換操作

という処理が実行されていましたが、今回の更新によりドキュメント全体の読み取りや置換という処理がスキップできるようになりました。そのため、エンドツーエンドの待ち時間の短縮、ネットワークのペイロード/クライアントサーバー側の CPU サイクルの大幅削減など、開発者の生産性向上を実現できるようになります。
また、同じ 1 ドキュメントの異なるプロパティを更新する際も、パスレベルの競合を自動的に解決し、処理を透過的に行うことが可能となりました。

2021/5/26 現在では、この機能は .NET SDKJava SDK、および ストアドプロシージャー からのみ利用可能であり、対象のアカウントも SQL (Core) API のみ となっていますので、プライベートプレビュー申請時には留意するようにしてください。

詳細については、以下を参照してください。

https://azure.microsoft.com/ja-jp/updates/partial-document-update-for-azure-cosmos-db-in-private-preview/

オプティミスティック同時実行制御 (OCC: Optimistic Concurrency Control) については、以下を参考にしてください。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/database-transactions-optimistic-concurrency

Always Encrypted for Azure Cosmos DB によるデータ暗号化に対応

SQL Database などでは既に登場していた Always Encrypted が Azure Cosmos DB でもプレビュー利用可能になりました。これによって、Cosmos DB 内に保存されているクレジットカード番号や保険証番号というような機密情報の保護が行えるようになります。
2021/5/26 現在、この機能はプライベートプレビューとなるため、機能を利用したい希望者は、専用フォームから申請を行ってください。

https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbRzBPrdEMjvxPuDm8fCLUtXpUNUZVTTAxNVQ1UTdUMU03TFI4V1Q4MUQzQS4u

Always Encrypted を使用すると、機密データは、プロパティ毎、あるいは複数プロパティに対応するデータ暗号化キー (DEK: data encryption key)によって、暗号化された状態で Cosmos DB に保存されます。
DEK については、Azure Cosmos DB SDK によってクライアント側で作成され、Azure Cosmos DB 側に格納されることになります。
また、データを復号する場合は Azure Key Vault に保存された顧客管理キー (CMK: customer-managed key) を利用 します。

注意点としては、

  • 暗号化ポリシーについては、コンテナーの作成時に指定する必要があり、作成後の変更は不可
  • ID および コンテナーのパーティションキーは暗号化不可

という点があります。

詳細については、以下を参照してください。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/how-to-always-encrypted

Discussion