Azure Compute Gallery でイメージを格納、共有する

適用対象: ✔️ Linux VM ✔️ Windows VM ✔️ フレキシブル スケール セット ✔️ 均一スケール セット

イメージは、作成方法に応じて、完全な VM (アタッチされたすべてのデータ ディスクを含む) または OS ディスク単独のどちらかのコピーです。 イメージから VM を作成するときに、新しい VM のディスクを作成するために、イメージ内の VHD のコピーが使用されます。 イメージはストレージ内に残り、繰り返し使用して新しい VM を作成できます。

メンテナンスが必要なイメージや社内全体で利用可能にしたいイメージが多数ある場合は、Azure Compute Gallery をリポジトリとして使用できます。

ギャラリーを使用してイメージを格納すると、複数のリソースの種類が作成されます。

リソース 説明
イメージのソース これは、ギャラリーにイメージ バージョンを作成するために使用できるリソースです。 イメージのソースには、一般化または特殊化された既存の Azure VM、マネージド イメージ、スナップショット、VHD、または別のギャラリー内のイメージ バージョンを使用できます。
ギャラリー Azure Marketplace と同様、ギャラリーは、イメージを管理して共有するためのリポジトリです。ただし、だれがアクセスできるかは、ユーザーが制御します。
イメージ定義 イメージ定義はギャラリー内に作成され、イメージに関する情報のほか、そのイメージを使用して VM を作成するための要件に関する情報を伝達します。 この情報には、イメージが Windows または Linux のどちらか、リリース ノート、および最小と最大のメモリ要件が含まれます。 これは、イメージの種類の定義です。
イメージ バージョン イメージ バージョンは、ギャラリーを利用している場合に、VM の作成に使用します。 お使いの環境に必要な複数のイメージ バージョンを保持できます。 マネージド イメージのように、イメージ バージョンを使用して VM を作成する場合、イメージ バージョンは VM 用の新しいディスクを作成するために使用されます。 イメージ バージョンは複数回、使用できます。

ギャラリー内に複数のイメージ バージョンを保持できる仕組みを示した図

イメージ定義

イメージ定義は、イメージのバージョンの論理的なグループです。 イメージ定義には、イメージが作成された理由に関する情報が保持され、イメージのメタデータ (対象の OS、サポートされる機能、イメージの使用に関するその他の情報など) も含まれます。 イメージ定義は、特定のイメージの作成に関するすべての詳細情報についてのプランのようなものです。 VM のデプロイは、イメージ定義からではなく、定義から作成されたイメージ バージョンから行います。

各イメージ定義には、パブリッシャーオファーSKU という 3 つのパラメーターがあり、これらを組み合わせて使います。 これらは、特定のイメージ定義の検索に使われます。 3 つの値のうち 1 つまたは 2 つを共有するイメージ定義を保有することはできますが、3 つの値すべてを共有することはできません。 たとえば、以下に示したのは 3 つのイメージ定義とその値です。

イメージの定義 Publisher プラン SKU
myImage1 Contoso Finance バックエンド
myImage2 Contoso Finance フロントエンド
myImage3 テスト Finance フロントエンド

この 3 つは、それぞれ固有の値を有しています。 形式は、現在 Azure PowerShell で Azure Marketplace イメージのパブリッシャー、オファー、SKU を指定して最新バージョンの Marketplace イメージを取得する方法に似ています。 イメージ定義ごとに、これらの値の組み合わせが一意になる必要があります。

それに含めることができるイメージ バージョンの種類は、次のパラメーターによって決まります。

  • オペレーティング システムの状態 - OS の状態を一般化または特殊化に設定できます。 このフィールドは必須です。
  • オペレーティング システム - Windows または Linux にすることができます。 このフィールドは必須です。
  • Hyper-V の世代 - イメージが第 1 世代または第 2 世代 Hyper-V VHD から作成されたことを指定します。 既定値は第 1 世代です。

