Virtual Machine Scale Sets でアプリケーションをインストールして更新する

完了

アプリケーションをスケール セット全体にデプロイする場合、スケール セット内のすべてのインスタンスにわたって一貫してアプリケーションを更新するメカニズムが必要です。 このような成果を得るには、カスタム スクリプト拡張機能を使用します。

運送会社のシナリオでは、エンド ユーザーの中断を最小限に抑えながら、アプリケーションの更新プログラムをすばやくロール アウトする方法が必要です。 カスタム スクリプト拡張機能は、理想的なソリューションです。

このユニットでは、カスタム スクリプト拡張機能を使用して、スケール セットで実行されているアプリケーションを更新する方法を学習します。

Azure カスタム スクリプト拡張機能とは

Azure カスタム スクリプト拡張機能では、スクリプトがダウンロードされて、Azure VM で実行されます。 これにより、スケール セット内のすべての VM で同じタスクを自動化できます。

カスタム スクリプトは、Azure Storage、または GitHub に格納します。 VM に追加するには、Azure portal を使用することができます。 テンプレート化されたデプロイの一部としてカスタム スクリプトを実行するには、カスタム スクリプト拡張機能を Azure Resource Manager テンプレートと組み合わせます。

カスタム スクリプト拡張機能を使用してスケール セット全体にアプリケーションをインストールする

Azure CLI でカスタム スクリプト拡張機能を使用するには、取得するファイルと実行するコマンドを定義する構成ファイルを作成します。 このファイルは JSON 形式です。

次の例で示すカスタム スクリプトの構成では、custom_application_v1.sh という名前のスクリプトを実行して、GitHub のリポジトリからアプリケーションをダウンロードし、ホスト インスタンスにそれをインストールします。

# yourConfigV1.json 
{
  "fileUris": ["https://raw.githubusercontent.com/yourrepo/master/custom_application_v1.sh"],
  "commandToExecute": "./custom_application_v1.sh"
}

この構成をスケール セットにデプロイするには、カスタム スクリプト拡張機能を使用します。 次のコードは、Azure CLI を使用して仮想マシン スケール セットのカスタム スクリプト拡張機能を作成する方法を示しています。 このコマンドにより、スケール セット全体の VM に新しいアプリがインストールされます。

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name yourScaleSet \
  --settings @yourConfigV1.json

カスタム スクリプト拡張機能を使用してスケール セット全体のアプリケーションを更新する

カスタム スクリプト拡張機能を使用すると、仮想マシン スケール セット全体の既存のアプリを更新することができます。 更新されたデプロイ スクリプトを参照してから、スケール セットに拡張機能を再適用します。 たとえば、以下の JSON コードでは、新しいバージョンのアプリケーションをフェッチしてインストールする構成を示します。

# yourConfigV2.json
{
  "fileUris": ["https://raw.githubusercontent.com/yourrepo/master/custom_application_v2.sh"],
  "commandToExecute": "./custom_application_v2.sh"
}

先に示したのと同じ az vmss extension set コマンドを使用して、更新されたアプリをデプロイします。ただし、今回は、新しい構成ファイルを参照する点が異なります。

az vmss extension set \
    --publisher Microsoft.Azure.Extensions \
    --version 2.0 \
    --name CustomScript \
    --resource-group yourResourceGroup \
    --vmss-name yourScaleSet \
    --settings @yourConfigV2.json

VM は、スケール セットに対するアップグレード ポリシーに従って更新されます。 このポリシーは、最初にスケール セットを作成するときに指定します。 アップグレード ポリシーには、次の 3 つのモードのいずれかを使用できます。

  • 自動: スケール セットでは、VM がいつアップグレードされるかは定義されていません。 すべてが同時に更新され、サービス停止の原因となる可能性があります。
  • ローリング: スケール セットによって、スケール セット内の VM に更新がバッチでロールアウトされます。 オプションの一時停止により、サービスの停止を最小化または排除することができます。 このモードでは、スケール セット内のマシンで少しの間、異なるバージョンのアプリが実行される可能性があります。 このモードでは、スケール セットに正常性プローブを追加するか、スケール セットにアプリケーションの正常性拡張機能を適用する必要があります。
  • 手動: スケール セット内の既存の VM は更新されません。 すべての変更を手動で行う必要があります。 これが既定のモードです。

仮想マシン スケール セットをプロビジョニングするときにアップグレード ポリシー モードを指定するには、upgrade-policy-mode オプションを使用します。 次のコード例では、Azure CLI を使用しています。

az vmss create \
  --resource-group MyResourceGroup \
  --name MyScaleSet \
  --image Ubuntu2204 \
  --upgrade-policy-mode automatic \
  --admin-username azureuser \
  --generate-ssh-keys