Oracle Cloud – Start / Stop de Instâncias via Powershell (Windows)

Olá a todos!

No artigo de hoje estarei compartilhando uma solução para realizar o o stop e start de máquinas virtuais via Oracle CLI de seu computador pessoal ou servidor Windows.

Iremos utilizar para esse artigo o seguinte cenário:

Temos a necessidade que a partir de uma instância da Oracle Cloud consigamos realizar o desligamento de algumas VMs de teste fora do horário comercial para que não consuma recurso.

Esse agendamento auxilia no controle de custos para evitar que recursos não utilizados consumam os créditos de seu ambiente de testes ou seu negócio.

Para isso, iremos criar uma rotina para execução de forma autônoma no Windows, com uma conta de serviço com conexão via chave de API.

São necessários os seguintes itens para execução do tutorial:

  • 1 Servidor Windows Server
  • 1 Usuário de serviço no IAM da Oracle Cloud
  • Instalação do Oracle CLI
  • Windows PowerShell para execução dos comandos e testes
  • Agendador de tarefas do Windows para criação dos agendamentos

Passo 1: Criar uma conta para execução como serviço

Nesse passo iremos criar uma conta de usuário local para utilização no tutorial, porém o cenário é o mesmo para ambientes com Active Directory.

Crie uma conta de usuário no computador, no exemplo irei utilizar o usuário: oci-start-stop

A conta pode ser padrão, sem permissões administrativas, porém para realizar o acesso e conseguir instalar os software coloraremos o usuário no grupo local Administrators.

Essa permissão será revogada ao final da instalação dos pacotes e softwares. Após essa configuração, para realizarmos os acessos utilizaremos os grupos locais Remote Desktop Users e Users

Para garantir que a senha não seja alterada ou expire, selecione as opções:

  • User cannot change the password
  • Password never expires

Atribua o usuário as permissões de “Logon as a Batch Job”

Abra a política de grupo local (se não estiver em um domínio) e adicione o usuário a política.

Computer Configuration > Windows Settings > Security Settings > User Rights Assignment > Logon as a batch job

Passo 2: Criar grupo, política e usuário de serviço na Oracle Cloud

Nesse processo iremos criar um grupo, uma política e um usuário para utilização dos recursos na Oracle Cloud como serviço.

O usuário terá o mesmo nome criado dentro do Windows, para facilitar o mapeamento e identificação: oci-start-stop, o grupo chamará GP-OCI-Instance-Stop-Start e a política PL-OCI-Instance-Stop-Start

Para garantir a segurança, iremos atribuir somente a política de IAM necessária para o grupo desse usuário:

Allow group GP-OCI-Instance-Stop-Start to manage instance-family in tenancy

Navegue até Identity e Security > Groups

Criaremos o grupo

Agora iremos realizar a configuração da política para que a conta tenha permissão, a política deve ser inserida no root.

Navegue até Identity e Security > Polices

Certifique-se de que o compartimento selecionado seja o root e crie a police

Allow group GP-OCI-Instance-Stop-Start to manage instance-family in tenancy

Obs: No nosso caso iremos utilizar a política para todo tenancy, porém você pode definir para um compartimento específico ou uma região específica.

Com a política finalizada, iremos criar o usuário e atribuir ele ao grupo.

Navegue até Identity e Security > Users

Clique em Create User e clique um usuário de IAM, conforme abaixo (o email é opcional)

Depois de criado você será redirecionado a tela da conta do usuário, desça um pouco a página, clique em Add User to Group e selecione o grupo criado anteriormente: GP-OCI-Instance-Stop-Start

Passo 3: Instalar o Oracle CLI para Windows

Faça logon com o usuário de serviço criado no Windows Server.

Abra o PowerShell como Administrador e execute o comando abaixo:

powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1'))"

Na instalação ele irá perguntar se deseja instalar o Python, digite Y

Ele irá iniciar o processo de download e instalação do Python

Após a finalização do processo, ele irá realizar algumas perguntas sobre diretórios, você pode selecionar todos os diretórios padrões digitando Enter, são 4 perguntas ao todo

Após as perguntas sobre os diretórios, ele irá instalar todos os pacotes e irá realizar uma última pergunta se gostaria de adicionar no caminho PATH do Oracle CLI, digite Y

Para verificar se a instalação foi bem sucedida, digite o comando oci -v ele deve retornar a versão do Oracle CLI, conforme exemplo abaixo:

Caso ele não retorne a versão do Oracle CLI, verifique se o caminho foi adicionado a variável de ambiente, faça logoff e logon novamente, se o erro persistir, reinicie o computador.

Passo 4: Criando a conexão com a Oracle Cloud

A primeira informação que precisamos coletar é o OCID do Tenancy

A segunda informação é o OCID do usuário de serviço.

Com as informações, faça logon no Windows e execute o Powershell

Digite o seguinte comando:

oci setup config

Ele irá questionar qual o local que irá realizar a configuração do arquivo, selecione o padrão informado.

