チュートリアル: Azure CLI を使用した Virtual Machine Scale Sets へのアプリケーションのインストール
スケール セット内の仮想マシン (VM) インスタンスでアプリケーションを実行する には、まず、アプリケーション コンポーネントと必要なファイルをインストールする必要があります。 前のチュートリアルでは、カスタム VM イメージを作成および使用して VM インスタンスをデプロイする方法について学習しました。 このカスタム イメージには、手動によるアプリケーションのインストールと構成が含まれていました。 このほか、各 VM インスタンスがデプロイされた後のスケール セットへのアプリケーションのインストールを自動化したり、既にスケール セットで実行されているアプリケーションを更新したりできます。 このチュートリアルで学習する内容は次のとおりです。
- スケール セットへのアプリケーションの自動インストール
- Azure カスタム スクリプト拡張機能の使用
- スケール セットで実行中のアプリケーションの更新
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.0.29 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
Azure カスタム スクリプト拡張機能とは
カスタム スクリプト拡張機能は、Azure VM でスクリプトをダウンロードし、実行します。 この拡張機能は、デプロイ後の構成、ソフトウェアのインストール、その他の構成や管理タスクに役立ちます。 スクリプトは、Azure ストレージや GitHub からダウンロードできます。また、拡張機能の実行時に Azure Portal に提供することもできます。
カスタム スクリプト拡張機能は Azure Resource Manager テンプレートと統合されており、Azure CLI、Azure PowerShell、Azure portal、または REST API と組み合わせて使用することもできます。 詳細については、「Windows のカスタム スクリプト拡張機能」を参照してください。
カスタム スクリプト拡張機能を Azure CLI で使用するには、取得するファイルと実行するコマンドが定義された JSON ファイルを作成します。 これらの JSON 定義は、一貫したアプリケーション インストールを適用するためにスケール セット デプロイメント全体で再利用することができます。
カスタム スクリプト拡張機能の定義の作成
カスタム スクリプト拡張機能が動作していることを確認するには、NGINX Web サーバーをインストールしてスケール セット VM インスタンスのホスト名を出力する機能を備えたスケール セットを作成します。 次のカスタム スクリプト拡張機能の定義によって、GitHub からサンプル スクリプトがダウンロードされ、必要なパッケージがインストールされた後、VM インスタンスのホスト名が基本的な HTML ページに書き込まれます。
現在のシェルで、customConfig.json というファイルを作成し、次の構成を貼り付けます。 たとえば、ローカル コンピューター上にない Cloud Shell でファイルを作成します。 任意のエディターを使用することができます。 このチュートリアルでは、Vi を使用します。 Cloud Shell で vi
を入力します。 次の JSON をエディターに貼り付け、「:w customConfig.json
」と入力します。
{
"fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx.sh"],
"commandToExecute": './automate_nginx.sh'
}
注意
以下の --settings パラメーターで (customConfig.json ファイルを参照するのではなく) JSON を直接参照する場合は、JSON ブロック内で単一引用符 (') と二重引用符 (") の使用を逆にする必要がある場合があります。
スケール セットを作成する
重要
2023 年 11 月以降、PowerShell と Azure CLI を使用して作成された VM スケール セットは、オーケストレーション モードが指定されていない場合、既定でフレキシブル オーケストレーション モードになります。 この変更の詳細と実行する必要があるアクションについては、「VMSS PowerShell/CLI のお客様向けの重大な変更 - Microsoft Community Hub」を参照してください
az group create を使用して、リソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。
az group create --name myResourceGroup --location eastus
ここでは、az vmss create を使用して仮想マシン スケール セットを作成します。 次の例では、myScaleSet という名前のスケール セットを作成し、存在しない場合は SSH キーを生成します。
az vmss create \
--resource-group myResourceGroup \
--name myScaleSet \
--image Ubuntu2204 \
--orchestration-mode Flexible \
--admin-username azureuser \
--generate-ssh-keys
すべてのスケール セットのリソースと VM を作成および構成するのに数分かかります。
カスタム スクリプト拡張機能の適用
az vmss 拡張機能セットを使用して、カスタム スクリプト拡張機能構成をスケール セット内の VM インスタンスに適用します。 次の例では、customConfig.json 構成を myResourceGroup という名前のリソース グループ内の myScaleSet VM インスタンスに適用します。
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings customConfig.json
注意事項
ファイル名の大文字と小文字は区別されます。 エラーを回避するには、これらの手順に記載されている正確なファイル名を使います。
既存のスケール セット インスタンスに拡張機能を適用する
すべてのインスタンスをアップグレードして、カスタム スクリプトを適用します。 アップグレードには数分かかることがあります。
az vmss update-instances --resource-group myResourceGroup --name myScaleSet --instance-ids "*"
ポート 80 へのトラフィックを許可する
トラフィックがロード バランサーを経由して仮想マシンに流れるようにするには、既定のネットワーク セキュリティ グループを更新する必要があります。
az network nsg rule create --name AllowHTTP --resource-group myResourceGroup --nsg-name myScaleSetNSG --access Allow --priority 1010 --destination-port-ranges 80
スケール セットのテスト
Web サーバーが動いていることを確認するには、az network public-ip show でロード バランサーのパブリック IP アドレスを取得します。 次の例では、スケール セットの一部として作成された myScaleSetLBPublicIP の IP アドレスを取得します。
az network public-ip show \
--resource-group myResourceGroup \
--name myScaleSetLBPublicIP \
--query [ipAddress] \
--output tsv
ロード バランサーのパブリック IP アドレスを Web ブラウザーに入力します。 ロード バランサーは、次の例に示すように、VM インスタンスのいずれかにトラフィックを配分します。
次の手順で更新されたバージョンを確認できるように、Web ブラウザーを開いたままにしておきます。
アップグレード ポリシーを変更する
前のセクションでは、更新されたアプリケーションをすべてのスケール セット インスタンスに適用するために、手動アップグレードが必要でした。 既存のすべてのスケール セット インスタンスに更新を自動的に適用できるようにするには、アップグレード ポリシーを手動から自動に更新します。 アップグレード ポリシーの詳細については、「Virtual Machine Scale Sets のアップグレード ポリシー」を参照してください。
az vmss update \
--name myScaleSet \
--resource-group myResourceGroup \
--set upgradePolicy.mode=automatic
アプリのデプロイの更新
現在のシェルで、customConfigv2.json というファイルを作成し、次の構成を貼り付けます。 この定義では、アプリケーションのインストール スクリプトの更新された v2 バージョンを実行します。
{
"fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx_v2.sh"],
"commandToExecute": "./automate_nginx_v2.sh"
}
az vmss extension set を使って、もう一度カスタム スクリプト拡張機能構成をスケール セットに適用します。 customConfigv2.json は、アプリケーションの更新されたバージョンを適用するために使用されています。
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings @customConfigv2.json
現在はスケール セットで自動アップグレード ポリシーが使われているため、更新されたアプリケーションは自動的に既存のスケール セット インスタンスに適用されます。 Web ブラウザーを最新の情報に更新して、更新されたアプリケーションを表示します。
リソースをクリーンアップする
スケール セットと追加のリソースを削除するには、az group delete を使用して、リソース グループとそのすべてのリソースを削除します。 --no-wait
パラメーターは、操作の完了を待たずにプロンプトに制御を戻します。 --yes
パラメーターは、追加のプロンプトを表示せずにリソースの削除を確定します。
az group delete --name myResourceGroup --no-wait --yes
次のステップ
このチュートリアルでは、Azure CLI を使用して自動的にアプリケーションをスケール セットにインストールし、更新する方法について学習しました。
- スケール セットへのアプリケーションの自動インストール
- Azure カスタム スクリプト拡張機能の使用
- スケール セットで実行中のアプリケーションの更新
次のチュートリアルに進み、スケール セットを自動的にスケーリングする方法を学習してください。