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.
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 PowerShellO 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
por100-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
-
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
-
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. -
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
-
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
-
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
- Abra o menu de navegação e selecione Computação. Em Compute, selecione Instâncias.
- Clique na instância em que você está interessado.
- Em Recursos, clique em Comando de execução.
- Clique em Criar comando.
- Digite um nome para o comando. Evite digitar informações confidenciais.
- 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.
-
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.
-
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.
- Clique em Criar 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:
- Abra o menu de navegação e selecione Computação. Em Compute, selecione Instâncias.
- Clique na instância em que você está interessado.
- Em Recursos, clique em Comando de execução.
- Localize o comando na lista, clique no e depois clique em Exibir detalhes de comando.
- Abra o menu de navegação e selecione Computação. Em Compute, selecione Instâncias.
- Clique na instância em que você está interessado.
- Em Recursos, clique em Comando de execução.
- Encontre o comando na lista, clique no menu e, em seguida, clique em Cancelar comando. Confirme quando solicitado.
Usando a API
Para obter informações sobre como usar a API e assinar solicitações, consulte a documentação da API REST e Credenciais de Segurança. Para obter informações sobre SDKs, consulte SDKs e a CLI.
Use estas operações de API para trabalhar com o recurso de comando de execução:
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