Azure Stack Hub サブスクリプション レプリケーターを使用してリソースをレプリケートする

Azure Stack Hub サブスクリプション レプリケーター PowerShell スクリプトを使用して、Azure Stack Hubサブスクリプション間、Azure Stack Hub スタンプ間、またはAzure Stack HubとAzureの間でリソースをコピーできます。 レプリケーター スクリプトは、異なるAzureサブスクリプションとAzure Stack Hub サブスクリプションからAzure Resource Manager リソースを読み取って再構築します。 この記事では、スクリプトのしくみ、スクリプトの使用方法、およびスクリプト操作のリファレンスについて説明します。

この記事で使用するスクリプトは、Azure インテリジェント エッジ パターン GitHub リポジトリにあります。 スクリプトは、 サブスクリプション レプリケーター フォルダーにあります。

サブスクリプション レプリケーターの概要

Azure サブスクリプション レプリケーターはモジュール式です。 このツールでは、リソース レプリケーションを調整するコア プロセッサを使用します。 さらに、このツールは、さまざまな種類のリソースをコピーするためのテンプレートとして機能するカスタマイズ可能なプロセッサをサポートしています。

コア プロセッサは、次の 3 つのスクリプトで構成されます。

  • resource_retriever.ps1

    • 出力ファイルを格納するフォルダーを生成します。

    • コンテキストをソース サブスクリプションに設定します。

    • リソースを取得し、それらを resource_processor.ps1に渡します。

  • resource_processor.ps1

    • resource_retriever.ps1によって渡されたリソースを処理 します 。

    • 使用するカスタマイズされたプロセッサを決定し、リソースを渡します。

  • post_process.ps1

    • Post は、カスタマイズされたプロセッサによって生成された出力を処理して、ターゲット サブスクリプションにデプロイされるように準備します。

    • ターゲット サブスクリプションにリソースをデプロイするデプロイ コードを生成します。

3 つのスクリプトは、柔軟性を高めるために、標準的な方法で情報のフローを制御します。 たとえば、追加のリソースのサポートを追加する場合、コア プロセッサ内のコードを変更する必要はありません。

前述のカスタマイズされたプロセッサは、特定の種類のリソースの処理方法を決定する ps1 ファイルです。 カスタマイズされたプロセッサの名前は、常にリソース内の型データを使用します。 たとえば、 $vm が仮想マシン オブジェクトを保持し、 $vmを実行しているとします。型は Microsoft.Compute/virtualMachinesを生成します。 つまり、仮想マシンのプロセッサは virtualMachines_processor.ps1 という名前になります。 この名前は、コア プロセッサが使用して使用するカスタマイズされたプロセッサを決定するため、リソース メタデータに表示されるとおりである必要があります。

カスタマイズされたプロセッサは、重要な情報を決定し、その情報をリソース メタデータから引き出す方法を指示することによって、リソースのレプリケート方法を決定します。 その後、カスタマイズされたプロセッサは、抽出されたすべてのデータを受け取り、それを使用して、ターゲット サブスクリプションにリソースをデプロイするAzure Resource Manager テンプレートで動作するパラメーター ファイルを生成します。 post_process.ps1 スクリプトは、ポスト処理後にこのパラメーター ファイルを Parameter_Files フォルダーに格納します。

Replicator ファイル構造には、 Standardized_ARM_Templatesという名前のフォルダーがあります。 ソース環境によっては、デプロイでこれらの標準化されたResource Manager テンプレートのいずれかを使用するか、カスタマイズされたResource Manager テンプレートを生成する必要がある場合があります。 この場合、カスタマイズされたプロセッサは、Resource Manager テンプレート テンプレート ジェネレーターを呼び出す必要があります。 前に開始した例では、仮想マシンのResource Manager テンプレート ジェネレーターの名前が virtualMachines_ARM_Template_Generator.ps1されています。 Resource Manager テンプレート ジェネレーターは、リソースのメタデータに含まれる情報に基づいてカスタマイズされたResource Manager テンプレートを作成する役割を担います。 たとえば、仮想マシン リソースに可用性セットのメンバーであることを指定するメタデータがある場合、Resource Manager テンプレート ジェネレーターは、仮想マシンが属する可用性セットの ID を指定するコードを含むResource Manager テンプレートを作成します。 そうすることで、仮想マシンが新しいサブスクリプションにデプロイされると、デプロイ時に可用性セットに自動的に追加されます。 これらのカスタマイズされたResource Manager テンプレートは、Standardized_ARM_Templates フォルダー内にあるCustom_ARM_Templates フォルダーに格納されます。 post_processor.ps1 スクリプトは、デプロイで標準化されたResource Manager テンプレートを使用するか、カスタマイズしたテンプレートを使用するかを判断し、対応するデプロイ コードを生成する役割を担います。

