Terraform¶
Provisionando remote state no S3¶
No Script requisitamos o ID da conta AWS utilizando o profile e region para poder criar o bucket com Id único. Adicionamos tags, versionamento e acl private ao provisionamento do bucket S3.
Recursos provisionados¶
Recursos do Provedor | Descrição |
---|---|
aws_s3_bucket |
Fornece um recurso de bucket do S3 |
aws_s3_bucket_acl |
Configuração de ACL no bucket |
aws_s3_bucket_versioning |
Configuração de versionamento no bucket |
Ordem da execução dos comandos¶
Abaixo clique em expandir para visualizar a ordem da execução dos comandos caso necessite. A mesma ordem será utilizada nos demais tópicos.
- Inicializando a configuração do Terraform
- Validando sua configuração
- Executando um plano de criação
- Após revisar o plano de criação, vamos aplicar e aprovar a execução automaticamente
Provisionando bucket S3 com arquivos¶
Provisionamento do bucket S3 com adição de arquivos em csv e um jpg. É utlizado backend e module no script main. O S3 contém ciclo de vida, versionamento, ACL e adição de objetos.
Recursos provisionados¶
Recursos do Provedor | Descrição |
---|---|
aws_s3_bucket |
Esta funcionalidade é para gerenciar o S3 em uma partição AWS |
aws_s3_bucket_acl |
Fornece um recurso de ACL de bucket do S3 |
aws_s3_bucket_lifecycle_configuration |
Fornece um recurso de configuração independente para a configuração do ciclo de vida do bucket do S3 |
aws_s3_bucket_metric |
|
aws_s3_bucket_versioning |
Fornece um recurso para controlar o controle de versão em um bucket do S3 |
aws_s3_object |
Fornece um recurso de objeto S3 |
Recursos Terraform | Descrição |
---|---|
random_pet |
Gera nomes de animais aleatórios que podem ser usados como identificadores exclusivos para outros recursos |
Ordem da execução dos comandos¶
Clique aqui para ir na ordem dos comandos
Provisionando Redshift e outros recursos necessários.¶
O script possui a criação do cluster Redshift, criação de usuários e grupos para Redshift, adição de role e policy, criação de secrets manager com adição de informações criadas no processo para não utilizar as senhas diretamente no código, adição de IP'S para acesso aos recursos provisionados.
Pontuarei apenas algumas partes que precisam de modificações:
Criação Cluster Redshift¶
Esse cluster atende as caracteristicas do modelo free tier, caso esteja dentro do prazo.
Pode-se modificar master_username
e database_name
.
resource "aws_redshift_cluster" "cluster_reds"
{
cluster_identifier = random_pet.this.id
database_name = "northwind"
master_username = "aylton"
master_password = random_password.password[0].result
port = 5439
node_type = "dc2.large"
cluster_type = "single-node"
publicly_accessible = true
apply_immediately = true # Necessário para destroy do cluster quando tiver snapshot
skip_final_snapshot = true # Necessário para destroy do cluster quando tiver snapshot
tags = var.tags
}
Adição de entrada CIDR¶
Foram criadas 3 adições de CIDR: Meu IP, Entrada para o dbt e Entrada do Looker Studio. E
Faça alteração para seu IP, sem ele você não conseguirá realizar operações futuras.
Pode-se modificar description
e cidr_blocks
.
resource "aws_security_group_rule" "security_rule_dbt"
{
description = "DBT 52.45"
type = "ingress"
from_port = 5439
to_port = 5439
protocol = "tcp"
cidr_blocks = ["52.45.144.63/32", "54.81.134.249/32", "52.22.161.231/32"] # IP dbt
security_group_id = data.aws_security_group.security_group_data.id
}
resource "aws_security_group_rule" "security_rule_lookerstudio"
{
description = "looker_studio"
type = "ingress"
from_port = 5439
to_port = 5439
protocol = "tcp"
cidr_blocks = ["142.251.74.0/23", "74.125.0.0/16"] # IP Looker studio
security_group_id = data.aws_security_group.security_group_data.id
}
Adicionado dado de captura automática ip
Agora toda vez que seu Ip mudar, você não precisa mais alterar manualmente o número do IP. Basta usar oterraform plan
para verificar as mudanças e terraform apply -auto-approve
para aplicá-las.
Criação de usuários, grupos e adição de usuário ao grupo¶
Recurso Removido
Os recursos específicos para este tópico estavam gerando instabilidades no terraform,
então a criação dos usuários, grupos e adição de usuários ao grupos foram movidos para o python
no tópico Criação de usuários, grupos e vinculos
Salvando usuários e senhas no Secret Manager¶
Um recurso muito importante quando trata-se de guardar dados mais sensíveis, principalmente quando estamos gerando senhas e logins como é caso desse pequeno projeto. O script vai guardar os logins e senhas referente ao Redshift, além de outras informações para serem utilizadas no python futuramente.
resource "aws_secretsmanager_secret_version" "rd_secret_version"
{
secret_id = aws_secretsmanager_secret.rd_secret.id
secret_string = jsonencode({
engine = "redshift"
data_base = aws_redshift_cluster.cluster_reds.database_name
username = aws_redshift_cluster.cluster_reds.master_username
password = aws_redshift_cluster.cluster_reds.master_password
port = aws_redshift_cluster.cluster_reds.port
host = aws_redshift_cluster.cluster_reds.endpoint
dbClusterIdentifier = aws_redshift_cluster.cluster_reds.cluster_identifier
dbt_prod = "dbt_prod"
dbt_prod_password = random_password.password[1].result
dbt_dev = "dbt_dev"
dbt_dev_password = random_password.password[2].result
looker_user = "looker"
looker_password = random_password.password[3].result
})
}
Recursos provisionados¶
Recursos do Provedor | Descrição |
---|---|
aws_iam_policy |
Fornece uma política IAM |
aws_iam_role |
Fornece uma função IAM |
aws_iam_role_policy_attachment |
Anexa uma política IAM gerenciada a uma função IAM |
aws_redshift_cluster |
Fornece um recurso de cluster do Redshift |
aws_redshift_cluster_iam_roles |
Fornece um recurso de funções IAM do cluster do Redshift |
aws_secretsmanager_secret |
Fornece um recurso para gerenciar metadados secretos do AWS Secrets Manager |
aws_secretsmanager_secret_version |
Fornece um recurso para gerenciar a versão secreta do AWS Secrets Manager, incluindo seu valor secreto |
aws_security_group_rule |
Fornece um recurso de regra de grupo de segurança. Representa uma única regra de grupo de entrada ou saída, que pode ser adicionada a grupos de segurança externos |
Recursos do Terraform | Descrição |
---|---|
random_password |
Idêntico a random_string com a exceção de que o resultado é tratado como confidencial e, portanto, não é exibido na saída do console |
random_pet |
O recurso random_pet gera nomes de animais de estimação aleatórios que devem ser usados como identificadores exclusivos para outros recursos |
Ordem da execução dos comandos¶
Clique aqui para ir na ordem dos comandos
[Extra] Comandos¶
comandos | descrição |
---|---|
terraform init | Inicializa a configuração do Terraform |
terraform plan | comando permite visualizar as ações que o Terraform executaria para modificar sua infraestrutura ou salvar um plano especulativo que pode ser aplicado posteriormente |
terraform destroy | Destrói a configuração provisionada |
terraform validate | Valida sua configuração |
terraform plan -out="tfplan.out" | Gera um arquivo .out do resultado executado pelo terraform plan |
terraform apply "tfplan.out" | Executa modificações com base no arquivo marcado |
terraform plan -destroy -out="des.plan" | Gera um arquivo .plan do resultado executado pelo terraform destroy |
terraform apply "des.plan" | Executa modificações de acordo com o arquivo marcado |
Check Objetivos¶
Os ícones são os finalizados e os são os em abertos.