2 de maio, 2022
  • By Kleber Freitas
  • / aws, PDI

Olá Tudo bem? No artigo de hoje irei te mostrar como programar a inicialização e o desligamento de instâncias no serviço da AWS  EC2 (Amazon Elastic Compute Cloud) e fazer o Pentaho Server Iniciar e desligar automaticamente, como um serviço desta instância.

Em um cenário de arquiteturas Cloud voltadas para implementações de processos de BI e BIG Data, temos a possibilidade de escolher os recursos computacionais para os nossos servidores, para que possam dar sustentabilidade aos processos de engenharia de dados, montando assim arquiteturas que sejam escaláveis, com alta disponibilidade e também com maiores possibilidades de previsão dos custos, porém os desafios para se gerenciar um ambiente como este são enormes, e se não houver cuidado, podemos ter serviços sendo utilizados de forma errada, instâncias ligadas sem necessidade, aumentando assim os custo desta arquitetura.

Pensando nisso, como poderíamos programar para que as instâncias, onde estão instalados os servidores de nossas aplicações, possam ser ligadas e desligadas de forma automática para orquestrar a execução dos nossos pipelines de dados para carga de Data Lakes e Data Warehouses ?

Vem comigo!!!

Irei te mostrar como fazer isso através deste artigo.

Na arquitetura em questão, temos uma instância Linux (Ubuntu) e um cenário onde o processo de ELT / ETL é orquestrado pelas ferramentas da suíte Pentaho, data integration e Pentaho Server.

Vamos iniciar o processo pela programação da instância, iremos utilizar os serviços abaixo:

  • AWS IAM (Identity and Access Management) – Criar a Politica e a função que dará permissão para execução do Workload.
  • AWS Lambda – Criar o código para execução do Workload.
  • AWS EventBridge – Criar as regras e programar a execução do agendamento.

Criar a Politica no AWS IAM

Acesse o serviço IAM no console da AWS

  • Clicar em Políticas.
  • Criar Política.
  • Escolher opção JSON e colar o código abaixo:

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogGroup”,
“logs:CreateLogStream”,
“logs:PutLogEvents”
],
“Resource”: “arn:aws:logs:*:*:*”
},
{
“Effect”: “Allow”,
“Action”: [
“ec2:Start*”,
“ec2:Stop*”
],
“Resource”: “*”
}
]

}

 

  • Clicar em Próximo: Tags.
  • Clicar em Próximo: Revisar.
  • Faça a revisão da política e em seguida clique em Criar Política.

 

 

 

 

 

 

 

 

 

 

 

 

 

Criar a Função no AWS IAM

Com esta função daremos permissão ao serviço AWS Lambda que definimos na política criada.

  •  Clicar em Funções escolher as opções conforme print abaixo e clicar em próximo.

  • Adicionar a política criada e clicar em próximo, na próxima tela, nomeie, revise e clique em criar função

Agora que já criamos as permissões no IAM iremos partir para o LAMBDA para criar os códigos de inicialização e desligamento da EC2.

Criando as funções no AWS LAMBDA

  • Acessar o serviço AWS LAMBDA
  • Criar função
  • Nomeie sua função
  • Escolha a opção de Python que será utilizada para escrita do código
  • Atribua permissão com base numa função existente ( aquela que criamos acima).
  • Clique em criar função

Ao clicar em criar função abrirá a tela abaixo, observe com atenção o que precisa ser feito:

  • Limpe o conteúdo do Lambda function e cole o seguinte código:

import boto3
region = ‘inserir nome da região
instances = [‘inserir o id da instancia‘]
ec2 = boto3.client(‘ec2’, region_name=region)
def lambda_handler(event, context): ec2.start_instances(InstanceIds=instances)
print(‘started your instances: ‘ + str(instances))Observação: para preencher os campos acima em negrito, acesse sua instancia e veja em qual região foi criada e copie o Id da Instancia.

  • Clicar em Deploy
  • Clicar novamente em Funções onde repetiremos o processo acima para criar a função Lambda de desligamento
  • Limpe o conteúdo do Lambda function e cole o seguinte código:

