次の方法で共有


VM にアタッチされているパブリック IP アドレスを Basic から Standard にアップグレードする

重要

Basic SKU パブリック IP は 2025 年 9 月 30 日に廃止されます。 詳細については、公式告知を参照してください。 現在 Basic SKU パブリック IP を使用している場合は、廃止日より前に Standard SKU パブリック IP にアップグレードしてください。 この記事では、アップグレード プロセスを紹介します。

Basic SKU パブリック IP の廃止と Standard SKU パブリック IP の利点の詳細については、こちらを参照してください。

アップグレードの概要

このスクリプトは、VM にアタッチされているすべてのパブリック IP アドレスを Basic から Standard SKU にアップグレードします。 アップグレードを実行するため、パブリック IP アドレスの割り当て方法は、VM から関連付けを解除する前に静的に設定されます。 関連付けが解除されると、パブリック IP SKU が Standard にアップグレードされ、IP が VM に再度関連付けられます。

パブリック IP の割り当ては、VM からデタッチする前に "静的" に設定してあるため、スクリプトが失敗した場合でも、アップグレード処理中に IP アドレスが変更されることはありません。 モジュールでは、パブリック IP を VM からデタッチする前に、パブリック IP の割り当て方法が "静的" であることが再確認されます。

アップグレード アクティビティのすべてのログは、モジュールが実行された場所と同じ場所に作成された PublicIPUpgrade.log という名前のファイルに記録されます (既定の場合)。

制約およびサポートされていないシナリオ

  • Load Balancer に関連付けられた NIC を持つ VM: VM に関連付けられている Load Balancer とパブリック IP SKU が一致する必要があるため、VM の NIC がバックエンド プールまたは NAT プール メンバーシップを介してLoad Balancer に関連付けられている場合、VM に関連付けられているインスタンス レベルのパブリック IP アドレスをアップグレードすることはできません。 「Basic Load Balancer を Standard SKU にアップグレードする」 スクリプトを使用して、Load Balancer とパブリック IP の両方を同時にアップグレードします。

  • ネットワーク セキュリティ グループのない VM: IP をアップグレードする必要がある VM には、パブリック IP を持つ各 IP 構成のサブネット、または NIC と直接関連付けられたネットワーク セキュリティ グループ (NSG) が必要です。 これは、Standard SKU パブリック IP は "既定でセキュリティ保護されている" ため、パブリック IP へのトラフィックが VM に到達するには、NSG で明示的に許可されなければならないことを意味します。 Basic SKU のパブリック IP では、既定ですべてのトラフィックが許可されます。 NSG のないパブリック IP SKU をアップグレードすると、Basic SKU では許可されていたパブリック IP へのインバウンド インターネット トラフィックが移行後にブロックされることになります。 パブリック IP の SKU を参照してください。

  • パブリック IP が構成された Virtual Machine Scale Sets: インスタンスごとにパブリック IP が構成された仮想マシン スケール セット (均一モデル) がある場合、これらの構成はパブリック IP リソースではないためアップグレードできないことに注意してください。 代わりに、Basic IP 構成を削除し、SKU プロパティを使用して、こちらに示すように、仮想マシン スケール セット インスタンスごとに Standard IP 構成が必要であることを指定できます。

前提条件

  • 最新バージョンの PowerShell をインストールする
  • 最新の Az PowerShell モジュールがインストールされていることを確認します (インストールされていない場合は最新の Az PowerShell モジュールをインストールします)

スクリプトのダウンロード

PowerShell ギャラリーから移行スクリプトをダウンロードします。

PS C:\> Install-Module -Name AzureVMPublicIPUpgrade -Scope CurrentUser -Repository PSGallery -Force

モジュールを使う

  1. Connect-AzAccount を使用して、必要な Microsoft Entra テナントと Azure サブスクリプションに接続するために使用します

    PS C:\> Connect-AzAccount -Tenant <TenantId> -Subscription <SubscriptionId>
    
  2. アップグレードする Basic パブリック IP がアタッチされている VM を見つけます。 その名前とリソース グループ名をメモします。

  3. モジュールのパラメーターを確認します。

    • VMName [文字列] 必須 - このパラメーターは VM の名前です。
    • ResourceGroupName [文字列] 必須 - このパラメーターは、アップグレードする Basic パブリック IP がアタッチされている VM のリソース グループです。
  4. Upgrade コマンドを実行します。

