Módulo experimental para laboratório e repasse de conhecimento interno.
Cria uma página HTML em um S3 que permite ligar ou desligar uma instância AWS EC2.
A operação de ligar ou desligar a instância é realizar a partir de uma chamada autenticada ao API Gateway através de uma página HTML estática hospedada em um S3. Ao submeter o formulário que contém o ID da instância EC2, o Endpoint do API Gateway e a chave de acesso, a requisição será encaminhada à uma função Lambda que ligará ou desligará a instância especificada.
Serão criados 27 recursos ao total. Os principais recursos são:
- Uma instância Linux EC2
- Um API Gateway com CORS habilitado
- Um bucket S3 público que hospedará uma página HTML estática
- Uma função serverless Lambda integrada ao API Gateway
module "interruptor" {
source = "git::https://github.com/rbbrasil/terraform-interruptor-ec2"
caminho_par_chaves = "chave_ssh.pub"
nome_bucket = "nome-bucket-s3"
api_nome = "nome-api-gateway"
api_caminho = "nome-recurso-api"
lambda_nome = "nome-funcao-lambda"
}output "ip_servidor_inutil" {
value = module.interruptor.ip_servidor_inutil
}
output "hostname_servidor_inutil" {
value = module.interruptor.hostname_servidor_inutil
}
output "id_servidor_inutil" {
value = module.interruptor.id_servidor_inutil
}
output "endpoint_s3" {
value = module.interruptor.endpoint_s3
}
output "endpoint_api" {
value = module.interruptor.endpoint_api
}
output "api_key" {
value = module.interruptor.api_key
}
Crie um arquivo main.tf contendo o conteúdo descrito acima, parametrizado de acordo com seu ambiente local e execute os seguintes comandos após cumprir as dependências:
$ terraform init
$ terraform plan
$ terraform apply
(testado com Terraform v0.13.02)
Para fins de testes, pode ser substituído o HTML do bucket S3 pelo cURL e executar a seguinte chamada:
$ curl -X POST [ENDPOINT_DO_API_GATEWAY] -d '{"id": "i-0f5a34460bc33b735", "op": "on"}' -H 'x-api-key: CHAVE_DA_API' -q
``
## Dependências
### Par de chaves SSH
É necessário criar um par de chaves SSH para criar e conectar à instância EC2:
```sh
$ ssh-keygen -t rsa -b 2048 -C "exemplo@laboratorio" -f chave_sshAtentar para o nome do arquivo criado. Ele deverá ser o mesmo utilizado no parâmetro da chamada do módulo Terraform.