Depois ele irá solicitar que seja informado o OCID do usuário de serviço, cole no PowerShell e digite Enter

Depois o Tenancy OCID

Selecione a região, você deve digitar o número correspondente. Como estou em Vinhedo irei selecionar 19.

No próximo passo serão solicitadas informações sobre a geração de chave para criar uma conexão via API Key, na primeira opção digite Y e deixe todas as opções padrões apertando Enter para confirmar

Após a criação do par de chaves, copie a chave.

Ela ficará salva no caminho em que foi instalado o Oracle CLI chamada oci_api_key_public.pem

Para coletar a chave do exemplo, irei utilizar o comando abaixo

cat  C:\Users\oci-start-stop\.oci\oci_api_key_public.pem

Copie a chave

Volte para o Console da Oracle Cloud, vá até a conta de serviço, clique em API Keys, Add API Key, e cole a chave

Para validar a conectividade, volte ao Powershell e digite o comando abaixo, ele deve retornar o endereço do seu Object Storage

oci os ns get

Passo 5: Criando o agendamento de Stop e Start para Instância

Antes de iniciar, recomenda-se remover o usuário do grupo de Administradores locais, ele não precisará mais de permissão para execução elevada.

Você pode colocar ele no grupo de Users e Remote Desktop Users para realizar o acesso.

Após ajustar os grupos, faça logon novamente.

Iremos coletar o OCID da instância para criar 2 arquivos do tipo PowerShell para o cenário, 1 deles será para parar a Instância e o outro será para iniciar a instância.

Na página da instância colete o OCID.

Com OCID em mãos, crie 1 arquivo para parar a instância, exemplo abaixo

oci compute instance action --action SOFTSTOP --instance-id ocid1.instance.oc1.sa-vinhedo-1.an3ggljrisha37qc3xgmoya2ezs6i2kyixvyccmqgixtc663ngaoc6xvafha --wait-for-state STOPPED

E outro para iniciar a instância:

oci compute instance action --action START --instance-id ocid1.instance.oc1.sa-vinhedo-1.an3ggljrisha37qc3xgmoya2ezs6i2kyixvyccmqgixtc663ngaoc6xvafha --wait-for-state RUNNING

Basicamente o comando é dividido da seguinte forma:

oci compute instance action –action [argumento]: será a ação que será realizada

instance-id [ocid]: instância que terá a ação aplciada

–wait-for-state [argumento]: retorno esperado para que o powershell finalize a execução.

As ações são categorizadas da seguinte forma:

START – Inicia a Instância imediatamente

STOP – Para a instância imediatamente

RESET – Reinicia a instância

SOFTSTOP – Envia um comando do shutdown para instância e realiza o desligamento em até 15 minutos

SOFTRESET – Envia o comando de shutdown para a instância e realiza o desligamento em até 15 minutos. Após desligada, ela envia o comando de Start para ela ligar.

Com os 2 arquivos criados, iremos realizar 2 agendamentos no Agendador de Tarefas do Windows, 1 deles para parar a instância e o outro para iniciar.

Crie uma pasta na unidade C:, exemplo: C:\scritps-stop-start e mova os 2 arquivos.

Navegue até o Agendador de Tarefas e crie 2 tarefas, 1 para cada função, siga os exemplos abaixo.

Nota: utilize o usuário de serviço do Windows para executar a tarefa

Em action, no campo argumento aponte caminho do arquivo PowerShell, exemplo:

C:\scripts-stop-start\VMLINUX01-Stop-Instance.ps1

Clique em OK para finalizar as configurações, ao final do processo será solicitada a senha de serviço. Coloque a senha e cloque em OK.

Para fazer o primeiro teste, irei executar a tarefa manualmente, logado no servidor e o resultado foi o abaixo:

Vou realizar agora a criação do agendamento para o Start, usando os mesmos parâmetros anteriormente.

Pronto, agora eu tenho os 2 agendamentos criados, 1 para parar as 21h e outro para iniciar as 21:10h.

Para validar se o processo irá ocorrer normalmente, irei iniciar a Instância manualmente, fazer logoff da sessão do usuário e aguardar as 2 execuções automáticas.

Obs: Nos comandos que foram aplicados no servidor, devido a necessidade de validação foi alterado o comando para STOP ao invés de SOFTSTOP, nesse caso a instância irá parar imediatamente.

STOP aconteceu de forma autônoma as 21h

START aconteceu de forma autônoma as 21:10h

Com isso, conseguimos criar de forma simples agendamentos para evitar a cobrança de recursos de ambientes que não possuem a necessidade de execução 24×7

Obrigado pela atenção e estou a disposição para quaisquer dúvidas.

Você pode consultar a lista de opções para instância no link abaixo:

https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.0.1/oci_cli_docs/cmdref/compute/instance.html

Todos os comandos estão disponíveis em: https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.0.1/oci_cli_docs/index.html

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *