チュートリアル: Azure CLI を使用して仮想マシン スケール セットのカスタム イメージを作成して使用する

スケール セットを作成するときは、VM インスタンスのデプロイ時に使用するイメージを指定します。 VM インスタンスをデプロイした後のタスクの数を減らすには、カスタム VM イメージを使用できます。 このカスタム VM イメージには、すべての必要なアプリケーション インストールまたは構成が含まれます。 スケール セットで作成されたすべての VM インスタンスは、カスタム VM イメージを使用し、アプリケーション トラフィックを処理できる状態になります。 このチュートリアルで学習する内容は次のとおりです。

  • Azure Compute Gallery を作成する
  • 特殊化されたイメージ定義を作成する
  • イメージ バージョンを作成する
  • 特殊化されたイメージからスケール セットを作成する
  • イメージ ギャラリーを共有する

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

前提条件

  • 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 CLI のバージョン 2.4.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

概要

Azure Compute Gallery により、組織全体でのカスタム イメージの共有が簡素化されます。 カスタム イメージは Marketplace のイメージに似ていますが、カスタム イメージは自分で作成します。 カスタム イメージは、アプリケーションのプリロード、アプリケーションの構成、その他の OS 構成などの構成のブートストラップを実行するために使用できます。

Azure Compute Gallery を使用すると、カスタム VM イメージを他のユーザーと共有できます。 どのイメージを共有するか、どのリージョンでそのイメージを使用できるようにするか、および、だれと共有するかを選択することができます。

ソース VM の作成と構成

最初に az group create を使用してリソース グループを作成し、次に az vm create を使用して VM を作成します。 この VM は、イメージのソースとして使用されます。

次の例では、myResourceGroup という名前のリソース グループに myVM という名前の Linux ベースの VM を作成します。

export RANDOM_ID=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_ID"
export REGION="eastus"
export MY_VM_NAME="myVM"

az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION

az vm create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $MY_VM_NAME \
  --image debian11 \
  --admin-username azureuser \
  --generate-ssh-keys

ヒント

VM の ID は、az vm create コマンドの出力に示されます。 このチュートリアルの後半で使用できるように、これをコピーして安全な場所に保存しておきます。

イメージ ギャラリーは、イメージの共有を有効にするために使用されるプライマリ リソースです。

ギャラリー名で許可されている文字は、英字 (大文字または小文字)、数字、ドット、およびピリオドです。 ギャラリー名にダッシュを含めることはできません。 ギャラリー名は、お使いのサブスクリプション内で一意にする必要があります。

az sig create を使用してイメージ ギャラリーを作成します。

次に例を示します。

  • "米国東部" にある myGalleryRG という名前のギャラリーのリソース グループを作成します。
  • ギャラリーの名前は myGallery です。
export MY_GALLERY_RG_NAME="myGalleryRG$RANDOM_ID"
export MY_GALLERY_NAME="myGallery$RANDOM_ID"

az group create --name $MY_GALLERY_RG_NAME --location $REGION
az sig create --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME

イメージ定義を作成する

イメージ定義では、イメージの論理グループを作成します。 これは、その中に作成されるイメージ バージョンに関する情報を管理するために使用されます。

イメージ定義名は、大文字または小文字、数字、ドット、ダッシュおよびピリオドで構成できます。

イメージ定義の種類が適切であることを確認してください。

  • 状態 - (Windows の場合は Sysprep、Linux の場合は waagent -deprovision を使用して) VM を一般化している場合は、--os-state generalized を使用して、一般化されたイメージ定義を作成する必要があります。 既存のユーザー アカウントを削除せずに VM を使用する場合は、--os-state specialized を使用して、特殊化されたイメージ定義を作成します。
  • セキュリティの種類 - 新しい Azure VM は、既定ではトラステッド起動が構成された状態で作成されます。 このチュートリアルの後続には、イメージ定義とスケール セットの作成時のトラステッド起動構成を反映したコード サンプルが含まれています。 トラステッド起動が有効になっていない VM でイメージを作成する場合は、両方のリソースを作成するときに正しいセキュリティの種類を反映するようにしてください。 トラステッド起動の詳細については、「Azure Virtual Machines のトラステッド起動」を参照してください。

イメージ定義に指定できる値の詳細については、イメージ定義に関するページを参照してください。

az sig image-definition create を使用して、ギャラリー内にイメージ定義を作成します。

次の例では、イメージの定義は以下のようになっています。

  • 名前は myImageDefinition
  • 特殊化された Linux OS イメージ用に構成済み。 Windows OS を使用してイメージの定義を作成するには、--os-type Windows を使用します。
  • トラステッド起動用に構成済み。
export MY_IMAGE_DEF_NAME="myImageDefinition$RANDOM_ID"
MY_PUBLISHER_NAME="myPublisher$RANDOM_ID"

az sig image-definition create \
   --resource-group $MY_GALLERY_RG_NAME \
   --gallery-name $MY_GALLERY_NAME \
   --gallery-image-definition $MY_IMAGE_DEF_NAME \
   --publisher $MY_PUBLISHER_NAME \
   --offer myOffer \
   --sku mySKU \
   --os-type Linux \
   --os-state specialized \
   --features SecurityType=TrustedLaunch

ヒント

イメージ定義の ID は、コマンドの出力に示されます。 このチュートリアルの後半で使用できるように、これをコピーして安全な場所に保存しておきます。

イメージ バージョンの作成

