32
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Azure Cosmos DB の無償枠 (Free Tier) の注意点

はじめに

2020 年 3 月 6 日 (米国時間) にて、Azure Cosmos DB に新しく Free Tier (無償利用枠) が登場しました。
この Free Tier によって、これまでよりもさらに Azure Cosmos DB を手軽に 無料 で始められるようになりました!

スクリーンショット 2020-09-13 16.41.50.png

ただ、この Free Tier ですが、JCDUG (Japan Azure Cosmos DB User Group) 関連で以下のような質問がありました。

Free Tier で全然使用していないのに課金が行われてしまいました。 どうしてなのか知りたいです。

というわけで、この記事では、Cosmos DB 初学者の方々などがおそらく疑問に思ったり、正直よく理解できていないと思われる

  • どういった場合に Free Tier (無償利用枠) が適用されて課金がかからなくなるのか
  • どういった場合に Free Tier を超えて課金が発生してしまうのか

というポイントに焦点を当てて、解説していきたいと思います。
また、先日公開された Azure Cosmos DB サーバレス についても、少し関連する部分かと思うので、こちらについても軽く触れていきたいと思います。

スクリーンショット 2020-09-13 17.08.04.png

Free Tier まとめ

概要と環境構築については、こちらの記事にも書いているので、併せてご確認いただければと思います。

Azure Cosmos DB Serverless について

こちらに情報まとめを作りましたので、併せてご確認いただければと思います。

Free Tier で Cosmos DB を無償利用したい時の確認ポイント

では、ここからは「Free Tier を適用したはずなのに、課金が発生している!?」と言ったような時の確認ポイントをまとめていきます。
もし、後述の内容に当てはまらないという場合は、Azure の製品サポートにお問い合わせいただく方が良いかと思います。

パターン1: Free Tier が適用されていない

Free Tier で作ったつもりが、Free Tier になっていないという場合があります。Free Tier が適用されていない場合、コンテナーに対して設定されたプロビジョニングされたスループットは、 400 RU/秒 の無償利用枠の対象になりません。
Free Tier は 1 Azure サブスクリプションあたり、1 Azure Cosmos DB アカウントのみ適用可能 というものになっているため、1 Azure サブスクリプション内に、複数の Free Tier が適用された Azure Cosmos DB アカウントを作成することができません。

Free Tier が適用されているかどうかは、現在、Azure ポータルの Azure Cosmos DB アカウント概要ページ、および ARM テンプレートにて確認が可能となっています。こちらを確認して、指定の Azure Cosmos DB アカウントの Free Tier が有効になっているか確認しましょう。

Azure ポータル上から確認する場合は、Free Tier Discount欄が Opted In になっていることを確認しましょう。

スクリーンショット 2020-09-14 2.59.30.png

ARM (Azure Resource Manager) テンプレート上で確認される場合は、resources -> properties 以下にある、enableFreeTierの値が true になっていることを確認しましょう。

スクリーンショット 2020-09-14 3.05.10.png

パターン2: 複数のデータベースとコンテナーが存在している

Free Tier が適用された Azure Cosmos DB アカウント上で、以下のように複数のデータベースを作成していないでしょうか。

スクリーンショット 2020-09-14 4.02.34.png

データベース作成時に、プロビジョニングされたスループットの設定を行うと思いますが、このスループットは、データベースを跨いで共有することはできません
そのため、以下のような構成の場合、課金対象は 400 RU/s * 2 の 800 RU/s となり、Free Tier の最初の 400 RU/s 無償利用分を差し引いた 400 RU/s 分の課金が発生することになります。

  • データベース: A (400 RU/秒: プロビジョニングスループット モード)
    • コンテナー: x
  • データベース: B (400 RU/秒: プロビジョニングスループット モード)
    • コンテナー: y

Free Tier 適用範囲内で Cosmos DB を利用したい場合は、データベースは 1 つのみ作成するようにしましょう。別のデータベースを作成したい場合は、既存のデータベースを削除するか、新しい Azure サブスクリプションを作成し、Azure Cosmos DB アカウントを別で作るようにしましょう。

パターン3: 専用プロビジョニングスループットモードで作成されたコンテナーが存在する

Azure Cosmos コンテナー を作成する際、プロビジョニングされたスループットについて、以下 2 つのモードのどちらかを選択することになります。

モード 説明
専用プロビジョニングスループット 単一のコンテナー専用にスループットを予約し、他のコンテナーとのスループットの共用は不可
共有プロビジョニングスループット 同じデータベース内の他のコンテナーとプロビジョニングされたスループットを共有

詳しくは、以前の JCDUG の勉強会にて、エンティティについて説明したものがありますので、こちらをご確認ください。

コンテナー作成のダイアログにて、上記の 2 つのモードどちらを適用してコンテナーを作成するかを選択できる画面があります。

スクリーンショット 2020-09-14 4.21.14.png

