Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
Importante
O Comando de Execução Gerenciada está atualmente disponível na CLI do Azure, PowerShell e API no momento. A funcionalidade do portal está no roteiro.
O recurso Executar Comando usa o agente de máquina virtual (VM) para executar scripts em uma VM Linux do Azure. Pode utilizar estes scripts para a gestão geral de computadores ou aplicações. Eles podem ajudá-lo a diagnosticar e corrigir rapidamente problemas de acesso à VM e de rede e fazer com que a VM volte a um bom estado.
O comando Run gerenciado atualizado usa o mesmo canal de agente de VM para executar scripts e fornece os seguintes aprimoramentos em relação ao comando Run orientado a ações original:
- Suporte para o Run Command atualizado através do modelo de implementação do ARM
- Execução paralela de vários scripts
- Execução sequencial de scripts
- Tempo limite especificado pelo utilizador para o script
- Suporte para scripts de execução prolongada (horas/dias)
- Transmitir segredos (parâmetros, palavras-passe) de forma segura
Pré-requisitos
Importante
O mínimo suportado Linux Guest Agent é a versão 2.4.0.2 Versões mais antigas não suportam Managed RunCommand
Distribuições Linux Suportadas
Linux Distro | x64 | ARM64 |
---|---|---|
Alma Linux | 9.x+ | Não suportado |
Debian | Mais de 10 | Não suportado |
Flatcar Linux | 3374.2.x+ | Não suportado |
Azure Linux | 2,x | Não suportado |
openSUSE | 12.3+ | Não suportado |
Oracle Linux | 6,4+, 7,x+, 8,x+ | Não suportado |
Red Hat Enterprise Linux | 6,7+, 7,x+, 8,x+ | Não suportado |
Rocky Linux | 9.x+ | Não suportado |
SLES | 12,x+, 15,x+ | Não suportado |
Ubuntu | 18.04+, 20.04+, 22.04+ | Não suportado |
Comandos disponíveis
ID de comando | Descrição |
---|---|
ifconfig | Obtém a configuração de todas as interfaces de rede. Para uso, consulte Executar scripts |
Nota
Os IDs de comando acima são aplicáveis aos Comandos de Execução Gerenciada para VMs Linux. Você pode listar todos os commandIds usando o comando "Get-AzVMRunCommandDocument -Location {RegionName}
".
Limitar o acesso ao Comando Executar
Listar os comandos de execução ou mostrar os detalhes de um comando requer a Microsoft.Compute/locations/runCommands/read
permissão no nível de Assinatura. A função interna de leitor e os níveis superiores têm essa permissão.
A execução de um comando requer a Microsoft.Compute/virtualMachines/runCommand/write
permissão. A função de Colaborador de Máquina Virtual e os níveis superiores têm essa permissão.
Você pode usar uma das funções internas ou criar uma função personalizada para usar o Comando Executar.
CLI do Azure
Os exemplos a seguir usam az vm run-command para executar shell script em uma VM Linux do Azure.
Executar um script com a VM
Este comando entrega o script à VM, executa-o e retorna a saída capturada.
az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "echo Hello World!"
Listar todos os recursos RunCommand implantados em uma VM
Este comando retorna uma lista completa de Comandos de Execução implantados anteriormente, juntamente com suas propriedades.
az vm run-command list --vm-name "myVM" --resource-group "myRG"
Obter status e resultados de execução
Este comando recupera o progresso da execução atual, incluindo a saída mais recente, a hora de início/fim, o código de saída e o estado terminal da execução.
az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView
Nota
Os campos de saída e erro estão instanceView
limitados aos últimos 4KB.
Se pretender aceder à saída completa e aos erros, tem a opção de transferir os dados de saída e erro para o armazenamento de blobs de acréscimo usando os parâmetros -outputBlobUri
e -errorBlobUri
durante a execução do Comando de Execução usando Set-AzVMRunCommand
ou Set-AzVMssRunCommand
.
Excluir recurso RunCommand da VM
Remova o recurso RunCommand implantado anteriormente na VM. Se a execução do script ainda estiver em andamento, a execução será encerrada.
az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"
PowerShell
Executar um script com a VM
Este comando entrega o script à VM, executa-o e retorna a saída capturada.
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Executar um script na VM usando o parâmetro SourceScriptUri
OutputBlobUri
e ErrorBlobUri
são parâmetros opcionais.
Set-AzVMRunCommand -ResourceGroupName -VMName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>" -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”
Executar um comando Run de longa execução em uma VM
O tempo de execução deve ser superior ao tempo limite padrão de 90 minutos. Ele deve ser executado durante 100 minutos (consulte o parâmetro -TimeoutInSecond, que indica 6.000 segundos), se o script estiver configurado para ser executado durante esse tempo. Após 100 minutos, a execução do script deve parar.
Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000
Listar todos os recursos RunCommand implantados em uma VM
Este comando retorna uma lista completa de Comandos de Execução implantados anteriormente, juntamente com suas propriedades.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
Obter status e resultados de execução
Este comando recupera o progresso da execução atual, incluindo a saída mais recente, a hora de início/fim, o código de saída e o estado terminal da execução.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand instanceView
Criar ou atualizar o Comando de Execução numa VM usando o SourceScriptURI (URL SAS do blob de armazenamento)
Criar ou atualizar o comando de execução numa VM do Windows usando um URL SAS de um blob de armazenamento que contém um script em PowerShell.
SourceScriptUri
pode ser o URL SAS completo de um blob de armazenamento ou o URL público.
Nota
A URL SAS deve fornecer acesso de leitura ao blob. É sugerido um tempo de expiração de 24 horas para o URL SAS. As URLs SAS podem ser geradas no portal do Azure usando as opções do blob ou o token SAS através de New-AzStorageBlobSASToken
. Se estiver gerando token SAS usando New-AzStorageBlobSASToken
, sua URL SAS = "URL de blob base" + "?" + "Token SAS de New-AzStorageBlobSASToken"
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>
Obter uma exibição de instância de comando de execução para uma VM depois de criar ou atualizar o comando de execução
Obtenha um comando de execução para VM com o modo de exibição de instância. Instance View contém o estado de execução de Run Command (Succeeded, Failed, etc.), código de saída, saída padrão e erro padrão gerado pela execução do script usando Run Command. Um ExitCode diferente de zero indica uma execução malsucedida.
$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView
Resultado esperado:
ExecutionState : Succeeded
ExecutionMessage :
ExitCode : 0
Output :
output : uid=0(root) gid=0(root) groups=0(root)
HelloWorld
Error :
StartTime : 10/27/2022 9:10:52 PM
EndTime : 10/27/2022 9:10:55 PM
Statuses :
InstanceView.ExecutionState
-Status do script Run Command do usuário. Consulte esse estado para saber se o script foi bem-sucedido ou não.
ProvisioningState
- Status do provisionamento geral de extensão de ponta a ponta (se a plataforma de extensão foi capaz de acionar o script Run Command ou não).
Criar ou atualizar o Comando Executar em uma VM usando SourceScript (texto de script)
Criar ou atualizar Run Command em uma VM passando o conteúdo do script diretamente para o parâmetro -SourceScript. Use ;
para separar vários comandos.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Criar ou atualizar o Run Command em uma VM usando SourceCommandId
Criar ou atualizar o comando Executar numa VM usando um recurso pré-existente commandId
. Os commandIds disponíveis podem ser recuperados usando Get-AzVMRunCommandDocument.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId ipconfig
Criar ou atualizar Executar Comando em uma VM usando OutputBlobUri, ErrorBlobUri para transmitir saída padrão e mensagens de erro padrão para saída e erro Acrescentar blobs
Crie ou atualize o Comando Executar em uma VM e transmita mensagens de saída padrão e de erro padrão para blobs de saída e erro Anexe.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>
Nota
Os blobs de saída e de erro devem ser do tipo AppendBlob
e suas URLs SAS devem fornecer acesso de leitura, acréscimo, criação e gravação ao blob. É sugerido um tempo de expiração de 24 horas para o URL SAS. Se o blob de saída ou de erro não existir, um blob do tipo AppendBlob será criado. As URLs SAS podem ser geradas no portal do Azure usando as opções do blob ou o token SAS usando New-AzStorageBlobSASToken. Se gerar um token SAS usando New-AzStorageBlobSASToken
, a URL SAS será a URL base do blob + "?" + token SAS de New-AzStorageBlobSASToken
.
Criar ou atualizar o Comando Executar em uma VM, executar o Comando Executar como um usuário diferente usando os parâmetros RunAsUser e RunAsPassword
Crie ou atualize o Comando Executar em uma VM, execute o Comando Executar como um usuário diferente usando RunAsUser
e RunAsPassword
parâmetros. Para que o RunAs funcione corretamente, entre em contato com o administrador da VM e certifique-se de que o usuário seja adicionado à VM, o usuário tenha acesso aos recursos acessados pelo Comando Executar (Diretórios, Arquivos, Rede etc.) e, no caso da VM do Windows, o serviço 'Logon Secundário' esteja em execução na VM.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -RunAsUser myusername -RunAsPassword mypassword
Criar ou atualizar o comando Executar num recurso de Conjuntos de Dimensionamento de Máquinas Virtuais usando SourceScriptUri (URL SAS do blob de armazenamento).
Criar ou atualizar o recurso de execução de comandos em um Conjunto de Máquinas Virtuais em Escala usando uma URL SAS de um blob de armazenamento que contém um script bash.
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Nota
Observação A URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para o URL SAS. As URLs SAS podem ser geradas no portal do Azure usando as opções do blob ou o token SAS usando New-AzStorageBlobSASToken. Se estiver a gerar o token SAS usando New-AzStorageBlobSASToken, SAS URL = URL de blob base + "?" + o token SAS proveniente de New-AzStorageBlobSASToken
.
Criar ou atualizar o comando de execução numa instância de VM usando os parâmetros Parameter e ProtectedParameter (Parâmetros Públicos e Protegidos no script)
$PublicParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam1';value='publicParam1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam2';value='publicParam2value'})
$ProtectedParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret1';value='secret1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret2';value='secret2value'})
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -Parameter $PublicParametersArray -ProtectedParameter $ProtectedParametersArray
Use ProtectedParameter
para passar quaisquer entradas sensíveis para o script, como senhas, chaves, etc.
- Windows: Parameters e ProtectedParameters são enviados para o script como argumentos e executados da seguinte forma
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
- Linux: Parâmetros com nomes atribuídos e seus valores são definidos na configuração do ambiente, que devem ser acessíveis no script
.sh
. Para argumentos sem nome, passe uma cadeia de caracteres vazia para a entrada de nome. Argumentos sem nome são passados para o script e executados assim -myscript.sh publicParam1value publicParam2value secret1value secret2value
Excluir recurso RunCommand da VM
Remova o recurso RunCommand implantado anteriormente na VM. Se a execução do script ainda estiver em andamento, a execução será encerrada.
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
API REST
Para implantar um novo Run Command, execute um PUT na VM diretamente e especifique um nome exclusivo para a instância Run Command.
PUT /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
{
"location": "<location>",
"properties": {
"source": {
"script": "Write-Host Hello World!",
"scriptUri": "<SAS URI of a storage blob with read access or public URI>",
"commandId": "<Id>"
},
"parameters": [
{
"name": "param1",
"value": "value1"
},
{
"name": "param2",
"value": "value2"
}
],
"protectedParameters": [
{
"name": "secret1",
"value": "value1"
},
{
"name": "secret2",
"value": "value2"
}
],
"runAsUser": "userName",
"runAsPassword": "userPassword",
"timeoutInSeconds": 3600,
"outputBlobUri": "< SAS URI of a storage append blob with read, add, create, write access>",
"errorBlobUri": "< SAS URI of a storage append blob with read, add, create, write access >"
}
}
Notas
- Você pode fornecer um script embutido, um URI de script ou um ID de comando de script interno como fonte de entrada. O URI de script é um URI SAS de blob de armazenamento com acesso de leitura ou um URI público.
- Apenas um tipo de entrada de origem é suportado para a execução de um comando.
- Run Command suporta a escrita de dados de saída e erro em blobs de armazenamento, utilizando os parâmetros outputBlobUri e errorBlobUri, os quais podem ser utilizados para armazenar saídas de script grandes. Utilize o URI SAS de um blob de anexação de armazenamento com acessos de leitura, adição, criação e gravação. O blob deve ser do tipo AppendBlob. Escrever a saída do script ou blob de erro falharia caso contrário. O blob será substituído se já existir. Será criado se não existir.
Listar instâncias em execução do Comando Executar em uma VM
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
Obter detalhes de resultados para uma instalação específica do comando Run Command
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01
Excluir uma implantação específica do Run Command
Exclua a instância de Executar comando
DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2019-12-01
Implantar scripts em uma sequência ordenada
Para implantar scripts sequencialmente, use um modelo de implantação, especificando uma dependsOn
relação entre scripts sequenciais.
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"secondRunCommand",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":<full resourceID of the previous other Run Command>,
"properties":{
"source":{
"script":"echo Hello World!"
},
"timeoutInSeconds":60
}
}
Execute vários comandos de execução sequencialmente
Por padrão, se você implantar vários recursos RunCommand usando o modelo de implantação, eles serão executados simultaneamente na VM. Se você tiver uma dependência dos scripts e uma ordem preferencial de execução, poderá usar a dependsOn
propriedade para executá-los sequencialmente.
Neste exemplo, secondRunCommand será executado após firstRunCommand.
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"resources":[
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/firstRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"properties":{
"source":{
"script":"echo First: Hello World!"
},
"parameters":[
{
"name":"param1",
"value":"value1"
},
{
"name":"param2",
"value":"value2"
}
],
"timeoutInSeconds":20
}
},
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/secondRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),'runcommands/firstRunCommand')]"
],
"properties":{
"source":{
"scriptUri":"http://github.com/myscript.ps1"
},
"timeoutInSeconds":60
}
}
]
}
Próximos passos
Para saber mais sobre outras maneiras de executar scripts e comandos remotamente em sua VM, consulte Executar scripts em sua VM Linux.