Sitio web de CloudFront + S3: “La clave especificada no existe” cuando se debe mostrar un documento de índice implícito

Acabo de implementar un sitio web estático para Amazon S3, que actualmente se puede ver aquí: http://www.rdegges.com.s3-website-us-east-1.amazonaws.com/

Si hace clic en cualquiera de los enlaces de artículos, notará el siguiente error:

Error S3

S3 se queja de que el archivo no existe. Ahora, esto es lo extraño de esto: estoy usando CloudFront en mi dominio. Entonces, cuando haces clic en el enlace del artículo, envía la solicitud a CloudFront, que luego intenta recuperar el archivo desde el depósito S3.

Sin embargo, si visita esa misma URL desde S3 directamente, por ejemplo: http://www.rdegges.com.s3-website-us-east-1.amazonaws.com/2015/building-a-heroku-addon-planning/ la página se cargará bien.

Parece que algo se está perdiendo en la traducción aquí.

¿Alguien tiene una sugerencia de lo que puedo hacer para arreglar mi configuración?

Voy a dar un paso en falso y decir que la clave especificada no existe técnicamente , por lo que el mensaje de error es técnicamente preciso, pero no cuenta toda la historia. Esto debería ser una solución fácil.

Las cubetas S3 tienen dos puntos finales, “REST” y “sitio web”. Tienen dos conjuntos de características diferentes. El punto final del sitio web proporciona una resolución mágica de los documentos de índice (por ejemplo, index.html, que parece ser lo que se supone que debe devolverse al navegador en el ejemplo que proporcionó), mientras que los puntos finales REST no lo hacen.

Cuando configura CloudFront frente a un segmento utilizado para el alojamiento de sitios web, generalmente no desea configurar el origen como un origen “S3” seleccionando el nombre del depósito de la lista desplegable; en su lugar, desea configurarlo como un origen “personalizado”, y usar el nombre de host del sitio web como se proporciona en la consola S3 (por example-bucket.s3-website-us-east-1... ) porque de lo contrario, CloudFront supone que desea utilizar el punto final REST para el depósito (que permite la autenticación y el contenido privado, que el punto final del sitio web no).

Importante

No seleccione el nombre de su depósito de la lista, por ejemplo, example.com.s3.amazonaws.com.

http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-cfdist.html

La documentación fue refactorizada ya que esta pregunta fue respondida originalmente, por lo que el mensaje que se muestra arriba ahora aparece una página más tarde, y ha sido reformulado, pero la esencia es la misma. El “nombre del depósito” parece referirse a las opciones que se muestran en el menú desplegable, que no es lo que desea.

Nota

Asegúrese de especificar el punto final de alojamiento del sitio web estático, no el nombre del depósito.

http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-cloudfront-walkthrough.html

La sugerencia de que está utilizando el punto final REST para el depósito es porque el mensaje de error no estaría en XML si estaba utilizando el punto final del sitio web.

Cree un nuevo origen para la distribución de CloudFront, tal como se describe, luego cambie el comportamiento para enviar solicitudes al nuevo origen, luego envíe una solicitud de invalidación de caché de CloudFront para * y debe establecerse.

Ver también:

http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff


¹ dos puntos finales. Técnicamente, hay más de dos, dado que todos los depósitos tienen al menos dos nombres de host de punto final REST … pero hay dos tipos de puntos finales. Las cubetas también tienen un extremo de aceleración de transferencia que usa la red AWS edge para transferencias más rápidas / optimizadas, particularmente desde ubicaciones geográficas más distantes de la región donde se aprovisiona la cubeta. Esto se ve como https://example-bucket.s3-accelerate.amazonaws.com si lo activa, y conlleva un cargo de uso adicional ya que está utilizando más de la red AWS y menos de Internet público … pero, eso es una diferencia en el despliegue del punto final, no en el comportamiento del punto final. El punto final de aceleración de transferencia sigue siendo un punto final REST, por lo que al igual que los otros puntos finales REST, no tiene las características de alojamiento del sitio web. No le conviene configurar CloudFront para usar el punto final de aceleración, porque eso no proporcionaría ninguna mejora (CloudFront ya usa la red de borde) pero aún se le cobrará el cargo adicional por la aceleración.

Se encontró el mismo problema y la forma en que resolví que estaba en CloudFront Configuración de origen establecer el nombre de dominio de origen en .s3-website-us-west-2.amazonaws.com

En CloudFront Generate Settings, asegúrese de tener index.html como Default Root Object .

En S3 asegúrese de tener Use this bucket para alojar un sitio web seleccionado y establezca index.html como documento Index .

Tuve este problema cuando intentaba incluir el nombre del depósito en mi ruta53 redirigir para un cliente, para hacerlo más fácil, por ejemplo:

https://0832234.signin.aws.amazon.com/console/s3/?bucket=clientbucket.com

Al hacer clic en “Todos los cubos” y volver al contenedor de clientes / o eliminar el depósito de la URL, el truco fue que ahora puedo descargar y abrir los archivos.

    Intereting Posts