スクリプトの使用例

1 つの VM をアップグレードする場合は、VM 名とリソース グループ名をパラメーターとして渡します。

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG'

変更を加えずに、1 つの VM のアップグレードを評価するには、-WhatIf パラメーターを追加します。

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG' -WhatIf

ネットワーク セキュリティ グループを持たない VM をスキップして、リソース グループ内のすべての VM をアップグレードする場合は以下のとおりです。

    Get-AzVM -ResourceGroupName 'myRG' | Start-VMPublicIPUpgrade -skipVMMissingNSG

失敗した移行の復旧

ネットワークの停止やクライアント システムの問題などの一時的な問題が原因で移行が失敗した場合は、移行を再実行することで、VM とパブリック IP を目標状態に構成できます。 スクリプトを実行すると、VM が適切に再構成されているかどうかを確認するために使用される、復旧ログ ファイルが出力されます。 スクリプトを実行した場所に作成されるログ ファイル PublicIPUpgrade.log を確認します。

失敗したアップグレードを復旧するには、この例に示すように、-recoverFromFile パラメーターを使用して復旧ログ ファイルのパスをスクリプトに渡し、-VMName および -VMResourceGroup、または -VMResourceID パラメーターを使用して復旧する VM を指定します。

    Start-VMPublicIPUpgrade -RecoverFromFile ./PublicIPUpgrade_Recovery_2020-01-01-00-00.csv -VMName myVM -VMResourceGroup -rg-myrg

一般的な質問

移行にかかる時間と、パブリック IP で VM にアクセスできない時間はどのくらいですか。

VM のパブリック IP のアップグレードにかかる時間は、VM に関連付けられているパブリック IP とネットワーク インターフェイスの数によって異なります。 テストでは、NIC とパブリック IP が 1 つの VM の場合、アップグレードにかかる時間は 1 から 2 分です。 VM 上の NIC の数が 1 つ増えるごとに 1 分、パブリック IP が増えるごとに数秒ずつ加算されます。

Basic SKU のパブリック IP にロールバックできますか。

パブリック IP アドレスを Standard から Basic にダウングレードすることはできません。

実行する前に移行をテストすることはできますか。

アクションを完了せずにパブリック IP のアップグレードを評価する方法はありません。 しかし、このスクリプトに含まれている -whatif パラメーターを使用すると、VM でアップグレードがサポートされているかどうかをチェックし、アクションを実行せずに各ステップを辿ることができます。

スクリプトは Zonal Basic SKU パブリック IP をサポートしていますか。

はい。ゾーンベースの Basic SKU パブリック IP をゾーンベースの Standard SKU パブリック IP にアップグレードするプロセスは同じであり、スクリプトで機能します。

Resource Graph を使用して、アップグレードが必要なパブリック IP を持つ VM を一覧表示する

Basic SKU パブリック IP アドレスを持つ仮想マシンを一覧表示するクエリ

このクエリは、Basic SKU パブリック IP アドレスがアタッチされた仮想マシン ID の一覧を返します。

Resources
| where type =~ 'microsoft.compute/virtualmachines'
| project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces
| join (
  Resources |
  where type =~ 'microsoft.network/networkinterfaces' |
  project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations)
  on $left.vmId == $right.nicVMId
| join (
  Resources
  | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id)
  | where sku.name == 'Basic' // exclude to find all VMs with Public IPs
  | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0])))
  on $left.allVMNicID == $right.pipAssociatedNicId
| project vmId, pipId, pipSku
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' | project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces | join (Resources | where type =~ 'microsoft.network/networkinterfaces' | project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations) on \$left.vmId == \$right.nicVMId | join ( Resources | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id) | where sku.name == 'Basic' | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0]))) on \$left.allVMNicID == \$right.pipAssociatedNicId | project vmId, pipId, pipSku"

次のステップ