概要

  • Azure 初心者の新川です。今日は、VMSS(Virtual Machine Scale Sets)で管理するインスタンスのOSイメージ更新方法をご紹介します。
  • インスタンスには、Apache のWebサーバーをインストールしており、インスタンスのOSイメージを更新後に、コンテンツが置き換わったことを確認します。また、今回の手順では、VMSSのアップグレードモードを”手動” に設定しております。

VMSS インスタンスイメージの更新方法

ソースVM の作成

  • VMSS のOSイメージの更新作業を行うための ソースVM を準備します。VMSS が属するリソース グループに、現在VMSSで使用している最新のOSイメージ(マイ イメージ)を指定して、ソースVM を1つ作成します。
  • 一時的な利用ですので、仮装マシン名は任意で指定、可用性オプションは”インフラストラクチャ冗長は必要ありません” を選択します。

  • イメージは、“マイ イメージ” から、現在VMSSで使用しているOSイメージ選択します。OSイメージが不明な場合は、Virtual Machine Scale Sets → VMSS名 → オペレーティング システムを選択し、VMSS内のインスタンスのOSイメージが確認できます。(下図参照)

  • VM の作成画面に戻ります。
  • 既存のVMSS内のインスタンスで使用しているユーザー名, SSH 公開キーを指定します。

  • 一時的な利用ですので、ロード バランサーは不要です。

  • 指定したパラメータに問題なければ、[作成]を選択して、VM を作成します。

  • VMSS のOSイメージの更新作業を行うための VMが作成できました。

ソースVM にて更新作業

  • ソースVM にログインし、コンテンツを更新します。今回は、index.html 内の文字列を下記の様に、修正しました。
$ cd /var/www/html
$ cat index.html
Hello World!

$ vi index.html
$ cat index.html
Hello Azure!!!

ソースVM のプロビジョニングを解除

  • マシン固有のファイルとデータを削除するため、Azure VM エージェントで VM のプロビジョニングを解除します。ソースVM でwaagent コマンドに -deprovision+user オプションを指定して実行します。
  • +userオプションによって、VM作成時にプロビジョニングされたユーザーも削除されます。 VM にユーザーを保持する場合は、-deprovision オプションのみを指定します。
[azureuser@niikawa-vmss-test-imageset ~]$ sudo waagent -deprovision+user
WARNING! The waagent service will be stopped.
WARNING! All SSH host key pairs will be deleted.
WARNING! Cached DHCP leases will be deleted.
WARNING! root password will be disabled. You will not be able to login as root.
WARNING! /etc/resolv.conf will be deleted.
WARNING! azureuser account and entire home directory will be deleted.
Do you want to proceed (y/n)y
2020/11/16 15:10:09.020641 INFO Examine /proc/net/route for primary interface
2020/11/16 15:10:09.025881 INFO Primary interface is [eth0]
[azureuser@niikawa-vmss-test-imageset ~]$ logout

更新作業後のソースVM をイメージ化

  • Virtual Machines にて、ソースVM を選択します。下記画面で示す “キャプチャ” を押して、イメージの作成に進みます。

  • イメージの作成で、次の値を選択 or 入力します。
    • Shared Image Gallery にイメージを共有する → 今回は”いいえ、マネージド イメージのみをキャプチャします。“を選択(”はい”を選択すると、Shared Image Gallery でイメージ管理となり、試したのですがインスタンスのアップグレードが正常に行えなかったです)
    • イメージの作成後、この仮想マシンを自動的に削除します → “有効”
    • ゾーンの回復性 → “有効”
    • 名前 → 例:niikawa-vmss-test-image-20201116.0

  • 指定したパラメータに問題なければ、[作成]を選択して、OSイメージを作成します。

  • 更新用の OSイメージが作成できました。先ほどオプションで指定の通り、ソースVM も削除されています。

VMSS の更新による OSイメージの差し替え

  • Azure CLI にて次のコマンドを実行し、VMSS の更新によって、OSイメージを差し替えます。
az vmss update --resource-group niikawa-vmss-test-rg --name niikawa-vmss-test-scaleset1 --set virtualMachineProfile.storageProfile.imageReference.id=<イメージのリソースID>

例:
az vmss update --resource-group niikawa-vmss-test-rg --name niikawa-vmss-test-scaleset1 --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/niikawa-vmss-test-rg/providers/Microsoft.Compute/images/niikawa-vmss-test-image-20201116.0
  • 上記のaz vmss updateコマンドに指定するイメージのリソースIDは、下記のようにイメージの概要からリソースIDで確認可能です。

補足1

  • VMSS のOSイメージに”Marketplace” を利用しており、az vmss updateコマンドに“マイ イメージ”を指定して更新を行った場合は、次のエラーを経験しました。VMSS の構築時に、VMからイメージ化した“マイ イメージ”を利用することで解消。
    • The Image type for a Virtual Machine Scale Set may not be changed.

補足2

  • VMSS のOSイメージに”Shared Image Gallery” を利用しており、az vmss updateコマンドに“マイ イメージ”を指定して更新を行った場合は、次のエラーを経験しました。VMSS の構築および更新のどちらも、VMからイメージ化した“マイ イメージ”を利用することで解消。
    • The resource id '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/niikawa-vmss-test-rg/providers/Microsoft.Compute/images/niikawa-vmss-test-image-20201116.0’ is not a valid gallery image reference. A gallery image reference should be a valid resource identifier, of the format: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}/versions/{version}’.

起動済みインスタンスのアップグレード

  • 起動済みのインスタンスをアップグレードします。以下は、VMSS を更新する前のインスタンスの状態です。最新のモデルは”はい”となっています。

  • 以下は、VMSS を更新した後のインスタンスの状態です。最新のモデルは”いいえ”に変わりました。

  • インスタンスを選択して、[アップグレード]を押します。以下の画面が表示されるので、[はい]を選択します。

  • インスタンスのアップグレードが完了後、最新のモデルは”はい” の表示に変わりました。

疎通テスト

  • クライアントより、Webブラウザ or curlコマンドを使用して、ロード バランサーのパブリック IP アドレスに疎通テストを行います。インスタンスのアップグレード後、期待通り、コンテンツが置き換わった後の出力になりました。
◆VMSS インスタンスイメージの更新前
niikawa@niikawa1:~$ curl http://xx.xx.xx.xx
Hello World!

◆VMSS インスタンスイメージの更新後
niikawa@niikawa1:~$ curl http://xx.xx.xx.xx
Hello Azure!!!

元記事はこちら

VMSS インスタンスイメージの更新方法