Bereitstellen von benutzerdefinierten Skripterweiterungen auf VMs, die auf Ihrem Azure Stack Edge Pro-Gerät ausgeführt werden

GILT FÜR:Yes for Pro GPU SKUAzure Stack Edge Pro – GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure Stack Edge Mini R

Die benutzerdefinierte Skripterweiterung lädt Skripts oder Befehle auf VMs auf Ihren Azure Stack Edge Pro-Geräten herunter und führt sie aus. In diesem Artikel wird erläutert, wie Sie die benutzerdefinierte Skripterweiterung mithilfe einer Azure Resource Manager-Vorlage installieren und ausführen.

Informationen zur benutzerdefinierten Skripterweiterung

Die benutzerdefinierte Skripterweiterung ist hilfreich bei der Konfiguration nach der Bereitstellung, bei der Softwareinstallation oder bei anderen Konfigurations-/Verwaltungsaufgaben. Sie können Skripts von Azure Storage oder einem anderen zugänglichen Speicherort im Internet herunterladen, oder Sie können Skripts oder Befehle für die Erweiterungsruntime bereitstellen.

Die Erweiterung für benutzerdefinierte Skripts ist mit Azure Resource Manager-Vorlagen integriert. Sie können sie auch mithilfe der PowerShell, der Azure-Befehlszeilenschnittstelle oder der Azure Virtual Machines-REST-API ausführen.

Betriebssystem für die benutzerdefinierte Skripterweiterung

Unterstützte Betriebssysteme für die benutzerdefinierte Skripterweiterung unter Windows

Die benutzerdefinierte Skripterweiterung für Windows kann auf den folgenden Betriebssystemen ausgeführt werden. Andere Versionen funktionieren zwar möglicherweise ebenfalls, wurden jedoch nicht intern auf VMs getestet, die auf Azure Stack Edge Pro-Geräten ausgeführt werden.

Verteilung Version
Windows Server 2019 Core
Windows Server 2016 Core

Unterstützte Betriebssysteme für die benutzerdefinierte Skripterweiterung unter Linux

Die benutzerdefinierte Skripterweiterung für Linux kann auf den von folgenden Betriebssystemen ausgeführt werden. Andere Versionen funktionieren zwar möglicherweise ebenfalls, wurden jedoch nicht intern auf VMs getestet, die auf Azure Stack Edge Pro-Geräten ausgeführt werden.

Verteilung Version
Linux: Ubuntu 18.04 LTS
Linux: Red Hat Enterprise Linux 7.4, 7.5, 7.7

Voraussetzungen

  1. Laden Sie die VM-Vorlagen und Parameterdateien auf Ihrem Clientcomputer herunter. Entpacken Sie den Download in einem Verzeichnis, das Sie als Arbeitsverzeichnis verwenden.

  2. Sie sollten bereits eine VM erstellt und auf Ihrem Gerät bereitgestellt haben. Führen Sie zum Erstellen von VMs alle Schritte unter Bereitstellen von VMs auf Ihrem Azure Stack Edge Pro-Gerät mithilfe von Vorlagen aus.

    Wenn Sie ein Skript von einem externen Speicherort wie GitHub oder Azure Storage herunterladen müssen, aktivieren Sie beim Konfigurieren des Computenetzwerks den Port, der mit dem Internet verbunden ist, für Compute. Dies ermöglicht es Ihnen, das Skript herunterzuladen.

    Im folgenden Beispiel ist Port 2 mit dem Internet verbunden und wird zum Aktivieren des Computenetzwerks verwendet. Wenn Sie im vorausgehenden Schritt festgestellt haben, dass Kubernetes nicht benötigt wird, können Sie die IP-Adresse des Kubernetes-Knotens und die IP-Zuweisung für externe Dienste überspringen.

    Screenshot of the Compute pane for an Azure Stack Edge device. Compute settings for Port 2 are highlighted.

Installieren der benutzerdefinierten Skripterweiterung

Je nach Betriebssystem Ihrer VM können Sie die benutzerdefinierte Skripterweiterung für Windows oder für Linux installieren.

Benutzerdefinierte Skripterweiterung für Windows

Zum Bereitstellen der benutzerdefinierten Skripterweiterung für Linux für eine VM, die auf Ihrem Gerät ausgeführt wird, bearbeiten Sie die Parameterdatei addCSExtWindowsVM.parameters.json und stellen dann die Vorlage addCSextensiontoVM.json bereit.

Bearbeiten der Parameterdatei

Die Datei addCSExtWindowsVM.parameters.json kann die folgenden Parameter enthalten:

{
    "$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>"
            }
        }
    }
}

Geben Sie den Namen Ihrer VM, den Namen für die Erweiterung und den auszuführenden Befehl an.

