Implantar a Extensão de Script Personalizada em VMs em execução em seu dispositivo Azure Stack Edge Pro

APLICA-SE A:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro R Azure Stack Edge Mini RYes for Mini R SKU

A Extensão de Script Personalizada baixa e executa scripts ou comandos em máquinas virtuais em execução em seus dispositivos Azure Stack Edge Pro. Este artigo detalha como instalar e executar a Extensão de Script Personalizada usando um modelo do Azure Resource Manager.

Sobre a extensão de script personalizada

A Extensão de Script Personalizada é útil para configuração pós-implantação, instalação de software ou qualquer outra tarefa de configuração/gerenciamento. Você pode baixar scripts do Armazenamento do Azure ou de outro local acessível da Internet ou pode fornecer scripts ou comandos para o tempo de execução da extensão.

A Extensão de Script Personalizada integra-se com modelos do Azure Resource Manager. Você também pode executá-lo usando a CLI do Azure, o PowerShell ou a API REST das Máquinas Virtuais do Azure.

OS para extensão de script personalizado

SO suportado para extensão de script personalizado no Windows

A extensão de script personalizado para Windows será executada nos seguintes sistemas operacionais. Outras versões podem funcionar, mas não foram testadas internamente em VMs em execução em dispositivos Azure Stack Edge Pro.

Distribuição Versão
Windows Server 2019 Principal
Windows Server 2016 Principal

SO suportado para extensão de script personalizado no Linux

A extensão de script personalizado para Linux será executada nos seguintes sistemas operacionais. Outras versões podem funcionar, mas não foram testadas internamente em VMs em execução em dispositivos Azure Stack Edge Pro.

Distribuição Versão
Linux: Ubuntu 18,04 LTS
Linux: Red Hat Enterprise Linux 7.4, 7.5, 7.7

Pré-requisitos

  1. Transfira os ficheiros de modelos e parâmetros de VM para a máquina cliente. Descompacte o download em um diretório que você usará como um diretório de trabalho.

  2. Você deve ter uma VM criada e implantada em seu dispositivo. Para criar VMs, siga todas as etapas em Implantar VM em seu Azure Stack Edge Pro usando modelos.

    Se você precisar baixar um script como do GitHub ou do Armazenamento do Azure externamente, ao configurar a rede de computação, habilite a porta conectada à Internet para computação. Isso permite que você baixe o script.

    No exemplo a seguir, a porta 2 foi conectada à Internet e foi usada para habilitar a rede de computação. Se você identificou que o Kubernetes não é necessário na etapa anterior, poderá ignorar o IP do nó Kubernetes e a atribuição de IP do serviço externo.

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

Instalar extensão de script personalizada

Dependendo do sistema operacional da sua VM, você pode instalar a Extensão de Script Personalizada para Windows ou Linux.

Extensão de Script Personalizado para o Windows

Para implantar a Extensão de Script Personalizada para Windows para uma VM em execução no seu dispositivo, edite o arquivo de parâmetros e implante o addCSExtWindowsVM.parameters.json modelo addCSextensiontoVM.json.

Editar arquivo de parâmetros

O arquivo addCSExtWindowsVM.parameters.json usa os seguintes parâmetros:

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

Forneça o nome da VM, o nome da extensão e o comando que você deseja executar.

Aqui está o arquivo de parâmetro de exemplo que foi usado neste artigo.

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

Implementar o modelo

Implante o modelo addCSextensiontoVM.json. Este modelo implanta a extensão em uma VM existente. Execute o seguinte comando:

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

Nota

A implantação da extensão é um trabalho de longa execução e leva cerca de 10 minutos para ser concluída.

Aqui está um exemplo de saída:

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>

Acompanhe a implantação

Para verificar o estado de implantação das extensões de uma determinada VM, execute o seguinte comando:

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

Aqui está um exemplo de saída:

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>

Nota

Quando a implantação estiver concluída, as ProvisioningState alterações para Succeeded.

A saída da extensão é registada nos ficheiros encontrados na seguinte pasta na máquina virtual de destino.

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

Os arquivos especificados são baixados na seguinte pasta na máquina virtual de destino.

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

onde n é um inteiro decimal, que pode mudar entre execuções da extensão. O valor 1.* corresponde ao valor real e atual typeHandlerVersion da extensão. Por exemplo, o diretório real neste caso era C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.9\Downloads\0.

Neste caso, o comando a ser executado para a extensão personalizada foi: md C:\\Users\\Public\\Documents\\test. Quando a extensão é instalada com êxito, você pode verificar se o diretório foi criado na VM no caminho especificado no comando.

Extensão de Script Personalizado para Linux

Para implantar a Extensão de Script Personalizada para Windows para uma VM em execução no seu dispositivo, edite o arquivo de parâmetros e implante o addCSExtLinuxVM.parameters.json modelo addCSExtensiontoVM.json.

Editar arquivo de parâmetros

O arquivo addCSExtLinuxVM.parameters.json usa os seguintes parâmetros:

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

Forneça o nome da VM, o nome da extensão e o comando que você deseja executar.

Aqui está um arquivo de parâmetro de exemplo que foi usado neste artigo:

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

Nota

A implantação da extensão é um trabalho de longa execução e leva cerca de 10 minutos para ser concluída.

Aqui está um exemplo de saída:

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>

O commandToExecute foi definido para criar um arquivo no /home/Administrator diretório e o conteúdo do arquivo file2.txt é some text. Nesse caso, você pode verificar se o arquivo foi criado no caminho especificado.

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

Acompanhe o status da implantação

A implantação de modelos é um trabalho de longa duração. Para verificar o estado de implantação das extensões de uma determinada VM, abra outra sessão do PowerShell (execute como administrador). Execute o seguinte comando:

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

Aqui está um exemplo de saída:

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>

Nota

Quando a implantação estiver concluída, as ProvisioningState alterações para Succeeded.

A saída de execução da extensão é registrada no seguinte arquivo: /var/lib/waagent/custom-script/download/0/.

Remover extensão de script personalizado

Para remover a extensão de script personalizado, use o seguinte comando:

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

Aqui está um exemplo de saída:

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

Próximos passos

Cmdlets do Azure Resource Manager