はじめに
2020 年 3 月 6 日 (米国時間) にて、Azure Cosmos DB に新しく Free Tier (無償利用枠) が登場しました。
この Free Tier によって、これまでよりもさらに Azure Cosmos DB を手軽に 無料 で始められるようになりました!
ただ、この Free Tier ですが、JCDUG (Japan Azure Cosmos DB User Group) 関連で以下のような質問がありました。
Free Tier で全然使用していないのに課金が行われてしまいました。 どうしてなのか知りたいです。
というわけで、この記事では、Cosmos DB 初学者の方々などがおそらく疑問に思ったり、正直よく理解できていないと思われる
- どういった場合に Free Tier (無償利用枠) が適用されて課金がかからなくなるのか
- どういった場合に Free Tier を超えて課金が発生してしまうのか
というポイントに焦点を当てて、解説していきたいと思います。
また、先日公開された Azure Cosmos DB サーバレス についても、少し関連する部分かと思うので、こちらについても軽く触れていきたいと思います。
Free Tier まとめ
概要と環境構築については、こちらの記事にも書いているので、併せてご確認いただければと思います。
Azure Cosmos DB Serverless について
こちらに情報まとめを作りましたので、併せてご確認いただければと思います。
Free Tier で Cosmos DB を無償利用したい時の確認ポイント
では、ここからは「Free Tier を適用したはずなのに、課金が発生している!?」と言ったような時の確認ポイントをまとめていきます。
もし、後述の内容に当てはまらないという場合は、Azure の製品サポートにお問い合わせいただく方が良いかと思います。
- パターン1: Free Tier が適用されていない
- パターン2: 複数のデータベースとコンテナーが存在している
- パターン3: 専用プロビジョニングスループットモードで作成されたコンテナーが存在する
- パターン4: 分析ストアが有効になっている
- パターン5: コンテナー内のデータが 5GB を超えている
パターン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 になっていることを確認しましょう。
ARM (Azure Resource Manager) テンプレート上で確認される場合は、resources -> properties 以下にある、enableFreeTier
の値が true になっていることを確認しましょう。
パターン2: 複数のデータベースとコンテナーが存在している
Free Tier が適用された Azure Cosmos DB アカウント上で、以下のように複数のデータベースを作成
していないでしょうか。
データベース作成時に、プロビジョニングされたスループットの設定を行うと思いますが、このスループットは、データベースを跨いで共有することはできません。
そのため、以下のような構成の場合、課金対象は 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 つのモードどちらを適用してコンテナーを作成するかを選択できる画面があります。
こちらの画面で、チェックボックスを ON にし、コンテナーを専用プロビジョニングスループット
モードで作成してしまった場合、データベースとは別で独立したスループットが適用されてしまうため、Free Tier 対象の 400 RU/s を超えてプロビジョングされたスループットを設定することになってしまいます。このスループットのモードについては、現時点では、コンテナー作成時にのみ選択可能となっており、コンテナー作成後に変更することはできません。
専用プロビジョニングスループットモードでコンテナーを作成する場合、事前にデータベース側で設定されているスループット値の設定は無視されます。特にエラーなどは出ませんので(当然ですが)、このあたりの設定が分からないままチェックを ON にしないよう、注意しましょう。
作成されたコンテナーがどちらのモードで作成されているかについては、Cosmos DB のデータエクスプローラー画面、および ARM テンプレートにて確認が可能となっています。
データエクスプローラー上で確認する場合は、コンテナーのSettings
タブを確認しましょう。共有プロビジョニングスループット モードで作成されたコンテナーの場合は、タブが Settings のみ表示され、スループットに関する設定欄は表示されません。
逆に、専用プロビジョニングスループット モードで作成されたコンテナーの場合、Settings タブを開くと、Scale
の設定欄が表示され、スループットを変更できるようになっています。
ARM テンプレートで確認する場合は、resources 以下にある dependsOn
プロパティにて、専用プロビジョニングスループット モードを識別するための値が設定されていないかどうかを確認しましょう。
専用プロビジョニングスループットモードで作成されたコンテナーの場合は、dependsOn にて、以下のようなコンテナーに関する設定値が 1 つ追加で存在するようになっています。
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers', parameters('databaseAccounts_<db account>_name'), 'DamonSlayer', 'Test')],"
パターン4: 分析ストアが有効になっている
Microsoft Build 2020 にて発表があった通り、Azure Synapse Link の登場に合わせて、Azure Cosmos DB 分析ストアが登場しました。コンテナーを作成する際に、分析ストアを一緒に作成するか否か
の設定を行うようになっています。
分析ストア機能は、Free Tier の対象外となっており、ストレージと読み取り/書き込みの IOPS に対して課金が発生します。Azure Synapse Link および Azure Cosmos DB 分析ストアの詳細については、以下の資料を参照してください。
- 2020年から始めるAzure Cosmos DB - Azure Synapse Link を試してみる
- 2020年から始めるAzure Cosmos DB - Azure Synapse Link Demo (Part. 1)
- Azure Synapse Link for Azure Cosmos DB - SlideShare
パターン5: コンテナー内のデータが 5GB を超えている
Free Tier は、スループットの計算とは別に、ストレージに対する計算も発生しています。5 GB を超えるストレージ容量については、「パターン4: 分析ストアが有効になっている」にて掲載している料金一覧にある通り、1 GB あたり 31.640 円の課金が発生します。
コンテナー内にあるデータが 5 GB を超過していないか、確認しましょう。
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 勉強会にて、エンティティやデータモデリングのケーススタディについて扱った回がありますので、興味ある方は一度資料をご覧になってみてください。