Im Folgenden finden Sie die Beispielparameterdatei, die in diesem Artikel verwendet wurde.

{
    "$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"
            }
        }
    }
}

Bereitstellen der Vorlage

Stellen Sie die Vorlage addCSextensiontoVM.json bereit. Diese Vorlage stellt die Erweiterung für eine vorhandene VM bereit. Führen Sie den folgenden Befehl aus:

$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>"

Hinweis

Die Bereitstellung der Erweiterung ist ein zeitintensiver Auftrag, der etwa 10 Minuten dauert.

Hier ist eine Beispielausgabe:

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>

Nachverfolgen der Bereitstellung

Führen Sie den folgenden Befehl aus, um den Bereitstellungsstatus von Erweiterungen für eine bestimmte VM anzuzeigen:

Get-AzureRmVMExtension -ResourceGroupName <Name of resource group> -VMName <Name of VM> -Name <Name of the extension>

Hier ist eine Beispielausgabe:

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/947b3cfd-7a1b-4a90-7cc5-e52caf221332/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>

Hinweis

Nach Abschluss der Bereitstellung wird der ProvisioningState in Succeeded geändert.

Die Ausgabe der Erweiterung wird in Dateien im folgenden Ordner auf dem virtuellen Zielcomputer protokolliert.

C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension

Die angegebenen Dateien werden in den folgenden Ordner auf dem virtuellen Zielcomputer heruntergeladen.

C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.*\Downloads\<n>

Hierbei ist n eine dezimale Ganzzahl, die sich zwischen verschiedenen Ausführungen der Erweiterung ändern kann. Der Wert „1.*“ entspricht dem tatsächlichen aktuellen typeHandlerVersion-Wert der Erweiterung. Das tatsächliche Verzeichnis lautete in diesem Fall z. B. C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.9\Downloads\0.

Der Befehl für die Ausführung der benutzerdefinierten Erweiterung lautete md C:\\Users\\Public\\Documents\\test. Wenn die Erweiterung erfolgreich installiert wurde, können Sie überprüfen, ob das Verzeichnis auf der VM unter dem im Befehl angegebenen Pfad erstellt wurde.

Benutzerdefinierte Script-Erweiterung für Linux

Zum Bereitstellen der benutzerdefinierten Skripterweiterung für Linux für eine VM, die auf Ihrem Gerät ausgeführt wird, bearbeiten Sie die Parameterdatei addCSExtLinuxVM.parameters.json und stellen dann die Vorlage addCSExtensiontoVM.json bereit.

Bearbeiten der Parameterdatei

Die Datei addCSExtLinuxVM.parameters.json kann die folgenden Parameter enthalten:

{
    "$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>"
            }
        }
    }
}

Geben Sie den Namen Ihrer VM, den Namen für die Erweiterung und den auszuführenden Befehl an.

Im Folgenden finden Sie die Beispielparameterdatei, die in diesem Artikel verwendet wurde:

$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>"

Hinweis

Die Bereitstellung der Erweiterung ist ein zeitintensiver Auftrag, der etwa 10 Minuten dauert.

Hier ist eine Beispielausgabe:

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>

Der commandToExecute wurde so festgelegt, dass die Datei file2.txt im Verzeichnis /home/Administrator mit dem Inhalt some text erstellt wird. In diesem Fall können Sie überprüfen, ob die Datei unter dem angegebenen Pfad erstellt wurde.

Administrator@VM6:~$ dir
file2.txt
Administrator@VM6:~$ cat file2.txt
some text
Administrator@VM6:

Nachverfolgen des Bereitstellungsstatus

Die Vorlagenbereitstellung ist ein zeitintensiver Auftrag. Um den Bereitstellungsstatus von Erweiterungen für eine bestimmte VM zu überprüfen, öffnen Sie eine weitere PowerShell-Sitzung (als Administrator). Führen Sie den folgenden Befehl aus:

Get-AzureRmVMExtension -ResourceGroupName myResourceGroup -VMName <VM Name> -Name <Extension Name>

Hier ist eine Beispielausgabe:

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/947b3cfd-7a1b-4a90-7cc5-e52caf221332/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>

Hinweis

Nach Abschluss der Bereitstellung wird der ProvisioningState in Succeeded geändert.

Die Ausgabe der Erweiterungsausführung wird in der folgenden Datei protokolliert: /var/lib/waagent/custom-script/download/0/.

Entfernen der benutzerdefinierten Skripterweiterung

Verwenden Sie zum Entfernen der benutzerdefinierten Skripterweiterung den folgenden Befehl:

Remove-AzureRmVMExtension -ResourceGroupName <Resource group name> -VMName <VM name> -Name <Extension name>

Hier ist eine Beispielausgabe:

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

Nächste Schritte

Azure Resource Manager-Cmdlets