Skip to content

dbuzatto/EC2-ChatOps-Manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

EC2 Instance Manager via ChatBot (Lambda)

Este projeto permite gerenciar instâncias EC2 da AWS por meio de comandos em um bot de chat (ex: Google Chat). Os usuários podem iniciar, parar e agendar ações em instâncias de forma segura e com controle de permissões.

🧩 Funcionalidades

  • Start/Stop de instâncias EC2 via comandos (start, stop)
  • 🕒 Agendamentos de ações (ex: agendar start serverservice 22:30)
  • 📋 Listagem de agendamentos pendentes
  • 👮‍♂️ Controle de permissões (usuários restritos/admins)
  • 📣 Menções a administradores para aprovação de ações
  • 📦 Integração com DynamoDB para persistência de agendamentos
  • 🖱️ Menu interativo para seleção e solicitação de ações (botões)
  • ⏱️ Relatório de tempo de uptime e logs de ações

🚀 Exemplo de Comandos

Comandos diretos:

start serverservice
stop i-0abc1234def567890
status test-env

Agendamento:

agendar start serverservice 22:00
agendar stop i-0abc1234def567890 03:30

Outros:

menu                 # Mostra todas as instâncias com botões
agendamentos         # Lista agendamentos pendentes
deletar agendamento <ID>  # (admins apenas)

⚙️ Pré-requisitos

  • AWS Lambda com permissões para EC2 e DynamoDB
  • Tabela DynamoDB chamada EC2InstanceSchedules
  • Configuração de webhook no Google Chat ou outra plataforma compatível
  • Ambiente Python 3.9+

🛡️ Permissões

  • ALLOWED_ADMIN_USERS: e-mails com permissão para comandos irrestritos e deletar agendamentos
  • UNRESTRICTED_INSTANCES_BY_NAME: nomes de instâncias que podem ser controladas por qualquer usuário

🧱 Estrutura do DynamoDB

Campo Tipo Descrição
id string ID único do agendamento (UUID)
instancia string ID da instância EC2
acao string start ou stop
horario string ISO 8601 (UTC) do agendamento
solicitante string e-mail de quem solicitou
status string pendente, executado, etc

📝 Observações

  • Os horários inseridos no comando agendar devem estar no formato HH:mm (horário local UTC-3).
  • Se o horário já passou no dia atual, a ação será agendada para o dia seguinte.
  • Todas as ações são registradas via tags na própria instância (LastActionBy, StoppedAt).

📦 Deploy

  1. Faça upload do código no Lambda
  2. Configure a variável de ambiente DYNAMODB_TABLE_NAME
  3. Crie a tabela no DynamoDB conforme estrutura acima
  4. Conecte o Lambda a um Webhook do Google Chat (via API Gateway se necessário)

📄 Licença

Este projeto é open-source sob a licença MIT.


🔄 Lambda ExecutaAgendamentosEC2

Este segundo Lambda deve ser configurado para rodar periodicamente (ex: a cada minuto) e é responsável por:

  • Buscar agendamentos pendentes cujo horário já passou
  • Iniciar ou parar as instâncias EC2
  • Atualizar o status dos agendamentos no DynamoDB (executado ou erro)

Deploy

  1. Crie uma nova função Lambda
  2. Use o código presente em ExecutaAgendamentosEC2/lambda_function.py
  3. Agende sua execução com o Amazon EventBridge (ex: rate(1 minute))

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages