Slide 1

Slide 1 text

Gerenciando ambientes complexos com Terraform Bruno Russi Lautenschlager The information in this document is confidential to the person to whom it is addressed and should not be disclosed to any other person. It may not be reproduced in whole, or in part, nor may any of the information contained therein be disclosed without the prior consent of the directors of iFood. It has been used as support material for an oral presentation and, therefore, it does not represent a complete record of the topics presented in the mentioned presentation.

Slide 2

Slide 2 text

Deep dive módulos Terraform Como é nosso ambiente cloud Ferramentas que utilizamos Workflow e Arquitetura do projeto O que será coberto nessa apresentação Agenda Especialização de times

Slide 3

Slide 3 text

Quem sou eu? ● Bruno Russi Lautenschlager ● SRE @ iFood ● Creator @ Rocketseat ● AWS Community Builder ● Contatos ○ linktr.ee/bruno_russi

Slide 4

Slide 4 text

Nosso ambiente

Slide 5

Slide 5 text

Especialização de times

Slide 6

Slide 6 text

Cloud Infrastructure Team

Slide 7

Slide 7 text

● Provisionamento de recursos AWS ● Maior abstração IaC & visibilidade da infraestrutura ● Autonomia para os times ● Fluxo de trabalho baseado no GitOps O que fazemos

Slide 8

Slide 8 text

Ferramentas utilizadas Atlantis Terragrunt & Terratest Atlantis Broker GitLab AWS CookieCutter

Slide 9

Slide 9 text

Workflow

Slide 10

Slide 10 text

Workflow AWS Account 01 AWS Account 02 AWS Account 03

Slide 11

Slide 11 text

Blueprints usage Arquitetura

Slide 12

Slide 12 text

Terragrunt ● Auxilia no gerenciamento de múltiplos ambientes e/ou contas AWS em um monorepo ● Maior manutenibilidade ○ DRY para o código Terraform ○ DRY para a configuração de backend ○ DRY para argumentos da CLI

Slide 13

Slide 13 text

Interface em Terragrunt consumindo uma blueprint Exemplo de implementação: ● github.com/gruntwork-io/terragrunt-infrastructure-live-example Arquitetura do projeto

Slide 14

Slide 14 text

Interface em Terragrunt consumindo uma blueprint Exemplo de implementação: ● github.com/gruntwork-io/terragrunt-infrastructure-live-example Arquitetura do projeto

Slide 15

Slide 15 text

Blueprint ● O que é uma blueprint? ○ Composição de módulos e/ou resources do Terraform ● Para que serve uma blueprint? ○ Cria um "componente" cloud completo ○ Simplificar a interface do usuário

Slide 16

Slide 16 text

Módulos ● O que é um módulo Terraform? ○ Impementação nativa de recursos utilizando ● Para que serve um módulo Terraform? ○ Reaproveitamento de implementação ○ Encapsulamento de código ● Quando implementar? blog.gruntwork.io/how-to-create-reusable-infrastructure-with-terraform-mod ules-25526d65f73d

Slide 17

Slide 17 text

● Use Git tags ● Teste muito sua blueprint ● Utilize pre-commit ● Terraform-docs ● Tenha outputs consistentes ● Evite regras hard coded ● Seja agnóstico a regras de negócio em suas implementações TIP: https://www.terraform-best-practices.com/ Boas práticas

Slide 18

Slide 18 text

Dúvidas?

Slide 19

Slide 19 text

Obrigado Gracias Merci Thank you