新しいリソース グループまたはサブスクリプションへのリソースの移動

このトピックでは、リソースを新しいサブスクリプションまたは同じサブスクリプション内の新しいリソース グループに移動する方法について説明します。 リソースの移動には、ポータル、PowerShell、Azure CLI、または REST API を使用できます。 このトピックの移動操作は、Azure サポートの支援を受けなくても利用できます。

リソースを移動する場合は、その操作の間、ソース グループとターゲット グループの両方がロックされます。 これらのリソース グループに対する書き込み操作および削除操作は、移動が完了するまでブロックされます。 このロックはリソース グループでリソースを追加、更新、削除できなくなることを意味しますが、リソースが停止されるわけではありません。 たとえば、SQL Server とそのデータベースを新しいリソース グループに移動する場合、そのデータベースを使用するアプリケーションにダウンタイムは発生しません。 これまでどおり、データベースの読み取りと書き込みを行うことができます。

リソースの場所を変更することはできません。 リソースを移動しても、新しいリソース グループに移動されるだけです。 新しいリソース グループは別の場所に存在する場合もありますが、リソース自体の場所は変更されません。

注意

この記事では、既存の Azure アカウント プラン内のリソースを移動する方法について説明します。 実際に Azure アカウント プランを変更 (従量課金制から前払いにアップグレードするなど) しながら既存のリソースの処理を継続する場合は、 別の Azure サブスクリプション プランへの切り替えに関するページをご覧ください。

リソースの移動前のチェック リスト

リソースを移動する前に実行すべき重要な手順がいくつかあります。 これらの条件を確認することにより、エラーの発生を回避できます。

  1. 移動元と移動先のサブスクリプションが同じ Azure Active Directory テナント内に存在している必要があります。 両方のサブスクリプションに同じテナント ID があることを確認するには、Azure PowerShell または Azure CLI を使用します。

    Azure PowerShell では、次を使用します。

    (Get-AzureRmSubscription -SubscriptionName "Example Subscription").TenantId
    

    Azure CLI 2.0 では、次を使用します。

    az account show --subscription "Example Subscription" --query tenantId
    

    移動元と移動先のサブスクリプションのテナント ID が同じでない場合は、サブスクリプションのディレクトリの変更を試みることができます。 ただし、このオプションは、(組織アカウントではなく) Microsoft アカウントでログインしているサービス管理者のみが使用できます。 ディレクトリの変更を試みるには、クラシック ポータルにログインし、[設定] を選択して、サブスクリプションを選択します。 [ディレクトリの編集] アイコンを使用できる場合は、そのアイコンを選択して、関連付けられている Azure Active Directory を変更します。

    ディレクトリを編集する

    このアイコンが使用できない場合は、サポートに連絡して、リソースを新しいテナントに移動する必要があります。

  2. サービスでリソースの移動機能を有効にする必要があります。 このトピックで、リソースの移動を有効にするサービスと、リソースの移動を有効にしないサービスを示します。

  3. 移動するリソースのリソース プロバイダーについて、移動先のサブスクリプションに登録する必要があります。 登録しないと、 リソースの種類についてサブスクリプションへの登録が行われていないことを示すエラーが発生します。 この問題は、リソースを新しいサブスクリプションに移動するが、そのサブスクリプションがそのリソースの種類で使用されたことがない場合に発生する可能性があります。 登録ステータスを確認し、リソース プロバイダーを登録する方法については、「 リソース プロバイダーと種類」を参照してください。

サポートに問い合わせる場合

このトピックで説明するセルフサービス操作を使用すれば、ほとんどのリソースを移動できます。 次の場合にセルフサービス操作を使用します。

次の場合はサポートに問い合わせる必要があります。

  • リソースを新しい Azure アカウント (および Azure Active Directory テナント) に移動する。
  • クラシック リソースを移動するときに制限事項に関連する問題が発生した。

移動が可能なサービス

