Closed7
Azure FunctionでSQL ServerにActive Directoryからbindする

Azure Functionプロジェクト作成(ローカル)
.NETからAzure Functionのプロジェクト作成
func init <プロジェクト名> --worker-runtime dotnet-isolated --target-framework net8.0
SqlServerとバインディングするライブラリのインストール
dotnet add Microsoft.Azure.Functions.Worker.Extensions.Sql

Azure Functionエンドポイントサンプル
Azure Functionのエンドポイントサンプル
Testテーブルのidをルートから指定してクエリを実行する処理
SqlConnectionStringに接続文字列を設定する(Azure Functionポータルの環境変数)
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
namespace azure_function_test;
public class SqlServerExample
{
private readonly ILogger<SqlServerExample> _logger;
public SqlServerExample(ILogger<SqlServerExample> logger)
{
_logger = logger;
}
[Function(nameof(SqlServerExample))]
public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "get-by-id/{id}")] HttpRequestData req,
[SqlInput("SELECT * FROM dbo.test where Id = @Id",
commandType: System.Data.CommandType.Text,
parameters: "@Id={id}",
// SQL Serverとの接続文字列
connectionStringSetting: "SqlConnectionString")]
IEnumerable<TestTable> testList
)
{
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "application/json; charset=utf-8");
await response.WriteStringAsync(testList.FirstOrDefault()?.Id + " " + testList.FirstOrDefault()?.Name);
return response;
}
}
public class TestTable
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
}

Azure Functionの作成
-
Azure Fuctionを作成する(作成時のオプションは今回関係ないので省略)
-
システムIDを割り当てる

Azure SQL Serverの作成
-
Azure SQL Serverを作成する
- SQLデータベースサーバーの認証方法はMicrosoft Entra 専用認証を使用するを設定
- ファイアウォールにて自身のクライアントIPアドレスを追加
- そのほかのオプションは特に指定なし
-
Azure SQL Serverと接続してAzure Functionのユーザーを追加
ユーザー名はfunctionの名前
CREATE USER [functionの名前] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [functionの名前];
ALTER ROLE db_datawriter ADD MEMBER [functionの名前];
- Azure SQL ServerのネットワークにてAzure Functionの接続を許可するため、
FunctionのGIPを追加するか、Azureサービスおよびリソースにこのサーバーへのアクセスを許可するにチェック
(FunctionのプランがAzure App PlanかPremiumの場合はVNET統合 + サービスエンド or プライベートエンドポイントなどセキュアにできる)

接続文字列をAzure Functionの環境変数に追加
接続文字列にSQL Serverの文字列を追加
keyはFunctionのコードに書いたSqlConnectionString、
valueはSQLサーバーの接続文字列(ADO.NET (パスワードレス認証Microsoft Entra))

テーブルとデータの作成
SQLデータベースにbindするテーブルとサンプルデータ作成
CREATE TABLE TEST(
id int primary key not null,
name NVARCHAR(20)
)
INSERT INTO TEST VALUES(1, 'TEST1')
INSERT INTO TEST VALUES(2, 'TEST2')

Azure Functionのデプロイとテスト
- Azure Functionをデプロイ(デプロイ方法省略)
- デプロイしたエンドポイントからテスト/実行より結果を確認
このスクラップは2025/01/12にクローズされました