こちらの画面で、チェックボックスを ON にし、コンテナーを専用プロビジョニングスループットモードで作成してしまった場合、データベースとは別で独立したスループットが適用されてしまうため、Free Tier 対象の 400 RU/s を超えてプロビジョングされたスループットを設定することになってしまいます。このスループットのモードについては、現時点では、コンテナー作成時にのみ選択可能となっており、コンテナー作成後に変更することはできません。

専用プロビジョニングスループットモードでコンテナーを作成する場合、事前にデータベース側で設定されているスループット値の設定は無視されます。特にエラーなどは出ませんので(当然ですが)、このあたりの設定が分からないままチェックを ON にしないよう、注意しましょう。

スクリーンショット 2020-09-14 4.23.10.png

作成されたコンテナーがどちらのモードで作成されているかについては、Cosmos DB のデータエクスプローラー画面、および ARM テンプレートにて確認が可能となっています。

データエクスプローラー上で確認する場合は、コンテナーのSettingsタブを確認しましょう。共有プロビジョニングスループット モードで作成されたコンテナーの場合は、タブが Settings のみ表示され、スループットに関する設定欄は表示されません。

スクリーンショット 2020-09-14 4.32.41.png

逆に、専用プロビジョニングスループット モードで作成されたコンテナーの場合、Settings タブを開くと、Scaleの設定欄が表示され、スループットを変更できるようになっています。

スクリーンショット 2020-09-14 4.32.57.png

ARM テンプレートで確認する場合は、resources 以下にある dependsOn プロパティにて、専用プロビジョニングスループット モードを識別するための値が設定されていないかどうかを確認しましょう。
専用プロビジョニングスループットモードで作成されたコンテナーの場合は、dependsOn にて、以下のようなコンテナーに関する設定値が 1 つ追加で存在するようになっています。

"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers', parameters('databaseAccounts_<db account>_name'), 'DamonSlayer', 'Test')],"

スクリーンショット 2020-09-14 4.31.38.png

パターン4: 分析ストアが有効になっている

Microsoft Build 2020 にて発表があった通り、Azure Synapse Link の登場に合わせて、Azure Cosmos DB 分析ストアが登場しました。コンテナーを作成する際に、分析ストアを一緒に作成するか否かの設定を行うようになっています。
分析ストア機能は、Free Tier の対象外となっており、ストレージと読み取り/書き込みの IOPS に対して課金が発生します。Azure Synapse Link および Azure Cosmos DB 分析ストアの詳細については、以下の資料を参照してください。

スクリーンショット 2020-09-14 5.05.13.png

パターン5: コンテナー内のデータが 5GB を超えている

Free Tier は、スループットの計算とは別に、ストレージに対する計算も発生しています。5 GB を超えるストレージ容量については、「パターン4: 分析ストアが有効になっている」にて掲載している料金一覧にある通り、1 GB あたり 31.640 円の課金が発生します。

コンテナー内にあるデータが 5 GB を超過していないか、確認しましょう。

スクリーンショット 2020-09-14 5.31.14.png

Cosmos DB Serverless は Free Tier 対象外

先述の通り、2020 年 8 月 19 日 (米国時間) より、Azure Cosmos DB サーバレスがパプリックプレビューに入りました。Azure Cosmos DB アカウントを作成する際、キャパシティ モード を選択することが必須になっています。

Capacity mode 説明
Provisioned throughput プロビジョニングされたスループット モード (従来)
Serverless サーバレス

Azure Cosmos DB サーバレスは、従来のプロビジョニングされたスループット モードと異なり、使用したスループットの量に応じてコンピューティングに相当する課金が行われます。(ストレージについては、従来同様、別途課金対象となります)
そのため、使用していない期間について、スループットの課金は発生しませんが、使用した際には、スループットの課金が発生することになります。

そして、Azure Cosmos DB サーバレスは、Free Tier 対象外 ですので、純粋に使用したスループットとデータ量(ストレージ)についての課金はそのままチャージされます。無料で使用することはできません。
また、先述の記事内でも触れていますが、サーバレスで作成したコンテナーについては、2020 年 9 月 13 日 現在、オートスケールが自動で有効化されており、これを変更することはできません。また、コンテナーのスループットについても オートスケールで最大 5,000 RU/s 固定となっているため、下手に非効率なクエリを実行すると、RU を無駄に消費してしまい、課金額が大幅にアップしてしまう可能性があります。

そのため、個人的には、Azure Cosmos DB 初学者 については最初は Provisioned throughput にて Free Tier を有効化した Azure Cosmos DB アカウントを作成することを推奨します。
また、非効率なクエリを実行しないためには、Azure Cosmos DB のエンティティやデータモデリングについての理解が必要となります。以前の JCDUG 勉強会にて、エンティティやデータモデリングのケーススタディについて扱った回がありますので、興味ある方は一度資料をご覧になってみてください。


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
32
Help us understand the problem. What are the problem?