Azure.ResourceManager.Compute を使って、Azure 仮想マシンのデータディスクもアタッチやデタッチができる。
OSディスクのときと違って、データディスクは ID の変更ができないので、データディスクのアタッチとでタッチを行うことで、データディスクを入れ替えた状態にしてみた。
using Azure; using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.Compute; using Azure.ResourceManager.Compute.Models; const string ClientId = "クライアントID"; const string ClientSecret = "クライアントシークレット"; const string TenantId = "テナントID"; const string SubscriptionId = "サブスクリプションID"; const string ResourceGroupName = "リソースグループ名"; const string VmName = "仮想マシン名"; const string DiskName = "マネージドディスク名"; var credential = new ClientSecretCredential( tenantId: TenantId, clientId: ClientId, clientSecret: ClientSecret); var client = new ArmClient(credential); var vmId = VirtualMachineResource.CreateResourceIdentifier( subscriptionId: SubscriptionId, resourceGroupName: ResourceGroupName, vmName: VmName); var vm = client.GetVirtualMachineResource(vmId); vm = await vm.GetAsync(); // 仮想マシンを停止 await vm.DeallocateAsync(WaitUntil.Completed); // データディスクをデタッチ var lun = vm.Data.StorageProfile.DataDisks.Select(x => x.Lun).FirstOrDefault(); var detachPatch = new VirtualMachinePatch { StorageProfile = vm.Data.StorageProfile, }; detachPatch.StorageProfile.DataDisks.Clear(); var detachOperation = await vm.UpdateAsync(WaitUntil.Completed, detachPatch); vm = await detachOperation.WaitForCompletionAsync(); // データディスクをアタッチ var diskId = ManagedDiskResource.CreateResourceIdentifier( subscriptionId: SubscriptionId, resourceGroupName: ResourceGroupName, diskName: DiskName); var attachPatch = new VirtualMachinePatch { StorageProfile = vm.Data.StorageProfile, }; attachPatch.StorageProfile.DataDisks.Add(new VirtualMachineDataDisk(lun, DiskCreateOptionType.Attach) { Caching = CachingType.ReadWrite, ManagedDisk = new VirtualMachineManagedDisk { Id = diskId, }, }); var attachOperation = await vm.UpdateAsync(WaitUntil.Completed, attachPatch); vm = await attachOperation.WaitForCompletionAsync(); // 仮想マシンを開始 await vm.PowerOnAsync(WaitUntil.Completed);