Logo

dev-resources.site

for different kinds of informations.

Lee esto antes de implementar S3 y CloudFront usando Terraform.

Published at
12/31/2024
Categories
aws
terraform
s3
cloudfront
Author
valaug
Categories
4 categories in total
aws
open
terraform
open
s3
open
cloudfront
open
Author
6 person written this
valaug
open
Lee esto antes de implementar S3 y CloudFront usando Terraform.

En este artículo, imaginaremos que trabajas para una empresa que está a punto de lanzar una gran campaña de marketing para uno de sus productos más nuevos y esperan que miles de clientes visiten su sitio web. Tu gerente se puso en contacto contigo y compartió esta información, expresando que le gustaría que pensaras en cómo construir un diseño arquitectónico para este sitio web.

Hechos a considerar

  • La campaña de marketing es solo por unos días.
  • La empresa no sabe cuántos espectadores atraerá esta campaña a su sitio web, pero pronostican miles para los primeros días después del lanzamiento de la campaña.
  • Hay una gran preocupación por los ataques DoS/DDoS.
  • Debe estar dentro de su presupuesto.
  • Necesita ser accesible rápidamente desde cualquier lugar del mundo.
  • Para el propósito de este artículo, te enfocarás más en el diseño arquitectónico donde puedes alojar tu sitio web para cumplir con los requisitos asignados para esta tarea y no tanto en el desarrollo del sitio web en sí.

Tener un sitio web es un tema candente, ya que cada negocio necesita uno.

Podrías preguntarte, ¿dónde puedo alojar este sitio web?

Permíteme presentarte dos poderosos servicios de AWS que pueden ayudarte a comenzar este proyecto asegurando una distribución global del contenido del sitio web:

  • AWS CloudFront
  • AWS S3

Diagrama: CloudFront y S3.

Diagrama

¿Qué método utilizaremos para desplegar esta infraestructura?

Desplegaremos esta infraestructura como código (IaC) utilizando Terraform.

¿Qué es Terraform y por qué es tan útil?

"Terraform es una herramienta para construir, cambiar y versionar infraestructura de forma segura y eficiente. Terraform puede gestionar proveedores de servicios existentes y populares, así como soluciones personalizadas internas."

Terraform es una poderosa herramienta declarativa que nos ayuda a gestionar una gran mayoría de servicios en la nube, además de proporcionar consistencia y visibilidad de los cambios en la infraestructura que ocurren en diferentes espacios de trabajo y entornos. Esta funcionalidad no solo mejora la calidad de vida de nuestros proyectos, sino que también mantiene informados a los ingenieros de software y a otros miembros del equipo.

Ten en cuenta que podemos crear o configurar cualquier servidor de AWS a través de la consola de gestión de AWS, pero el problema es que lleva tiempo si haces lo mismo una y otra vez. Al usar Terraform, no necesitamos iniciar sesión en la consola de gestión de AWS y podemos terminar nuestro trabajo solo con la línea de comandos.

En este proyecto encontrarás dos módulos. Un módulo te ayudará a desplegar un bucket S3 para almacenar tus archivos web y también utilizará el punto final del sitio web del bucket S3 desde la función de alojamiento de sitios web estáticos, sirviendo como origen con CloudFront como CDN.

El segundo te ayudará a desplegar buckets S3 para almacenar tus archivos web, pero esta vez CloudFront servirá como CDN así como un origen. Recomiendo el segundo módulo, ya que no necesitarías habilitar el alojamiento de sitios web estáticos en tu bucket porque esta infraestructura utilizará un punto final de API REST del bucket en lugar del punto final del sitio web de la función de alojamiento de sitios web estáticos.

Plantillas de Terraform:

# --- s3_module main file

resource "random_string" "bucket_rs" {
  count   = var.s3_count
  length  = 4
  special = false
  upper   = false

}
resource "aws_s3_bucket" "exos_bucket" {
  count = var.s3_count
  bucket = join("-", ["exos-bucket", random_string.bucket_rs[count.index].result])
  acl    = "public-read-write"
}

resource "aws_cloudfront_distribution" "exos_distribution" {
  count = var.s3_count
  origin {

    custom_origin_config {
      http_port = "80"
      https_port = "443"
      origin_protocol_policy = "match-viewer"
      origin_ssl_protocols = ["TLSv1", "TLSv1.1", "TLSv1.2"]

    }

    domain_name = aws_s3_bucket.exos_bucket[count.index].bucket_regional_domain_name
    origin_id = "exos_distribution"

  }

  enabled = true
  default_root_object = "index.html"

  default_cache_behavior {
    viewer_protocol_policy = "redirect-to-https"
    compress = true
    allowed_methods = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"]
    cached_methods = ["GET", "HEAD"]
    target_origin_id = "exos_distribution"
    min_ttl                = 0
    default_ttl            = 86400
    max_ttl                = 31536000




    forwarded_values {
      query_string = false
      cookies {
        forward = "none"
      }
    }

  }

  price_class = "PriceClass_All"

  restrictions {
    geo_restriction {
      restriction_type = "whitelist"
      locations        = ["US", "CA", "GB", "DE"]
    }

  }

  viewer_certificate {
    cloudfront_default_certificate = true
  }
}
Enter fullscreen mode Exit fullscreen mode

¿Qué es CloudFront?

"CloudFront es un servicio de Red de Entrega de Contenido (CDN) rápido. CloudFront proporcionará a nuestro proyecto una red distribuida global que servirá como caché de contenido, como imágenes, videos y archivos estáticos desde centros de datos distribuidos llamados ubicaciones de borde."

Mientras CloudFront mejora la experiencia del usuario al entregar contenido estático, también puede ser utilizado para gestionar múltiples solicitudes de usuarios mientras entrega excelentes servicios a los clientes. Pero las características de CloudFront no terminan aquí. Tiene increíbles características de seguridad integradas, como la mitigación de ataques DoS/DDoS, la Identidad de Acceso de Origen (OAI), que utilizaremos para controlar sin problemas el acceso a nuestros buckets S3. También podemos usar la función de geolocalización en la distribución de CloudFront, que puede ayudarnos a servir nuestro contenido dentro de ciertas regiones o países. Hay más características que esto, pero para el propósito de este artículo mencionaré solo algunas.

Un punto interesante a mencionar es que entregar contenido a través de CloudFront será más rentable cuando el número de solicitudes crezca en comparación con S3, así como cuando los datos transferidos entre los servicios de AWS y CloudFront no estén sujetos al costo de transferencia de datos.

¿Qué es S3?

"Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento líderes en la industria."

Además de ser un servicio de almacenamiento de objetos, S3 también puede alojar sitios web estáticos con técnicas del lado del cliente, como HTML, CSS y JavaScript, que no requieren scripts del lado del servidor, como PHP o ASP.NET.

El aspecto más fácil de tener S3 como un bucket de alojamiento de sitios web es que no necesitaremos solicitar un formulario para alojar nuestro sitio web estático ni pagar ningún costo inicial. Una vez que el sitio web estático de S3 esté configurado, se generará automáticamente un punto final de sitio web de Amazon S3 para el bucket. Utilizaremos el punto final del sitio web para probar la velocidad y el rendimiento.

Otro punto importante de ahorro de costos es que, en lugar de ejecutar servidores web como Nginx o Apache en instancias EC2, que pueden ser costosos, podemos alojar los archivos estáticos en S3.

Enlace al calculador mensual simple de S3 aquí

Velocidad de entrega de DNS de contenido utilizando el punto final del sitio web de CloudFront frente al punto final del sitio web de S3.

Usando AWS CloudFront name.cloudfront.net frente a bucketname-x23x.s3.amazonaws.com puntuación de rendimiento.

Alt Text

El mapa de solicitudes muestra cada una de las ubicaciones desde las cuales se perfiló el sitio web.

Alt Text

Alt Text

Puntuaciones de rendimiento promedio proporcionan una visión básica del tiempo de ida y vuelta de cualquier ubicación.

Alt Text

Conclusión

Ambos servicios, AWS CloudFront y AWS S3, se complementan entre sí y pueden ofrecerte un espacio poderoso para alojar tu sitio web y vale la pena intentarlo.

Beneficios de usar S3 y CloudFront:

Velocidad CDN más rápida con CloudFront.
Bajo costo de almacenamiento con S3 y transferencia de datos gratuita a CloudFront. Fuerte seguridad para ambos.

Es importante señalar que esta infraestructura puede ser más robusta al agregar otros servidores como AWS WAF, AWS Shield o Route53, que probablemente agregaré en un artículo posterior 😊.

Tener Terraform en la mezcla facilita la creación, destrucción de recursos, pruebas y depuración de tus proyectos.

Este proyecto de Terraform está diseñado dinámicamente para desplegar uno o más buckets S3 según tus requisitos. También crea una asociación de CDN de CloudFront para cada bucket.

Encuentra el repositorio de Terraform y las direcciones para este proyecto aquí

¿Listo para optimizar tus implementaciones de AWS?

Comienza a usar Terraform para gestionar tu infraestructura como código. Experimenta con el código proporcionado y comparte tus experiencias en los comentarios. Si te gustó este artículo, sígueme para más contenido sobre AWS y Terraform.

Tu participación es valiosa, y me encantaría saber de tus comentarios.

s3 Article's
30 articles in total
Favicon
Building a Weather Data Collection System with AWS S3 and OpenWeather API
Favicon
Comprehensive Guide to Installing AWS CLI, Configuring It, and Downloading S3 Buckets Locally
Favicon
Stream de Arquivo PDF ou Imagem S3 - AWS
Favicon
Efficiently Deleting Millions of Objects in Amazon S3 Using Lifecycle Policy
Favicon
Uploading Files to Amazon S3 in ASP.NET Core with Razor Pages
Favicon
AWS S3 Presigned URLs: Secure and Temporary File Access Made Simple
Favicon
How to implement File uploads in Nodejs: A step by step guide
Favicon
Lee esto antes de implementar S3 y CloudFront usando Terraform.
Favicon
Lee esto antes de implementar S3 y CloudFront usando Terraform.
Favicon
🚀 1. Efficient Video Uploads to AWS S3 with React
Favicon
Full Stack Application Hosting in AWS
Favicon
Building an S3 Static Website with CloudFront Using Terraform
Favicon
Configure IRSA using EKS to access S3 from a POD in terraform
Favicon
Setting up IAM Anywhere using terraform
Favicon
AWS S3 System Design Concepts
Favicon
Creating an S3 Bucket in AWS and generate a pre - signed URL
Favicon
Switching to the Terraform S3 Backend with Native State File Locks
Favicon
Around the World in 15 Buckets
Favicon
My (non-AI) AWS re:Invent 24 picks
Favicon
How to Simulate AWS S3 on Your Local Machine with LocalStack
Favicon
Building Websites with Cursor and AWS.
Favicon
Configuring AWS WAF, CloudFront, and S3 Bucket for Secure Access
Favicon
Buckets? No, S3 buckets
Favicon
Download Video from s3 with Cloudfront, nodejs and react
Favicon
AWS Quick Guide - Amazon S3
Favicon
Fastest and Cheapest Ways to Delete Millions of Files from Amazon S3
Favicon
Using MinIO Server for Local Development: A Smarter Alternative to S3
Favicon
AWS CloudFront vs S3 Cross-Region Replication
Favicon
Comparison of S3 upload feature between Documenso and aws-s3-image-upload example
Favicon
Securing Your AWS EC2 and S3 Communication: Best Practices for Enhanced Security

Featured ones: