C# でスナップショットからマネージドディスクを作成・削除

C# で Azure.ResourceManager.Compute を使って、スナップショットからマネージドディスクを作成できた。あと列挙・更新・削除も。

www.nuget.org

以下、.NET 6 でのサンプル。

using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Compute;
using Azure.ResourceManager.Compute.Models;
using Azure.ResourceManager.Resources;

const string ClientId = "クライアントID";
const string ClientSecret = "クライアントシークレット";
const string TenantId = "テナントID";
const string SubscriptionId = "サブスクリプションID";
const string ResourceGroupName = "リソースグループ名";
const string SnapshotName = "スナップショット名";
const string DiskName = "マネージドディスク名";

var credential = new ClientSecretCredential(
    tenantId: TenantId,
    clientId: ClientId,
    clientSecret: ClientSecret);
var client = new ArmClient(credential);

ResourceGroupResource resourceGroup = await client.GetSubscriptionResource(
    SubscriptionResource.CreateResourceIdentifier(SubscriptionId))
    .GetResourceGroupAsync(ResourceGroupName);

var diskCollection = resourceGroup.GetManagedDisks();

// スナップショットからマネージドディスクを作成
var createOperation = await diskCollection.CreateOrUpdateAsync(
    waitUntil: WaitUntil.Completed,
    diskName: DiskName,
    data: new ManagedDiskData(AzureLocation.JapanEast)
    {
        CreationData = new DiskCreationData(DiskCreateOption.Copy)
        {
            SourceResourceId = SnapshotResource.CreateResourceIdentifier(
                subscriptionId: SubscriptionId,
                resourceGroupName: ResourceGroupName,
                snapshotName: SnapshotName),
        },
    });
ManagedDiskResource createdDisk = await createOperation.WaitForCompletionAsync();

// マネージドディスクを列挙
var disks = diskCollection.GetAllAsync();
await foreach (var disk in disks)
{
    Console.WriteLine(disk.Data.Name);
}

// マネージドディスクを更新
var updateOperation = await createdDisk.UpdateAsync(
    waitUntil: WaitUntil.Completed,
    patch: new ManagedDiskPatch
    {
        Tags =
        {
            ["foo"] = "bar",
        },
    });
ManagedDiskResource updatedDisk = await updateOperation.WaitForCompletionAsync();

// マネージドディスクを削除
await updatedDisk.DeleteAsync(WaitUntil.Completed);