mcpField
A
azure-resource-manager-sql-dotnet

azure-resource-manager-sql-dotnet

github.com/sickn33クラウド・DevOps48.7k57 回インストール今日更新
リポジトリ

azure-resource-manager-sql-dotnet について

Azure Resource Manager を通じて Azure SQL リソースを作成、管理する .NET 管理プレーン SDK です。サーバー、データベース、エラスティックプール、ファイアウォール規則の管理向けで、SQL の実行には別のデータプレーン SDK を使います。

主な機能

  1. 01SQL サーバーとデータベースの作成
  2. 02エラスティックプールの管理
  3. 03ファイアウォール規則の設定
  4. 04SQL リソースの一覧表示と確認

活用シーン

  1. 01Azure SQL サーバーを作成
  2. 02データベースまたはエラスティックプールを作成
  3. 03SQL ファイアウォールのアクセスを設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-resource-manager-sql-dotnet

インストール後、Claude Code で/azure-resource-manager-sql-dotnetを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

UPSTREAM-LICENSE.txt
UPSTREAM-NOTICE.md
references/
database-operations.md
elastic-pools.md
server-management.md

詳細

同梱されている上流プロジェクトのサポートファイル

サポートファイルはスキル相対パスに含まれています。固定されたソース、ライセンス、ハッシュ、インポート時の変更については、UPSTREAM-NOTICE.md を参照してください。

Azure.ResourceManager.Sql (.NET)

Azure Resource Manager を介して Azure SQL リソースをプロビジョニングおよび管理するための管理プレーン SDK です。

⚠️ 管理プレーンとデータプレーンの違い

  • この SDK(Azure.ResourceManager.Sql):サーバーやデータベース、エラスティックプールの作成、ファイアウォール規則の設定、フェールオーバーグループの管理
  • データプレーン SDK(Microsoft.Data.SqlClient):クエリやストアドプロシージャの実行、接続の管理

インストール

dotnet add package Azure.ResourceManager.Sql
dotnet add package Azure.Identity

**バージョンの境界:**以下は説明用の断片であり、コンパイル可能なプロジェクトではありません。適用する前に、使用する SDK のバージョンを固定し、その API リファレンスとリージョンで利用可能な SKU を確認してください。ここでは現行バージョンであることを示していません。

環境変数

AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# For service principal auth (optional)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>

認証

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

// Always use DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);

// Get subscription
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));

リソース階層

ArmClient
└── SubscriptionResource
    └── ResourceGroupResource
        └── SqlServerResource
            ├── SqlDatabaseResource
            ├── ElasticPoolResource
            │   └── ElasticPoolDatabaseResource
            ├── SqlFirewallRuleResource
            ├── FailoverGroupResource
            ├── ServerBlobAuditingPolicyResource
            ├── EncryptionProtectorResource
            └── VirtualNetworkRuleResource

基本的なワークフロー

書き込みを行う前に、サブスクリプション、テナント、リソースグループ、正確な対象、SKU の予算、本番環境の変更範囲を確認してください。現在の状態を読み取り、固定した SDK に適した更新/パッチのセマンティクスを使用してください。設定がまばらな CreateOrUpdate ペイロードを使っても、省略された設定が保持されるとは限りません。管理認証があっても、SQL データプレーンへのアクセスが許可されるわけではありません。パスワード、接続文字列、ストレージキーをログに記録しないでください。プライベートネットワークを使用するには、エンドポイント、DNS、ルーティングの設定が必要です。パブリックアクセスを無効にするだけでは、接続が確立されるとは限りません。

1. SQL サーバーの作成
using System;
using Azure.ResourceManager.Sql;
using Azure.ResourceManager.Sql.Models;