import boto3
region = ‘inserir nome da região
instances = [‘inserir o id da instância‘]
ec2 = boto3.client(‘ec2’, region_name=region)
def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances)
print(‘stopped your instances: ‘ + str(instances))Observação: para preencher os campos acima em negrito, acesse sua instancia e veja em qual região foi criada e copie o Id da Instancia.

Finalizado este processo teremos duas funções Lambda criadas, sendo uma para iniciar e outra para desligar a instância. Agora precisamos criar a regra no AWS EventBridge para executar estas funções e configurar o agendamento.

Criando o evento no AWS EventBridge

  • Acessar o serviço AWS EventBridge
  • Dentro da guia eventos, clique em Regras
  • Criar Regra
    Observe exemplo de como deverá ficar

  • Clique novamente em criar Regra e repita o processo acima para criar o evento de desligamento.
  • Ao final desta etapa você terá duas regras criadas e com agendamento configurado, em caso de dúvidas na criação do agendamento clique aqui
    Observação: por padrão o agendamento segue o fuso GMT, será necessário então acrescentar 3 horas para adapta-lo ao fuso horário do Brasil.

Realize os testes do agendamento e confira no painel de EC2 se a sua instância esta ligando e desligando conforme esperado.

Com a aplicação dos passos acima já podemos programar os nossos servidores usando os serviços da AWS, mas e quanto ao Pentaho Server? como podemos inicializa-lo ou desliga-lo com base nestes mesmos agendamentos que criamos para as instancias ao invés de ter que acessar o terminal e executar manualmente os comandos de start e stop?

Vamos lá!!! vou te mostrar como, saca só!!!

Para fazermos o Pentaho Server iniciar, precisamos criar um script de inicialização utilizando o systemmd.

  • Acesse sua instância linux via terminal #telapreta!!!!
  • execute o comando sudo vi /etc/systemd/system/pentaho.service
    • Na tela que irá abrir clique na tecla I, para habilitar o arquivo para edição e cole o script abaixo:

[Unit]
Description=Pentaho Server
After=network.target

[Service]
Type=forking

Environment=PENTAHO_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
Environment=JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
Environment=CATALINA_PID=/opt/pentaho/pentaho-server/tomcat/temp/tomcat.pid

ExecStart=/opt/pentaho/pentaho-server/start-pentaho.sh
ExecStop=/opt/pentaho/pentaho-server/stop-pentaho.sh
ExecLimpeza=/opt/pentaho/pentaho-server/executa_limpeza_arquivos_pentaho_server.sh

User=root
Group=root
UMask=0007
RestartSec=10
Restart=always

[Install]

WantedBy=multi-user.target

  • para sair desta tela de edição e salvar o comando criado realize o seguinte procedimento:
  • Clicar em ESC : wq (ESC + dois pontos+w+q)
  • Execute o comando sudo systemctl enable pentaho.service para habilitar o serviço.
  • Execute o comando sudo systemctl daemon-reload para carregar o serviço.
  • Execute o comando sudo systemctl start pentaho para iniciar o Pentaho Server.
  • Execute o comando sudo  systemctl status pentaho para checar o status.

Observação: Fique atento as variáveis de ambiente, caso não as tenha criadas, execute o comando vi /etc/environment e crie as variaveis, caso contrário os serviços não irão inicializar.

Se os procedimentos estiverem todos corretos, ao iniciar a instancia, o Pentaho Server irá iniciar junto e quando a instancia for desligada, será realizado o stop.

E assim terminamos mais um artigo, curtiram? solução top de mercado para orquestrarmos nossos Pipelines de dados no ambiente AWS.

Material de Aprofundamento:

Se você quiser aprender mais sobre Integração de Dados em Nuvem com AWS  Então Clique Aqui para conhecer o Curso de AWS com Pentaho.

Você irá aprender uma das habilidades mais procuradas do mercado de dados nesse curso completo! O Que é e como criar um Data Lake do zero na AWS (Amazon Web Services)

 

1 comments on “Como Iniciar e Desligar Instâncias no serviço AWS EC2 automaticamente e fazer o Pentaho Server Iniciar como um Serviço.

Deixe um comentário

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

Translate »