Terraform - Uploading Static Content to Cloud

Há algum tempo, participei de um desafio DevOps Terraform/AWS que deve implantar um site estático em menos de 4 horas.
O Desafio
“Com poucas linhas, crie uma API simples em uma linguagem de sua escolha que retorne uma mensagem secreta. A mensagem é muito sensível, então você precisa descobrir a melhor forma de armazená-la. Prevemos que também precisaremos armazenar alguns dados em um banco de dados relacional no futuro, portanto, nosso aplicativo também precisará de acesso ao RDS, embora a configuração da conexão em seu aplicativo seja um crédito extra.
Depois que sua API for montada, escreva um script Terraform para provisionar e carregar a API a ser hospedada no Elastic Beanstalk junto com uma instância RDS. Estamos procurando o uso das melhores práticas de segurança na configuração para ambos.
The approach
Implementamos um aplicativo NodeJS Express capaz de recuperar um segredo do AWS Secret Manager e se conectar a um banco de dados MySQL.
Todos os recursos mencionados devem ser implantados na AWS usando o Terraform.
Alguns deles são:
- AWS Elastic Beanstalk Environment, Application and Versioning
- AWS IAM rules to allow multi-service communication
- AWS S3 Bucket to keep the application code versioning
- AWS Secret Manager to keep a application secret
- AWS VPC/Subnets/Gateway - To allow Public and Private network access of services
- AWS RDS to deploy a private MySQL database
Durante a implantação dos scripts Terraform, o código do aplicação é copiado para o S3 e, em seguida, a nova versão é implantada no ambiente do EBS.
Solução
<https://github.com/mvitor/aws-api-rds-secret