<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Lab 2: Sitio Secundario (Fallback) :: Español</title>
    <link>https://aws-route53-labs.rofriday.com/02_sitio_secundario/index.html</link>
    <description>Lab 2: Sitio Secundario – S3 + CloudFront En este lab creamos la página de fallback: lo que verán los usuarios cuando el sitio primario no esté disponible. Es una página estática muy simple alojada en S3 y distribuida por CloudFront.&#xA;¿Qué vamos a crear? Internet → CloudFront → S3 (estático) S3 Bucket con acceso solo desde CloudFront (OAC) CloudFront Distribution con HTTPS automático Página HTML estilo “mantenimiento” con branding ¿Por qué S3 + CloudFront? Ventaja Detalle Costo casi cero S3 cobra centavos por GB; CloudFront tiene free tier Alta disponibilidad CloudFront tiene SLA de 99.99% Sin servidores Completamente serverless, no hay nada que “caer” HTTPS gratis CloudFront incluye certificado SSL automático Paso 1: Variables de entorno export AWS_REGION=&#34;us-east-1&#34; export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) export STACK_NAME_SECONDARY=&#34;route53-arc-secondary&#34; export BUCKET_NAME=&#34;route53-arc-fallback-${AWS_ACCOUNT_ID}&#34; echo &#34;Bucket name: $BUCKET_NAME&#34; Paso 2: Crear el template CloudFormation cat &gt; /tmp/secondary-site.yaml &lt;&lt; &#39;TEMPLATE_EOF&#39; AWSTemplateFormatVersion: &#39;2010-09-09&#39; Description: &#39;roLearning - Route53 ARC Workshop - Sitio Secundario (S3 + CloudFront)&#39; Parameters: BucketName: Type: String Description: &#34;Nombre único para el bucket S3&#34; Resources: # ────────────────────────────────────────────── # S3 Bucket para el sitio estático # ────────────────────────────────────────────── FallbackBucket: Type: AWS::S3::Bucket Properties: BucketName: !Ref BucketName PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true Tags: - Key: Workshop Value: route53-arc - Key: Site Value: secondary # ────────────────────────────────────────────── # Origin Access Control para CloudFront # ────────────────────────────────────────────── CloudFrontOAC: Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Name: route53-arc-fallback-oac OriginAccessControlOriginType: s3 SigningBehavior: always SigningProtocol: sigv4 # ────────────────────────────────────────────── # Bucket Policy - permite acceso solo desde CloudFront # ────────────────────────────────────────────── FallbackBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref FallbackBucket PolicyDocument: Statement: - Sid: AllowCloudFrontServicePrincipal Effect: Allow Principal: Service: cloudfront.amazonaws.com Action: s3:GetObject Resource: !Sub &#34;${FallbackBucket.Arn}/*&#34; Condition: StringEquals: &#34;AWS:SourceArn&#34;: !Sub &#34;arn:aws:cloudfront::${AWS::AccountId}:distribution/${FallbackDistribution}&#34; # ────────────────────────────────────────────── # CloudFront Distribution # ────────────────────────────────────────────── FallbackDistribution: Type: AWS::CloudFront::Distribution Properties: DistributionConfig: Enabled: true DefaultRootObject: index.html Comment: &#34;roLearning - Route53 ARC Fallback Site&#34; HttpVersion: http2 Origins: - Id: S3FallbackOrigin DomainName: !GetAtt FallbackBucket.RegionalDomainName OriginAccessControlId: !Ref CloudFrontOAC S3OriginConfig: OriginAccessIdentity: &#34;&#34; DefaultCacheBehavior: ViewerProtocolPolicy: redirect-to-https TargetOriginId: S3FallbackOrigin CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 # CachingOptimized AllowedMethods: [GET, HEAD] CachedMethods: [GET, HEAD] CustomErrorResponses: - ErrorCode: 403 ResponseCode: 200 ResponsePagePath: /index.html - ErrorCode: 404 ResponseCode: 200 ResponsePagePath: /index.html Tags: - Key: Workshop Value: route53-arc - Key: Site Value: secondary Outputs: FallbackBucketName: Description: &#34;Nombre del bucket S3&#34; Value: !Ref FallbackBucket Export: Name: route53-arc-fallback-bucket CloudFrontDomain: Description: &#34;Dominio de la distribución CloudFront&#34; Value: !GetAtt FallbackDistribution.DomainName Export: Name: route53-arc-cf-domain CloudFrontDistributionId: Description: &#34;ID de la distribución CloudFront&#34; Value: !Ref FallbackDistribution Export: Name: route53-arc-cf-distribution-id TEMPLATE_EOF echo &#34;✅ Template creado: $(wc -l &lt; /tmp/secondary-site.yaml) líneas&#34; Paso 3: Desplegar el stack secundario aws cloudformation deploy \ --template-file /tmp/secondary-site.yaml \ --stack-name $STACK_NAME_SECONDARY \ --capabilities CAPABILITY_IAM \ --region $AWS_REGION \ --parameter-overrides BucketName=$BUCKET_NAME \ --tags Workshop=route53-arc Environment=secondary echo &#34;Desplegando sitio secundario...&#34; Información CloudFront puede tardar 5-10 minutos en desplegarse completamente. El stack dirá CREATE_COMPLETE antes de que CloudFront esté 100% activo. Esto es normal.</description>
    <generator>Hugo</generator>
    <language>es-ES</language>
    <atom:link href="https://aws-route53-labs.rofriday.com/02_sitio_secundario/index.xml" rel="self" type="application/rss+xml" />
  </channel>
</rss>