Implementar extensão de script personalizada em VMs em execução no seu dispositivo Azure Stack Edge Pro

APLICA-SE A:Yes for Pro GPU SKU Azure Stack Edge Pro - GPUAzureYes for Pro 2 SKU Stack Edge Pro 2AzureYes for Pro R SKU Stack Edge Pro RAzureYes for Mini R SKU Stack Edge Mini R

A Extensão de Scripts Personalizado descarrega e executa scripts ou comandos em máquinas virtuais que executam no seu Azure Stack Edge Pro dispositivos. Este artigo detalha como instalar e executar a extensão de script personalizada usando um modelo de Resource Manager Azure.

Sobre a extensão de script personalizado

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

A extensão de script personalizado integra-se com modelos Azure Resource Manager. Também pode executá-lo utilizando Azure CLI, PowerShell ou a AZure Máquinas Virtuais REST API.

SO para extensão de script personalizado

Sistema operativo suportado para extensão de script personalizado na Windows

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

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

SISTEMA suportado para extensão de script personalizado no Linux

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

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

Pré-requisitos

  1. Descarregue os modelos e os ficheiros de parâmetros VM para a sua máquina de clientes. Desaperte o download para um diretório que usará como diretório de trabalho.

  2. Deverá ter um VM criado e implantado no seu dispositivo. Para criar VMs, siga todos os passos em Implementar VM no seu Azure Stack Edge Pro utilizando modelos.

    Se precisar de descarregar um script como GitHub ou Azure Armazenamento externamente, enquanto configura a rede de computação, ative a porta que está ligada à Internet para calcular. Isto permite-lhe descarregar o script.

    No exemplo seguinte, o Porto 2 estava ligado à internet e foi utilizado para permitir a rede de computação. Se identificar que Kubernetes não é necessário no passo anterior, pode saltar o nó de Kubernetes IP e a atribuição ip de serviço externo.

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

Instale extensão de script personalizado

Dependendo do sistema operativo para o seu VM, pode instalar a Extensão de Script Personalizada para Windows ou para o Linux.

Extensão de Script Personalizado para o Windows

Para implementar a extensão de script personalizada para Windows para um VM em execução no seu dispositivo, edite o ficheiro de addCSExtWindowsVM.parameters.json parâmetros e, em seguida, implemente o modelo addCSextensiontoVM.json.

Editar arquivo de parâmetros

O ficheiro addCSExtWindowsVM.parameters.json toma 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 seu nome VM, nome para a extensão e o comando que pretende executar.

Aqui está o ficheiro do parâmetro da amostra 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

Implementar o modelo addCSextensiontoVM.json. Este modelo implementa a extensão para um 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 extensão é um trabalho de longa duração e leva cerca de 10 minutos para ser concluída.

Aqui está uma amostra 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>

Implantação de faixas

Para verificar o estado de implantação das extensões para um determinado VM, executar o seguinte comando:

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

Aqui está uma amostra 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, a ProvisioningState alteração muda 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 ficheiros especificados são transferidos para a seguinte pasta na máquina virtual alvo.

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 de 1.* corresponde ao valor atual typeHandlerVersion real 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 para executar para a extensão personalizada foi: md C:\\Users\\Public\\Documents\\test. Quando a extensão for instalada com sucesso, pode verificar se o diretório foi criado no VM no caminho especificado no comando.

Extensão de Script Personalizado para Linux

Para implementar a extensão de script personalizada para Windows para um VM em execução no seu dispositivo, edite o ficheiro de addCSExtLinuxVM.parameters.json parâmetros e, em seguida, implemente o modelo addCSExtensiontoVM.json.

Editar arquivo de parâmetros

O ficheiro addCSExtLinuxVM.parameters.json toma 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 seu nome VM, nome para a extensão e o comando que pretende executar.

Aqui está um ficheiro de parâmetro de amostra 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 extensão é um trabalho de longa duração e leva cerca de 10 minutos para ser concluída.

Aqui está uma amostra 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 ficheiro file2.txt no diretório /home/Administrator e o conteúdo do ficheiro são some text. Neste caso, pode verificar se o ficheiro foi criado no caminho especificado.

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

Estado de implantação da faixa

A implementação do modelo é um trabalho de longa duração. Para verificar o estado de implantação das extensões para um determinado VM, abra outra sessão PowerShell (executada como administrador). Execute o seguinte comando:

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

Aqui está uma amostra 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, a ProvisioningState alteração muda para Succeeded.

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

Remover extensão de script personalizado

Para remover a extensão do script personalizado, utilize o seguinte comando:

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

Aqui está uma amostra 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

Passos seguintes

Azure Resource Manager cmdlets