Executando Comandos em uma Instância

Você pode configurar, gerenciar e solucionar problemas remotamente das instâncias de computação executando scripts na instância usando o recurso do comando de execução.

Por exemplo, o recurso do comando de execução pode ajudar você a automatizar tarefas como configurar placas de interface de rede virtual (VNICs) secundárias, unir instâncias a um provedor de identidade, solucionar problemas de conectividade SSH ou responder a cenários de recuperação de desastre entre regiões.

Você pode executar comandos em uma instância mesmo quando a instância não tem acesso SSH ou portas de entrada abertas.

O recurso do comando de execução usa o plug-in Compute Instance Run Command que é gerenciado pelo software Oracle Cloud Agent.

Cuidado

Não use o recurso de comando de execução para fornecer ou recuperar senhas, segredos ou outras informações confidenciais em texto sem formatação. Para fornecer e recuperar informações confidenciais com segurança, use um local Visão Geral do Serviço Object Storage para armazenar o arquivo de script e a resposta. Use o Oracle Cloud Infrastructure Vault para gerenciar chaves e credenciais secretas.

Para obter permissões, consulte Política Obrigatória do Serviço IAM para Trabalhar com Instâncias.

Imagens Suportadas

O recurso do comando de execução é suportado nas instâncias de computação que usam as seguintes imagens da plataforma:

  • Oracle Autonomous Linux
  • Oracle Linux
  • CentOS
  • Windows Server

Imagens personalizadas baseadas em uma imagem de plataforma suportada também suportam o recurso de comando de execução.

Regiões Suportadas

O recurso de comando de execução é suportado em todas as regiões do realm comercial do Oracle Cloud Infrastructure.

Limitações e Considerações

  • Nas instâncias do Linux, o script é executado em um shell Bash por padrão. Para executar o script com um programa diferente, use #!/<path_to_program> como primeira linha do script.
  • Nas instâncias do Windows, o script é executado em um shell batch por padrão. Para executar o script com o PowerShell, use #ps1 como primeira linha do script.

    Consulte um script de exemplo do PowerShell

    O exemplo a seguir usa o PowerShell para consultar o serviço de metadados da instância e imprimir o OCID da instância:

    #ps1
    $instance = Invoke-RestMethod -Headers @{'Authorization' = 'Bearer Oracle'} -Uri http://169.254.169.254/opc/v2/instance/
    Write-Host ('Instance OCID is ' + $($instance.id))
  • O tamanho máximo de um arquivo de script que você carrega diretamente para uma instância em texto sem formatação é 4 KB. Para fornecer um arquivo maior, salve o arquivo em um local do serviço Object Storage.
  • A saída de um script quando retornado como texto sem formatação é limitada ao último 1 KB. Para salvar uma resposta maior, salve a saída em um local do serviço Object Storage.
  • Quando você usa um local do serviço Object Storage para salvar o arquivo de script ou a resposta, a instância deve ter conectividade de saída, como um gateway NAT (Network Access Translation), um gateway de serviço ou um gateway de internet. A instância também deve permitir tráfego de saída na porta 443 para o software Oracle Cloud Agent, Object Storage e IAM.
  • Por padrão, é possível executar dois scripts por vez. Para alterar o padrão, atualize o arquivo de configuração do comando de execução:

    cat /etc/oracle-cloud-agent/plugins/runcommand/config.yml

    Defina os parâmetros a seguir:

    logDir: /var/log/oracle-cloud-agent/plugins/runcommand
    commandExecutionMaxWorkers: <number-of-parallel-scripts>
  • No máximo, cinco scripts por vez podem estar em andamento. Um script será considerado em execução se tiver sido recebido pelo plug-in Compute Instance Run Command, mas ainda não tiver sido excluído da fila.
  • Para executar tarefas de longa duração, use o recurso de comando de execução para programar um job cron na instância. A orquestração de comando não é suportada.
  • Cada script é executado uma vez. Se quiser que um script seja executado várias vezes, use o cron para configurar uma programação para o script.
  • Scripts que solicitam informações não são suportados. Você pode usar o serviço de metadados de instância (IMDS), no entanto, para recuperar de forma programática informações sobre a instância em que o script é executado.
  • Quando você criar uma instância com base em uma imagem personalizada que já tenha permissões para o plug-in Compute Instance Run Command configurado, substitua 101-oracle-cloud-agent-run-command por 100-oracle-cloud-agent-run-command no arquivo de configuração.
  • Os códigos de saída retornados são códigos de erro padrão do Linux. Um código de saída 0 indica sucesso.
  • Se você aplicar um timeout opcional a um script, o padrão será uma hora. O máximo é 24 horas.
  • O tempo máximo durante o qual um script pode ser executado é de um dia.
  • Para monitorar os recursos que os scripts consomem, como a utilização de CPU, use métricas.
  • O cancelamento de um script é a melhor tentativa. Os comandos não poderão ser cancelados depois de finalizada a execução ou se tiverem expirado.
  • Os arquivos de script e as respostas salvos em texto sem formatação são mantidos por sete dias. Arquivos de script e respostas salvos em um local do serviço Object Storage são retidos até você excluí-los.
  • Não execute um script que faça com que o software Oracle Cloud Agent ou o plug-in Compute Instance Run Command seja interrompido.

Executando Comandos com Privilégios de Administrador

Se um comando exigir permissões de administrador, conceda-as ao plug-in Compute Instance Run Command para poder executar o comando. O plug-in é executado como usuário ocarun.

Você pode usar cloud-init (cloudbase-init no Windows) para configurar permissões na ativação da instância ou estabelecer conexão com uma instância depois que ela for iniciada e configurar as permissões manualmente. As etapas para conceder permissões de administrador dependem do sistema operacional.

Para conceder permissões sudo em instâncias Linux

  1. Na instância, crie um arquivo de configuração sudoers para o plug-in Compute Instance Run Command:

    vi ./101-oracle-cloud-agent-run-command
  2. Permita que o usuário ocarun execute todos os comandos como sudo adicionando a seguinte linha ao arquivo de configuração:

    ocarun ALL=(ALL) NOPASSWD:ALL

    Você tem a opção de listar comandos específicos. Consulte a man page do Linux para sudoers e obtenha mais informações.

  3. Confirme se a sintaxe no arquivo de configuração está correta:

    visudo -cf ./101-oracle-cloud-agent-run-command

    Se a sintaxe estiver correta, a seguinte mensagem será retornada:

    ./101-oracle-cloud-agent-run-command: parsed OK
  4. Adicione o arquivo de configuração a /etc/sudoers.d:

    sudo cp ./101-oracle-cloud-agent-run-command /etc/sudoers.d/

Para conceder permissões de administrador em instâncias do Windows

  1. Na instância, execute o seguinte comando em PowerShell:

    Add-LocalGroupMember -Group "Administrators" -Member "NT SERVICE\OCARUN" | Restart-Service -Name OCARUN -Force

Antes de Começar

  • O plug-in Compute Instance Run Command deve estar ativado na instância e os plug-ins devem estar em execução. Para obter mais informações sobre como ativar e executar plug-ins, consulte Oracle Cloud Agent.
  • Você preparou o script que deseja executar. Recomendamos que você teste o comando em um ambiente não de produção antes de implantá-lo em instâncias que executam workflows de produção.
  • Para fornecer o arquivo de script de um local do Object Storage, Faça upload do arquivo de imagem para um bucket do Object Storage na mesma região da instância de destino. Observe o bucket e o nome do arquivo, ou o URL do serviço Object Storage para o arquivo. Para usar o mesmo comando entre tenancies, crie um URL de solicitação pré-autenticada que aponta para o arquivo.
  • Para salvar a saída do comando em um local do serviço Object Storage, crie um bucket para salvá-lo na mesma região da instância de destino. Observe o nome do bucket ou o URL do serviço Object Storage para o bucket. Você tem a opção de salvar a saída do comando usando uma solicitação pré-autenticada que aponte para um local do serviço Object Storage.
  • Para imagens de plataforma que foram liberadas antes de outubro de 2020, o software Oracle Cloud Agent deve ser atualizado para uma versão que suporte o plug-in Compute Instance Run Command (versão 1.5.1 ou posterior).

Usando a Console

