Crear Módulos Terraform para Gestionar Buckets S3 en AWS (2023)

En este tutorial, profundizaremos en la creación de módulos Terraform para gestionar buckets S3 en Amazon Web Services (AWS). Aunque la utilización de módulos existentes es esencial, aprender a crear los propios proporciona flexibilidad, reutilización y composición en las configuraciones de Terraform.

Estructura del Módulo

Un módulo Terraform se compone de varios archivos, siendo los principales:

  • main.tf: Contiene la configuración principal del módulo.
  • variables.tf: Define las variables utilizadas en el módulo.
  • outputs.tf: Contiene las salidas del módulo, proporcionando información a otras partes de la configuración.
  • README.md y LICENSE: Documentación y licencia del módulo para su distribución.

Estos archivos permiten una estructura organizada y comprensible. La configuración del módulo que crearemos se centrará en gestionar buckets S3 para alojar sitios web estáticos en AWS.

Configuración del Módulo

Dentro del archivo main.tf, definiremos los recursos necesarios para el bucket S3, configurándolo para alojar un sitio web estático de manera pública:

resource "aws_s3_bucket" "s3_bucket" {
  bucket = var.bucket_name
  tags   = var.tags
}

resource "aws_s3_bucket_website_configuration" "s3_bucket" {
  bucket = aws_s3_bucket.s3_bucket.id

  index_document {
    suffix = "index.html"
  }

  error_document {
    key = "error.html"
  }
}

resource "aws_s3_bucket_acl" "s3_bucket" {
  bucket = aws_s3_bucket.s3_bucket.id
  acl    = "public-read"
}

resource "aws_s3_bucket_policy" "s3_bucket" {
  bucket = aws_s3_bucket.s3_bucket.id
  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
      {
        Sid       = "PublicReadGetObject",
        Effect    = "Allow",
        Principal = "*",
        Action    = "s3:GetObject",
        Resource  = [
          aws_s3_bucket.s3_bucket.arn,
          "${aws_s3_bucket.s3_bucket.arn}/*",
        ],
      },
    ],
  })
}

Este código establece un bucket S3 público con configuración para un sitio web estático.

Variables del Módulo

Dentro de variables.tf, definimos las variables necesarias:

variable "bucket_name" {
  description = "Nombre único del bucket S3."
  type        = string
}

variable "tags" {
  description = "Etiquetas para el bucket."
  type        = map(string)
  default     = {}
}

Estas variables permiten la personalización del módulo al ser utilizado.

Salidas del Módulo

Dentro de outputs.tf, especificamos las salidas del módulo:

output "arn" {
  description = "ARN del bucket"
  value       = aws_s3_bucket.s3_bucket.arn
}

output "name" {
  description = "Nombre (ID) del bucket"
  value       = aws_s3_bucket.s3_bucket.id
}

output "domain" {
  description = "Nombre de dominio del bucket"
  value       = aws_s3_bucket_website_configuration.s3_bucket.website_domain
}

Estas salidas proporcionan información útil sobre el bucket creado.

Integración del Módulo en la Configuración Principal

Dentro del archivo principal de la configuración, hacemos referencia al nuevo módulo:

module "website_s3_bucket" {
  source      = "./modules/aws-s3-static-website-bucket"
  bucket_name = "<NOMBRE_UNICO_DEL_BUCKET>"
  tags        = {
    Terraform   = "true"
    Environment = "dev"
  }
}

Es esencial reemplazar <NOMBRE_UNICO_DEL_BUCKET> con un nombre único para el bucket S3, ya que los nombres deben ser globales.

Conclusiones

En este tutorial, hemos creado un módulo Terraform para gestionar buckets S3 en AWS. Al seguir buenas prácticas, hemos estructurado el módulo de manera clara y proporcionado flexibilidad mediante variables y salidas. Esta modularidad facilita la gestión de recursos en Terraform, mejorando la reutilización y la colaboración en proyectos de infraestructura.

Recuerda que al utilizar este módulo, es crucial ajustar las variables según tus necesidades específicas. ¡Esperamos que este tutorial te haya sido útil en tu viaje con Terraform!

References

Top Articles
Latest Posts
Article information

Author: Stevie Stamm

Last Updated: 13/01/2024

Views: 5765

Rating: 5 / 5 (60 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Stevie Stamm

Birthday: 1996-06-22

Address: Apt. 419 4200 Sipes Estate, East Delmerview, WY 05617

Phone: +342332224300

Job: Future Advertising Analyst

Hobby: Leather crafting, Puzzles, Leather crafting, scrapbook, Urban exploration, Cabaret, Skateboarding

Introduction: My name is Stevie Stamm, I am a colorful, sparkling, splendid, vast, open, hilarious, tender person who loves writing and wants to share my knowledge and understanding with you.