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

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

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

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

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。

    新しいウィンドウで Cloud Shell を起動する

  • 必要に応じて、Azure CLI をインストールして、CLI リファレンス コマンドを実行します。

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

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

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

  • この記事では、Azure CLI のバージョン 2.4.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

概要

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

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

ソース VM の作成と構成

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

az group create --name myResourceGroup --location eastus

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image ubuntults \
  --admin-username azureuser \
  --generate-ssh-keys

重要

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

VM のパブリック IP アドレスも、az vm create コマンドの出力に示されます。 次に示すように、VM のパブリック IP アドレスに SSH 接続します。

ssh azureuser@<publicIpAddress>

VM をカスタマイズするために、基本的な Web サーバーをインストールしてみましょう。 スケール セット内の VM インスタンスがデプロイされると、Web アプリケーションの実行に必要なパッケージがすべて揃うことになります。 次のように apt-get を使用して NGINX をインストールします。

sudo apt-get install -y nginx

終了したら、「exit」と入力して SSH 接続を切断します。

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

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

az sig create を使用してイメージ ギャラリーを作成します。 次の例では、myGalleryRG という名前のリソース グループを "米国東部" に作成し、myGallery という名前のギャラリーを作成します。

az group create --name myGalleryRG --location eastus
az sig create --resource-group myGalleryRG --gallery-name myGallery

イメージ定義を作成する

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

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

イメージ定義の種類が適切であることを確認します。 (Windows の場合は Sysprep、Linux の場合は waagent -deprovision を使用して) VM を一般化している場合は、--os-state generalized を使用して、一般化されたイメージ定義を作成する必要があります。 既存のユーザー アカウントを削除せずに VM を使用する場合は、--os-state specialized を使用して、特殊化されたイメージ定義を作成します。

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

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

この例では、イメージ定義は myImageDefinition という名前で、特殊化された Linux OS イメージ用です。 Windows OS を使用してイメージの定義を作成するには、--os-type Windows を使用します。

az sig image-definition create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --publisher myPublisher \
   --offer myOffer \
   --sku mySKU \
   --os-type Linux \
   --os-state specialized

重要

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

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

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

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

この例では、イメージのバージョンは 1.0.0 であり、"米国中南部" リージョンに 1 個のレプリカ、および "米国東部 2" リージョンに 1 個のレプリカを作成しています。 レプリケーション リージョンには、ソース VM が配置されているリージョンが含まれている必要があります。

この例の --managed-image の値を、前の手順の VM の ID で置き換えます。

az sig image-version create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --gallery-image-version 1.0.0 \
   --target-regions "southcentralus=1" "eastus=1" \
   --managed-image "/subscriptions/<Subscription ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"

注意

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

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

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

az vmss create を使用して、特殊化されたイメージからスケール セットを作成します。

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

--image にイメージ定義 ID を使用して、使用可能なイメージの最新バージョンからスケール セット インスタンスを作成します。 また、--image にイメージ バージョン ID を指定して、特定のバージョンからスケール セット インスタンスを作成することもできます。

前に作成した myImageDefinition イメージの最新バージョンから myScaleSet という名前のスケール セットを作成します。

az group create --name myResourceGroup --location eastus
az vmss create \
   --resource-group myResourceGroup \
   --name myScaleSet \
   --image "/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition" \
   --specialized

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

スケール セットのテスト

トラフィックがスケール セットに到達できるようにし、Web サーバーが正常に動作することを確認するには、az network lb rule create を使用してロード バランサー規則を作成します。 次の例では、TCP ポート 80 のトラフィックを許可する myLoadBalancerRuleWeb という名前の規則を作成します。

az network lb rule create \
  --resource-group myResourceGroup \
  --name myLoadBalancerRuleWeb \
  --lb-name myScaleSetLB \
  --backend-pool-name myScaleSetLBBEPool \
  --backend-port 80 \
  --frontend-ip-name loadBalancerFrontEnd \
  --frontend-port 80 \
  --protocol tcp

スケール セットが動作していることを確認するには、az network public-ip show を使用してロード バランサーのパブリック IP アドレスを取得します。 次の例では、スケール セットの一部として作成された myScaleSetLBPublicIP の IP アドレスを取得します。

az network public-ip show \
  --resource-group myResourceGroup \
  --name myScaleSetLBPublicIP \
  --query [ipAddress] \
  --output tsv

このパブリック IP アドレスを Web ブラウザーに入力します。 次の例に示すように、既定の NGINX Web ページが表示されます。

カスタム VM イメージから実行されている Nginx

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

他のユーザーとは、ギャラリー レベルで共有することをお勧めします。 ギャラリーのオブジェクト ID を取得するには、az sig show を使用します。

az sig show \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --query id

電子メール アドレスおよび az role assignment create と共に、オブジェクト ID をスコープとして使用して、ユーザーに共有イメージ ギャラリーへのアクセスを付与します。 <email-address><gallery iD> は、実際の情報に置き換えてください。

az role assignment create \
   --role "Reader" \
   --assignee <email address> \
   --scope <gallery ID>

Azure RBAC を使用してリソースを共有する方法の詳細については、「Azure CLI を使用して Azure ロールの割り当てを追加または削除する」をご覧ください。

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

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

az group delete --name myResourceGroup --no-wait --yes

次のステップ

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

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

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