Saltar al contenido

Despliega tu sitio de Astro en AWS

AWS es una plataforma de alojamiento de aplicaciones web con todas las funciones que se puede utilizar para desplegar un sitio de Astro.

Desplegar tu proyecto en AWS requiere el uso de la consola de AWS. (La mayoría de estas acciones también se pueden realizar utilizando la AWS CLI). Esta guía te guiará a través de los pasos para desplegar tu sitio en AWS utilizando AWS Amplify, alojamiento de sitios web estáticos en S3 y CloudFront.

AWS Amplify es un conjunto de herramientas y funciones diseñadas específicamente para permitir a los desarrolladores web frontend y móviles compilar aplicaciones fullstack de forma rápida y sencilla en AWS. Puedes desplegar tu proyecto de Astro como un sitio estático o como un sitio renderizado en el servidor.

Tu proyecto de Astro es un sitio estático por defecto.

  1. Crea un nuevo proyecto de Amplify Hosting.

  2. Conecta tu repositorio a Amplify.

  3. Modifica tus ajustes de compilación para que coincidan con el proceso de compilación de tu proyecto.

    version: 1
    frontend:
    phases:
    preBuild:
    commands:
    - npm ci
    build:
    commands:
    - npm run build
    artifacts:
    baseDirectory: /dist
    files:
    - '**/*'
    cache:
    paths:
    - node_modules/**/*

Amplify desplegará automáticamente tu sitio web y lo actualizará cuando envíes un commit a tu repositorio.

Para poder desplegar tu proyecto como un sitio renderizado en el servidor, necesitarás utilizar el adaptador de AWS Amplify mantenido por la comunidad de terceros y realizar algunos cambios en tu configuración.

Primero, instala el adaptador de Amplify.

Ventana de la terminal
npm install astro-aws-amplify

Luego, en tu archivo astro.config.*, agrega el adaptador y establece la salida a server.

astro.config.mjs
import { defineConfig } from 'astro/config';
import awsAmplify from 'astro-aws-amplify';
export default defineConfig({
// ...
output: "server",
adapter: awsAmplify(),
});

Una vez instalado el adaptador, puedes configurar tu proyecto de Amplify.

  1. Crea un nuevo proyecto de Amplify Hosting.

  2. Conecta tu repositorio a Amplify.

  3. Modifica tus ajustes de compilación para que coincidan con el proceso de compilación del adaptador, ya sea editando los ajustes de compilación en la consola de AWS o agregando un archivo amplify.yaml en la raíz de tu proyecto.

    version: 1
    frontend:
    phases:
    preBuild:
    commands:
    - npm ci --cache .npm --prefer-offline
    build:
    commands:
    - npm run build
    - mv node_modules ./.amplify-hosting/compute/default
    artifacts:
    baseDirectory: .amplify-hosting
    files:
    - '**/*'
    cache:
    paths:
    - .npm/**/*

Amplify desplegará automáticamente tu sitio web y lo actualizará cuando envíes un commit a tu repositorio.

Consulta la guía de despliegue de Astro de AWS para obtener más información.

S3 es el punto de partida de cualquier aplicación. Es donde se almacenan los archivos de tu proyecto y otros activos. S3 cobra por el almacenamiento de archivos y el número de solicitudes. Puedes encontrar más información sobre S3 en la documentación de AWS.

  1. Crea un bucket de S3 con el nombre de tu proyecto.

  2. Desactiva “Block all public access” (Bloquear todo el acceso público). Por defecto, AWS configura todos los buckets para que sean privados. Para hacerlo público, debes desmarcar la casilla de verificación “Block public access” en las propiedades del bucket.

  3. Sube tus archivos compilados ubicados en dist a S3. Puedes hacerlo manualmente en la consola o usar la AWS CLI. Si utilizas la AWS CLI, usa el siguiente comando después de autenticarte con tus credenciales de AWS:

    aws s3 cp dist/ s3://<BUCKET_NAME>/ --recursive
  4. Actualiza la política de tu bucket para permitir el acceso público. Puedes encontrar esta configuración en la sección Permissions > Bucket policy (Permisos > Política de bucket) del bucket.

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "PublicReadGetObject",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
    }
    ]
    }
  5. Habilita el alojamiento de sitios web estáticos para tu bucket. Puedes encontrar esta configuración en la sección Properties > Static website hosting (Propiedades > Alojamiento de sitios web estáticos) del bucket. Establece tu documento de índice en index.html y tu documento de error en 404.html. Por último, puedes encontrar la URL de tu nuevo sitio web en la sección Properties > Static website hosting del bucket.

