AWS — Ligando e Desligando uma Instância EC2 através do API Gateway
Controlando o inicio e desligamento de uma instância EC2 através de um API criada no serviço API Gateway ligado a uma função Lambda
![AWS — Ligando e Desligando uma Instância EC2 através do API Gateway](/content/images/size/w2000/2024/02/iphone-410324_1920-1.jpg)
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”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-9hxucl4rjmklwjkfyvptka.png)
Clique em “Alterar a função de execução padrão” e selecione “Criar uma função com permissões básicas do Lambda”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-cebr1okzi_cqkwzwdp3_5q.png)
Agora clique em “Criar Função”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-o9v14oqyg6ne9xy2hn6bla.png)
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”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-cyqziektafrh-fhl5-jitg.png)
Em “Papel de execução” será exibido o nome da função que foi criada, clique no nome dela:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-3geg6x0r7scnqg1u-x6pvq.png)
Será aberto uma nova janela que nos permite gerencia este acesso, nesta janela, clique na seta ao lado do nome da política:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-au4wxbvmgxff7ofb4xvp0w.png)
Agora clique em “Editar Política”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-qy6u0k0hwyta7xh0gfdq7g.png)
Na janela aberta, clique em “Adicionar permissões adicionais”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-monrhqgy279oghsbwckziw.png)
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:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-y_ga6tmlkwxvoz0lokcqog.png)
Clique em “Revisar Política” e na janela seguinte clique em “Salvar Alterações”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-u9x4umwjvzediardccjynw.png)
Pronto, pode fechar esta janela e voltar para a função na aba de “Configurações”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-_pvfl9sqyo20gi45oyws8g.png)
Em “Código da Função”, clique duas vezes em “lambda_function.py” para abrir a função:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-oaxsdeoi4d0lpr4akzuhbg.png)
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:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-7h2el6jekmss61vypk4q-q.png)
Antes de partirmos para a criação da API, vamos testar a função.
Clique em “Test”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-exjxeghqy5kl8ckdnj347q.png)
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:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-keplh3cwr3fpnauvlxm0tq.png)
Agora clique novamente em “Test” para que nosso teste seja executado:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-yeehy8opa5qk1zjplvmw0a.png)
Se o teste tiver sucesso devemos receber a resposta “Ligado”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-cxkfhyseejclwytohdaskg.png)
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”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-sbm4xlqld2jwx4cb67gu-a.png)
Na seleção de “Tipo de API” clique em “Compilar” em “API REST”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-cz6szujzhdtgw1ml9jwgga.png)
Em “Nome da API” preencha o nome desejado e clique em “Criar API”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-lfx6nkohe08m_yvtxegtuq.png)
Em “Recursos” clique em “Criar Método”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-p47rwyzmp1ogwafapeu4jw.png)
No campo aberto, selecione “GET” e clique no sinal de OK:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-xzkwreletvzlqv8wqo-rig.png)
Clique em “GET” (Método recém criado):
![](https://www.palomamacetko.com.br/content/images/2024/02/1-9nby-lqxrsys2s8n4oif_g.png)
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”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-inty6bglbkni8a7egkoeyg.png)
Será exibido um alerta relativo a permissão da função, clique em “OK”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-j1dedub7zdgrurwqb0c5qq.png)
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”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-hbh7bswxw8eipvg5iux7fg.png)
Em “Parâmetros de string de consulta de URL” iremos inserir os 3 parâmetros que utilizaremos, devendo ficar igual a imagem abaixo:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-syfaodq_63eons7no49kwa.png)
Clique em “Execução de método” para voltar a janela anterior:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-ql-pkhzxrptu87xn0isqia.png)
Clique em “Solicitação de integração”;
![](https://www.palomamacetko.com.br/content/images/2024/02/1-mruz04_msuagoulardfmba.png)
Clique em “Modelos de mapeamento”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-e8dmkq5wrd6no0i2hlmcmw.png)
Na janela aberta, selecione “Quando não há modelos definidos (recomendado)”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-cucbcief7y3slljz0gsfwg.png)
Agora clique em “Adicionar modelo de mapeamento” e preencha com “application/json” e clique no sinal de “OK”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-ti9jafigew4mcvkrrjowrq.png)
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”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-q_utoynemwmbybe2phe_mq.png)
Clique em “Execução de método” para voltar a janela anterior:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-_z_wuh4vh4axjr4m3bf2ba.png)
Agora temos nossa API pronta, precisamos publicar ela.
Em “Recursos” clique em “/”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-wg1w52kkiai9pkkrpiqs1g.png)
Clique em “Ações” e em “Implantar API”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-obtqmtxykqop3ztmje8liq.png)
Em “Estágio da Implantação” selecione “[novo estágio]”, preencha um nome para identificar e clique em “Implante”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-3jeklq8_d-d7q18rb5xfqw.png)
Pronto! Nossa API foi publicada! ❤
O “Link do endpoint” dela esta sendo exibido em “Invocar URL”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-_elzeqlowkvmpiccyfyirg.png)
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:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-j902sqcijzc0nh1-dv7hwg.png)
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”:
![](https://www.palomamacetko.com.br/content/images/2024/02/1-mmpdxat_xjyll77vfagtoq.png)
Por hoje é só, pessoal! 🛑
Até mais! 👋