スクリプトpost-process.ps1 は、パラメーター ファイルをクリーンアップし、ユーザーが新しいリソースをデプロイするために使用するスクリプトを作成する役割を担います。 クリーニング フェーズ中、スクリプトはソース サブスクリプション ID、テナント ID、および場所へのすべての参照を対応するターゲット値に置き換えます。 次に、パラメーター ファイルを Parameter_Files フォルダーに出力します。 次に、処理中のリソースがカスタマイズされたResource Manager テンプレートを使用しているかどうかを判断し、対応するデプロイ コードを生成します。このコードでは New-AzResourceGroupDeployment コマンドレットが使用されます。 デプロイ コードは、Deployment_Files フォルダーに格納 DeployResources.ps1という名前のファイルに追加されます。 最後に、スクリプトはリソースが属するリソース グループを決定し、 DeployResourceGroups.ps1 スクリプトを調べて、そのリソース グループをデプロイするデプロイ コードが既に存在するかどうかを確認します。 そうでない場合、スクリプトはそのスクリプトにコードを追加してリソース グループをデプロイします。 その場合、スクリプトは何も実行しません。

動的 API の取得

このツールには動的 API 取得が含まれているため、ソース サブスクリプションで利用可能な最新のリソース プロバイダー API バージョンを使用して、ターゲット サブスクリプションにリソースをデプロイします。

API の取得を示すスクリーンショット。

ただし、ターゲット サブスクリプションには、ソース サブスクリプションが提供するバージョンをサポートしていない古いリソース プロバイダー API バージョンがある場合があります。 この場合、デプロイの実行時にエラーが発生します。 このエラーを解決するには、ターゲット サブスクリプションのリソース プロバイダーをソース サブスクリプションのリソース プロバイダーと一致するように更新します。

並列デプロイ

このツールには parallel という名前のパラメーターが必要です。 このパラメーターは、取得したリソースを並列にデプロイするかどうかを指定するブール値を受け取ります。 値を true に設定すると、 New-AzResourceGroupDeployment の各呼び出しに -asJob フラグが含まれます。 このプロセスでは、リソースの種類に基づいて、リソース デプロイのセット間で並列ジョブが完了するのを待機するコード ブロックが追加されます。 これにより、次の種類のリソースをデプロイする前に、1 つの種類のすべてのリソースが確実にデプロイされます。 並列パラメーター値を false に設定すると、リソースはシリアルでデプロイされます。

リソースの種類を追加する

新しいリソースの種類の追加は簡単です。 カスタマイズされたプロセッサと、Resource Manager テンプレートまたはResource Manager テンプレート ジェネレーターを作成します。 これらの手順を完了したら、$resourceType パラメーターの ValidateSet と resource_retriever.ps1 の $resourceTypes 配列にリソースの種類を追加します。 リソースの種類を $resourceTypes 配列に追加するときは、正しい順序で追加します。 配列の順序によってリソースがデプロイされる順序が決まります。そのため、依存関係に注意してください。 最後に、カスタマイズされたプロセッサがResource Manager テンプレート ジェネレーターを使用する場合は、リソースの種類の名前を post_process.ps1の$customTypes配列に追加します。

サブスクリプション レプリケーター Azure実行する

Azure サブスクリプション レプリケーター (v3) ツールを実行するには、resource_retriever.ps1 を開始し、すべてのパラメーターを指定します。 resourceType パラメーターには、1 つのリソースの種類ではなく All を選択できます。 [すべて] を選択した場合、resource_retriever.ps1 は、デプロイの実行時に依存リソースが最初にデプロイされるように、すべてのリソースを順番に処理します。 たとえば、仮想マシンが適切にデプロイされるように VNet を配置する必要がある場合、仮想マシンの前に VNet がデプロイされます。

スクリプトの実行が完了すると、Deployment_Files、Parameter_Files、Custom_ARM_Templatesの 3 つの新しいフォルダーがあります。

Note

生成されたスクリプトのいずれかを実行する前に、適切な環境を設定し、ターゲット サブスクリプションにサインインします (新しいAzure Stack Hubなど)。 作業ディレクトリを Deployment_Files フォルダーに設定します。

Deployment_Files は、 DeployResourceGroups.ps1 と DeployResources.ps1の 2 つのファイルを保持します。 DeployResourceGroups.ps1を実行すると、リソース グループがデプロイされます。 DeployResources.ps1を実行すると、処理されたすべてのリソースがデプロイされます。 [すべて] または [Microsoft] を使用してツールを実行する場合。リソースの種類として Compute/virtualMachinesDeployResources.ps1、すべての仮想マシンの作成に使用する仮想マシン管理者パスワードの入力を求められます。

