Terraform é uma ferramenta open source da HashiCorp para desenvolvimento de infraestrutura como código. Ela permite definir e gerenciar recursos em provedores de nuvem de forma declarativa usando arquivos de configuração HCL. Terraform resolve problemas como recuperação de desastres, documentação, versionamento, trabalho em equipe e criação de ambientes de staging.
8. Show me the code!
Um simples site estático servido do AWS S3.
goo.gl/urzL3t
8
9. Um pouco sobre as principais partes do
Terraform
HCL, Provider, Resource, Data Source, State e Execution Plan.
9
10. ● HashiCorp Configuration Language.
● A ideia é ser simples, apenas uma linguagem de
configuração.
● Tão simples que não tem IFs nem Loops .
● Feita em Go.
● github.com/hashicorp/hcl
A linguagem
HCL
10
11. Bibliotecas que implementam o gerenciamento dos recursos.
Quando instruímos o Terraform a criar um Bucket do S3 ou um
usuário no MySQL, na verdade quem está executando o
comando é o provider da AWS ou o provider do MYSQL.
● Alguns exemplos de providers: AWS, CloudFlare,
Datadog, GitHub, Terraform...
● Mais providers aqui terraform.io/docs/providers/
Providers
11
12. Como qualquer outra linguagem, variáveis servem para tornar
o código mais dinâmico e reutilizável.
● Tipos possíveis: string, list e map.
● terraform.io/docs/configuration/variables.html
Variables
12
13. São os recursos que desejamos criar em nossos providers.
● terraform.io/docs/configuration/resources.html
Resources
13
14. São os elementos responsáveis por carregar dados
preexistentes em seus providers.
● terraform.io/docs/configuration/data-sources.html
Data Sources
14
15. Um arquivo JSON que salva o estado da última execução.
● Algumas opções de armazenamento são: local, AWS S3 e
Vault (o da HashiCorp).
● terraform.io/docs/state/index.html
State
15
16. São os elementos responsáveis por carregar dados
preexistentes em seus providers.
● terraform.io/docs/configuration/data-sources.html
Execution
Plan
16
18. Modules ● Módulos são usados para criar componentes reutilizáveis no
Terraform, bem como para organização básica de código.
● São muito usados para criação de ambientes de staging.
● Você pode encontrar muitos módulos prontos, veja:
registry.terraform.io.
● terraform.io/docs/modules/create.html
18
21. ● Backends são opções de execução, storage remoto, e lock
do state.
● Ajuda muito no trabalho em equipe e na segurança do state.
● Um backend muito simples e útil é o AWS S3:
terraform.io/docs/backends/types/s3.html
Backends
21
22. ● Ferramenta usada para gerenciar múltiplas versões do
Terraform instaladas na máquina.
● Bom para manter a versão do terraform igual entre os
desenvolvedores.
● Bom para lockar a versão do Terraform por projeto.
● Pra quem conhece o NVM, RVM, rbenv ou o virtualenv… É a
mesma coisa.
● github.com/Zordrak/tfenv
tfenv
22
23. ● Melhora a formatação do plano de execução do Terraform.
● github.com/coinbase/terraform-landscape
Terraform
Landscape
23
24. Grafo de
dependências
Este é o grafo de dependências do nosso exemplo.
● terraform.io/docs/commands/graph.html
24
25. Blast Radius
O grafo gerado pelo Terraform on steroids (interativo).
● github.com/28mm/blast-radius
25
27. ● Recuperação de desastres.
● Documentação.
● Versionamento.
● Trabalho em equipe.
● Criação de ambientes de staging.
● Monitoramento de mudanças.
● ...
Quais
problemas o
Terraform
resolve?
27