C# で Azure SQL Server のファイアウォール規則を操作する

Azure.ResourceManager.Sql を使って、Azure SQL Serverファイアウォール規則を操作できた。

www.nuget.org

using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Sql;

const string SubscriptionId = "<サブスクリプション ID>";
const string ResourceGroupName = "<リソースグループ名>";
const string ServerName = "<サーバー名>";
const string TestIPAddress = "<テスト ID アドレス>";

var armClient = new ArmClient(new DefaultAzureCredential());

var id = SqlServerResource.CreateResourceIdentifier(
    subscriptionId: SubscriptionId,
    resourceGroupName: ResourceGroupName,
    serverName: ServerName);
var sqlServerResourceResponse = await armClient.GetSqlServerResource(id).GetAsync();
var sqlServerResource = sqlServerResourceResponse.Value;
Console.WriteLine($"PublicNetworkAccess: {sqlServerResource.Data.PublicNetworkAccess}");

// ファイアウォールルールの列挙
var sqlFirewallRules = sqlServerResource.GetSqlFirewallRules();
var sqlFirewallRuleResources = sqlFirewallRules.GetAllAsync();
await foreach (var rule in sqlFirewallRuleResources)
{
    Console.WriteLine(rule.Data.Name);
    Console.WriteLine(rule.Data.StartIPAddress);
    Console.WriteLine(rule.Data.EndIPAddress);
    Console.WriteLine();
}

// ファイアウォールルールの追加
var createOperation = await sqlFirewallRules.CreateOrUpdateAsync(
    waitUntil: WaitUntil.Completed,
    firewallRuleName: "Test",
    data: new SqlFirewallRuleData
    {
        StartIPAddress = TestIPAddress,
        EndIPAddress = TestIPAddress,
    });
Console.WriteLine(createOperation.Value.Data.Name);
Console.WriteLine(createOperation.Value.Data.StartIPAddress);
Console.WriteLine(createOperation.Value.Data.EndIPAddress);
Console.WriteLine();

// ファイアウォールルールの更新
var updateData = createOperation.Value.Data;
updateData.StartIPAddress = "127.0.0.1";
updateData.EndIPAddress = "127.0.0.1";
var updateOperation = await sqlFirewallRules.CreateOrUpdateAsync(
    waitUntil: WaitUntil.Completed,
    firewallRuleName: updateData.Name,
    data: updateData);
Console.WriteLine(updateOperation.Value.Data.Name);
Console.WriteLine(updateOperation.Value.Data.StartIPAddress);
Console.WriteLine(updateOperation.Value.Data.EndIPAddress);
Console.WriteLine();

// ファイアウォールルールの削除
await armClient.GetSqlFirewallRuleResource(updateData.Id)
    .DeleteAsync(WaitUntil.Completed);
Console.WriteLine();

Console.WriteLine("Enter で終了");
Console.ReadLine();