Para criar um comando a ser executado em uma instância
  1. Abra o menu de navegação e selecione Computação. Em Compute, selecione Instâncias.
  2. Clique na instância em que você está interessado.
  3. Em Recursos, clique em Comando de execução.
  4. Clique em Criar comando.
  5. Digite um nome para o comando. Evite digitar informações confidenciais.
  6. Na caixa Timeout em segundos, digite o tempo a ser concedido ao plug-in Compute Instance Run Command para executar o comando na instância antes do timeout. O temporizador começa quando o plug-in inicia o comando. Para nenhum timeout, digite 0.
  7. Na seção Adicionar script, faça upload do script que você deseja que o plug-in Compute Instance Run Command execute na instância. Selecione uma das seguintes opções:

    • Colar script: Cole o comando na caixa.
    • Selecione um arquivo: Faça upload do script como arquivo de texto (. txt). Navegue até o arquivo cujo upload você deseja fazer ou arraste e solte o arquivo na caixa.
    • Importar de um bucket do serviço Object Storage: Selecione o bucket que contém o arquivo de script. Na caixa Nome do objeto, digite o nome do arquivo.
    • Importar de um URL do serviço Object Storage: Digite o URL do serviço Object Storage para o arquivo de script.
  8. Na seção Tipo de saída, selecione o local para salvar a saída do comando:

    • Saída como texto: A saída é salva como texto sem formatação. Você pode revisar a saída na página Detalhes da Instância.
    • Saída para um bucket do serviço Object Storage: A saída é salva em um bucket do serviço Object Storage. Selecione um bucket. Na caixa Nome do objeto, digite um nome para o arquivo de saída. Evite digitar informações confidenciais.
    • Saída para um URL do serviço Object Storage: A saída é salva em um URL do serviço Object Storage. Digite o URL.
  9. Clique em Criar comando.
Para exibir a saída de um comando

Se a saída do comando tiver sido salva em um local do serviço Object Storage, faça download do objeto de resposta do bucket em que ele foi salvo ou navegue até o URL de solicitação pré-autenticada do serviço Object Storage.

Se a saída do comando tiver sido salva como arquivo de texto sem formatação, faça o seguinte:

  1. Abra o menu de navegação e selecione Computação. Em Compute, selecione Instâncias.
  2. Clique na instância em que você está interessado.
  3. Em Recursos, clique em Comando de execução.
  4. Localize o comando na lista, clique no menu Ações Menu Ações e depois clique em Exibir detalhes de comando.
Para cancelar um comando
  1. Abra o menu de navegação e selecione Computação. Em Compute, selecione Instâncias.
  2. Clique na instância em que você está interessado.
  3. Em Recursos, clique em Comando de execução.
  4. Encontre o comando na lista, clique no menu Ações Menu Ações e, em seguida, clique em Cancelar comando. Confirme quando solicitado.

Diagnosticando e Solucionando Problemas do Plug-in Compute Instance Run Command

Para diagnosticar e solucionar problemas do plug-in Compute Instance Run Command, você pode exibir os logs que o plug-in gera. Estabeleça conexão com a instância e use o seguinte:

tail -f /var/log/oracle-cloud-agent/plugins/runcommand/runcommand.log

Para facilitar a visibilidade das operações do plug-in sem precisar estabelecer conexão com a instância, você pode criar logs personalizados usando o serviço Oracle Cloud Infrastructure Logging.

Erros de Log

Esta seção descreve como resolver os erros que aparecem no arquivo de log.

Falha ao Sondar

Se o plug-in Compute Instance Run Command não estiver sondando comandos, você poderá ver o seguinte erro no arquivo de log:

poll command err: circuitbreaker:[pollCommand] is open, last err:Service error:NotAuthorizedOrNotFound. Authorization failed or requested resource not found. http status code: 404.

Esse erro pode ocorrer quando a política de grupo dinâmico para o recurso de comando de execução não está ativada ou quando a instância foi adicionada recentemente ao grupo dinâmico. As instâncias não pertencem a grupos de administradores de tenancy por padrão, de modo que você precise definir permissões de grupo dinâmico explicitamente para a instância.

Quando você cria uma instância e a adiciona a um grupo dinâmico, leva até 30 minutos para que a instância comece a sondar comandos. Se você criar o grupo dinâmico primeiro e, em seguida, criar a instância, ela começará a sondar comandos assim que for criada.

Para testar a política de grupo dinâmico assim que você adicionar a instância a um grupo dinâmico, reinicie o serviço manualmente usando um dos seguintes comandos:

Oracle Linux 7.x e Oracle Linux 8.x

sudo systemctl restart oracle-cloud-agent

Windows Server

net restart ocarun