現在、新しいリソース グループへの移動と新しいサブスクリプションへの移動の両方が可能なサービスは、次のとおりです。

  • API Management
  • App Service アプリ (Web Apps) - 「 App Service の制限事項
  • Application Insights
  • Automation
  • Batch
  • Bing Maps
  • CDN
  • Cloud Services - 「 クラシック デプロイメントの制限事項
  • Cognitive Services
  • Content Moderator
  • Data Catalog
  • Data Factory
  • Data Lake Analytics
  • Data Lake Store
  • DNS
  • Azure Cosmos DB
  • Event Hubs
  • HDInsight クラスター - 「HDInsight の制限事項」を参照
  • IoT Hub
  • Key Vault
  • ロード バランサー
  • Logic Apps
  • Machine Learning
  • Media Services
  • Mobile Engagement
  • Notification Hubs
  • Operational Insights
  • Operations Management
  • Power BI
  • Redis Cache
  • Scheduler
  • Search
  • Server Management
  • Service Bus
  • Service Fabric
  • Storage
  • Storage (クラシック) - 「 クラシック デプロイメントの制限事項
  • Stream Analytics - 実行中状態の Stream Analytics ジョブは移動できません。
  • SQL Database サーバー - データベースとサーバーは同じリソース グループ内に存在する必要があります。 SQL Server を移動すると、そのデータベースもすべて移動されます。
  • Traffic Manager
  • Virtual Machines
  • 証明書が Key Vault に格納されている Virtual Machines - 同じサブスクリプション内の新しいリソース グループへの移動は可能ですが、サブスクリプション間の移動は可能ではありません。
  • Virtual Machines (クラシック) - 「 クラシック デプロイメントの制限事項
  • Virtual Machine Scale Sets
  • Virtual Network - 現在、ピアリングされた Virtual Network は、VNet ピアリングを無効にするまで移動することはできません。 無効にすれば、Virtual Network を正常に移動し、VNet ピアリングを有効にできるようになります。 さらに、Virtual Network にリソース ナビゲーション リンクがあるサブネットが含まれる場合、Virtual Network を別のサブスクリプションに移動することはできません。 たとえば、Microsoft.Cache redis リソースが Virtual Network サブネットにデプロイされている場合、そのサブネットにはリソース ナビゲーション リンクがあります。
  • VPN Gateway

移動が不可能なサービス

現在、リソースの移動が不可能なサービスは、次のとおりです。

  • AD Domain Services
  • AD Hybrid Health Service
  • Application Gateway
  • Managed Disks を使用する Virtual Machines の可用性セット
  • BizTalk Services
  • Container Service
  • ExpressRoute
  • DevTest ラボ - 同じサブスクリプション内の新しいリソース グループへの移動が有効になっています。ただし、サブスクリプション間の移動は有効になっていません。
  • Dynamics LCS
  • Managed Disks から作成されたイメージ
  • Managed Disks
  • マネージ アプリケーション
  • Recovery Services コンテナー - Recovery Services コンテナーに関連付けられているコンピューティング リソース、ネットワーク リソース、ストレージ リソースも移動できません。「Recovery Services の制限事項」をご覧ください。
  • セキュリティ
  • Managed Disks から作成されたスナップショット
  • StorSimple デバイス マネージャー
  • Managed Disks を使用する Virtual Machines
  • Virtual Networks (クラシック) - 「 クラシック デプロイメントの制限事項
  • Marketplace のリソースから作成された Virtual Machines は、サブスクリプション間で移動できません。 現在のサブスクリプションでリソースをプロビジョニング解除し、新しいサブスクリプションにデプロイし直す必要があります。

App Service の制限事項

App Service アプリを使用している場合、App Service プランのみを移動することはできません。 App Service アプリを移動するには、次のオプションがあります。

  • App Service プランとそのリソース グループ内の他のすべての App Service リソースを、まだ App Service リソースが含まれていない新しいリソース グループに移動する。 この要件により、App Service プランに関連付けられていない App Service リソースも移動する必要があります。
  • アプリを別のリソース グループに移動し、元のリソース グループにも App Service プランをすべて保持する。

アプリが正常に動作するために、App Service プランがそのアプリと同じリソース グループ内に存在する必要はありません。

たとえば、リソース グループに次のものが含まれているとします。

  • plan-a に関連付けられた web-a
  • plan-b に関連付けられた web-b

オプションは次のとおりです。

  • web-aplan-aweb-bplan-b を移動する
  • web-aweb-b を移動する
  • web-a
  • web-b

これ以外の組み合わせでは、App Service プランの移動時に、残しておくことができないリソースの種類 (すべての種類の App Service リソース) が残されます。

Web アプリがその App Service プランとは異なるリソース グループに存在するが、その両方を新しいリソース グループに移動する場合、移動を 2 段階で行う必要があります。 次に例を示します。

  • web-group に存在する web-a
  • plan-group に存在する plan-a
  • web-aplan-acombined-group に配置しようとしている

この移動を実行するには、次の順序で 2 つの移動操作を個別に実行します。

  1. web-aplan-group に移動します
  2. web-aplan-acombined-group に移動します

App Service 証明書は、新しいリソース グループまたはサブスクリプションに問題なく移動できます。 ただし、お使いのアプリに、外部から購入してアップロードした SSL 証明書が含まれている場合は、Web アプリを移動する前に証明書を削除する必要があります。 たとえば、次の手順を実行できます。

  1. アップロードした証明書を Web アプリから削除します
  2. Web アプリを移動します
  3. Web アプリに証明書をアップロードします

Recovery Services の制限事項

Azure Site Recovery では、障害復旧の設定に使用されるストレージ リソース、ネットワーク リソース、またはコンピューティング リソースは移動できません。

たとえば、ストレージ アカウント (Storage1) へのオンプレミス コンピューターのレプリケーションが設定済みで、Azure へのフェールオーバー後、保護されたコンピューターを、Azure 仮想ネットワーク (Network1) に接続された仮想マシン (VM1) として使用する必要があるとします。 こうした Azure リソース、つまり Storage1、VM1、および Network1 はどれも、同じサブスクリプション内のリソース グループ間、またはサブスクリプション間で移動することはできません。

HDInsight の制限事項

HDInsight クラスターは、新しいサブスクリプションまたはリソース グループに移動できます。 ただし、HDInsight クラスターにリンクされているネットワーク リソース (仮想ネットワーク、NIC、ロード バランサーなど) をサブスクリプション間で移動することはできません。 また、クラスターの仮想マシンに接続されている NIC を新しいリソース グループに移動することはできません。

HDInsight クラスターを新しいサブスクリプションに移動するときは、まず、他のリソース (ストレージ アカウントなど) を移動します。 その後、HDInsight クラスターを単独で移動します。

クラシック デプロイメントの制限事項

クラシック モデルを使用してデプロイされるリソースを移動するためのオプションは、リソースをサブスクリプション内で移動するか、新しいサブスクリプションに移動するかによって異なります。

同じサブスクリプション

リソースを同じサブスクリプション内のリソース グループ間で移動する場合は、次の制限が適用されます。

  • Virtual Networks (クラシック) を移動することはできません。
  • Virtual Machines (クラシック) はクラウド サービスで移動する必要があります。
  • クラウド サービスは、移動にその仮想マシンがすべて含まれている場合にのみ移動できます。
  • 一度に移動できるクラウド サービスは 1 つだけです。
  • 一度に移動できるストレージ アカウント (クラシック) は 1 つだけです。
  • ストレージ アカウント (クラシック) は、仮想マシンまたはクラウド サービスと同じ操作では移動できません。

クラシック リソースを同じサブスクリプション内の新しリソース グループに移動する場合は、ポータルAzure PowerShellAzure CLI、または REST API の標準の移動操作を使用します。 Resource Manager のリソースの移動に使用した方法と同じ操作を使用します。

新しいサブスクリプション

リソースを新しいサブスクリプションに移動する場合は、次の制限が適用されます。

  • サブスクリプション内のすべてのクラシック リソースは、同じ操作で移動する必要があります。
  • 対象のサブスクリプションには、他のクラシック リソースは含めないでください。
  • クラシック リソースの場合、移動は、別の REST API を通じてのみ要求できます。 標準の Resource Manager の移動コマンドは、クラシック リソースを新しいサブスクリプションに移動する場合は機能しません。

クラシック リソースを新しいサブスクリプションに移動する場合は、クラシック リソース固有の REST 操作を使用してください。 REST を使用するには、次の手順を実行します。

  1. 移動元のサブスクリプションがサブスクリプション間の移動に参加できることを確認します。 次の操作を行います。

    POST https://management.azure.com/subscriptions/{sourceSubscriptionId}/providers/Microsoft.ClassicCompute/validateSubscriptionMoveAvailability?api-version=2016-04-01
    

    要求本文は次のようになります。

    {
     "role": "source"
    }
    

    検証操作の応答は次のような形式になります。

    {
     "status": "{status}",
     "reasons": [
       "reason1",
       "reason2"
     ]
    }
    
  2. 移動先のサブスクリプションがサブスクリプション間の移動に参加できることを確認します。 次の操作を行います。

    POST https://management.azure.com/subscriptions/{destinationSubscriptionId}/providers/Microsoft.ClassicCompute/validateSubscriptionMoveAvailability?api-version=2016-04-01
    

    要求本文は次のようになります。

    {
     "role": "target"
    }
    

    応答は移動元のサブスクリプションの検証と同じ形式になります。

  3. 両方のサブスクリプションが検証に合格し、すべてのクラシック リソースをあるサブスクリプションから別のサブスクリプションに移動する場合は、次の操作を行います。

    POST https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.ClassicCompute/moveSubscriptionResources?api-version=2016-04-01
    

    要求本文は次のようになります。

    {
     "target": "/subscriptions/{target-subscription-id}"
    }
    

