Hola todos 👋, continuando con el artÃculo Amazon CloudFront Failover 🛟 con grupo de orÃgenes - Parte 1 donde mostraba una breve y práctica solución de implementar un failover en una distribución de contenido usando Amazon CloudFront, aquà veremos como configurarla en la consola de AWS. Vamos a ello..
Buckets en Amazon S3
Creamos los orÃgenes. En este caso son buckets de S3. Al crearlos nos aseguramos que estén en regiones distintas. En la imagen vemos que creo uno en US East (N. Virginia) us-east-1. Asà mismo crearé otro en US West (N. California) us-west-1
Mantendremos las configuraciones por default al crearlos. Entre ellas están:
- Object Ownership: Bucket owner enforced
- Block Public Access settings for this bucket: Block all public access
- Bucket Versioning: Disabled
- Default encryption: Server-side encryption with Amazon S3 managed keys (SSE-S3)
- Object Lock: Dissbled
Estas opciones te pueden salir asà en inglés o español, depende de la configuración de tu cuenta de AWS o del navegador que estés usando.
Más adelante añadiremos algunas polÃticas para que solo sea accedido desde Cloudfront, pero más adelante, calma.
De esta manera ya tenemos nuestros dos bucket. Vayamos al siguiente paso.
Contenido en buckets
Para que vayamos preparados y listos a configurar nuestra distribución de CloudFront, nuestros buckets deben tener algún contenido no?
Lo que he hecho es crear dos archivos HTML sencillos que muestren un texto en grande diciendo en qué región están.
Los he nombrado index.html y los he subido a cada bucket.
Listo nuestro contenido. Nota, he subido un html sencillo, pero esto bien puede ser una aplicación completa en angular, react, vue, un pack de imágenes, videos o lo que fuese.
Origin Access Control
Antes de crear la distribución pasemos por el departamento de seguridad. Origin Access Control (OAC, control de acceso de origen) es una caracterÃstica de Amazon CloudFront que ayuda a los clientes a proteger fácilmente sus orÃgenes de S3, ya que solo permite que las distribuciones de CloudFront designadas tengan acceso a sus buckets de S3. Y es lo que vamos hacer.
Estando en la página del servicio de CloudFront, vamos al menú izquierdo y buscamos Security - Origin access. Creamos uno nuevo
Y asà hemos creado nuestro OAC. Recordemos que utilizaremos esto como nuestra forma de autenticación que usará CloudFront para poder acceder al contenido del bucket (bucket no es público, asà que nadie puede acceder)
Distribución CloudFront
Ahora sÃ, a crear nuestra red de distribución de contenido.
En Origin domain nos aparece los buckets que tenemos disponibles. Seleccionamos el que creamos al inicio, el de origen 1. El Origin path lo dejo vacÃo, con tal que cuando accedamos a la ruta / (slash) sea este origen quien responda. Y en Name, dejo lo que me sugiere AWS.
Luego seleccionamos el origin access que creamos
Aquà nos advierte que luego de crear la distribución hay una polÃtica de acceso que debemos configurar en los buckets de S3. Le dejamos todas las opciones por default y damos a crear a la distribución.
Tenemos un mensaje en verde que dice que se ha creado la distribución. Y un mensaje en amarillo indicándonos que copiemos la polÃtica y la pongamos en los buckets (aunque deberÃa configurarla el mismo si ya sabe la polÃtica y el bucket, pero bueno). Vamos a ello.
PolÃtica de acceso al bucket
Vamos a ir a cada uno de los buckets, al tab de permisos y editamos la polÃtica. Añadimos lo que copiamos al crear la distribución
Notemos que el Resource dice "Resource": "arn:aws:s3:::cloudfront-origen-1/*" ya que es del origen 1. Pero al colocarlo en el bucket del origen 2, hay que cambiarlo con el nombre del bucket. En mi caso serÃa "Resource": "arn:aws:s3:::cloudfront-origen-2/*".
1ra prueba - un sólo origen
Luego de haber configurado la polÃtica en el bucket, hagamos una prueba accediendo a la URL que nos ha proporcionado la distribución
Nota: si obtienes un no querido AccessDenied, verifica que en la distribución esté configurado el Default root object con index.html (me pasó y pasé mucho tiempo buscando esta respuesta). También puedes fijarte que el OAC firme todas las peticiones. Mira también que las polÃticas en S3 estén bien escritas.
Grupo de orÃgenes
Luego de haber probado que nuestra distribución funciona, usando el contenido de nuestro origen 1, un bucket en N. Virginia, ahora agreguemos nuestro segundo origen, un bucket en N. California
Elegimos el segundo bucket que creamos y también usamos el OAC creado. Ya no tenemos que hacer el paso de añadirle la polÃtica al bucket, ya lo hicimos en pasos anteriores. Le damos a crear el origen.
Procedemos a crear un grupo de orÃgenes
En el listado nos mostrará los dos orÃgenes que ya tenemos. Seleccionamos el origen 1 primero (porque éste será el primario, el predeterminado) y le damos a añadir. Luego añadimos el origen 2, para que sea el secundario.
De esta manera ahora vemos que a lado de los orÃgenes hay unas flechas. Con éstas podemos cambiar quién será el primario y quién será el secundario, a demanda, a nuestro criterio.
Le damos un nombre al grupo y seleccionamos todos los códigos HTTP que deseamos que cuando se detecte, haga el failover. Le damos crear.
Hasta aquà solo hemos creado el grupo y añadido ambos orÃgenes a él. Ahora necesitamos que cuando se acceda al URL, la petición vaya al grupo y no al origen 1. Vamos a ello.
Vamos al tab Behaviour y damos a editar a Default(*), el único path pattern que tenemos configurado.
Nos muestra los orÃgenes individuales y el nuevo grupo. Elegimos el grupo y guardamos.
2da prueba - con grupo de orÃgenes
Accedemos otra vez al URL.
Vemos que nos sigue mostrando el origen 1. Por detrás ahora está usando el grupo de orÃgenes y como el origen 1 es el primario éste es el que muestra.
Simulemos ahora un error. Renombremos el index.html del bucket origen 1 a index-failover.html.
3ra prueba - Failover por error
En vista que hemos renombrado el archivo/objeto, el origen va a responder con un error 404 que significa Not Found, no encuentra el index.html, asà que deberÃa ir al origen 2 como contingencia. Probemos el URL a ver que pasa.
¿Qué pasó? Es lo que esperábamos ¿verdad?. Ahora estamos viendo el contenido del index.html del origen 2 que es un bucket en la región de N. California. ¿Cool ah?
Renombremos otra vez el objeto en el origen 1 a su original. Y probemos nuevamente el URL.
Volvimos a tener el contenido del origen 1 en lÃnea.
4ta prueba - Failover a demanda
Ahora si queremos podemos poner el origen 2 como primario usando las flechitas que habiamos visto. Hagamos eso, subamos el orden para que origen 2 quede arriba, convirtiéndolo en primario.
Salvemos y probemos.
Tal cual como lo queremos. Y si hacemos el mismo ejercicio de renombrar el index.html del origen 2, entonces se mostrará el contenido del index.html de origen 1.
Limitantes
- Por ahora CloudFront solo permite tener en un grupo dos orÃgenes.
- Si mantienes activo el caché y falla un origen quizá no te des cuenta hasta que el caché se invalide. Tal vez no sea una limitación pero es bueno tenerlo en cuenta.
Conclusiones
No solo se puede usar con bucket de S3, también con otros servicios como funciones Lambda e incluso con servicios de streaming. Aumentas la disponibilidad del contenido, de sitios web, videos, y mucho más.
Próximos pasos 👣
LLevemos esto un poco más allá con infraestructura como código en la parte 3:
Amazon CloudFront Failover 🛟 con grupo de orÃgenes - Parte 1: solución conceptual
Amazon CloudFront Failover 🛟 con grupo de orÃgenes - Parte 2: creación en la consola de AWS [este artÃculo]
Amazon CloudFront Failover 🛟 con grupo de orÃgenes - Parte 3: automatización usando CloudFormation
Algunas referencias 🔗
Amazon CloudFront lanza el control de acceso de origen (OAC)
Restricting access to an Amazon Simple Storage Service origin
Optimizing high availability with CloudFront origin failover


























Top comments (0)