SB C&Sの最新技術情報 発信サイト

C&S ENGINEER VOICE

SB C&S

Azure Image BuilderでAzure仮想マシンのカスタムイメージを自動作成

パブリッククラウド
2021.03.11

皆さまこんにちは。SB C&Sの井上です。

今回は、Azure仮想マシンのカスタムイメージを自動作成するプレビュー機能である「Azure Image Builder」についてご紹介いたします。


概要

Azure Image Builderとは、Azure仮想マシン作成時に利用するカスタムイメージを自動で作成する機能です。

従来Azureで仮想マシンを作成する際に利用するカスタムイメージは、以下の手順で事前に作成する必要がありました。

  1. 仮想マシンを作成
  2. 仮想マシンを任意に構成
    (ex. 言語/タイムゾーン/システムロケート変更、必要なアプリケーションをインストール、など)
  3. Sysprepを実行して仮想マシンを一般化
  4. 一般化した仮想マシンをキャプチャしてカスタムイメージを作成
  5. 仮想マシンを削除

このカスタムイメージ作成手順は、イメージソースの仮想マシンを作成してRDPやSSHなどで接続して構成する必要があり、時間と手間がかかる作業でした。
しかし今回ご紹介するAzure Image Builderを利用することで、上記手順を全て自動化してカスタムイメージ作成手順を大幅に簡略化することができます。

   

Azure Image Builderはプレビュー中の機能であるため、利用可能なリージョンやサポートされるベースOSイメージには以下の制限があります。
(2021年2月時点)

  • 利用可能なリージョン
    • 米国東部
    • 米国東部2
    • 米国中西部
    • 米国西部
    • 米国西部2
    • 北ヨーロッパ
    • 西ヨーロッパ
  • サポートされるベースOS
    • Ubuntu 16.04/18.04
    • RHEL 7.6/7.7
    • CentOS 7.6/7.7
    • SLES 12 SP4/15/15 SP1
    • Windows 10 RS5 Enterprise/Enterprise マルチセッション/Professional
    • Windows Server 2016/2019

設定方法

今回はAzure Image Builderを利用して、Windows Server 2019をベースとしたカスタムイメージを作成する方法をご紹介します。
また、Image Builderの設定は以下の流れで行っていきます。

  1. モジュール/機能/リソースプロバイダーの登録
  2. 変数定義とリソースグループ作成
  3. ユーザー割り当てマネージドID/カスタムロール作成とアクセス許可割り当て
  4. Image Builder テンプレートの作成
  5. テンプレートのダウンロードと送信
  6. イメージビルドとビルドステータス取得

設定方法①: モジュール/機能/リソースプロバイダーの登録

Image Builderはプレビュー中の機能であり、利用するためには事前にPowerShellスクリプトのインストールと機能の登録を行う必要があります。

スクリーンショット 2021-02-04 143732.png

VirtualMachineTemplatePreview機能の登録確認スクリプトを実行し、RegistrationStatesが「Registered」になったことを確認します。

   

次に、Image Builderで使用される以下のリソースプロバイダーを登録します。

  • Microsoft.Compute
  • Microsoft.KeyVault
  • Microsoft.Storage
  • Microsoft.VirtualMachineImages

スクリーンショット 2021-02-04 145003.png

リソースプロバイダーの登録確認スクリプトを実行し、RegistrationStatesが「Registered」になったことを確認します。

設定方法②: 変数定義とリソースグループ作成

Image Builderで繰り返し使用する情報を格納する変数を定義します。
リソースグループ名やリージョンなど変数の値は任意のものを入力してください。

スクリーンショット 2021-02-04 152131.png

作成するカスタムイメージリソース、ユーザー割り当てマネージドIDリソースを管理するリソースグループを作成します。

スクリーンショット 2021-02-04 152151.png


設定方法③: ユーザー割り当てマネージドID/カスタムロール作成とアクセス許可割り当て