この操作には数分かかる場合があります。

ポータルの使用

リソースを移動するには、そのリソースが含まれるリソース グループを選択し、[移動] を選択します。

リソースの移動

リソースを新しいリソース グループに移動するか新しいサブスクリプションに移動するかを選択します。

移動するリソースを、移動先のリソース グループを選択します。 そのリソースのスクリプトを更新する必要があること確認し、 [OK]を選択します。 前の手順でサブスクリプションの編集アイコンを選択した場合は、移動先のサブスクリプションも選択する必要があります。

移動先の選択

[通知]に、移動操作が実行されていることが表示されます。

移動の状態の表示

完了すると、結果が表示されます。

移動の結果の表示

PowerShell の使用

既存のリソースを別のリソース グループまたはサブスクリプションに移動するには、Move-AzureRmResource コマンドを実行します。

最初の例では、1 つのリソースを新しいリソース グループに移動する方法を示します。

$resource = Get-AzureRmResource -ResourceName ExampleApp -ResourceGroupName OldRG
Move-AzureRmResource -DestinationResourceGroupName NewRG -ResourceId $resource.ResourceId

2 番目の例では、複数のリソースを新しいリソース グループに移動する方法を示します。

$webapp = Get-AzureRmResource -ResourceGroupName OldRG -ResourceName ExampleSite
$plan = Get-AzureRmResource -ResourceGroupName OldRG -ResourceName ExamplePlan
Move-AzureRmResource -DestinationResourceGroupName NewRG -ResourceId $webapp.ResourceId, $plan.ResourceId

新しいサブスクリプションに移動する場合は、DestinationSubscriptionId パラメーターの値を含めます。

指定したリソースの移動を確認するように求められます。

Confirm
Are you sure you want to move these resources to the resource group
'/subscriptions/{guid}/resourceGroups/newRG' the resources:

/subscriptions/{guid}/resourceGroups/destinationgroup/providers/Microsoft.Web/serverFarms/exampleplan
/subscriptions/{guid}/resourceGroups/destinationgroup/providers/Microsoft.Web/sites/examplesite
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

Azure CLI 2.0 の使用

既存のリソースを別のリソース グループまたはサブスクリプションに移動するには、az resource move コマンドを使用します。 移動するリソースのリソース ID を指定します。 リソース ID は次のコマンドを使用して取得できます。

az resource show -g sourceGroup -n storagedemo --resource-type "Microsoft.Storage/storageAccounts" --query id

次の例は、ストレージ アカウントを新しいリソース グループに移動する方法を示しています。 --ids パラメーターには、移動するリソース ID のスペース区切りリストを指定します。

az resource move --destination-group newgroup --ids "/subscriptions/{guid}/resourceGroups/sourceGroup/providers/Microsoft.Storage/storageAccounts/storagedemo"

新しいサブスクリプションに移動するには、--destination-subscription-id パラメーターを指定します。

Azure CLI 1.0 の使用

既存のリソースを別のリソース グループまたはサブスクリプションに移動するには、azure resource move コマンドを使用します。 移動するリソースのリソース ID を指定します。 リソース ID は次のコマンドを使用して取得できます。

azure resource list -g sourceGroup --json

次の形式が返されます。

[
  {
    "id": "/subscriptions/{guid}/resourceGroups/sourceGroup/providers/Microsoft.Storage/storageAccounts/storagedemo",
    "name": "storagedemo",
    "type": "Microsoft.Storage/storageAccounts",
    "location": "southcentralus",
    "tags": {},
    "kind": "Storage",
    "sku": {
      "name": "Standard_RAGRS",
      "tier": "Standard"
    }
  }
]

次の例は、ストレージ アカウントを新しいリソース グループに移動する方法を示しています。 -i パラメーターには、移動するリソース ID のコンマ区切りリストを指定します。

azure resource move -i "/subscriptions/{guid}/resourceGroups/sourceGroup/providers/Microsoft.Storage/storageAccounts/storagedemo" -d "destinationGroup"

指定したリソースの移動を確認するように求められたら、

REST API を使用する

既存のリソースを別のリソース グループまたはサブスクリプションに移動するには、次のコマンドを実行します。

POST https://management.azure.com/subscriptions/{source-subscription-id}/resourcegroups/{source-resource-group-name}/moveResources?api-version={api-version}

要求の本文で、ターゲット リソース グループと、移動するリソースを指定します。 REST による移動操作の詳細については、「 リソースの移動」を参照してください。

次のステップ