2011-07-14 16 views
26

Nuestro plan actual para un sitio es utilizar el servicio Cloudfront de Amazon como un CDN para archivos de activos como CSS, JavaScript e imágenes, y cualquier otro archivo estático.Mejores prácticas de implementación de Amazon S3 Cloudfront

Actualmente tenemos 1 segmento en S3 que contiene todos estos archivos estáticos. Los archivos están separados en diferentes carpetas dependiendo de lo que sean, "Scripts" son archivos JS, "Imágenes" son Imágenes, etc. yadda yadda yadda.

Así que, lo que no me di cuenta desde el principio fue que una vez que implemente un Bucket de S3 a una Distribución de Cloudfront, entonces cada actualización posterior del Bucket no se implementará nuevamente en esa misma Distribución. Por lo tanto, parece que debe volver a implementar el depósito en otra instancia de Cloudfront cada vez que tenga una actualización de archivos estáticos.

Eso está bien para las imágenes, porque podemos asegurarnos fácilmente de que si hay un cambio en una imagen, entonces simplemente creamos una nueva imagen. Pero eso es difícil de hacer para CSS y JS.

Así, que me pone a las preguntas de Buenas Prácticas:

  1. ¿Es la mejor práctica para crear otra distribución Cloudfront para cada implementación de producción? El problema aquí sería que causa problemas con los registros CNAME.
  2. ¿Es una buena práctica NO almacenar CSS y JS en Cloudfront debido a la naturaleza de esos archivos, y su necesidad de ser modificados fácilmente? Parece que la respuesta a esto sería NO porque ese es el propósito de un CDN.
  3. ¿Hay algún otro método con Cloudfront que no conozca?
+0

Hola, ¿puedes decirme cómo distribuiste tu CSS a CDN? ¿Cómo enviaste los archivos css, js a tu CDN? ¿Estás usando capistrano? – tcgumus

+0

ve a usar cloudflare, es gratis: D – rocketspacer

Respuesta

17

Puede emitir solicitudes de invalidación a CloudFront.

http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

En lugar de un depósito de S3, sin embargo, utilizamos nuestro propio servidor como un origen personalizado. Tenemos .htaccess alias style_*.css a style.css, e inyectamos el tiempo de modificación del archivo para style.css en el HTML. Como CloudFront ve una URL totalmente diferente, buscará la nueva versión.

(Nota: Algunos CDN permiten hacer eso a través de la cadena de consulta, pero CloudFront hace caso omiso de todos los datos de cadena de consulta para el almacenamiento en caché, por lo tanto, la solución .htaccess.)

edición: CloudFront puede ser (opcionalmente) configurado para utilizar cadenas de consulta ahora.

+4

Ambas son buenas soluciones, pero creo que la segunda es perfecta. Antes de la CDN, agregamos "? V = 2.0.x" (cualquiera que sea el número de versión) a todas las URL de activos para la prevención de almacenamiento en memoria caché, pero si modificamos eso a "stylesheet-v2.0.x.css" con CloudFront utilizando nuestro servidor como origen, creo que funcionará muy bien. ¡Gracias! –

+0

¡Me alegro de poder ayudar! Fuimos mordidos por CF al soltar cadenas de consulta varias veces antes de que nos enteramos. :-) – ceejayoz

+3

La invalidación tiene límites en la cantidad de archivos que se pueden procesar a la vez y puede ser lenta, por lo que la segunda solución es definitivamente mejor. –

8

CloudFront ha comenzado a admitir cadenas de consulta, que puede utilizar para invalidar la memoria caché. http://aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html

+0

¿cómo se usa exactamente para invalidar el caché en un archivo en particular?Quizás esté en ese enlace en alguna parte, pero no está muy claro. – gMale

+0

cuando activa cadenas de consulta cloudfront almacena en caché el recurso para cada combinación de parámetros. para que pueda anexar una versión. img.jpg? version = 1 y? version = 2 para obtener más detalles, consulte el manual http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html – Dukeatcoding