イメージ定義には、同じ機能、プラン、OS の状態、OS の種類などをサポートするイメージをグループ化できるように、イメージのメタデータが含まれています。 以下は、リソースをより簡単に追跡できるようにイメージ定義で設定できる他のパラメーターです。

  • 説明 - そのイメージ定義が存在する理由についての詳細な情報を提供するために使います。 たとえば、アプリケーションがプレインストールされているフロントエンド サーバー用のイメージ定義などです。

  • EULA - イメージ定義に固有のエンド ユーザー ライセンス契約を示すために使うことができます。

  • プライバシーに関する声明およびリリース ノート - リリース ノートとプライバシーに関する声明を Azure Storage に格納し、イメージ定義の一部としてそれらにアクセスするための URI を提供します。

  • 有効期限の終了日 - イメージ定義内のすべてのイメージ バージョンに対して、イメージを使用しない既定の日付を設定します。 有効期限の終了日は情報提供を目的としています。有効期限の終了日を過ぎても、ユーザーは引き続きイメージとバージョンから VM を作成できます。

  • タグ - イメージ定義を作成するときに、タグを追加することができます。 タグについて詳しくは、タグを使用したリソースの整理に関する記事をご覧ください

  • vCPU とメモリの最小値と最大値の推奨 - イメージに vCPU とメモリの推奨値がある場合は、その情報をイメージ定義に添付できます。

  • 許可されないディスクの種類 - VM に対するストレージ ニーズに関する情報を提供することができます。 たとえば、イメージが Standard HDD ディスクに適さない場合は、禁止リストにそれを追加します。

  • Marketplace イメージの購入プラン情報 - -PurchasePlanPublisher-PurchasePlanName、および -PurchasePlanProduct。 購入プラン情報の詳細については、Azure Marketplace でのイメージの検索に関するページおよび「イメージの作成時に Azure Marketplace 購入プラン情報を指定する」を参照してください。

  • アーキテクチャ

  • 機能により、ギャラリーの種類に基づいて、イメージでサポートされる追加の機能と SecurityType を指定できます。

    機能 指定可能な値 定義 サポート対象 :
    IsHibernateSupported True、False 休止状態をサポートする VM を作成します。 非公開、直接共有、コミュニティ
    IsAcceleratedNetworkSupported True、False 高速ネットワークを有効にして VM を作成します。 イメージ定義で True に設定すると、高速ネットワークをサポートしていない VM の取得はサポートされません。 非公開、直接共有、コミュニティ
    DiskControllerType ["SCSI", "NVMe"], ["SCSI"] SCSI または NVMe のディスクの種類を使用するために設定します。 NVMe VM とディスクは、NVMe をサポートするようにタグ付けされたイメージ定義でのみ取得できます。 非公開、直接共有、コミュニティ

    features パラメーターを使用して SecurityType を指定すると、VM で有効になるセキュリティ機能が制限されます。 格納されているギャラリーの種類に基づいて、一部の種類が制限されます。

    SecurityType 定義 サポート対象 :
    ConfidentialVMSupported これは、VMGS BLOB を含まない汎用 Gen2 イメージです。 Gen2 VM または機密 VM は、このイメージの種類から作成できます 非公開、直接共有、コミュニティ
    機密 VM このイメージの種類から作成できるのは機密 VM のみです プライベート
    TrustedLaunchSupported これは、VMGS BLOB を含まない汎用 Gen2 イメージです。 Gen2 VM または TrustedLaunch VM は、このイメージの種類から作成できます。 非公開、直接共有、コミュニティ
    TrustedLaunch このイメージの種類から作成できるのは TrustedLaunch VM のみです プライベート
    TrustedLaunchAndConfidentialVmSupported これは、VMGS BLOB を含まない汎用 Gen2 イメージです。 Gen2 VM、TrustedLaunch VM、または ConfidentialVM は、このイメージの種類から作成できます。 非公開、直接共有、コミュニティ

    詳細については、イメージ定義機能と SecurityType を追加するための CLI の例、またはPowerShell の例を参照してください。

    **ConfidentialVM は、利用可能なリージョンでのみサポートされています。サポートされているリージョンについては、こちらを参照してください。

イメージ バージョン

イメージ バージョンは VM の作成に使用します。 お使いの環境に必要な複数のイメージ バージョンを保持できます。 イメージ バージョンを使用して VM を作成する場合、イメージ バージョンは VM 用の新しいディスクを作成するために使用されます。 イメージ バージョンは複数回、使用できます。

