Configurar S3
- Crear el S3 bucket con el nombre de tu aplicacion.
- Desactivar la opcion que bloquea el acceso publico. Esta opcion se encuentra en “Block all public access”. Por defecto todos los buckets de AWS son privados, para hacer lo publico debemos desmarcar esta opcion.
- Una vez creado, debemos subir todos los archivos de nuestra aplicacion (previamente buildeada). Para eso podemos arrastrar los archivos al bucket o hacerlo mediante el CLI de AWS
- Para que nuestros archivos sean publicos, debemos modificar la policy del bucket. Dentro de Permissions > Bucket policy, copiar el siguiente fragmento.
- El ultimo paso es habilitar website hosting para nuestro bucket. En Settings > Static website hosting. Para activarlo debemos marcar cual va a ser el index de nuestra pagina (generalmente nuestro
index.html
). Una vez activado nos dara una url que la podemos ver en Settings > Static website hosting.
CloudFront setup
Crear una nueva distribucion CloudFront. Con los siguientes valores:
- Origin domain: Nuestro S3 bucket
- Viewer protocol policy: Redirect HTTP to HTTPS
- Default root object: index.html
Esta configuracion nos creara una nueva distribucion de CloudFront apuntando a nuestro S3. Una vez creada podremos encontrar la url de nuestra distribucion en Distributions > Domain name.
CloudFront Functions setup
Por defecto cloudfront nos soporta “pretty urls”, si no especificamos en la url la terminacion con index.html provocara un error 403, como si no tuviesemos acceso a lo que estamos pidiendo (porque en realidad no existe). Tampoco soporta multi-page sub-folder/index
routing.
Para configurarlo tenemos que crear una CloudFront Function para nuestra CloudFront Distribution.
- Dentro de CloudFront > Functions crearemos una funcion con el siguiente snippet.
- Ahora debemos adjuntar nuestra funcion a la distribucion de CloudFront. Dentro de nuestra CloudFront Distribution debemos ir a Settings > Behaviors > Edit > Function associations.
- Viewer request - Function type: CloudFront Function.
- Viewer request - Function ARN: Seleccionar la funcion creada en el paso anterior.
Bonus - Continuous deployment with GitHub Actions
- Generar AWS Crendentials para obtener
AWS_SECRET_ACCESS_KEY
yAWS_ACCESS_KEY_ID
- En nuestro repositorio crear el siguiente archivo
.github/workflows/deploy.yml
y pushear para que se active el workflow. Hay que agregarAWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
,BUCKET_ID
, yDISTRIBUTION_ID
como “secrets” en nuestro repotitorio de GitHub en Settings > Secrets > Actions.