例

  1. スクリプトを実行します。

    スクリプトを実行した結果を示すスクリーンショット。

    Note

    PS インスタンスのソース環境とサブスクリプション コンテキストを構成することを忘れないでください。

  2. 新しく作成されたフォルダーを確認します。

    フォルダーを確認する

  3. コンテキストをターゲット サブスクリプションに設定し、フォルダーを Deployment_Filesに変更し、リソース グループをデプロイして ( DeployResourceGroups.ps1 スクリプトを実行)、リソースのデプロイを開始します ( DeployResources.ps1 スクリプトを実行します)。

    デプロイを開始した結果を示すスクリーンショット。

  4. Get-Jobを実行して状態を確認します。 Get-Job |Receive-Job は結果を返します。

クリーンアップ

replicatorV3 フォルダー内では、cleanup_generated_items.ps1 ファイルによって、Deployment_Files、Parameter_Files、およびCustom_ARM_Templatesフォルダーとそのすべての内容が削除されます。

サブスクリプション レプリケーターの操作

現在、Azure サブスクリプション レプリケーター (v3) は、次のリソースの種類をレプリケートできます。

  • Microsoft.Compute/availabilitySets

  • Microsoft.Compute/virtualMachines

  • Microsoft。Network/loadBalancers

  • Microsoft.Network/networkSecurityGroups

  • Microsoft.Network/publicIPAddresses

  • Microsoft.Network/routeTables (英語)

  • Microsoft.Network/virtualNetworks

  • Microsoft.Network/virtualNetworkGateways

  • Microsoft.Storage/storageAccounts

リソースの種類として All を使用してツールを実行すると、レプリケートとデプロイ時に次の一覧の順序に従います。 次の一覧では、SKU、オファー、その他の設定など、すべてのリソースの構成がレプリケートされています。

  • Microsoft.Network/virtualNetworks

    • レプリケート: - すべてのアドレス空間 - すべてのサブネット
  • Microsoft.Network/virtualNetworkGateways

    • レプリケート: - パブリック IP 構成 - サブネット構成 - VPN の種類 - ゲートウェイの種類
  • Microsoft.Network/routeTables (英語)

  • Microsoft.Network/networkSecurityGroups

    • レプリケート: - 受信と送信のすべてのセキュリティ規則
  • Microsoft.Network/publicIPAddresses

  • Microsoft。Network/loadBalancers

    • レプリケート: - プライベート IP アドレス - パブリック IP アドレス構成 - サブネット構成
  • Microsoft.Compute/availabilitySets

    • レプリケート: - 障害ドメインの数 - 更新ドメインの数
  • Microsoft.Storage/storageAccounts

  • Microsoft.Compute/virtualMachines

    • レプリケート:
      - データ ディスク (データなし)
      - 仮想マシンのサイズ
      - オペレーティング システム
      - 診断ストレージ アカウントの構成
      - パブリック IP 構成
      - ネットワーク インターフェイス
      - ネットワーク インターフェイスのプライベート IP アドレス
      - ネットワーク セキュリティ グループの構成
      - 可用性セットの構成

Note

このプロセスでは、OS ディスクとデータ ディスクのマネージド ディスクのみが作成されます。 現時点では、ストレージ アカウントの使用はサポートされていません。

Limitations

このツールは、ソース サブスクリプションからレプリケートするすべてのリソースの種類とオプションがターゲット サブスクリプションでサポートされている限り、あるサブスクリプションから別のサブスクリプションにリソースをレプリケートできます。 レプリケーションを成功させるには、ターゲット サブスクリプションのリソース プロバイダーのバージョンがソース サブスクリプションのバージョンと一致していることを確認します。

レプリケーションを成功させるには、ターゲット サブスクリプションのリソース プロバイダーのバージョンがソース サブスクリプションのバージョンと一致していることを確認します。

商用Azureから商用Azureにリソースをレプリケートするとき、またはAzure Stack Hub内のあるサブスクリプションから同じAzure Stack Hub内の別のサブスクリプションにリソースをレプリケートすると、ストレージ アカウントをレプリケートするときに問題が発生します。 この問題は、ストレージ アカウント名が商用Azure全体で一意であるか、Azure Stack Hubリージョンまたはインスタンス上のすべてのサブスクリプションで一意である必要があるために発生します。 スタックは個別のリージョンまたはインスタンスであるため、異なるAzure Stack Hub インスタンス間でストレージ アカウントを正常にレプリケートできます。

次のステップ

Azure Stack Hub ネットワークの相違点と考慮事項