Image Builderでカスタムイメージを作成するためには、リソースグループにイメージを作成するためのアクセス許可を、事前にImage Builderに割り当てておく必要があります。
まずはユーザー割り当てマネージドIDを作成します。

スクリーンショット 2021-02-04 155433.png

次にロール定義を記載したカスタムロールのARMテンプレートを作成します。
作成したイメージをShared Image Galleryで管理する場合は、Managed Imageに加えてShared Image Galleryへのアクセス許可も必須となります。

図1.png

作成したARMテンプレートをBlobストレージやGitHubなどにアップロードし、URLを指定してダウンロードしてロール定義を作成し、Image BuilderのサービスプリンシパルIDに付与します。

スクリーンショット 2021-02-22 122221.png


設定方法④: Image Builder テンプレートの作成

Image Builderでカスタムイメージを作成するために、任意のカスタマイズ情報を記載したjsonファイルを作成します。
本項では各プロパティのカスタマイズオプションをご紹介します。
より詳細なカスタマイズについては以下のDocsをご参照ください。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/image-builder-json

スクリーンショット 2021-02-08 120600.png

Image Builder テンプレート作成の際は、基本形式から以下のプロパティを編集して任意のカスタマイズを適用したカスタムイメージを作成します。

  • buildTimeoutInMinutes
  • vmProfile
  • source
  • customize
  • distribute

buildTimeoutInMinutes

Image Builderがタイムアウトする時間を指定します。
通常Image Builderの操作は50分以上かかるため、60以下の数値を指定するのは非推奨です。
規定値は240分で、最大960分まで指定できるので、実行するカスタマイズの所要時間に応じて余裕を持った時間を指定しておくことをお勧めします。

vmProfile

カスタムイメージを作成するためにImage Builderによって自動的にデプロイされる仮想マシンのプロファイルを指定します。

vmSizeは仮想マシンのサイズを指定します。
既定ではStandard_D1_v2ですが、これ以外のVMを指定することができます。
リージョンで利用可能なVMのサイズは、[Get-AzVMSize -Location <ロケーション名>] コマンドで取得可能です。

osDiskSizeGBはOSディスクの容量を指定します。
OSディスクの容量はソースイメージの既定容量以下を指定するとビルド時にエラーになるので、ソースイメージのOSディスク容量と同じかそれ以上の値を指定します。

vnetConfigは、Image Builderが既存のVNETリソースと通信する必要がある場合に指定します。
VNETプロパティを指定しない場合は、Image BuilderによってVNET、パブリックIPアドレス、NSGが作成されます。

source

Image Builderで使用されるソースイメージを以下3種類から指定します。

  • PlatformImage: Marketplaceイメージをソースイメージとして使用する場合
  • ManaagedImage: マネージドイメージをソースイメージとして使用する場合
  • SharedImageVersion: Shared Image Galleryのイメージをソースイメージとして使用する場合

例えばMarketplaceのWindows Server 2019 Datacenterイメージをソースイメージとして使用する場合は、sourceプロパティを以下のように編集します。

スクリーンショット 2021-02-09 164843.png

customize

Image Builderでスクリプトを実行したり、サーバーを再起動するなど、イメージをカスタマイズする際に指定します。
customizeプロパティでは、以下の種類のカスタマイズを実行することができます。

  • シェルカスタマイザー: シェルスクリプトを実行
  • PowerShellカスタマイザー: PowerShellスクリプトを実行
  • ファイルカスタマイザー: GitHubかAzure Storageからファイルをダウンロード
  • Windows再起動カスタマイザー: Windows VMを再起動
  • Windows Updateカスタマイザー: Windows Updateを実行

customizeプロパティで上記のカスタマイズを複数記載すると、記載した順番に全ての処理をイメージソースVM上で実行します。
例えば以下のように記載すると、指定したPowerShellスクリプトを実行した後にWindows再起動が実行されます。

スクリーンショット 2021-02-16 175631.png

distribute