イメージ バージョンのプロパティは次のようになります。

  • バージョン番号。 これはイメージ バージョンの名前として使用されます。 これは常に次の形式になります。MajorVersion.MinorVersion.Patch VM の作成時に最新イメージの使用を指定するとき、最新イメージの選択基準は最高の MajorVersion、MinorVersion、Patch の順になります。
  • ソース。 ソースには、VM、マネージド ディスク、スナップショット、マネージド イメージ、その他のイメージ バージョンを指定できます。
  • 有効期限の終了日。 イメージ バージョンの有効期限の終了日を示します。 有効期限の終了日は情報提供を目的としています。有効期限の終了日を過ぎても、ユーザーは引き続きバージョンから VM を作成できます。

一般化されたイメージと特殊化されたイメージ

Azure Compute Gallery では、2 つのオペレーティング システムの状態がサポートされています。 通常は、イメージを作成するために使用される VM は、イメージの取得前に一般化されている必要があります。 一般化は、マシンとユーザーに固有の情報を VM から削除するプロセスです。 Linux の場合は、waagent-deprovision または -deprovision+user パラメーターを使用できます。 Windows の場合、Sysprep ツールが使用されます。

特殊化された VM は、マシン固有の情報やアカウントを削除するプロセスを済ませていません。 さらに、特殊化されたイメージから作成された VM には、osProfile が関連付けられていません。 これは、特殊化されたイメージには、いくつかの利点に加えていくつかの制限があることを意味します。

  • 特殊化されたイメージから作成された VM とスケール セットは、短時間で起動して実行できます。 既に最初のブートを完了したソースから作成されるため、これらのイメージから作成された VM の起動は高速になります。
  • VM へのログインに使用できるアカウントは、その VM から作成された特殊化されたイメージを使用して作成された任意の VM で使用することもできます。
  • VM には、イメージが取得された VM の コンピューター名が割り当てられます。 競合を回避するには、コンピューター名を変更する必要があります。
  • osProfile は、secrets を使用して、何らかの秘匿性の高い情報を VM に渡す方法です。 これにより、osProfilesecrets を使用する KeyVault、WinRM、およびその他の機能を使用すると、問題が発生する可能性があります。 場合によっては、マネージド サービス ID (MSI) を使用して、これらの制限を回避できます。

リソースの更新

作成されたギャラリー リソースには、ある程度変更を加えることができます。 以下に制限されています。

Azure Compute Gallery:

  • 説明

イメージ定義:

  • 推奨される vCPU:
  • 推奨されるメモリ
  • 説明
  • 有効期限の終了日
  • ReleaseNotes

イメージ バージョン:

  • リージョンのレプリカ数
  • ターゲット リージョン
  • 最新から除外
  • 有効期限の終了日

共有

Azure Compute Gallery でイメージを共有する主な方法は、共有する相手に応じて 3 つあります。

共有相手: ユーザー グループ サービス プリンシパル 特定のサブスクリプション (または) テナント内のすべてのユーザー Azure のすべてのユーザーと公に
RBAC 共有 はい イエス はい いいえ いいえ
RBAC + 直接共有ギャラリー はい イエス イエス はい いいえ
RBAC + コミュニティ ギャラリー はい イエス はい いいえ はい

ACG イメージを作成するために必要な RBAC アクセス許可:

ユーザーは、仮想マシン、ディスク/スナップショット、VHD などのさまざまなソースから ACG イメージを作成できます。 このセクションでは、Azure Compute Gallery イメージの作成に必要なさまざまなユーザー アクセス許可について概要を説明します。 必要なアクセス許可を持たない ID では ACG 画像を作成できません。

  • ユーザーが ACG イメージ バージョンを作成するには、仮想マシンに対する書き込みアクセス許可が必要です。
  • Azure SDK の場合は、プロパティ properties.storageProfile.source.virtualMachineId を使います。このプロパティには、API バージョン 2023-07-03 または .NET SDK バージョン 1.4.0 (以降) が必要です
変換元の型 必要なアクセス許可
仮想マシン 書き込み
ディスク/スナップショット 書き込み
VHD 書き込み (listKeys)
管理イメージ 読み込み
ギャラリーの図 読み込み

Azure 組み込みロールRBAC アクセス許可の付与に関するその他の情報については、ドキュメントを参照してください

浅いレプリケーション