// Get resource group
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Define server
var serverData = new SqlServerData(AzureLocation.EastUS)
{
    AdministratorLogin = "sqladmin",
    AdministratorLoginPassword = Environment.GetEnvironmentVariable("SQL_ADMIN_PASSWORD") ?? throw new InvalidOperationException("SQL_ADMIN_PASSWORD is required"),
    Version = "12.0",
    MinimalTlsVersion = SqlMinimalTlsVersion.Tls1_2,
    PublicNetworkAccess = ServerNetworkAccessFlag.Disabled // configure approved private endpoint and DNS separately
};

// Create server (long-running operation)
var serverCollection = resourceGroup.Value.GetSqlServers();
var operation = await serverCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-sql-server",
    serverData);

SqlServerResource server = operation.Value;
2. SQL データベースの作成
var databaseData = new SqlDatabaseData(AzureLocation.EastUS)
{
    Sku = new SqlSku("S0") { Tier = "Standard" },
    MaxSizeBytes = 2L * 1024 * 1024 * 1024, // 2 GB
    Collation = "SQL_Latin1_General_CP1_CI_AS",
    RequestedBackupStorageRedundancy = SqlBackupStorageRedundancy.Local
};

var databaseCollection = server.GetSqlDatabases();
var dbOperation = await databaseCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-database",
    databaseData);

SqlDatabaseResource database = dbOperation.Value;
3. エラスティックプールの作成
var poolData = new ElasticPoolData(AzureLocation.EastUS)
{
    Sku = new SqlSku("StandardPool")
    {
        Tier = "Standard",
        Capacity = 100 // 100 eDTUs
    },
    PerDatabaseSettings = new ElasticPoolPerDatabaseSettings
    {
        MinCapacity = 0,
        MaxCapacity = 100
    }
};

var poolCollection = server.GetElasticPools();
var poolOperation = await poolCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-elastic-pool",
    poolData);

ElasticPoolResource pool = poolOperation.Value;
4. エラスティックプールへのデータベースの追加
var databaseData = new SqlDatabaseData(AzureLocation.EastUS)
{
    ElasticPoolId = pool.Id
};

await databaseCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "pooled-database",
    databaseData);
5. ファイアウォール規則の設定
// OPTIONAL broad exception: 0.0.0.0 permits connections from Azure services
// outside this subscription too; it is not a tenant-only firewall rule. Do not
// apply by default. With public access disabled these rules do not enable it.
// Allow Azure services
var azureServicesRule = new SqlFirewallRuleData
{
    StartIPAddress = "0.0.0.0",
    EndIPAddress = "0.0.0.0"
};

var firewallCollection = server.GetSqlFirewallRules();
await firewallCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "AllowAzureServices",
    azureServicesRule);

// Allow specific IP range
var clientRule = new SqlFirewallRuleData
{
    StartIPAddress = "203.0.113.0",
    EndIPAddress = "203.0.113.255"
};

await firewallCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "AllowClientIPs",
    clientRule);
6. リソースの一覧表示
// List all servers in subscription
await foreach (var srv in subscription.GetSqlServersAsync())
{
    Console.WriteLine($"Server: {srv.Data.Name} in {srv.Data.Location}");
}

// List databases in a server
await foreach (var db in server.GetSqlDatabases())
{
    Console.WriteLine($"Database: {db.Data.Name}, SKU: {db.Data.Sku?.Name}");
}

// List elastic pools
await foreach (var ep in server.GetElasticPools())
{
    Console.WriteLine($"Pool: {ep.Data.Name}, DTU: {ep.Data.Sku?.Capacity}");
}
7. 接続文字列の取得
// Use returned FQDN; sovereign cloud suffixes can differ.
var serverFqdn = server.Data.FullyQualifiedDomainName;
var connectionString = $"Server=tcp:{serverFqdn},1433;" +
    $"Initial Catalog={database.Data.Name};" +
    "Persist Security Info=False;" +
    $"User ID={server.Data.AdministratorLogin};" +
    "Password=<your-password>;" +
    "MultipleActiveResultSets=False;" +
    "Encrypt=True;" +
    "TrustServerCertificate=False;" +
    "Connection Timeout=30;";

