0Pricing
DevOps Bootcamp · Aula

Expressões condicionais e splats

Implemente lógica condicional em suas configurações usando operadores ternários e entenda as expressões splat para transformar listas de objetos.

Expressões condicionais e splats é uma aula grátis de DevOps Bootcamp no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de DevOps Bootcamp, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de DevOps Bootcamp inclui 4 aulas no total.

Lógica dinâmica no Terraform

O Terraform não se limita a declarações estáticas! Para tornar suas configurações de infraestrutura mais inteligentes e adaptáveis, usamos lógica dinâmica.

Esta lição apresenta duas ferramentas poderosas: expressões condicionais e expressões splat. Elas ajudam sua infraestrutura a se adaptar a diferentes situações e a transformar dados com eficiência.

Expressões condicionais: conceitos básicos

Expressões condicionais, frequentemente chamadas de operadores ternários, permitem escolher um de dois valores com base no fato de uma condição ser verdadeira ou falsa. É como uma instrução simples de "if-else" para valores.

  • Sintaxe: condition ? value_if_true : value_if_false
  • Elas são excelentes para tornar as configurações flexíveis e reutilizáveis, adaptando-as a diferentes ambientes ou definições.

Condicional: exemplo de valor simples

Vamos ver como uma expressão condicional pode definir dinamicamente o valor de uma variável local com base em uma variável de entrada. Tente alterar default = "dev" para default = "prod" e executar novamente.

variable "env" {
  description = "Deployment environment (dev or prod)"
  type        = string
  default     = "dev"
}

locals {
  instance_type = var.env == "prod" ? "t3.medium" : "t3.micro"
}

output "chosen_instance_type" {
  value = local.instance_type
  description = "The instance type selected based on environment."
}

Condicional: exemplo de atributo de recurso

Você também pode usar condicionais para controlar atributos de recursos, inclusive para decidir se um recurso será criado. Aqui, criamos condicionalmente um bucket do S3 usando o meta-argumento count.

variable "create_bucket" {
  description = "Whether to create an S3 bucket"
  type        = bool
  default     = true
}

resource "aws_s3_bucket" "my_bucket" {
  # If create_bucket is true, count is 1 (create one bucket).
  # If create_bucket is false, count is 0 (create no buckets).
  count  = var.create_bucket ? 1 : 0
  bucket = "coddykit-unique-bucket-12345" # IMPORTANT: Replace with a globally unique name!
  acl    = "private"
}

output "bucket_id" {
  value = var.create_bucket ? aws_s3_bucket.my_bucket[0].id : "No bucket created"
  description = "The ID of the created S3 bucket, or a message if not created."
}

Entendendo as expressões splat

Expressões splat ([*]) são usadas para transformar uma lista de objetos em uma lista de atributos específicos desses objetos. É um atalho poderoso para extrair dados de vários itens de uma só vez.

  • Sintaxe: LIST_OF_OBJECTS[*].ATTRIBUTE
  • Elas simplificam o trabalho com coleções, como vários recursos criados com count ou variáveis de lista complexas.

Splat: exemplo de saídas de recursos

Imagine que você criou várias instâncias EC2. Como obter facilmente uma lista de todos os IPs públicos? As expressões splat são perfeitas para isso! Observação: Você precisará de uma AMI válida para sua região da AWS.

resource "aws_instance" "web" {
  count         = 2 # Creates two instances
  ami           = "ami-0abcdef1234567890" # Replace with a valid AMI ID for your region
  instance_type = "t2.micro"
  tags = {
    Name = "web-instance-${count.index}"
  }
}

output "web_instance_public_ips" {
  value = aws_instance.web[*].public_ip
  description = "A list of public IP addresses for all web instances."
}

Splat: exemplo com listas de variáveis

As expressões splat não servem apenas para recursos; elas também funcionam muito bem com variáveis complexas. Aqui, temos uma lista de objetos de usuários e queremos extrair apenas os endereços de e-mail.

variable "users" {
  description = "List of user objects, each with name, email, and role."
  type = list(object({
    name  = string
    email = string
    role  = string
  }))
  default = [
    { name = "Alice", email = "alice@example.com", role = "admin" },
    { name = "Bob", email = "bob@example.com", role = "viewer" },
    { name = "Charlie", email = "charlie@example.com", role = "editor" }
  ]
}

output "user_emails" {
  value = var.users[*].email
  description = "A list containing only the email addresses of the users."
}

Combinando condicionais e splats

Expressões condicionais e splat podem ser combinadas para criar uma lógica ainda mais avançada e concisa. Por exemplo, você pode selecionar condicionalmente uma lista de recursos e, em seguida, usar uma expressão splat na lista escolhida.

  • Isso permite criar configurações altamente adaptáveis, capazes de responder a cenários complexos.
  • Exemplo: (var.env == "prod" ? aws_instance.prod : aws_instance.dev)[*].id poderia buscar IDs de diferentes conjuntos de instâncias com base no ambiente.

Boas práticas para lógica dinâmica

Embora seja poderosa, a lógica dinâmica pode dificultar a compreensão das configurações se não for usada com cuidado. Veja algumas dicas:

  • Mantenha a legibilidade: Divida expressões complexas em partes menores e mais fáceis de gerenciar.
  • Use valores locais: Armazene expressões condicionais ou splat complexas em blocos locals para melhorar a legibilidade e evitar repetições.
  • Faça testes completos: A lógica dinâmica pode levar a comportamentos inesperados. Sempre execute terraform plan e analise cuidadosamente as alterações propostas.
  • Documente: Adicione comentários para explicar lógicas complexas, especialmente ao combinar condicionais e splats.

Verificação rápida

Considere a seguinte configuração do Terraform:

variable "server_names" {
  type    = list(string)
  default = ["web-01", "db-01", "cache-01"]
}

output "filtered_names" {
  value = var.server_names[*]
}

Recapitulação e próximos passos

Excelente trabalho! Você aprendeu a tornar suas configurações do Terraform muito mais dinâmicas e flexíveis:

  • Exploramos expressões condicionais (operador ternário) para tornar os valores dinâmicos com base em condições específicas.
  • Dominamos as expressões splat ([*]) para extrair com eficiência listas de atributos de coleções de objetos ou recursos.

Essas ferramentas são fundamentais para criar infraestrutura como código escalável, reutilizável e adaptável. Continue praticando para incorporá-las ao seu trabalho diário com o Terraform!

Perguntas Frequentes

A aula “Expressões condicionais e splats” é grátis?

Sim — o texto completo de “Expressões condicionais e splats” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de DevOps Bootcamp, atualize para CoddyKit PRO. O curso de DevOps Bootcamp inclui 4 aulas no total.

O que vou aprender em “Expressões condicionais e splats”?

Implemente lógica condicional em suas configurações usando operadores ternários e entenda as expressões splat para transformar listas de objetos. Você pratica DevOps Bootcamp com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar DevOps Bootcamp?

Nenhuma experiência prévia é necessária. DevOps Bootcamp no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Expressões condicionais e splats”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de DevOps Bootcamp?

Sim. Cada aula de DevOps Bootcamp inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Usando loops com `for_each` e `count`
  2. Funções integradas do Terraform
  3. Expressões condicionais e splats
  4. Blocos dinâmicos para configurações aninhadas
← Voltar para DevOps Bootcamp