Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure Functions で SQL Database のデータを操作する API を作成する手順

Hajime
March 26, 2022

Azure Functions で SQL Database のデータを操作する API を作成する手順

この記事では、 Azure Functions の HTTP Trigger を利用して API を作成し、 API 経由で取得した情報を SQL Database に書き込むまでの一連の実装手順を紹介します。内容の詳細はこちらのブログに書いています。

Hajime

March 26, 2022
Tweet

More Decks by Hajime

Other Decks in Programming

Transcript

  1. 1. 利⽤するサービスと今回の構成 • Azure Functions • Function as-a-Service (FaaS) サービスの⼀種

    • コードベースで実装でき、短い処理 (5分以内) をサーバレスに実⾏できる • SQL Database • フルマネージドな MS SQL Server のインターフェスを持った PaaS サービス • 内部のアーキテクチャは複数のサーバで可⽤性⾼く構成されている (c) 2022 hajimes.life SQL クエリ HTTP 使⽤量プラン .NET6 (C#) サーバレス 0.5 - 1vCore 1 GB ストレージ
  2. 2. 事前準備 • Azure Functions を⼿元の PC で開発する環境 • 選択肢

    1 : Visual Studio • 有償・無償で提供されている IDE • All-in-One で .NET 6 のコンパイルだけでなくデバッグやテスト機能も充実 • 選択肢 2 : Visual Studio Code + .NET CLI + Azure Functions Core Tools • Visual Studio Code • OSS で開発されているエディタ • 必要なプラグインをインストールしてカスタマイズ可能 • .NET CLI • .NET のランタイムと⼀緒にインストールできる • プロジェクトの⽣成やビルド、アプリの実⾏をコマンドラインで⾏える • Azure Functions Core Tools • Azure Functions の開発補助ツール • func コマンドでプロジェクトの⽣成や、ビルド、アプリの実⾏、設置まで⾏える (c) 2022 hajimes.life
  3. 3. Function の作成⼿順 (C#) Core Tools で効率的に開発 ⽣成される関数の例 (HTTPトリガーの場合) (c)

    2022 hajimes.life プロジェクトの作成 関数の作成 (追加) ⽣成されたファイルへ コードを追加 開発の流れ Core Tools の コマンド Run 関数が実⾏され、 トリガー情報は⼊⼒パラメータで定義 Run 関数の戻り値が HTTP レスポンス func init func new
  4. 4. SQL Database へアクセスする記述⽅法 (C#) SQL DB の接続⽂字列を取得 Azure ポータルの接続⽂字列の

    メニューにある ADO.NET の値 例: 新規 ToDo を書き込む API (c) 2022 hajimes.life var conn_str = “接続⽂字列の値”; using (SqlConnection conn = new SqlConnection(conn_str)) { conn.Open(); var text = ”SQL ⽂"; using (SqlCommand cmd = new SqlCommand(text, conn)) { await cmd.ExecuteNonQueryAsync(); } } SQL DB へ接続するコード例 using System; using System.IO; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Microsoft.Extensions.Configuration; using System.Data.SqlClient; namespace TodoApi; public static class AddTodo { [FunctionName("AddTodo")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route=null)] HttpRequest req, ILogger log) { string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); dynamic data = JsonConvert.DeserializeObject(requestBody); string description = data?.description; DateTime createdDate = DateTime.Now; using (var conn = new SqlConnection(“接続⽂字列の値”)) { conn.Open(); using (var cmd = conn.CreateCommand()) { cmd.CommandText = "INSERT INTO todos(description, createdDate) VALUES(@description, @createdDate)"; cmd.Parameters.AddWithValue("@description", description); cmd.Parameters.AddWithValue("@createdDate", createdDate); await cmd.ExecuteNonQueryAsync(); } } return new OkObjectResult("ok"); } }