Azure Cosmos DB Serverless が Preview になったので試した – しばやん雑記
今回は、.netのコンソールアプリからCosmosDBにアイテムを追加するところを試してみました。
CosmosDBの準備
1.適当にリソースグループを作成します。2.リソースグループにCosmosDBを作成します。
Capacity modeを Serverless(preview) に設定します。
3.接続文字列をメモっておきます。
CosmosDBにアイテムを追加してみる
1.Visual Studio から .Net Frameworkのコンソールプロジェクトを作成します。2.nugetから Microsoft.Azure.Cosmos をインストールします。
3.下のような感じのプログラムを作ります。
CosmosClientを作って接続して、CreateDatabaseIfNotExistsAsync、CreateContainerIfNotExistsAsyncでデータベース、コンテナを作成し、CreateItemAsyncでコンテナにアイテムを追加します。
using Microsoft.Azure.Cosmos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CosmosDB_BulkSupport
{
class DemoItem
{
public string Id { get; set; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
public string PartitionKey { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var connectionString = "xxxx";
var databaseId = "TestDB";
var containerId = "TestContainer";
var partitionKey = "/partitionKey";
// SerializerOptionsで CosmosPropertyNamingPolicy.CamelCaseを指定しているので、
// CosmosDBに投げるJSONは "PartitionKey": "..." ではなく "partitionKey": "..."になる。
// そのため、コンテナの PartitionKey には "/partitionKey" を指定する
// また、CosmosDBのアイテムに id が必要なので、 CosmosPropertyNamingPolicy.CamelCase を指定しない場合には、
// [JsonProperty(PropertyName = "id")]
// public string Id { get; set; }
// こんな感じで Id を id にしてあげる。
// その場合には、コンテナのPartitionKeyには、"/PartitionKey"を指定する(のだと思う。試してない)
var cosmosClient = new CosmosClient(connectionString, new CosmosClientOptions
{
AllowBulkExecution = true,
SerializerOptions = new CosmosSerializationOptions
{
PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase
}
});
Database database = await cosmosClient.CreateDatabaseIfNotExistsAsync(databaseId);
Container container = await database.CreateContainerIfNotExistsAsync(containerId, partitionKey);
var tasks = Enumerable.Range(1, 10000)
.Select(x => new DemoItem
{
Id = Guid.NewGuid().ToString(),
Name = $"Test-{x}",
CreatedOn = DateTime.Now,
PartitionKey = Guid.NewGuid().ToString()
})
.Select(x => container.CreateItemAsync(x, new PartitionKey(x.PartitionKey)));
await Task.WhenAll(tasks);
}
}
}
4.実行して、Azureのコントロールパネルからアイテムの登録やRUの状況を確認します。
これだけだとServerlessは全然関係ないですが、料金の感じを見ると、平均してRUを消費するわけではなく、Free Tierを超えるような使い方であればちょうどよい・・・んでしょうか。つかってないのでよくわかりません。 次のような記事もありましたので、今度どこかでマスタ系にFree Tierを使ってみて、感触を確かめてみようかなーとおもいます。
Azure Cosmos DB Free Tier をプロダクション環境で使う – PaaSがかりの部屋