SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

OsProfile を使用した Windows の Azure VM のタイムゾーン設定

leave a comment

以前 osProfile が存在しない Windows の Azure VM の修正方法 という投稿をしましたが、Azure VM では OsProfile を設定することで、VM の展開時に OS の設定を変更することができる仕組みが提供されています。

PowerShell で実行する場合は、New-AzVMConfig を使用して、OSProfile プロパティを操作することになるのかと。

Windows の VM を Azure で展開する場合、カスタマイズしたイメージを作成する場合、イメージのカスタマイズを実施して イメージ作成前に VM をプロビジョニング解除または一般化し、マシン固有の情報を削除します の方法でイメージ化するのが一般的な方法となります。

日本で VM のイメージを作成する場合、日本語化の設定 を行った状態でイメージ化して、展開を行いますが、このイメージを単純に展開すると、イメージ化する前に日本語のタイムゾーンに設定をしていても展開時には UTC のタイムゾーンとなり展開が行われます。

イメージを展開した直後に任意のタイムゾーンを設定した状態にしたい場合には、前述の OsProfile の WindowsConfiguration の TimeZone を使用することで、UTC 以外のタイムゾーンを設定した状態で展開することができます。

OsProfile を使用したタイムゾーンの設定

Windows の Azure VM のイメージををデフォルトの設定で展開すると、前述のとおり、イメージ化前に任意のタイムゾーンを設定していても、展開後は UTC が使用された状態で展開がされます。

UTC に設定される理由ですが、一般化されたイメージを展開する際に使用される応答ファイル (Unattend.xml) で UTC が指定されているためです。

展開時に使用された応答ファイルは「C:\Windows\Panther\unattend.xml」で確認することができますが、デフォルトの設定で Windows のイメージを展開すると、次のような設定が行われた状態となっています。

<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TimeZone xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:rdfe="http://schemas.microsoft.com/2009/05/WindowsAzure/ServiceManagement" xmlns:wa="http://schemas.microsoft.com/windowsazure">UTC</TimeZone>
<ComputerName xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:rdfe="http://schemas.microsoft.com/2009/05/WindowsAzure/ServiceManagement" xmlns:wa="http://schemas.microsoft.com/windowsazure">winvm</ComputerName>
</component>

 

応答ファイルの TimeZone が UTC に設定されていることが確認できますね。

OsProfile.Windows.Configuration.TimeZone を明示的に指定していない場合はこのように UTC が設定された状態で展開が行われるため、イメージ化をする前に任意のタイムゾーンを設定していても UTC の状態で設定が行われます。

今回は Bicep で VM を展開していますが、一般化されたイメージを展開する際に、任意の TimeZone を設定する場合、osProfile に次のような設定を行います。

    osProfile: {
      computerName: 'winvm'
      adminUsername: adminUsername
      adminPassword: adminPassword
      windowsConfiguration: {
        provisionVMAgent: true
        enableAutomaticUpdates: true
        timeZone: 'Tokyo Standard Time'
      }
    }

windowsConfiguration の timeZone に任意の TimeZone を指定することで、応答ファイルの TimeZone の設定が指定した内容に書き換えられます。

上記の設定であれば日本時間に設定された状態となりますので、上述の応答ファイルが次のような設定となり「Tokyo Standard Time」が指定された状態で展開が行われます。

<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TimeZone xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:rdfe="http://schemas.microsoft.com/2009/05/WindowsAzure/ServiceManagement" xmlns:wa="http://schemas.microsoft.com/windowsazure">Tokyo Standard Time</TimeZone>
<ComputerName xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:rdfe="http://schemas.microsoft.com/2009/05/WindowsAzure/ServiceManagement" xmlns:wa="http://schemas.microsoft.com/windowsazure">winvm</ComputerName>
</component>

 

windowsConfiguration の設定は展開時にのみ指定することができ、後から設定変更を行うことができないため、展開済みの VM に対してはこの方法で任意のタイムゾーンを設定することはできませんが、新規展開の VM についてはこのような方法で設定変更を行うことができます。

展開時の設定には AdditionalUnattendContent という、応答ファイルの「FirstLogonCommand」「AutoLogon」に任意のコンテンツを埋め込む方法も提供されていますので、イメージのカスタム展開にはこの設定も活用できるかもしれませんね。

Share

Written by Masayuki.Ozawa

10月 17th, 2024 at 9:57 am

Posted in Azure,Azure VM

Tagged with ,

Leave a Reply