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.

A funcionalidade de comando executar usa o plug-in do Compute Instance Run Command 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 de forma segura, use um local Visão Geral do Serviço Object Storage para armazenar o arquivo de script e uma resposta. Use o Oracle Cloud Infrastructure Vault para gerenciar chaves e credenciais de segredo.

Para obter permissões, consulte Política do Serviço IAM Obrigatória 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.

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 outro programa, use #!/<path_to_program> como a 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 de Armazenamento de Objetos para salvar o arquivo ou resposta de script, a instância deve ter conectividade de saída, como um gateway de NAT (Network Access Translation), gateway de serviços ou gateway de Internet. A instância também deve permitir tráfego de saída na porta 443 para o software Oracle Cloud Agent, o Object Storage e o 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 andamento caso tenha sido recebido pelo plug-in Compute Instance Run Command, mas ainda não tenha 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 a partir de uma imagem Personalizada que já tenha permissões para o plug-in de Comando de Execução da Instância de Computação 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. Os arquivos de script e as respostas salvos em um local do Object Storage são mantidos até que você os exclua.
  • Não execute um script que cause a interrupção do software Oracle Cloud Agent ou do plug-in Compute Instance Run Command.

Executando Comandos com Privilégios de Administrador

Se um comando exigir permissões de administrador, você deverá conceder permissões de administrador ao plug-in de Comando de Execução da Instância do Serviço Compute 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 da configuração de 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 do 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 serviço Object Storage, Faça upload do arquivo de imagem para um bucket do serviço Object Storage na mesma região que a instância de destino. Observe o bucket e nome de 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 apareça para o arquivo.
  • Para salvar a saída de comandos em um local do serviço Object Storage, crie um bucket para salvá-lo na mesma região que a instância de destino. Observe o nome do bucket ou o URL do serviço Object Storage do bucket. Opcionalmente, você pode salvar a saída do comando usando uma solicitação pré-autenticada que aponta para um local do serviço Object Storage.
  • Para imagens da 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 do 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 Compute. Em Compute, selecione Instâncias.
  2. Clique na instância em que você está interessado.
  3. Em Recursos, clique em Execução de comando.
  4. Clique em Criar comando.
  5. Digite um nome para o comando. Evite digitar informações confidenciais.
  6. Na caixa Timeout em segundos, informe o tempo necessário para fornecer ao plug-in do Compute Instance Run Command para executar o comando na instância antes de fazer 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 cujo plug-in de Comando de Execução da Instância de Computação deseja executar 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 um 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 de objeto, informe o nome do arquivo.
    • Importar de um URL do Serviço Object Storage: Informe o URL do Serviço Object Storage para o arquivo do 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 de objeto, informe 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 for salva em um local do serviço Object Storage, faça download do objeto de resposta do bucket no qual ela foi salva 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 Compute. Em Compute, selecione Instâncias.
  2. Clique na instância em que você está interessado.
  3. Em Recursos, clique em Execução de comando.
  4. Localize o comando na lista, no menu Ações (três pontos), selecione Exibir detalhes do comando.
Para cancelar um comando
  1. Abra o menu de navegação e selecione Compute. Em Compute, selecione Instâncias.
  2. Clique na instância em que você está interessado.
  3. Em Recursos, clique em Execução de comando.
  4. Localize o comando na lista, no menu Ações (três pontos), selecione Cancelar comando. Confirme quando solicitado.

Diagnosticando e Solucionando Problemas do Plug-in de Comando de Execução da Instância de Computação

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

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

Para maior visibilidade nas operações do plug-in sem precisar se conectar à 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 fazendo sondagem para 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. Por padrão, as instâncias não pertencem aos grupos de administradores da tenancy; portanto, você precisa definir explicitamente permissões de grupo dinâmico 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