回復性と高可用性のために Azure Container Registry でゾーン冗長を有効にする

リージョン操作の可用性向上と待機時間短縮のために 1 つ以上の Azure リージョンにレジストリ データをレプリケートする geo レプリケーションに加えて、Azure Container Registry ではオプションのゾーン冗長がサポートされています。 ゾーン冗長を使用すると、特定のリージョンのレジストリまたはレプリケーション リソース (レプリカ) に回復性と高可用性が提供されます。

この記事では、Azure CLI、Azure portal、または Azure Resource Manager テンプレートを使用して、ゾーン冗長コンテナー レジストリまたはレプリカを設定する方法について説明します。

ゾーン冗長は、Premium コンテナー レジストリ サービス レベルの機能です。 レジストリ サービスのレベルと制限については、「Azure Container Registry のサービス レベル」を参照してください。

リージョン サポート

  • ACR Availability Zones は、次のリージョンでサポートされています。

    アメリカ ヨーロッパ アフリカ アジア太平洋
    ブラジル南部
    カナダ中部
    米国中部
    米国東部
    米国東部 2
    米国東部 2 EUAP
    米国中南部
    米国政府バージニア州
    米国西部 2
    米国西部 3
    フランス中部
    ドイツ中西部
    北ヨーロッパ
    ノルウェー東部
    スウェーデン中部
    スイス北部
    英国南部
    西ヨーロッパ
    南アフリカ北部
    オーストラリア東部
    インド中部
    China North 3
    東アジア
    東日本
    韓国中部
    カタール中部
    東南アジア
    アラブ首長国連邦北部
  • 可用性ゾーンへのリージョンの変換は、現在はサポートされていません。

  • リージョンで可用性ゾーンのサポートを有効にするには、可用性ゾーンのサポートを有効にして、必要なリージョンにレジストリを作成するか、可用性ゾーンのサポートを有効にしてレプリケートされたリージョンを追加します。

  • AZ 対応スタンプを持つレジストリでは、AZ 対応スタンプを持つホーム リージョンのレプリケーションが既定で作成されます。 AZ スタンプは、いったん有効にすると無効にできません。

  • ホーム リージョンのレプリケーションは、ホーム リージョン レジストリを表します。 可用性ゾーンのプロパティを表示および管理することはできますが、削除することはできません。

  • 可用性ゾーンはリージョン単位です。レプリケーションが作成されると、それらの状態は変更できません。ただし、レプリケーションを削除して再作成する場合を除きます。

  • リージョンでゾーン冗長を無効にすることはできません。

  • ACR タスクでは、可用性ゾーンはまだサポートされていません。

ゾーン冗長について

回復性と可用性に優れた Azure コンテナー レジストリを Azure リージョンに作成するには、可用性ゾーンを使用します。 たとえば、組織では、他のサポートされている Azure リソースを使用してゾーン冗長 Azure コンテナー レジストリを設定して、データ所在地や他のコンプライアンス要件を満たしながら、リージョン内で高可用性を提供することができます。

Azure Container Registry でやはりサポートされている geo レプリケーションを使用すると、複数のリージョンにサービスがレプリケートされ、他の場所にあるリソースでの冗長性と局所性が実現されます。 リージョン内の冗長性のための可用性ゾーンと、複数のリージョンをまたぐ geo レプリケーションを組み合わせることで、レジストリの信頼性とパフォーマンスが強化されます。

可用性ゾーンは、Azure リージョン内の一意の物理的な場所です。 回復性を確保するため、有効になっているリージョンにはいずれも最低 3 つのゾーンが別個に存在しています。 ゾーンごとに、独立した電源、冷房、ネットワークを備えた 1 つまたは複数のデータセンターがあります。 ゾーン冗長対応に構成されたレジストリ (または別のリージョンのレジストリ レプリカ) は、リージョン内のすべての可用性ゾーンにレプリケートされ、データセンターで障害が発生した場合でも使用可能に保たれます。

ゾーン冗長レジストリを作成する - CLI

Azure CLI を使用してゾーン冗長を有効にするには、Azure CLI バージョン 2.17.0 以降または Azure Cloud Shell が必要です。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

リソース グループを作成する

必要に応じて、az group create コマンドを実行して、レジストリ用のリソース グループを作成します。

az group create --name <resource-group-name> --location <location>

ゾーン対応レジストリを作成する

az acr create コマンドを実行して、Premium サービス レベルにゾーン冗長レジストリを作成します。 Azure Container Registry の可用性ゾーンをサポートするリージョンを選択します。 次の例では、eastus リージョンでゾーン冗長が有効になっています。 レジストリ オプションの詳細については、az acr create コマンドのヘルプを参照してください。

az acr create \
  --resource-group <resource-group-name> \
  --name <container-registry-name> \
  --location eastus \
  --zone-redundancy enabled \
  --sku Premium

コマンドの出力で、レジストリの zoneRedundancy プロパティを確認します。 有効の場合、レジストリはゾーン冗長です。

{
 [...]
"zoneRedundancy": "Enabled",
}

ゾーン冗長レプリケーションを作成する

az acr replication create コマンドを実行して、westus2 など、Azure Container Registry の可用性ゾーンをサポートするリージョンにゾーン冗長レジストリ レプリカを作成します。

az acr replication create \
  --location westus2 \
  --resource-group <resource-group-name> \
  --registry <container-registry-name> \
  --zone-redundancy enabled

コマンドの出力で、レプリカの zoneRedundancy プロパティを確認します。 有効の場合、レプリカはゾーン冗長です。