az image gallery create-image-version を使用して、VM からイメージ バージョンを作成します。

イメージ バージョンで許可されている文字は、数字とピリオドです。 数字は、32 ビット整数の範囲内になっている必要があります。 形式:MajorVersion.MinorVersion.Patch

次に例を示します。

  • イメージのバージョンは 1.0.0 です。
  • 米国中南部リージョンにレプリカを 1 つ、米国東部リージョンにレプリカを 1 つ作成します。 レプリケーション リージョンには、ソース VM が配置されているリージョンが含まれている必要があります。
  • --virtual-machine は、前に作成した VM の ID です。
export MY_VM_ID=$(az vm show --name $MY_VM_NAME --resource-group $MY_RESOURCE_GROUP_NAME --query "id" --output tsv)

az sig image-version create \
   --resource-group $MY_GALLERY_RG_NAME \
   --gallery-name $MY_GALLERY_NAME \
   --gallery-image-definition $MY_IMAGE_DEF_NAME \
   --gallery-image-version 1.0.0 \
   --target-regions "southcentralus=1" "eastus=1" \
   --virtual-machine $MY_VM_ID

Note

同じイメージを使用して別のイメージ バージョンを作成する前に、そのイメージ バージョンが構築とレプリケーションを完全に完了するまで待つ必要があります。

また、イメージ バージョンを作成するときに、--storage-account-type premium_lrs を追加してイメージを Premium ストレージに格納することも、--storage-account-type standard_zrs を追加してゾーン冗長ストレージに格納することもできます。

イメージからスケール セットを作成する

az vmss create を使用してスケール セットを作成します。 特殊化されたソース VM を使用している場合は、--specialized パラメーターを追加して、特殊化されたイメージであることを示します。

--image のイメージ定義 ID を使用してスケール セット インスタンスを作成すると、使用可能な最新バージョンのイメージを使用するスケール セットが作成されます。 特定のバージョンのイメージが必要な場合は、--image を定義するときにイメージ "バージョン" ID を含めるようにしてください。

  • 最新のイメージの例: /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Compute/galleries/myGallery/images/myImage

  • 特定のイメージの例: /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Compute/galleries/myGallery/images/myImage/versions/1.0.0

次の例では、スケール セットは以下のようになっています。

  • 名前は myScaleSet
  • myImageDefinition イメージの最新バージョンを使用。
  • トラステッド起動用に構成済み。
export MY_IMAGE_DEF_ID=$(az sig image-definition show --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME --gallery-image-definition $MY_IMAGE_DEF_NAME --query "id" --output tsv)
export MY_SCALE_SET_RG_NAME="myResourceGroup$RANDOM_ID"
export MY_SCALE_SET_NAME="myScaleSet$RANDOM_ID"

az group create --name $MY_SCALE_SET_RG_NAME --location eastus

az vmss create \
   --resource-group $MY_SCALE_SET_RG_NAME \
   --name $MY_SCALE_SET_NAME \
   --orchestration-mode flexible \
   --image $MY_IMAGE_DEF_ID \
   --specialized \
   --security-type TrustedLaunch

すべてのスケール セットのリソースと VM を作成および構成するのに数分かかります。

Azure ロールベースのアクセス制御 (Azure RBAC) を使用してサブスクリプション間でイメージを共有できます。また、ギャラリー、イメージ定義、またはイメージ バージョンのレベルでイメージを共有できます。 イメージ バージョンに対する読み取りアクセス許可があるユーザーは、サブスクリプション間でも、そのイメージ バージョンを使用して VM をデプロイできます。

他のユーザーとは、ギャラリー レベルで共有することをお勧めします。

次のような例です。

  • az sig show を使用してギャラリーのオブジェクト ID を取得します。
  • az role assignment create を使用してギャラリーへのアクセス権を付与します。
    • 割り当てのスコープとしてオブジェクト ID を使用します。
    • デモの目的で、サインインしたユーザーの ID を割り当て先として使用します。 このコードをテスト コードまたは運用コードで使用する場合は、このイメージにアクセスできるようにするユーザーを反映するように割り当て先を更新してください。 Azure RBAC を使用してリソースを共有する方法の詳細については、「Azure CLI を使用して Azure ロールの割り当てを追加または削除する」をご覧ください。 メール アドレスとともに az role assignment create を使用して、ユーザーに共有イメージ ギャラリーへのアクセス権を付与します。
export MY_GALLERY_ID=$(az sig show --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME --query "id" --output tsv)
export CALLER_ID=$(az ad signed-in-user show --query id -o tsv)

az role assignment create \
   --role "Reader" \
   --assignee $CALLER_ID \
   --scope $MY_GALLERY_ID

リソースをクリーンアップする

スケール セットと追加のリソースを削除するには、az group delete を使用して、リソース グループとそのすべてのリソースを削除します。 --no-wait パラメーターは、操作の完了を待たずにプロンプトに制御を戻します。 --yes パラメーターは、追加のプロンプトを表示せずにリソースの削除を確定します。

次のステップ

このチュートリアルでは、Azure CLI を使用してスケール セットにカスタム VM イメージを作成して使用する方法について学習しました。

  • Azure Compute Gallery を作成する
  • 特殊化されたイメージ定義を作成する
  • イメージ バージョンを作成する
  • 特殊化されたイメージからスケール セットを作成する
  • イメージ ギャラリーを共有する

次のチュートリアルに進み、アプリケーションをスケール セットにデプロイする方法を学習してください。