Compartilhar via


Executar scripts em sua VM do Linux usando Comandos de Execução Gerenciada

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

Importante

No momento, o Comando de Execução Gerenciada está disponível na CLI do Azure, no PowerShell e na API. A funcionalidade do portal está no planejamento.

O recurso Executar Comando usa o agente de VM (máquina virtual) para executar scripts em uma VM do Linux no Azure. Use esses scripts para o gerenciamento geral de máquinas ou aplicativos. Eles podem ajudá-lo a diagnosticar e corrigir rapidamente problemas de rede e acesso à VM e colocar a VM em um bom estado.

O recurso Executar Comando gerenciado atualizado usa o mesmo canal do agente de VM para executar scripts e tem os seguintes aprimoramentos em comparação ao recurso Executar Comando original orientado a ação:

  • Suporte para Executar Comando atualizado por meio do modelo de implantação do ARM
  • Execução paralela de vários scripts
  • Execução sequencial de scripts
  • Tempo limite de script especificado pelo usuário
  • Suporte para scripts de execução prolongada (horas/dias)
  • Passando segredos (parâmetros, senhas) de maneira segura

Pré-requisitos

Importante

O agente convidado Linux mínimo suportado é a versão 2.4.0.2 Versões mais antigas não suportam RunCommand gerenciado

Distribuições Linux Suportadas

Publicador Distribuição x64 ARM64
Comunidade Alma Linux Alma Linux 8.x+, 9.x+ 8.x+, 9.x+
Credativ Debian 10 e superior 11.x+
Kinvolk Flatcar Linux 3374.2.x e superior 3374.2.x e superior
Microsoft Azure Linux 2.x 2.x
Projeto openSUSE openSUSE 12.3+ Sem suporte
Oracle Oracle Linux 6.4+, 7.x+, 8.x+ Sem suporte
Red Hat Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+, 9.x+, 10.x+ 8.6+, 9.0+, 10.x+
CIQ Rocky Linux 9.x e superior 9.x e superior
SUSE SLES 12.x+, 15.x+ 15.x SP4+
Canonical Ubuntu (versões LTS) 18.04+, 20.04+, 22.04+, 24.04+ 20.04+, 22.04+, 24.04+

Comandos disponíveis

CommandID Descrição
RunShellScript Executa um script de shell do Linux.
ifconfig Obtém a configuração de todas as interfaces de rede. Para uso, consulte Executar scripts

Observação

As 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}".

Limitando o acesso ao recurso Executar Comando

Listar os comandos de execução ou mostrar os detalhes de um comando requer a permissão Microsoft.Compute/locations/runCommands/read no Nível de Assinatura. A função Leitor interna e os níveis superiores têm essa permissão.

A execução de um comando requer a permissão Microsoft.Compute/virtualMachines/runCommand/write. A função Colaborador de Máquina Virtual e os níveis superiores têm essa permissão.

Use uma das funções internas ou crie uma função personalizada para usar o recurso Executar Comando.

CLI do Azure

O exemplo a seguir usa o comando az vm run-command para executar um script de shell em uma VM Linux do Azure.

Executar um script com a VM

Esse comando fornece o script para a VM, o executa 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 de RunCommand implantados em uma VM

Este comando retorna uma lista completa de comandos de execução implantados anteriormente com as respectivas propriedades.

az vm run-command list --vm-name "myVM" --resource-group "myRG"

Obter resultados e status da execução

Este comando recupera o progresso da execução atual, incluindo a saída mais recente, a hora de início/término, 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

Observação

Os campos de saída e erro em instanceView são limitados aos últimos 4KB. Se você quiser acessar a saída e o erro completos, terá a opção de encaminhar os dados de saída e do erro para blobs de acréscimo de armazenamento usando os parâmetros -outputBlobUri e -errorBlobUri enquanto executa Executar Comando usando Set-AzVMRunCommand ou Set-AzVMssRunCommand.

Excluir o 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

Esse comando fornece o script para a VM, o executa 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 de execução prolongada em uma VM

O tempo de execução deve ser executado por mais tempo do que o tempo limite padrão de 90 minutos. Ele deve ser executado por 100 minutos (veja 6.000 segundos – Parâmetro TimeoutInSecond) desde que o script seja executado por 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 de RunCommand implantados em uma VM

Este comando retorna uma lista completa de comandos de execução implantados anteriormente com as respectivas propriedades.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"

Obter resultados e status da execução

Este comando recupera o progresso da execução atual, incluindo a saída mais recente, a hora de início/término, 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 Executar Comando em uma VM usando SourceScriptURI (URL SAS do blob de armazenamento)

Crie ou atualize um Comando de Execução em uma VM do Windows usando URL SAS de um blob de armazenamento que contém um script do PowerShell. SourceScriptUri pode ser a URL SAS completa ou a URL pública de um blob de armazenamento.

Observação

A URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para a 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 gerando um token SAS usando New-AzStorageBlobSASToken, a 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 vista de instância do comando de execução para uma VM após criar ou atualizar o comando de execução.

Obtenha um comando de execução para VM com visualização de instância. A Exibição de Instância contém o estado de execução do recurso Executar Comando (com êxito, com falha etc.), o código de saída, a saída padrão e o erro padrão gerados pela execução do script por meio de Executar Comando. Um ExitCode diferente de zero indica uma execução malsucedida.

$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView

Saída esperada:

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 Executar Comando do usuário. Consulte esse estado para saber se o script foi bem-sucedido ou não.

ProvisioningState – Status do provisionamento de extensão geral de ponta a ponta (indica se a plataforma de extensão pôde disparar o script de Executar Comando).

Criar ou atualizar um comando de execução em uma VM usando SourceScript (texto do script)

Crie ou atualize o comando de execução 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 comando Run em uma VM usando SourceCommandId

Criar ou atualizar o Comando Executar em uma VM usando a pré-inicialização commandId. CommandIds disponíveis podem ser recuperadas 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 a saída padrão e as mensagens de erro padrão para blobs de acréscimo de saída e de erro

Crie ou atualize Executar Comando em uma VM e transmita a saída padrão e as mensagens de erro padrão para blobs de acréscimo de saída e de erro.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>

Observação

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. Um tempo de expiração de 24 horas é sugerido para a 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 estiver gerando um token SAS usando New-AzStorageBlobSASToken, URL SAS = URL de blob base + “?” + token SAS de New-AzStorageBlobSASToken.

Criar ou atualizar o comando de execução em uma máquina virtual (VM), executar o comando como um usuário diferente usando os parâmetros RunAsUser e RunAsPassword.

Crie ou atualize Executar Comando em uma VM, execute o Executar Comando como um usuário diferente usando os parâmetros RunAsUser e RunAsPassword. Para que RunAs funcione corretamente, entre em contato com o administrador da VM e verifique se o usuário foi adicionado à VM, se o usuário tem acesso aos recursos acessados pelo Executar Comando (Diretórios, Arquivos, Rede etc.) e, no caso da VM do Windows, se o serviço 'Logon Secundário' está 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 Executar Comando em um recurso de conjuntos de dimensionamento de Máquinas Virtuais usando SourceScriptUri (URL SAS do blob de armazenamento).

Crie ou atualize Executar Comando em um recurso de conjuntos de dimensionamento de Máquinas Virtuais usando uma URL SAS de um blob de armazenamento que contém um script do Bash.

Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Observação

Observe que a URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para a 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 gerando um token SAS usando New-AzStorageBlobSASToken, URL SAS = URL de blob base + “?” + token SAS de New-AzStorageBlobSASToken.

Criar ou atualizar Executar Comando em uma instância de VM usando os parâmetros Parameter e ProtectedParameter (parâmetros públicos e protegidos para 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 confidenciais para script, como senhas, chaves etc.

  • Windows: Parameters e ProtectedParameters são transmitidos para o script conforme os argumentos são transmitidos para o script e são executados desta forma myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
  • Linux: Parâmetros nomeados e os respectivos valores são definidos como configuração de ambiente, que deve ser acessível dentro do script .sh. Para argumentos sem nome, passe uma cadeia de caracteres vazia para nomear a entrada. Argumentos sem nome são passados para script e executados assim – myscript.sh publicParam1value publicParam2value secret1value secret2value

Excluir o 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 comando de execução, realize um comando PUT diretamente na VM e especifique um nome exclusivo para a instância do comando de execução.

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

Observações

  • Você pode fornecer um script em linha, um URI de script ou uma ID de comando de script interno como fonte de entrada. O URI de script é o URI SAS do blob de armazenamento com acesso de leitura ou o URI público.
  • Somente um tipo de entrada de origem tem suporte para uma execução de comando.
  • Executar Comando dá suporte à gravação de saída e erro em blobs de armazenamento usando parâmetros outputBlobUri e errorBlobUri, que podem ser usados para armazenar saídas de script grandes. Use o URI SAS de um blob de acréscimo de armazenamento com acesso de leitura, adição, criação e gravação. O blob deve ser do tipo AppendBlob. A gravação da saída do script ou o blob de erros falhará de outra forma. O blob será substituído se ele já existir. Ele será criado se não existir.

Listar instâncias em execução do Executar Comando em uma VM

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01

Obter detalhes de saída para uma implantação de Executar Comando específica

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01 

Excluir uma implantação de Executar Comando específica

Excluir 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 relação dependsOn 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
    }
}

Executar 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 nos scripts e uma ordem de execução preferida, poderá usar a propriedade dependsOn para que eles sejam executados em sequência.

Nesse 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óximas etapas

Para conhecer outras maneiras de executar scripts e comandos remotamente em sua VM, consulte Executar scripts em sua VM Linux.