カスタムイメージを使用して仮想マシンスケールセットをデプロイする
こんにちは、Azure サポートチームの米田です。
今回は、ユーザが作成したカスタムのOSイメージを用いて仮想マシンスケールセット(Virtual Machine Scale Sets:VMSS)をデプロイする方法をご案内します。
※本手順は ARM (リソースマネージャー モデル / V2)を対象にした記事になります。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
(前提)仮想マシンスケールセットとは
この記事を見ている方は、多少なりともVMSSに興味を持たれているかと思いますので、VMSSなにそれ?という人はいないかと思いますが、念のため振り返ります。
VMSSは、同一の仮想マシン(以下、VM)を複数同時に展開するためのCompute リソースです。VMSSリソースを作成すると、配下にVMインスタンスが展開されます。このVMインスタンスを必要に応じて数を増やしたり(スケールアウト)、減らしたり(スケールイン)できる技術です。現時点で1つのVMSS配下にVMインスタンスを最大1000台まで展開することができます。
一般的には、このインスタンス増減を、あらかじめ設定した条件に合致した時に自動実行する自動スケールと呼ばれる仕組みと併用されます。
例えば、Webサイトを運用しており、サイトアクセスによって各VMインスタンスのCPU使用率が一定値以上になったら台数をxx台自動的に増やすといったシナリオや、特定の日時においてサイトアクセスの上昇が見込まれるので予め台数増加の実行をスケジューリングしておきたいといったシナリオでも利用されます。他にも大規模計算を実行するためのHPC基盤としても利用されることもあります。
VMSSは独立した技術で利用されるよりも、多くのシナリオで他の独立したAzureの機能(リソース)と組み合わせて利用されます。そのため、まったく触れたことのない方にはとっつきにくい部分があるかも知れません。
これからVMSSの利用を検討されるという方は、現在 Azure ポータルからで基本的な構成でデプロイすることが可能なので試しに作成することをお勧めします。
Azure Portal を使用して Virtual Machine Scale Set を作成する方法
https://docs.microsoft.com/ja-jp/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-portal-create/
こちらを作成するとVMSSだけでなく、ロードバランサ、仮想ネットワーク、パブリックIPアドレスといった様々なリソースが同時に作成されることが確認できると思います。これらリソースは次のようにそれぞれ仮想マシンスケールセットと連携しています。
目的
AzureポータルからVMSSをデプロイいただいたことがある方なら、デプロイ時にWindows ServerやLinuxディストリビューションなどのOSイメージをご選択した覚えがあると思います。Azure ポータルから選択できるOSイメージは、Azure Marketplaceで公開されているイメージです。
VMSSのスケールアウトによってインスタンスが増える場合は、このVMSSと紐づいたイメージをベースに作成されます。
これはつまり、独自のアプリケーションやミドルウェアをVMSSで利用したい場合は、VMSSのデプロイ時にカスタマイズ設定を施したイメージを事前に指定しておかないといけないということを意味します。イメージをカスタマイズする上で、当イメージを基に VM が展開された場合に、初期設定を自動完了させ、既存のアプリケーションに加わるなどの処理を OS の起動スクリプトを通じて自動化しておくことが重要です。例えば、Web アプリケーションであれば、VM が作成された段階でバックエンドのデータベースに連携し、すぐにサービスが展開出来るようなセットアップを完了させる処理ということになります。
これはVMSSを利用してシステムを実運用する、ほとんどのシナリオで注意しないといけないポイントだと思います。
本記事では、VMSSのデプロイ時に自身で作成したイメージを指定してデプロイする方法をご紹介します
手順
本書では、次の流れに沿って自身で作成したイメージを指定してVMSSをデプロイする方法を次の 3 STEPでご紹介します。
- 仮想マシンで一般化おこないOSのマスターイメージを作成する
- 一般化済みのイメージをAzureの「イメージ」リソースとして登録する
- 登録した一般化イメージからVMSSをデプロイする
...と思いましたが、1と2の手順は既に弊社blogでご紹介していました。
管理ディスク (Managed Disks) の “イメージ” リソースを使用し、仮想マシンを複数台展開する
https://blogs.technet.microsoft.com/jpaztech/2017/05/10/deployvmsfrommanagedimage/
上記の記事は、自身で作成したイメージから通常の仮想マシンを作成していますが、イメージの作成方法はVMとVMSSで共通です。
手順1は、記事内の「1. 仮想マシン内部で一般化する」、手順2は「2. 一般化済みマスター イメージを"イメージ" リソースに登録する。」をご参照ください。
3. 登録した一般化イメージからVMSSをデプロイする
登録された”イメージ”リソースを元にVMSSをデプロイします。
恐縮ですが、この操作は、現在Azure ポータルからUIで実行いただくことができません。
Azure Resource Manager(ARM)テンプレートと呼ばれるテンプレートファイルの作成やコマンドベースの作業が必要となります。
今回はテンプレートによる手順を紹介します。
■手順
- Azureポータル(https://portal.azure.com)にアクセスします
- [+新規]を押します
- 検索ボックスで、Template deployment を検索します。「テンプレートのデプロイ (英語名:Template deployment)」を選択します
- [作成] を押します
- [カスタム デプロイ] が表示されましたら、[エディターで独自のテンプレートを作成する]を選択します
- [テンプレートの編集]にて、リンクのようなテンプレートファイルを入力し、[保存]します
- 表示されたパラメータを入力します
・vmSSName:VMSSの名称
・instanceCount:初期作成時のインスタンス数
・vmSize:VMSSのインスタンスサイズ
・adminUsername:初期ユーザアカウント名
・adminPassword:初期ユーザ名
・sourceImageName:
・frontEndLBPort:VMSS配下のインスタンスにアクセスするためのロードバランサのフロントエンドポート
・backEndLBPort:ロードバランサ配下のVMSSインスタンスのバックエンドポート - [購入]をクリックし、デプロイをおこないます
■テンプレートの解説
上記で利用したtemplateはAzure Resource Manager テンプレートの形式で記述されています。
Azure Resource Manager テンプレートの構造と構文の詳細
/ja-jp/azure/azure-resource-manager/resource-group-authoring-templates
作成される各リソースは、resources セクションにて定義されており、定義されているリソースはtypeを
見ることでわかります。
Microsoft.Network/virtualNetworks … 仮想ネットワーク
Microsoft.Network/publicIPAddresses … パブリックIPアドレス
Microsoft.Compute/virtualMachineScaleSets … 仮想マシンスケールセット
Microsoft.Insights/autoscaleSettings … 自動スケール設定
特に今回は事前に作成したイメージリソースを指定しましたが、これは次のimageReferencenにて
イメージリソースのリソースのIDを指定することで実現しています。
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"sku": {
"name": "[parameters('vmSize')]",
"tier": "Standard",
"capacity": "[parameters('instanceCount')]"
},
"name": "[parameters('vmSSName')]",
"apiVersion": "[variables('computeApiVersion')]",
"location": "[resourceGroup().location]",
"properties": {
"overprovision": "true",
"upgradePolicy": {
"mode": "Manual"
},
"virtualMachineProfile": {
"storageProfile": {
"imageReference": {
"id": "[resourceId('Microsoft.Compute/images', parameters('sourceImageName'))]"
}
},
"osProfile": {
"computerNamePrefix": "[parameters('vmSSName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "nic1",
"properties": {
"primary": "true",
"ipConfigurations": [
{
"name": "ip1",
"properties": {
"subnet": {
"id": "[variables('subnetRef')]"
},
"loadBalancerBackendAddressPools": [
{
"id": "[variables('lbBEAddressPoolID')]"
}
]
}
}
]
}
}
]
}
}
},
"dependsOn": [
"[concat('Microsoft.Network/loadBalancers/',variables('lbName'))]",
"[concat('Microsoft.Network/virtualNetworks/',variables('virtualNetworkName'))]"
]
},
テンプレートの内容は、デプロイするリソースの設計図のようなものなので、構成を変更する場合、カスタ
マイズしていく必要がございます。テンプレート自体の記述形式や、各リソースをデプロイするにあたり
どのようなパラメータが指定できるかは次にリファレンスがありますので、まずはこのような文章からテン
プレートの作法の理解を確認することをお勧めします。
初めての Azure Resource Manager テンプレートを作成およびデプロイする
/ja-jp/azure/azure-resource-manager/resource-manager-create-first-template
Microsoft.Compute/virtualMachineScaleSets template reference
/en-us/azure/templates/microsoft.compute/virtualmachinescalesets
最後に
カスタムイメージを使用して作成されたVMSSは、後から紐づいたイメージを変更することができます。
そのため、カスタムイメージ内のアプリケーションやミドルウェアのバージョンを更新した新しいバージョンのOSイメージを作成し、既存のVMSSに反映してシステムをアップデートしていくことが可能です。
今回はカスタムイメージを使用したVMSSのデプロイをご紹介しましたが、また別の機会に既存のVMSSのイメージを更新する方法をご案内させていただきます。