{
 [...]
"zoneRedundancy": "Enabled",
}

ゾーン冗長レジストリを作成する - ポータル

  1. Azure portal にサインインします。

  2. [リソースの作成]>[コンテナー]>[コンテナー レジストリ] の順に選択します。

  3. [基本] タブで、リソース グループを選択または作成し、一意のレジストリ名を入力します。

  4. [場所] で、Azure Container Registry のゾーン冗長がサポートされているリージョンを選択します ("米国東部" など)。

  5. [SKU][Premium] を選択します。

  6. [可用性ゾーン] で、 [有効] を選択します。

  7. 必要に応じて、その他のレジストリ設定を構成してから、[確認および作成] を選びます。

  8. [作成] を選択して、レジストリ インスタンスをデプロイします。

    Azure portal でゾーン冗長を有効にする

ゾーン冗長レプリケーションを作成するには:

  1. Premium レベルのコンテナー レジストリに移動し、 [レプリケーション] を選択します。

  2. 表示されるマップで、Azure Container Registry のゾーン冗長がサポートされているリージョンの緑の六角形を選択します (米国西部 2 など)。 または [+ 追加] を選択します。

  3. [レプリケーションの作成] ウィンドウで、 [場所] を確認します。 [可用性ゾーン][有効] を選択し、次に [作成] を選択します。

    Azure portal でゾーン冗長レプリケーションを有効にする

ゾーン冗長レジストリを作成する - テンプレート

リソース グループを作成する

必要に応じて、az group create コマンドを実行し、Azure Container Registry の可用性ゾーンがサポートされているリージョン (eastus など) に、レジストリ用のリソース グループを作成します。 このリージョンは、レジストリの場所を設定するためにテンプレートによって使用されます。

az group create --name <resource-group-name> --location eastus

テンプレートのデプロイ

次の Resource Manager テンプレートを使用して、ゾーン冗長の geo レプリケートされるレジストリを作成できます。 既定では、このテンプレートによって、レジストリとリージョン レプリカでゾーン冗長が有効になります。

次の内容を新しいファイルにコピーし、registryZone.json などのファイル名を使用して保存します。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "acrName": {
        "type": "string",
        "defaultValue": "[concat('acr', uniqueString(resourceGroup().id))]",
        "minLength": 5,
        "maxLength": 50,
        "metadata": {
          "description": "Globally unique name of your Azure Container Registry"
        }
      },
      "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
          "description": "Location for registry home replica."
        }
      },
      "acrSku": {
        "type": "string",
        "defaultValue": "Premium",
        "allowedValues": [
          "Premium"
        ],
        "metadata": {
          "description": "Tier of your Azure Container Registry. Geo-replication and zone redundancy require Premium SKU."
        }
      },
      "acrZoneRedundancy": {
        "type": "string",
        "defaultValue": "Enabled",
        "metadata": {
          "description": "Enable zone redundancy of registry's home replica. Requires registry location to support availability zones."
        }
      },
      "acrReplicaLocation": {
        "type": "string",
        "metadata": {
          "description": "Short name for registry replica location."
        }
      },
      "acrReplicaZoneRedundancy": {
        "type": "string",
        "defaultValue": "Enabled",
        "metadata": {
          "description": "Enable zone redundancy of registry replica. Requires replica location to support availability zones."
        }
      }
    },
    "resources": [
      {
        "comments": "Container registry for storing docker images",
        "type": "Microsoft.ContainerRegistry/registries",
        "apiVersion": "2020-11-01",
        "name": "[parameters('acrName')]",
        "location": "[parameters('location')]",
        "sku": {
          "name": "[parameters('acrSku')]",
          "tier": "[parameters('acrSku')]"
        },
        "tags": {
          "displayName": "Container Registry",
          "container.registry": "[parameters('acrName')]"
        },
        "properties": {
          "adminUserEnabled": "[parameters('acrAdminUserEnabled')]",
          "zoneRedundancy": "[parameters('acrZoneRedundancy')]"
        }
      },
      {
        "type": "Microsoft.ContainerRegistry/registries/replications",
        "apiVersion": "2020-11-01",
        "name": "[concat(parameters('acrName'), '/', parameters('acrReplicaLocation'))]",
        "location": "[parameters('acrReplicaLocation')]",
          "dependsOn": [
          "[resourceId('Microsoft.ContainerRegistry/registries/', parameters('acrName'))]"
        ],
        "properties": {
          "zoneRedundancy": "[parameters('acrReplicaZoneRedundancy')]"
        }
      }
    ],
    "outputs": {
      "acrLoginServer": {
        "value": "[reference(resourceId('Microsoft.ContainerRegistry/registries',parameters('acrName')),'2019-12-01').loginServer]",
        "type": "string"
      }
    }
  }

次の az deployment group create コマンドを実行し、前述のテンプレート ファイルを使用してレジストリを作成します。 示された場所で次のように指定します。

  • 一意のレジストリ名。または、パラメーターを指定せずにテンプレートをデプロイすると、一意の名前が自動的に作成されます
  • 可用性ゾーンがサポートされているレプリカの場所 (westus2 など)
az deployment group create \
  --resource-group <resource-group-name> \
  --template-file registryZone.json \
  --parameters acrName=<registry-name> acrReplicaLocation=<replica-location>

コマンドの出力で、レジストリとレプリカの zoneRedundancy プロパティを確認します。 有効になっていれば、各リソースはゾーン冗長です。

{
 [...]
"zoneRedundancy": "Enabled",
}

次のステップ