Compartilhar via


Implantar a extensão de script personalizado em VMs em execução no seu dispositivo do 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 personalizado baixa e executa scripts ou comandos em máquinas virtuais em execução em dispositivos do Azure Stack Edge Pro. Este artigo detalha como instalar e executar a extensão de script personalizado usando um modelo do Azure Resource Manager.

Sobre a extensão de script personalizado

Essa extensão de script personalizado é útil para a configuração pós-implantação, instalação de software ou qualquer outra configuração/tarefa de gerenciamento. Você pode fazer o download de scripts a partir do Armazenamento do Microsoft Azure ou outro local acessível da internet. Também é possível fornecer scripts ou comandos para o runtime da extensão.

A extensão de Script personalizado se integra com os modelos do Azure Resource Manager. Você também pode executá-la usando a CLI do Azure, o PowerShell, o portal do Azure ou a API de REST de máquinas virtuais do Azure.

Sistema operacional para a extensão de script personalizado

Sistema operacional com suporte para a extensão de script personalizado no Windows

A extensão de script personalizado para Windows executará nos seguintes SOs. Outras versões podem funcionar, mas não foram testadas internamente em VMs sendo executadas em dispositivos Azure Stack Edge Pro.

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

Sistema operacional com suporte para a extensão de script personalizado no Linux

A extensão de script personalizado para Linux executará nos seguintes SOs. Outras versões podem funcionar, mas não foram testadas internamente em VMs sendo executadas 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. Baixe os modelos de VM e os arquivos de parâmetros no computador 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 no seu Azure Stack Edge Pro usando modelos.

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

    No exemplo a seguir, a Porta 2 foi conectada à Internet e 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ó do 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 a extensão de script personalizado

Dependendo do sistema operacional da VM, é possível instalar a extensão de script personalizado para Windows ou para Linux.

Extensão de script personalizado para o Windows

Para implantar a extensão de script personalizado para Windows para uma VM em execução no seu dispositivo, edite o arquivo de parâmetros addCSExtWindowsVM.parameters.json e, em seguida, implante o 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 exemplo de arquivo de parâmetro 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"
            }
        }
    }
}

Implantar modelo

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

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

Observação

A implantação da extensão é um trabalho de execução prolongada e demora 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>

Acompanhar a implantação

Para verificar o estado de implantação de extensões para 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>

Observação

Quando a implantação estiver concluída, ProvisioningState mudará para Succeeded.

A saída da extensão é registrada nos arquivos localizados na pasta a seguir, na máquina virtual de destino.

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

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

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

em que n é um inteiro decimal que pode ser alterado entre as execuções da extensão. O valor 1.* corresponde ao valor typeHandlerVersion atual e real da extensão. Por exemplo, o diretório real nesta instância era C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.9\Downloads\0.

Nesta instância, 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 o Linux

Para implantar a extensão de script personalizado para Windows para uma VM em execução no seu dispositivo, edite o arquivo de parâmetros addCSExtLinuxVM.parameters.json e, em seguida, implante o 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.

Vejamos um exemplo de arquivo de parâmetro 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>"

Observação

A implantação da extensão é um trabalho de execução prolongada e demora 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 file2.txt no diretório /home/Administrator e o conteúdo do arquivo é 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:

Acompanhar o status da implantação

A implantação de modelo é um trabalho de execução prolongada. Para verificar o estado de implantação de extensões para uma determinada VM, abra outra sessão do PowerShell (execute como administrador). Execute o comando a seguir:

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>

Observação

Quando a implantação estiver concluída, ProvisioningState mudará 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óximas etapas

Cmdlets do Azure Resource Manager