イメージ バージョンを作成するときに、開発とテストのためにレプリケーション モードを浅く設定できます。 浅いレプリケーションではイメージのコピーがスキップされるため、イメージ バージョンの準備が速くなります。 ただし、そのイメージ バージョンから多数の VM をデプロイできないことも意味します。 これは、古いマネージド イメージの動作と似ています。

浅いレプリケーションは、頻繁にはデプロイされない大規模イメージ (最大 32 TB) がある場合にも役立ちます。 ソース イメージはコピーされないため、より大きなディスクを使用できます。 ただし、多数の VM を同時にデプロイする場合にも使用できません。

浅いレプリケーションのイメージを設定するには、Azure CLI で --replication-mode Shallow を使用します。

SDK のサポート

Azure Compute Gallery の作成は、次の SDK でサポートされます。

テンプレート

Azure Compute Gallery リソースは、テンプレートを使用して作成できます。 いくつかのクイックスタート テンプレートが用意されています。

よく寄せられる質問

アクセス可能なサブスクリプション全体での Azure Compute Gallery リソースを Azure portal 上にすべて一覧表示するには、次の手順に従います。

  1. Azure Portalを開きます。
  2. ページを下にスクロールし、 [すべてのリソース] を選択します。
  3. 全リソースを一覧表示するサブスクリプションを、すべて選択します。
  4. [Azure Compute Gallery] 型のリソースを探します。

アクセス可能なサブスクリプション全体の Azure Compute Gallery リソースをすべて一覧表示するために、Azure CLI で次のコマンドを使用します。

   az account list -otsv --query "[].id" | xargs -n 1 az sig list --subscription

はい。 イメージの種類に基づいて、次の 3 つのシナリオが考えられます。

シナリオ 1:マネージド イメージがある場合は、イメージ定義を作成して、その定義からイメージ バージョンを作成できる。 詳細については、「イメージ定義とイメージ バージョンを作成する」を参照してください。

シナリオ 2: アンマネージド イメージがある場合、そこからマネージド イメージを作成した後、イメージ定義とイメージ バージョンを作成できる。

シナリオ 3: ローカル ファイル システムに VHD がある場合、VHD をマネージド イメージにアップロードする必要がある。その後、イメージ定義とイメージ バージョンを作成できる。

特殊なディスクからイメージ バージョンを作成できますか?

はい、特殊化されたイメージから VM を作成できます。

いいえ、別のサブスクリプションにギャラリー イメージ リソースを移動することはできません。 ギャラリー内のイメージ バージョンを他のリージョンにレプリケートしたり、別のギャラリーからイメージをコピーしたりすることはできます。

21Vianet によって運営される Azure、Azure Germany、または Azure Government クラウドなどの複数のクラウドとの間で、自分のイメージ バージョンをレプリケートできますか?

いいえ、クラウド間でイメージのバージョンをレプリケートすることはできません。

サブスクリプション間で自分のイメージ バージョンをレプリケートできますか?

いいえ、1 つのサブスクリプション内にあるリージョン全体にイメージ バージョンをレプリケートして、RBAC 経由で他のサブスクリプションでこれを使用できます。

Microsoft Entra のテナント間でイメージ バージョンを共有できますか?

はい、RBAC を使用して、別のテナントのユーザーと共有することができます。 ただし、大規模に共有するには、PowerShell または CLI を使用する "Azure テナント間のイメージ ギャラリーの共有" を参照してください。

ターゲット リージョン全体にイメージ バージョンをレプリケートするには、どのくらいの時間がかかりますか?

イメージ バージョンのレプリケート時間は、イメージのサイズとレプリケートされるリージョン数に完全に依存します。 ただし、最良の結果を得るために、ベスト プラクティスとして、イメージの規模を小さく維持し、ソースとターゲットのリージョンを近接させることをお勧めします。 -ReplicationStatus フラグを使用して、レプリケーション ステータスをチェックできます。

ソース リージョンとターゲット リージョンの違いは何ですか?

ソース リージョンとは、イメージ バージョンが作成されるリージョンであり、ターゲット リージョンとは、イメージ バージョンのコピーが保管されるリージョンです。 イメージ バージョンごとに、ソース リージョンは 1 つだけです。 また、イメージ バージョンを作成するときに、必ずソース リージョンの場所をターゲット リージョンの 1 つとして渡すようにします。