CloudFront es un servicio web que proporciona capacidades de red de entrega de contenido (CDN). Se utiliza para almacenar en caché el contenido de un servidor web y distribuirlo a los usuarios finales. CloudFront cobra por la cantidad de datos transferidos. Agregar CloudFront a tu bucket de S3 es más rentable y proporciona una entrega más rápida.

Para conectar S3 con CloudFront, crea una distribución de CloudFront con los siguientes valores:

  • Dominio de origen: El endpoint del sitio web estático de tu bucket de S3. Puedes encontrar tu endpoint en la sección Properties > Static website hosting de tu bucket de S3. Alternativamente, puedes seleccionar tu bucket de S3 y hacer clic en el mensaje emergente para reemplazar la dirección de tu bucket con el endpoint estático de tu bucket.
  • Política de protocolo del visor: “Redirect to HTTPS” (Redirigir a HTTPS)

Esta configuración servirá tu sitio utilizando la red CDN de CloudFront. Puedes encontrar la URL de tu distribución de CloudFront en la sección Distributions > Domain name (Distribuciones > Nombre de dominio) del bucket.

Hay muchas maneras de configurar el despliegue continuo para AWS. Una posibilidad para el código alojado en GitHub es utilizar GitHub Actions para desplegar tu sitio web cada vez que envíes un commit.

  1. Crea una nueva política en tu cuenta de AWS utilizando IAM con los siguientes permisos. Esta política te permitirá subir archivos compilados a tu bucket de S3 e invalidar los archivos de distribución de CloudFront cuando envíes un commit.

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "VisualEditor0",
    "Effect": "Allow",
    "Action": [
    "s3:PutObject",
    "s3:ListBucket",
    "s3:DeleteObject",
    "cloudfront:CreateInvalidation"
    ],
    "Resource": [
    "<DISTRIBUTION_ARN>",
    "arn:aws:s3:::<BUCKET_NAME>/*",
    "arn:aws:s3:::<BUCKET_NAME>"
    ]
    }
    ]
    }
  2. Crea un nuevo usuario de IAM y asóciale la política. Esto te proporcionará tu AWS_SECRET_ACCESS_KEY y AWS_ACCESS_KEY_ID.

  3. Agrega este flujo de trabajo de ejemplo a tu repositorio en .github/workflows/deploy.yml y envíalo a GitHub. Deberás agregar AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, BUCKET_ID y DISTRIBUTION_ID como “secrets” (secretos) en tu repositorio de GitHub en la sección Settings > Secrets > Actions. Haz clic en New repository secret (Nuevo secreto de repositorio) para agregar cada uno.

    name: Deploy Website
    on:
    push:
    branches:
    - main
    jobs:
    deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
    uses: actions/checkout@v6
    - name: Configure AWS Credentials
    uses: aws-actions/configure-aws-credentials@v1
    with:
    aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws-region: us-east-1
    - name: Install modules
    run: npm ci
    - name: Build application
    run: npm run build
    - name: Deploy to S3
    run: aws s3 sync --delete ./dist/ s3://${{ secrets.BUCKET_ID }}
    - name: Create CloudFront invalidation
    run: aws cloudfront create-invalidation --distribution-id ${{ secrets.DISTRIBUTION_ID }} --paths "/*"

Más guías de implementación

Contribuir Comunidad Patrocinar