Contents

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