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.

cloudfront Article's
30 articles in total
Favicon
Lee esto antes de implementar S3 y CloudFront usando Terraform.
Favicon
Lee esto antes de implementar S3 y CloudFront usando Terraform.
Favicon
Building an S3 Static Website with CloudFront Using Terraform
Favicon
AWS CloudFront: A Comprehensive Guide
Favicon
Configuring AWS WAF, CloudFront, and S3 Bucket for Secure Access
Favicon
Setting Up Custom Domain for API Gateway & CloudFront
Favicon
Apply SSL Certificate on AWS ACM (also Cloudflare)
Favicon
How to Fix Next.js CloudFront Permission Denied: Complete Guide to Static Export URL Issues
Favicon
Building Testable CloudFront Functions with TypeScript
Favicon
CloudFront and S3: SignatureDoesNotMatch , the request signature we calculated does not match the signature you provided
Favicon
Mastering Custom Responses in Amazon CloudFront to Block Behavior — Default(*)
Favicon
Unlock CloudFront's New Logging Potential with Athena Partition Projection
Favicon
Discovering the Latest Features of AWS CloudFront: Enhancing Performance and Security
Favicon
Create an Asset Store with a Custom Domain using AWS CDK, Route53, S3 and CloudFront
Favicon
New Feature: Amazon CloudFront no longer charges (No Billing) for requests blocked by AWS WAF
Favicon
Reduce the amount of code in AWS CDK: Apply OAC in Amazon CloudFront L2 constructs
Favicon
Amazon Web Services (AWS) has announced today a new edge location in #Qatar
Favicon
Hosting a Static Website On S3 bucket With CloudFront.
Favicon
Setting up AWS S3 and CloudFront with Signed URLs using CDK
Favicon
Leveraging Lambda@Edge to seamlessly manage frontend maintenance window like a pro
Favicon
How to Resolve 403 Access Issues When Deploying a SPA on AWS with S3 and CloudFront
Favicon
Cloud Resume Challenge: Hosting a React CV using S3, CloudFront, Route 53, Lambda, DynamoDB and GitHub actions for CI/CD
Favicon
Deploying Static Website to AWS: A Step-by-Step Guide with S3, Route 53, and CloudFront
Favicon
Resolve Lambda URL Error - signature not match when using POST/PUT
Favicon
Setting Up and Securing CloudFront for S3 Static Sites with Custom Subdomains Using AWS Cloud Development Kit(CDK)
Favicon
How to Host a Static Website on AWS Using S3, Route 53, CloudFront, and Certificate Manager
Favicon
RTT Reduction Strategies for Enhanced Network Performance
Favicon
Dynamically Choosing Origin Based on Host Header and Path with AWS CloudFront and Lambda@Edge
Favicon
Understanding Speed: A Beginner's Guide to AWS CloudFront
Favicon
Deploy a Static React Site Using AWS S3 and CloudFront

Featured ones: