この記事は
マイクロソフトの公式ドキュメントにあるチュートリアルを試した記録です
経緯
こちら👇の記事を読んで CosmosDB が25GBストレージ容量と1秒あたり1000RUスループットまで利用可能と知った
これらの無料提供サービスの内容は、提供側の都合によって変更されるので、最新の情報をあたってください
最新の情報をあたってみる
マイクロソフトのドキュメントから引用👇(22' 7/23時点)
12 か月の有効期限が切れた後も、Azure Cosmos DB アカウントの有効期間中、Azure Cosmos DB Free レベルから 1000 RU/秒 と 25 GB を引き続き得られます。
蛇足
Azure の無料アカウントで 12 か月間サービスが無料」の期間であればさらに無料枠が使えるらしい
最初の 12 か月間は、1400 RU/秒 (Azure Cosmos DB Free レベルから 1000 RU/s、Azure 無料アカウントから 400 RU/秒) と 50 GB のストレージ (Azure Cosmos DB Free レベルから 25 GB、Azure 無料アカウントから 25 GB) の結合割引を受けることができます。
アプリを作る
チュートリアルは.NET Core 3.1
をターゲットにしている
せっかくなので、最新の.NET 6
で試した
98%はドキュメント通りに進めればできる
チュートリアルから変更すべき箇所
チュートリアル通り書くと、コントローラーのCreateAsync
メソッドが想定通り動かない
引数のItem.Id
がnull
のままで、ModelState.IsValid
がfalse
になるため
if文の中に入れないことが原因
public async Task<ActionResult> CreateAsync([Bind("Id,Name,Description,Completed")] Item item)
{
if (ModelState.IsValid) // <<-- ここが false になる
{
item.Id = Guid.NewGuid().ToString();
await _cosmosDbService.AddItemAsync(item);
return RedirectToAction("Index");
}
return View(item);
}
エラーメッセージを捕捉してみると・・・
var errormsgs = ViewData.ModelState.SelectMany(x => x.Value.Errors.Select(z => z.ErrorMessage)).ToList();
「Id
とDescription
が必要です」とのメッセージ
解決する
モデルフォルダーに作成したItem.cs
のプロパティをNull許容型にする
public string? Id { get; set; }
デプロイ
App Service の無料枠1GB
に対して、使用料は8%です
あと9個くらいはデプロイできます
構成の変更
チュートリアルには書いてないが、GitHubによると、デプロイ後にアプリの構成を必ずしてくださいとのこと。
appsettings.json
の Cosmos DB に関する値を適当な値に変えて再デプロイすると
500
エラーになる。
ここでAzureポータルへ移動してアプリの構成を追加する
内容はもともとappsettings.json
に書いてあったもの
{
"CosmosDb": {
"Account": "",
"Key": "",
"DatabaseName": "",
"ContainerName": ""
}
}
こうすることで、DB側のURIやアクセスキーが変わった場合でも、デプロイせずポータル側で構成を変えられる
おわりに
使わないときは App Service を停止しておきましょう
参考