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.
- ✅ 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
start serverservice
stop i-0abc1234def567890
status test-envagendar start serverservice 22:00
agendar stop i-0abc1234def567890 03:30menu # Mostra todas as instâncias com botões
agendamentos # Lista agendamentos pendentes
deletar agendamento <ID> # (admins apenas)- 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+
- 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
| 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 |
- Os horários inseridos no comando
agendardevem estar no formatoHH: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).
- Faça upload do código no Lambda
- Configure a variável de ambiente
DYNAMODB_TABLE_NAME - Crie a tabela no DynamoDB conforme estrutura acima
- Conecte o Lambda a um Webhook do Google Chat (via API Gateway se necessário)
Este projeto é open-source sob a licença MIT.
Este segundo Lambda deve ser configurado para rodar periodicamente (ex: a cada minuto) e é responsável por:
- Buscar agendamentos
pendentescujo horário já passou - Iniciar ou parar as instâncias EC2
- Atualizar o status dos agendamentos no DynamoDB (
executadoouerro)
- Crie uma nova função Lambda
- Use o código presente em
ExecutaAgendamentosEC2/lambda_function.py - Agende sua execução com o Amazon EventBridge (ex:
rate(1 minute))