LoginSignup
1
0

More than 1 year has passed since last update.

Azure無料枠でTodoアプリ【ASP.NET, CosmosDB】

Last updated at Posted at 2022-07-24

この記事は

マイクロソフトの公式ドキュメントにあるチュートリアルを試した記録です

経緯

こちら👇の記事を読んで 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) の結合割引を受けることができます。

image.png

アプリを作る

チュートリアルは.NET Core 3.1をターゲットにしている

せっかくなので、最新の.NET 6で試した
98%はドキュメント通りに進めればできる

チュートリアルから変更すべき箇所

チュートリアル通り書くと、コントローラーのCreateAsyncメソッドが想定通り動かない

引数のItem.Idnullのままで、ModelState.IsValidfalseになるため
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();

IdDescriptionが必要です」とのメッセージ

image.png

解決する

モデルフォルダーに作成したItem.csのプロパティをNull許容型にする

public string? Id { get; set; }

デプロイ

App Service の無料枠1GBに対して、使用料は8%です
あと9個くらいはデプロイできます

image.png

構成の変更

チュートリアルには書いてないが、GitHubによると、デプロイ後にアプリの構成を必ずしてくださいとのこと。

appsettings.jsonの Cosmos DB に関する値を適当な値に変えて再デプロイすると

image.png

500エラーになる。

ここでAzureポータルへ移動してアプリの構成を追加する

image.png

内容はもともとappsettings.jsonに書いてあったもの

{
  "CosmosDb": {
    "Account": "",
    "Key": "",
    "DatabaseName": "",
    "ContainerName": ""
  }
}

こうすることで、DB側のURIやアクセスキーが変わった場合でも、デプロイせずポータル側で構成を変えられる

おわりに

使わないときは App Service を停止しておきましょう

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0