Image Builderで作成したカスタムイメージを配布するターゲットを指定します。
distributeプロパティでは、以下の配布ターゲットを選択できます。

  • managedImage: マネージドイメージ
  • sharedImage: Shared Image Gallery
  • VHD: ストレージアカウント内のVHD

例えばマネージドイメージに配布する場合は、distributeプロパティを以下の形式で必要な情報を入力して編集します。

スクリーンショット 2021-02-16 100152.png


設定方法⑤: テンプレートのダウンロードと送信

設定方法④で作成したImage BuilderテンプレートをGitHubリポジトリなどにアップロードし、Image Builderによるダウンロードと必要に応じて変数置換を行った後、Image Builderテンプレートをサービスに送信することでイメージテンプレートを作成することができます。

Image Builderテンプレートのダウンロードと変数置換
スクリーンショット 2021-02-22 122241.png

イメージテンプレートの作成
スクリーンショット 2021-02-19 152840.png

作成したイメージテンプレートはAzure PortalでGUIで確認可能
図3.png


設定方法⑥: イメージビルドとビルドステータス取得

設定方法⑤でイメージテンプレートが作成された後、Azure Portalのイメージテンプレートで [ビルドの開始] をクリックするか、以下のPowerShellスクリプトを実行することで、カスタムイメージを作成することができます。

Azure Portalからイメージビルドする場合
図4.png

PowerShellスクリプトでイメージビルドする場合
スクリーンショット 2021-02-22 165511.png

   

カスタムイメージ作成時、Image Builderによって [IT_<リソースグループ名><テンプレート名>] という名前のリソースグループが新規作成され、このリソースグループ内に、イメージソースVM、VNET、パブリックIPアドレス、NSG、ストレージが自動的に作成されます。
その後、設定方法④で作成したイメージテンプレートに記載したカスタマイズがイメージソースVM内で自動実行され、カスタマイズ完了後にSysprepされ、設定方法②で作成したリソースグループ内にカスタムイメージが作成されます。

イメージビルドを実行した後のビルドステータスは、Azure Portalのイメージテンプレートから確認することができます。
Azure Portal > [イメージテンプレート] > [ビルドの実行状態]
図5.png
図6.png

また、認証トークンを使用したAPIコールを作成してビルドステータスを取得することもできます。
図7.png
図8.png

ビルドステータスが「"Succeeded"」になったら、Image Builderによるカスタムイメージの作成は完了です。
作成されたカスタムイメージは設定方法②のリソースグループ内に作成され、カスタムイメージ作成のために自動作成されたイメージソースVMなどのリソースは自動的に削除されます。
図9.png


まとめ

今回はAzure仮想マシン作成時に利用するカスタムイメージを自動で作成する機能である「Azure Image Builder」についてご紹介しました。

従来のカスタムイメージ作成手順は、まずイメージソース仮想マシンを作成し、仮想マシン上で様々な設定を行った後にSysprepで一般化してカスタムイメージを作成し、カスタムイメージ作成に使用した様々なリソースを削除するという時間と手間がかかる作業が必要でしたが、Azure Image Builderを利用することでこれらの作業を自動化することができます。

Image Builderは現状スクリプトでの操作が必要な手順がほとんどですが、以前はスクリプト実行でしか確認できなかったイメージテンプレートやビルドステータスがAzure Portalから確認できるようになるなどの更新もされているので、今後GUIで確認/操作できる部分が増えていけばより簡単に利用できるサービスになるのではないかと思います。

本機能にご興味がある方は、ぜひ一度お試しください。

最後までお読みいただきありがとうございました!

著者紹介

SB C&S株式会社
ICT事業本部 技術本部 第1技術部 4課
井上 雄貴

新卒でSB C&S株式会社に入社後、Azureのプリセールスエンジニアとして案件支援、新規サービスの技術検証などに従事。
JDLA Deep Learning for ENGINEER 2019 #1を保有。
クラウド、AIのエキスパートエンジニアを目指し、日々邁進中。