コンテナー レジストリを別のリージョンに手動で移動する

Azure リージョン間での Azure コンテナー レジストリの移動が必要になる場合があります。 たとえば、別のリージョン内で開発パイプラインを実行するか、または新しいデプロイ ターゲットをホストして、近くのレジストリを提供したい場合があります。

現在、Azure Resource Mover で Azure コンテナー レジストリの移動を自動化することはできませんが、コンテナー レジストリを別のリージョンに手動で移動することは可能です。

  • レジストリ設定を Resource Manager テンプレートにエクスポートする
  • テンプレートを使用して別の Azure リージョン内でレジストリをデプロイする
  • ソース レジストリからターゲット レジストリにレジストリ コンテンツをインポートする

Note

複数の Azure リージョンに同じコンテナー イメージを配布する必要がある場合、Azure Container Registry では geo レプリケーションもサポートされます。 レジストリの geo レプリケーション (Premium サービス レベルが必要) を行うと、1 つのレジストリに含まれる同一のイメージとタグ名を、複数のリージョンで使用できます。

前提条件

Azure CLI

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

考慮事項

  • この記事の手順を使用して、レジストリを、同じサブスクリプション内の別のリージョンに移動します。 レジストリを別の Azure サブスクリプションまたは同じ Active Directory テナントに移動するには、さらに構成が必要な場合があります。
  • Resource Manager テンプレートをエクスポートして使用すると、多くのレジストリ設定を再作成するのに役立ちます。 テンプレートを編集してさらに設定を構成したり、作成後にターゲット レジストリを更新したりできます。
  • 現在、Azure Container Registry によって、異なる Active Directory テナントへのレジストリの移動はサポートされていません。 この制限は、カスタマー マネージド キーで暗号化されたレジストリと暗号化されていないレジストリの両方に適用されます。
  • レジストリを移動できない場合は、この記事で説明されているように、新しいレジストリを作成し、設定を手動で作成し直して、ターゲット レジストリ にレジストリ コンテンツをインポートします。
  • レジストリのリソースを同じサブスクリプション内の新しいリソース グループに移動するか、リソースを新しいサブスクリプションに移動する手順を確認できます。

ソース レジストリからテンプレートをエクスポートする

Azure portal、Azure CLI、Azure PowerShell などの Azure ツールを使用して、Resource Manager テンプレートをエクスポートします。 Azure ポータルを使用するには。

  1. Azure portal で、お使いのソース レジストリに移動します。

  2. メニューの [オートメーション] で、 [テンプレートのエクスポート]>[ダウンロード] を選択します。

    コンテナー レジストリのテンプレートをエクスポートする

新しいリージョン内でターゲット レジストリを再デプロイする

テンプレートを変更する

ダウンロードしたテンプレート JSON ファイル内のレジストリ プロパティを調べ、必要な変更を行います。 少なくとも以下を実行します。

  • レジストリ名の defaultValue をターゲット レジストリの目的の名前に変更する
  • location をターゲット レジストリの目的の Azure リージョンに更新する
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "registries_myregistry_name": {
            "defaultValue": "myregistry",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.ContainerRegistry/registries",
            "apiVersion": "2020-11-01-preview",
            "name": "[parameters('myregistry_name')]",
            "location": "centralus",
        ...
        }
    ]
}

詳細については、「Azure portal からエクスポートしたテンプレートを使用する」およびテンプレート リファレンスに関するページをご覧ください。

重要

カスタマー マネージド キーを使用してターゲット レジストリを暗号化する場合は、必要なマネージド ID、キー コンテナー、キーの設定を使用して、必ずテンプレートを更新してください。 カスタマー マネージド キーは、レジストリをデプロイするときにのみ有効にできます。

詳細については、カスタマー マネージド キーを使用したレジストリの暗号化に関するページをご覧ください。

リソース グループの作成

az group create コマンドを使用して、ターゲット レジストリのリソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

az group create --name myResourceGroup --location eastus

新しいリージョン内でターゲット レジストリをデプロイする

テンプレートを使用してターゲット レジストリをデプロイするには、az deployment group create コマンドを使用します。

az deployment group create --resource-group myResourceGroup \
   --template-file template.json --name mydeployment

Note

デプロイ中にエラーが発生した場合は、テンプレート ファイル内での特定の構成の更新と、コマンドの再試行が必要になる可能性があります。

ターゲット レジストリにレジストリ コンテンツをインポートする

ターゲット リージョン内でレジストリを作成したら、az acr import コマンドまたは同等の PowerShell コマンド Import-AzContainerImage を使用して、保持するイメージやその他の成果物をソース レジストリからターゲット レジストリにインポートします。 コマンドの例については、「コンテナー レジストリにコンテナー イメージをインポートする」を参照してください。

  • Azure CLI コマンド az acr repository list および az acr repository tags、または Azure PowerShell の同等のコマンドを使用すると、ご自身のソース レジストリのコンテンツを列挙できます。
  • 個々の成果物に対してインポート コマンドを実行するか、成果物の一覧に対してコマンドが実行されるようにスクリプトを作成します。

次のサンプル Azure CLI スクリプトでは、ソース リポジトリとタグが列挙されて、成果物が同じ Azure サブスクリプションのターゲット レジストリにインポートされます。 必要に応じて、特定のリポジトリまたはタグをインポートします。 異なるサブスクリプションまたはテナント内のレジストリからインポートするには、「コンテナー レジストリにコンテナー イメージをインポートする」の例を参照してください。

#!/bin/bash
# Modify registry names for your environment
SOURCE_REG=myregistry
TARGET_REG=targetregistry

# Get list of source repositories
REPO_LIST=$(az acr repository list \
    --name $SOURCE_REG --output tsv)

# Enumerate tags and import to target registry
for repo in $REPO_LIST; do
    TAGS_LIST=$(az acr repository show-tags --name $SOURCE_REG --repository $repo --output tsv);
    for tag in $TAGS_LIST; do
        echo "Importing $repo:$tag";
        az acr import --name $TARGET_REG --source $SOURCE_REG.azurecr.io/$repo":"$tag;
    done
done

ターゲット レジストリを確認する

お使いのターゲット レジストリ内で、次の情報を確認します。

  • レジストリ名、サービス レベル、パブリック アクセス、レプリケーションなどのレジストリ設定
  • 保持するコンテンツのリポジトリとタグ。

追加構成

  • 必要に応じて、プライベート エンドポイント、IP アクセス規則、マネージド ID など、ターゲット レジストリ内の設定を手動で構成します。

  • ソース レジストリではなくターゲット レジストリを使用するように、開発システムとデプロイ システムを更新します。

  • ターゲット レジストリへのアクセスを許可するように、すべてのクライアント ファイアウォール規則を更新します。

元のレジストリを削除する

ターゲット レジストリ、移行されたコンテンツ、検証済みレジストリ設定を適切にデプロイしたら、ソース レジストリを削除することができます。

次のステップ