Visão geral
Este laboratório faz parte de um laboratórios DevOps com projetos de exemplo completo.
Tudo que você tem que fazer é seguir passo a passo para completá-lo.
Este laboratório pode custar algum dinheiro, mas não muito se você mantê-lo funcionando por um curto período de tempo.
O que você vai aprender neste laboratório
Use o Terraform para configurar a infraestrutura na AWS.
A infraestrutura inclui VPC, NAT gateway, security group, Auto Scaling group, EC2, ALB, Elastic IP, and Certificate Manager (SSL/TLS certificates).
Observe que esta é uma arquitetura de rede VPC de 3 níveis.
Contamos com o módulo Terraform "terraform-aws-modules/vpc/aws" para criar a maioria dos componentes de rede aqui.
Diagrama de arquitetura
Aqui está o que você vai criar neste laboratório!
Pré-requisitos
Instalar visual Studio Code:
https://code.visualstudio.com/download
Crie uma conta de usuário na AWS
Você precisa de uma conta AWS e um usuário IAM.
Se você não tem uma conta AWS, inscreva-se, mas certifique-se de ter um cartão de credito internacional.
Para ambientes de laboratório, um usuário do IAM com a política de gerenciamento "AdministratorAccess" já serve.
Registre um domínio
Este laboratório requer um domínio para configurar HTTPS! Melhor ter algum tipo de domínio de teste usado para fins de laboratório.
O domínio pode ser registrado em qualquer provedor de domínio ou direto na mesma conta AWS, dependendo de suas necessidades.
Possuir um nome de domínio normalmente custará entre US$ 10 e US$ 20 por ano.Você também precisa criar uma zona hospedada no Route53 para o domínio acima na mesma conta AWS e obter as informações de registro do NS a partir daí.
- Em seguida, vá para as configurações do seu domínio e atualize seus servidores de nome para direcionar o tráfego para o Route53 da sua conta AWS.
Armazenamento de estado remoto com S3 e DynamoDB
NOTA: Se você optar por não usar o estado remoto para uma abordagem mais simples, você pode pular esta etapa, mas certifique-se de comentar o conteúdo do arquivo "t1-02-backend.tf" mais tarde.
O estado terraform (arquivo "terraform.tfstate") também pode ser armazenado remotamente.
Neste laboratório, você precisa criar um Bucket S3 com antecedência para armazenar o arquivo state da seguinte forma:
Bucket name: devops-projects-infra-test
Region: US-East (N.Virginia) us-east-1
Bucket Versioning: Enable
Create folder: dev/devops-01
- Em seguida, crie uma tabela DynamoDB que é usada para bloqueio de estado:
Table Name: dev-devops-01
Partition key (Primary Key): LockID (Type as String)
Confira o código-fonte
- Aqui está o código fonte para conferir:
$ cd sua-pasta/do/seu/pc
$ git clone https://github.com/efcunha/devops-labs.git
$ cd devops-labs/terraform-aws/
- Porque você terá um domínio de teste diferente, então você precisará modificar algum código para se adequar ao seu ambiente:
# File t06-02-datasource-route53-zone.tf
name = "your-domain.com"
# File t11-acm-certificatemanager.tf
*.your-domain.com" # change this!
# File t12-route53-dnsregistration.tf
name = "devops01.your-domain.com" # change this!
# File t13-05-autoscaling-notifications.tf
endpoint = "someone@domain.com" # change this! (to your email)
# File my-canary/nodejs/node_modules/my-canary.js
const urls = ['https://devops01.your-domain.com']; // change this!
- Depois de mudar meu canary.js, você precisa re-executar o seguinte comando:
cd my-canary
zip -r my-canaryv1.zip nodejs
- Em seguida, você precisa criar um par-chave chamado "terraform-key" em sua conta AWS (usado para fazer login na sua instância EC2 mais tarde):
$ cd private-key/
$ ssh-keygen -f terraform-key
# Go to EC2 -> Key pairs -> Import key pair
# and follow the guide.
# Remember the key pair's name is "terraform-key".
Parabéns! Agora tudo deve estar guase pronto, mais logo vamos descobrir.
Executando comandos terraform
Agora é hora de executar oficialmente os comandos terraform para criar o seu ambiente!
terraform init é o primeiro comando a ser executado a fim de preparar o diretório de trabalho atual.
Ele instalará plugins e módulos infantis, inicializará o backend, copiará um módulo de origem, etc.
É seguro executar este comando várias vezes.
$ terraform init
Terraform has been successfully initialized!
Terraform validate
Verificará se uma configuração é sintáticamente válida e internamente consistente, independentemente de quaisquer variáveis fornecidas ou estado existente.
É seguro executar este comando automaticamente, por exemplo, como uma verificação pós-salvamento em um editor de texto ou como um passo de teste para um módulo reutilizável em um sistema DE CI.
$ terraform validate
Success! The configuration is valid.
Terraform plan
Ele criará um plano de execução, que permite visualizar as mudanças que a Terraform planeja fazer à sua infraestrutura.
O comando do plano por si só não realizará as alterações propostas, então você pode usar este comando para verificar se as mudanças propostas correspondem ao que você esperava.
Terraform apply
Executará as ações propostas em um plano Terraform.
No caso padrão, sem nenhum arquivo de plano salvo, a terraform aplica cria seu próprio plano de ação, da mesma forma que o "terraform plan" faria.
$ terraform apply
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Apply complete! Resources: 98 added, 0 changed, 0 destroyed.
Outputs:
Explorar e confirmar os recursos da AWS
- Verifique seu e-mail para a assinatura do SNS
- Instâncias EC2 (1 bastion e 2 servidores web)
- Auto Scaling Groups (and Launch template)
- Load Balancers
- Target Groups (and Health checks)
CloudWatch
ALB Alarm, ASG Alarm, CIS Alarms, SyntheticsAcesse o domínio do serviço:
https://devops01.your-domain.com/
https://devops01.your-domain.com/app1/
https://devops01.your-domain.com/app1/metadata.html
- Baixe o arquivo de estado remoto, se necessário:
$ terraform state pull
Faça login na instância Bastion:
$ ssh -i private-key/terraform-key.pem ec2-user@BastionHost-Public IPv4
Limpar Instalação
- Destruir todos os objetos remotos gerenciados por uma configuração do terraform.
$ terraform destroy
Acquiring state lock. This may take a few moments...
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
Releasing state lock. This may take a few moments...
Destroy complete! Resources: 98 destroyed.
Alguns recursos AWS que você tem que excluir manualmente:
CloudWatch > Log groups
CloudWatch > Alarms
Lambda > Functions
S3 bucket
DynamoDB
- e também os seguintes arquivos locais:
Delete Files
rm -rf .terraform*
rm -rf terraform.tfstate*
Conclusão
Parabéns por completar o laboratório.
Não é fácil entender do que se trata, mas passando por todos os passos você aprendeu muito.
Top comments (0)