Azure Stack Edge Pro デバイスで実行されている VM にカスタム スクリプト拡張機能をデプロイする
適用対象: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
カスタム スクリプト拡張機能では、Azure Stack Edge Pro デバイスで実行されている仮想マシンにスクリプトまたはコマンドをダウンロードし、それらを実行できます。 この記事では、Azure Resource Manager テンプレートを使ってカスタム スクリプト拡張機能をインストールし、実行する方法について説明します。
カスタム スクリプト拡張機能について
カスタム スクリプト拡張機能は、デプロイ後の構成、ソフトウェアのインストール、その他の構成タスクや管理タスクに役立ちます。 スクリプトは、Azure Storage や他のアクセス可能なインターネットの場所からダウンロードできます。また、拡張機能のランタイムにスクリプトやコマンド提供することもできます。
カスタム スクリプト拡張機能は Azure Resource Manager テンプレートと統合します。 また、Azure CLI、PowerShell、または Azure Virtual Machines REST API を使って実行することもできます。
カスタムスクリプト拡張機能に対応している OS
Windows 上のカスタム スクリプト拡張機能に対応している OS
Windows 用のカスタム スクリプト拡張機能は、次の OS で動作します。 その他のバージョンも機能する可能性がありますが、Azure Stack Edge Pro デバイスで実行されている VM 上で社内テストされていません。
Distribution | Version |
---|---|
Windows Server 2019 | コア |
Windows Server 2016 | コア |
Linux 上のカスタム スクリプト拡張機能に対応している OS
Linux 用のカスタム スクリプト拡張機能は、次の OS で動作します。 その他のバージョンも機能する可能性がありますが、Azure Stack Edge Pro デバイスで実行されている VM 上で社内テストされていません。
Distribution | Version |
---|---|
Linux: Ubuntu | 18.04 LTS |
Linux: Red Hat Enterprise Linux | 7.4、7.5、7.7 |
前提条件
クライアント コンピューターに VM テンプレートとパラメーター ファイルをダウンロードします。 作業ディレクトリとして使用するディレクトリにダウンロードしたものを解凍します。
デバイス上に VM を作成してデプロイする必要があります。 VM を作成するには、テンプレートを使用して Azure Stack Edge Pro に VM をデプロイする方法に関するページのすべての手順に従います。
外部 (GitHub や Azure Storage など) からスクリプトをダウンロードし、コンピューティング ネットワークを構成する必要がある場合は、インターネットに接続されているポートをコンピューティング用に有効化してください。 これにより、スクリプトをダウンロードできます。
次の例では、ポート 2 がインターネットに接続され、コンピューティング ネットワークを有効にするために使用されています。 前の手順で Kubernetes が不要であることがわかっている場合は、Kubernetes ノード IP と外部サービス IP の割り当てをスキップできます。
カスタム スクリプト拡張機能のインストール
VM のオペレーティング システムに応じて、Windows 用または Linux 用のカスタム スクリプト拡張機能をインストールできます。
Windows でのカスタムのスクリプト拡張機能
デバイスで実行されている VM に対して Windows 用のカスタム スクリプト拡張機能をデプロイするには、addCSExtWindowsVM.parameters.json
パラメーター ファイルを編集し、その後でテンプレートをデプロイしますaddCSextensiontoVM.json
。
パラメーター ファイルを編集する
addCSExtWindowsVM.parameters.json
ファイルでは、次のパラメーターを受け取ります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"value": "<Name of VM>"
},
"extensionName": {
"value": "<Name of extension>"
},
"publisher": {
"value": "Microsoft.Compute"
},
"type": {
"value": "CustomScriptExtension"
},
"typeHandlerVersion": {
"value": "1.10"
},
"settings": {
"value": {
"commandToExecute" : "<Command to execute>"
}
}
}
}
VM 名、拡張機能の名前、実行するコマンドを指定します。
この記事で使用したパラメーター ファイルのサンプルを次に示します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"value": "VM5"
},
"extensionName": {
"value": "CustomScriptExtension"
},
"publisher": {
"value": "Microsoft.Compute"
},
"type": {
"value": "CustomScriptExtension"
},
"typeHandlerVersion": {
"value": "1.10"
},
"settings": {
"value": {
"commandToExecute" : "md C:\\Users\\Public\\Documents\\test"
}
}
}
}
テンプレートのデプロイ
テンプレート addCSextensiontoVM.json
をデプロイします。 このテンプレートにより、既存の VM に拡張機能がデプロイされます。 次のコマンドを実行します。
$templateFile = "<Path to addCSExtensiontoVM.json file>"
$templateParameterFile = "<Path to addCSExtWindowsVM.parameters.json file>"
$RGName = "<Resource group name>"
New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "<Deployment name>"
Note
拡張機能のデプロイは長時間実行されるジョブであり、完了するまでに約 10 分かかります。
出力例を次に示します。
PS C:\WINDOWS\system32> $templateFile = "C:\12-09-2020\ExtensionTemplates\addCSExtensiontoVM.json"
PS C:\WINDOWS\system32> $templateParameterFile = "C:\12-09-2020\ExtensionTemplates\addCSExtWindowsVM.parameters.json"
PS C:\WINDOWS\system32> $RGName = "myasegpuvm1"
PS C:\WINDOWS\system32> New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "deployment7"
DeploymentName : deployment7
ResourceGroupName : myasegpuvm1
ProvisioningState : Succeeded
Timestamp : 12/17/2020 10:07:44 PM
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
vmName String VM5
extensionName String CustomScriptExtension
publisher String Microsoft.Compute
type String CustomScriptExtension
typeHandlerVersion String 1.10
settings Object {
"commandToExecute": "md C:\\Users\\Public\\Documents\\test"
}
Outputs :
DeploymentDebugLogLevel :
PS C:\WINDOWS\system32>
デプロイの追跡
特定の VM の拡張機能のデプロイ状態を確認するには、次のコマンドを実行します。
Get-AzureRmVMExtension -ResourceGroupName <Name of resource group> -VMName <Name of VM> -Name <Name of the extension>
出力例を次に示します。
PS C:\WINDOWS\system32> Get-AzureRmVMExtension -ResourceGroupName myasegpuvm1 -VMName VM5 -Name CustomScriptExtension
ResourceGroupName : myasegpuvm1
VMName : VM5
Name : CustomScriptExtension
Location : dbelocal
Etag : null
Publisher : Microsoft.Compute
ExtensionType : CustomScriptExtension
TypeHandlerVersion : 1.10
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myasegpuvm1/providers/Microsoft.Compute/virtualMachines/VM5/extensions/CustomScriptExtension
PublicSettings : {
"commandToExecute": "md C:\\Users\\Public\\Documents\\test"
}
ProtectedSettings :
ProvisioningState : Creating
Statuses :
SubStatuses :
AutoUpgradeMinorVersion : True
ForceUpdateTag :
PS C:\WINDOWS\system32>
Note
デプロイが完了すると、ProvisioningState
が Succeeded
に変わります。
デプロイ先の仮想マシンの次のフォルダーにあるファイルに拡張機能出力のログが記録されます。
C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension
デプロイ先の仮想マシンの次のフォルダーに指定のファイルがダウンロードされます。
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.*\Downloads\<n>
n は 10 進整数であり、拡張機能の実行間で変わる可能性があります。 1.* の値は、拡張機能の実際の現在の typeHandlerVersion
の値と一致します。 たとえば、この例での実際のディレクトリは C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.9\Downloads\0
でした。
この例の場合、カスタム拡張機能に対して実行するコマンドは md C:\\Users\\Public\\Documents\\test
でした。 拡張機能が正常にインストールされたら、コマンドで指定したパスにある VM にディレクトリが作成されたことを確認できます。
Linux 用カスタム スクリプト拡張機能
デバイスで実行されている VM に対して Windows 用のカスタム スクリプト拡張機能をデプロイするには、addCSExtLinuxVM.parameters.json
パラメーター ファイルを編集し、その後でテンプレートをデプロイしますaddCSExtensiontoVM.json
。
パラメーター ファイルを編集する
addCSExtLinuxVM.parameters.json
ファイルでは、次のパラメーターを受け取ります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"value": "<Name of your VM>"
},
"extensionName": {
"value": "<Name of your extension>"
},
"publisher": {
"value": "Microsoft.Azure.Extensions"
},
"type": {
"value": "CustomScript"
},
"typeHandlerVersion": {
"value": "2.0"
},
"settings": {
"value": {
"commandToExecute" : "<Command to execute>"
}
}
}
}
VM 名、拡張機能の名前、実行するコマンドを指定します。
この記事で使用したパラメーター ファイルのサンプルを次に示します。
$templateFile = "<Path to addCSExtensionToVM.json file>"
$templateParameterFile = "<Path to addCSExtLinuxVM.parameters.json file>"
$RGName = "<Resource group name>"
New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "<Deployment name>"
Note
拡張機能のデプロイは長時間実行されるジョブであり、完了するまでに約 10 分かかります。
出力例を次に示します。
PS C:\WINDOWS\system32> $templateFile = "C:\12-09-2020\ExtensionTemplates\addCSExtensionToVM.json"
PS C:\WINDOWS\system32> $templateParameterFile = "C:\12-09-2020\ExtensionTemplates\addCSExtLinuxVM.parameters.json"
PS C:\WINDOWS\system32> $RGName = "myasegpuvm1"
PS C:\WINDOWS\system32> New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "deployment99"
DeploymentName : deployment99
ResourceGroupName : myasegpuvm1
ProvisioningState : Succeeded
Timestamp : 12/18/2020 1:55:23 AM
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
vmName String VM6
extensionName String LinuxCustomScriptExtension
publisher String Microsoft.Azure.Extensions
type String CustomScript
typeHandlerVersion String 2.0
settings Object {
"commandToExecute": "sudo echo 'some text' >> /home/Administrator/file2.txt"
}
Outputs :
DeploymentDebugLogLevel :
PS C:\WINDOWS\system32>
commandToExecute
は /home/Administrator
ディレクトリにファイル file2.txt
を作成するように設定されました。ファイルの内容は some text
です。 この場合は、指定されたパスにファイルが作成されたことを確認できます。
Administrator@VM6:~$ dir
file2.txt
Administrator@VM6:~$ cat file2.txt
some text
Administrator@VM6:
デプロイの状態の追跡
テンプレートのデプロイは、長時間実行されるジョブです。 特定の VM の拡張機能のデプロイ状態を確認するには、別の PowerShell セッションを開きます (管理者として実行します)。 次のコマンドを実行します。
Get-AzureRmVMExtension -ResourceGroupName myResourceGroup -VMName <VM Name> -Name <Extension Name>
出力例を次に示します。
PS C:\WINDOWS\system32> Get-AzureRmVMExtension -ResourceGroupName myasegpuvm1 -VMName VM5 -Name CustomScriptExtension
ResourceGroupName : myasegpuvm1
VMName : VM5
Name : CustomScriptExtension
Location : dbelocal
Etag : null
Publisher : Microsoft.Compute
ExtensionType : CustomScriptExtension
TypeHandlerVersion : 1.10
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myasegpuvm1/providers/Microsoft.Compute/virtualMachines/VM5/extensions/CustomScriptExtension
PublicSettings : {
"commandToExecute": "md C:\\Users\\Public\\Documents\\test"
}
ProtectedSettings :
ProvisioningState : Creating
Statuses :
SubStatuses :
AutoUpgradeMinorVersion : True
ForceUpdateTag :
PS C:\WINDOWS\system32>
Note
デプロイが完了すると、ProvisioningState
が Succeeded
に変わります。
拡張機能の実行の出力は、/var/lib/waagent/custom-script/download/0/
ファイルにログ記録されます。
カスタムスクリプト拡張機能の削除
カスタム スクリプト拡張機能を削除するには、次のコマンドを使用します。
Remove-AzureRmVMExtension -ResourceGroupName <Resource group name> -VMName <VM name> -Name <Extension name>
出力例を次に示します。
PS C:\WINDOWS\system32> Remove-AzureRmVMExtension -ResourceGroupName myasegpuvm1 -VMName VM6 -Name LinuxCustomScriptExtension
Virtual machine extension removal operation
This cmdlet will remove the specified virtual machine extension. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Yes
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK