C# で Microsoft Azure のマネージドディスクのスナップショットを CRUD する

C# で Azure.ResourceManager.Compute を使えば、マネージドディスクからスナップショットを作成・取得・更新・削除できた。

www.nuget.org

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 DiskName = "マネージドディスク名";
const string SnapshotName = "スナップショット名 ";

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 snapshotCollection = resourceGroup.GetSnapshots();

// スナップショットを作成
var createOperation = await snapshotCollection.CreateOrUpdateAsync(
    waitUntil: WaitUntil.Completed,
    snapshotName: SnapshotName,
    data: new SnapshotData(AzureLocation.JapanEast)
    {
        CreationData = new DiskCreationData(DiskCreateOption.Copy)
        {
            SourceResourceId = ManagedDiskResource.CreateResourceIdentifier(
                subscriptionId: SubscriptionId,
                resourceGroupName: ResourceGroupName,
                diskName: DiskName),
        },
    });
SnapshotResource createdSnapshot = await createOperation.WaitForCompletionAsync();

// スナップショットを列挙
var snapshots = snapshotCollection.GetAllAsync();
await foreach (var snapshot in snapshots)
{
    Console.WriteLine(snapshot.Data.Name);
}

// スナップショットを更新
var updateOperation = await createdSnapshot.UpdateAsync(
    waitUntil: WaitUntil.Completed,
    patch: new SnapshotPatch
    {
        Tags =
        {
            ["foo"] = "bar",
        },
    });
SnapshotResource updatedSnapshot = await updateOperation.WaitForCompletionAsync();

// スナップショットを削除
await updatedSnapshot.DeleteAsync(WaitUntil.Completed);

SnapshotData や SnapshotPatch にセットする値は、REST API のドキュメントが参考になった。

docs.microsoft.com

.NET の例も追加して欲しいところだ。