イメージ バージョンの作成時にソース リージョンを指定する方法を教えてください。

イメージ バージョンの作成時は、CLI の場合 -location 引数、PowerShell の場合 -Location パラメーターを使用して、ソース リージョンを指定できます。 イメージ バージョンを作成するための基本イメージとして使用しているマネージド イメージが、イメージ バージョンの作成を予定している場所と同じ場所にあることを確認してください。 また、イメージ バージョンを作成するときに、必ずソース リージョンの場所をターゲット リージョンの 1 つとして渡すようにします。

各リージョンで作成されるイメージ バージョンのレプリカ数を指定する方法を教えてください。

各リージョンで作成されるイメージ バージョンのレプリカ数は、次の 2 つの方法で指定できます。

  1. リージョン レプリカ数。リージョンごとに作成したいレプリカ数を指定します。
  2. リージョン レプリカ数が指定されない場合、リージョンごとの既定値となる共通レプリカ数。

リージョン レプリカ数を指定するには、そのリージョンで作成するレプリカの数と場所を渡します (例: "South Central US=2")。

各場所のリージョン レプリカ数が指定されない場合は、指定した共通レプリカ数が、レプリカの既定の数になります。

Azure CLI で共通レプリカ数を指定するには、az sig image-version create コマンドで -replica-count 引数を使用します。

はい、できます。 ただし、ベスト プラクティスとしては、リソース グループ、ギャラリー、イメージ定義、およびイメージ バージョンを同じ場所に保持することをお勧めします。

イメージ バージョンを格納するためのストレージの料金、ソース リージョンからターゲット リージョンへイメージ バージョンをレプリケートするためのネットワーク エグレスの料金を除いて、Azure Compute Gallery の使用料金はかかりません。

イメージの作成時に使用すべき API バージョンを教えてください

ギャラリー、イメージ定義、およびイメージ バージョンを操作するには、API バージョン 2018-06-01 を使用することをお勧めします。 ゾーン冗長ストレージ (ZRS) には、バージョン 2019-03-01 以降が必要です。

イメージ バージョンから VM または仮想マシン スケール セットを作成するには、どの API バージョンを使用する必要がありますか?

イメージ バージョンを使用する VM と仮想マシン スケール セットのデプロイには、API バージョン 2018-04-01 以上を使用することをお勧めします。

はい。OS の種類、Hyper-V の世代、およびデータ ディスク レイアウトがイメージ間で一致している限り、マネージド イメージから Azure Compute Gallery のイメージにスケール セット イメージ参照を更新できます。

新しいプロパティを使用するようにコードを更新し、VM イメージの作成時にアクセス許可が正確に付与されるようにするにはどうすればよいですか?

仮想マシン ID フィールドについては、GallerySource (GalleryImageVersionStorageProfile.GallerySource.VirtualMachineID) の下の VirtualMachineId フィールドを使用します。 この新しいプロパティには、API バージョン 2023-07-03、またはバージョン 1.4.0 (以上) の .NET SDK が必要です

StorageProfile = new GalleryImageVersionStorageProfile()
            {
                GallerySource = new GalleryArtifactVersionFullSource()
                {
                    VirtualMachineId = new ResourceIdentifier(virtualMachineId),
                }
            },

VHD をソースとして使用する場合は、OSDiskImage またはデータ ディスク イメージ (GalleryImageVersionStorageProfile.OSDiskImage.GallerySource.StorageAccountId) の下にある GallerySource の下の、StorageAccountID フィールドを使用します。 この新しいプロパティには api-version 2022-03-03 が必要です

StorageProfile = new GalleryImageVersionStorageProfile()
            {
                OSDiskImage = new GalleryOSDiskImage()
                {
                    GallerySource = new GalleryDiskImageSource()
                    {
                        StorageAccountId = new ResourceIdentifier(storageAccountId),
                        Uri = new Uri(blobUri),
                    }
                }
            },

トラブルシューティング

ギャラリーのリソースに対してなんらかの操作を実行する際に問題が発生した場合は、トラブルシューティング ガイドの一般的なエラーの一覧を参照してください。

さらに、Q&A で質問を投稿し、azure-virtual-machines-images のタグを付けることができます。

次のステップ

Azure Compute Gallery を使用してイメージをデプロイする方法を学習します。