Closed7

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

Kusuda DaisukeKusuda Daisuke

Azure Functionプロジェクト作成(ローカル)

.NETからAzure Functionのプロジェクト作成

func init <プロジェクト名> --worker-runtime dotnet-isolated --target-framework net8.0

SqlServerとバインディングするライブラリのインストール

dotnet add Microsoft.Azure.Functions.Worker.Extensions.Sql
Kusuda DaisukeKusuda Daisuke

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;
}
Kusuda DaisukeKusuda Daisuke

Azure Functionの作成

  1. Azure Fuctionを作成する(作成時のオプションは今回関係ないので省略)

  2. システムIDを割り当てる

Kusuda DaisukeKusuda Daisuke

Azure SQL Serverの作成

  1. Azure SQL Serverを作成する

    • SQLデータベースサーバーの認証方法はMicrosoft Entra 専用認証を使用するを設定
    • ファイアウォールにて自身のクライアントIPアドレスを追加
    • そのほかのオプションは特に指定なし
  2. 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の名前];
  1. Azure SQL ServerのネットワークにてAzure Functionの接続を許可するため、
    FunctionのGIPを追加するか、Azureサービスおよびリソースにこのサーバーへのアクセスを許可するにチェック
    (FunctionのプランがAzure App PlanかPremiumの場合はVNET統合 + サービスエンド or プライベートエンドポイントなどセキュアにできる)
Kusuda DaisukeKusuda Daisuke

接続文字列をAzure Functionの環境変数に追加

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

Kusuda DaisukeKusuda Daisuke

テーブルとデータの作成

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')
Kusuda DaisukeKusuda Daisuke

Azure Functionのデプロイとテスト

  1. Azure Functionをデプロイ(デプロイ方法省略)
  2. デプロイしたエンドポイントからテスト/実行より結果を確認

このスクラップは2025/01/12にクローズされました