主要な型のリファレンス

型用途
ArmClientすべての ARM 操作のエントリーポイント
SqlServerResourceAzure SQL サーバーを表します
SqlServerCollectionサーバーの CRUD 操作用コレクション
SqlDatabaseResourceSQL データベースを表します
SqlDatabaseCollectionデータベースの CRUD 操作用コレクション
ElasticPoolResourceエラスティックプールを表します
ElasticPoolCollectionエラスティックプールの CRUD 操作用コレクション
SqlFirewallRuleResourceファイアウォール規則を表します
SqlFirewallRuleCollectionファイアウォール規則の CRUD 操作用コレクション
SqlServerDataサーバーの作成/更新ペイロード
SqlDatabaseDataデータベースの作成/更新ペイロード
ElasticPoolDataエラスティックプールの作成/更新ペイロード
SqlFirewallRuleDataファイアウォール規則の作成/更新ペイロード
SqlSkuSKU の構成(ティア、容量)

一般的な SKU

データベース SKU
SKU 名ティア説明
BasicBasic5 DTU、最大 2 GB
S0-S12Standard10~3000 DTU
P1-P15Premium125~4000 DTU
GP_Gen5_2GeneralPurposevCore ベース、2 vCore
BC_Gen5_2BusinessCriticalvCore ベース、2 vCore
HS_Gen5_2HyperscalevCore ベース、2 vCore
エラスティックプール SKU
SKU 名ティア説明
BasicPoolBasic50~1600 eDTU
StandardPoolStandard50~3000 eDTU
PremiumPoolPremium125~4000 eDTU
GP_Gen5_2GeneralPurposevCore ベース
BC_Gen5_2BusinessCriticalvCore ベース

ベストプラクティス

  1. 完了を待つ必要がある操作には WaitUntil.Completed を使用します
  2. 手動でポーリングする場合や操作を並列実行する場合は WaitUntil.Started を使用します
  3. 常に DefaultAzureCredential を使用します。本番環境でパスワードをハードコードしないでください
  4. ARM API エラーに対して RequestFailedException を処理します
  5. 冪等な操作には CreateOrUpdateAsync を使用します
  6. Get* メソッド(例:server.GetSqlDatabases())を使って階層をたどります
  7. 複数のデータベースを管理する場合は、コスト最適化のためにエラスティックプールを使用します
  8. 接続を試みる前にファイアウォール規則を設定します

エラー処理

using Azure;

try
{
    var operation = await serverCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, serverName, serverData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine($"Conflict: {ex.ErrorCode}; inspect the resource and operation state");
    throw; // 409 does not necessarily mean an existing matching server
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
    Console.WriteLine($"Invalid request: {ex.Message}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

参照ファイル

ファイル読むタイミング
references/server-management.mdサーバーの CRUD、管理者資格情報、Azure AD 認証、ネットワーク
references/database-operations.mdデータベースの CRUD、スケーリング、バックアップ、復元、コピー
references/elastic-pools.mdプールの管理、データベースの追加・削除、スケーリング

関連 SDK

SDK用途インストール
Microsoft.Data.SqlClientデータプレーン(クエリ、ストアドプロシージャの実行)dotnet add package Microsoft.Data.SqlClient
Azure.ResourceManager.Sql管理プレーン(この SDK)dotnet add package Azure.ResourceManager.Sql
Microsoft.EntityFrameworkCore.SqlServerSQL Server 用 ORMdotnet add package Microsoft.EntityFrameworkCore.SqlServer

使用するタイミング

このスキルは、概要に記載されているワークフローまたはアクションを実行する場合に適用できます。

制限事項

  • このスキルは、タスクが上記の範囲に明確に該当する場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全性の境界、または成功基準が不足している場合は、作業を中断して確認してください。

コメント