AWS — Ligando e Desligando uma Instância EC2 através do API Gateway
Olá Gente
A beleza dos serviços da AWS estarem interligados é que você pode fazer ações em uma para afetar outra de forma extremamente fácil.
Neste tutorial iremos aprender como Ligar e Desligar uma instancia EC2 chamando uma API.
Exemplo (Nosso Objetivo):
https://www.apiaws.com.br/minhaapi/?Instancia=123&Regiao=us-east-1&Acao=Ligar
https://www.apiaws.com.br/minhaapi/?Instancia=123&Regiao=us-east-1&Acao=Desligar
Função Lambda
A primeira coisa a fazer é criar a função lambda que ira receber os comandos da API e executar na instância.
Entre na listagem de funções lambda e clique em “Criar Função”:
https://console.aws.amazon.com/lambda/home?region=us-east-1#/functions
Preencha o nome desejado e selecione a linguagem “Python 3.7”:
Clique em “Alterar a função de execução padrão” e selecione “Criar uma função com permissões básicas do Lambda”:
Agora clique em “Criar Função”:
Neste momento será aberto os detalhes da função, antes de começarmos a mexer com o Python iremos criar as permissões, para que nossa função tenha acesso as instâncias EC2.
Logo no topo da janela, clique em “Permissões”:
Em “Papel de execução” será exibido o nome da função que foi criada, clique no nome dela:
Será aberto uma nova janela que nos permite gerencia este acesso, nesta janela, clique na seta ao lado do nome da política:
Agora clique em “Editar Política”:
Na janela aberta, clique em “Adicionar permissões adicionais”:
Será aberto alguns campos, selecione conforme abaixo:
- Serviço: EC2
- Ações: Gravação-StartInstances / Gravação: StopInstances
- Recursos: Todos os recursos
A janela deve ficar semelhante a janela abaixo:
Clique em “Revisar Política” e na janela seguinte clique em “Salvar Alterações”:
Pronto, pode fechar esta janela e voltar para a função na aba de “Configurações”:
Em “Código da Função”, clique duas vezes em “lambda_function.py” para abrir a função:
Agora precisamos configurar o script que ira controlar o inicio e desligamento do servidor, para isto, copie o script abaixo e cole no editor:
Clique em “Deploy” para salvar as alterações em nossa função:
Antes de partirmos para a criação da API, vamos testar a função.
Clique em “Test”:
E preencha com o Json abaixo (Este Json será criado pela API com base nos parâmetros enviados na querystring):
No campo “Nome do Evento” preencha com alguma identificação do seu teste.
Clique em “Criar” para que nosso teste seja criado:
Agora clique novamente em “Test” para que nosso teste seja executado:
Se o teste tiver sucesso devemos receber a resposta “Ligado”:
Criando a API
Já temos a função, agora precisamos interligar a função lambda com o serviço API Gateway.
Entre em:
https://console.aws.amazon.com/apigateway/main/apis?region=us-east-1
Clique em “Criar API”:
Na seleção de “Tipo de API” clique em “Compilar” em “API REST”:
Em “Nome da API” preencha o nome desejado e clique em “Criar API”:
Em “Recursos” clique em “Criar Método”:
No campo aberto, selecione “GET” e clique no sinal de OK:
Clique em “GET” (Método recém criado):
Na janela aberta, selecione “Tipo de Integração: Função Lambda” e no campo “Função Lambda” digite o nome da função, após isto, clique em “Salvar”:
Será exibido um alerta relativo a permissão da função, clique em “OK”:
Agora temos de configurar a API para receber os parâmetros e enviar o Json para a função.
Clique em “Solicitação de método”:
Em “Parâmetros de string de consulta de URL” iremos inserir os 3 parâmetros que utilizaremos, devendo ficar igual a imagem abaixo:
Clique em “Execução de método” para voltar a janela anterior:
Clique em “Solicitação de integração”;
Clique em “Modelos de mapeamento”:
Na janela aberta, selecione “Quando não há modelos definidos (recomendado)”:
Agora clique em “Adicionar modelo de mapeamento” e preencha com “application/json” e clique no sinal de “OK”:
Abaixo deste campo, abriu um espaço para criarmos o Json, preencha conforme abaixo (Neste espaço iremos criar um json que será populado com os dados da querystring):
Clique em “Salvar”:
Clique em “Execução de método” para voltar a janela anterior:
Agora temos nossa API pronta, precisamos publicar ela.
Em “Recursos” clique em “/”:
Clique em “Ações” e em “Implantar API”:
Em “Estágio da Implantação” selecione “[novo estágio]”, preencha um nome para identificar e clique em “Implante”:
Pronto! Nossa API foi publicada! ❤
O “Link do endpoint” dela esta sendo exibido em “Invocar URL”:
Testando
Já temos a função, já temos a API, vamos Testar!
Basta chamada a URL do Endpoint, de sua API, inserindo os parâmetros:
Ligando a Instância:
https://XXXXXXX.execute-api.us-east-1.amazonaws.com/v1/?Instancia=123&Regiao=us-east-1&Acao=Ligar
Desligando a Instância:
https://XXXXXXX.execute-api.us-east-1.amazonaws.com/v1/?Instancia=123&Regiao=us-east-1&Acao=Desligar
Adendo: Identificamos ID da Instancia
Entre em:
https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#Instances:
Nesta página são exibidas suas instancias.
Observe que o ID de sua instancia fica na coluna “ID da Instância”:
Por hoje é só, pessoal! 🛑
Até mais! 👋