Implantar a Extensão de Script Personalizada em VMs em execução em seu dispositivo Azure Stack Edge Pro
APLICA-SE A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
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 SOs. 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
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.
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, você pode ignorar o IP do nó Kubernetes e a atribuição de IP do serviço externo.
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 addCSExtWindowsVM.parameters.json
arquivo de parâmetros e 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 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 para a seguinte pasta na máquina virtual de destino.
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.*\Downloads\<n>
onde n é um número 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 addCSExtLinuxVM.parameters.json
arquivo de parâmetros e 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.
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 file2.txt
no /home/Administrator
diretório 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:
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