amazon-web-services - services - aws que significa
Sitio web de CloudFront+S3: "La clave especificada no existe" cuando se debe mostrar un documento índice implícito (5)
Acabo de implementar un sitio web estático en 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 del artículo, notará el siguiente error:
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 hace clic en el enlace de ese artículo, está enviando la solicitud a CloudFront, que luego intenta recuperar el archivo del 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?
Consulte los documentos de AWS sobre cómo usar CloudFront para servir un sitio web estático alojado en S3 a través de https .
Transcribiendo el contenido a continuación por conveniencia (o en caso de que el enlace alguna vez salga mal).
-
Use la consola de Amazon S3 para crear un depósito y habilitar el alojamiento de sitios web estáticos en el depósito.
-
Desde el cuadro de diálogo Alojamiento de sitio web estático , copie el Punto final de su depósito sin el http: // principal . El formato es similar a bucketname.s3-website-region.amazonaws.com . Necesita el punto final en este formato para un paso posterior.
-
Agregue una política de depósito que permita el acceso de lectura pública al depósito que creó.
-
Cree una distribución web CloudFront . Asegúrese de configurar lo siguiente:
- Para Nombre de dominio de origen , ingrese el punto final que copió en el paso 2.
- Para Métodos HTTP permitidos , seleccione GET, HEAD, OPTIONS .
- Para Nombres de dominio alternativos (CNAME) , ingrese el CNAME que desea utilizar para su sitio web.
-
Si no desea utilizar SSL (HTTPS) para su sitio web, continúe con el siguiente paso. Si desea utilizar SSL para su sitio web, puede elegir Solicitar o Importar un certificado con ACM para solicitar un certificado. Para obtener más información, consulte Uso de nombres de dominio alternativos y HTTPS .
-
Elija Crear distribución .
-
Actualice los registros DNS de su dominio para apuntar el CNAME de su sitio web al nombre de dominio de su distribución CloudFront. Puede encontrar el nombre de dominio de su distribución en la consola de CloudFront en un formato similar a d1234abcd.cloudfront.net .
-
Espere a que se propaguen sus cambios de DNS y a que caduquen las entradas de DNS anteriores.
Encontré el mismo problema y cómo resolví que estaba en la
configuración de origen de
CloudFront establezca el
Nombre de dominio de origen
en
<website bucket>.s3-website-us-west-2.amazonaws.com
En CloudFront
Generate Settings,
asegúrese de tener
index.html
como
objeto raíz predeterminado
.
En S3, asegúrese de tener
Usar este depósito para alojar un sitio web
seleccionado y establecer
index.html
como
documento de índice
.
Me arriesgaré y diré 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.
Los depósitos 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 depósito 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 utilizar el nombre de host del punto final del sitio web tal como se proporciona en la consola S3 (por
example-bucket.s3-website-us-east-1...
) porque, de lo contrario, CloudFront supone que desea que use 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 cubo 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 se refactorizó ya que esta pregunta se respondió originalmente, por lo que el mensaje que se muestra arriba ahora aparece una página más tarde, y se ha redactado nuevamente, 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 estuviera usando el punto final del sitio web: el punto final del sitio web devuelve mensajes de error en HTML, en lugar de XML.
Cree un nuevo origen para la distribución de CloudFront, 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 debería estar configurado.
Ver también:
http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff
¹ dos puntos finales.
Técnicamente, hay más de dos, ya que todos los depósitos tienen al menos dos posibles nombres de host de punto final REST ... pero hay dos
tipos
de puntos finales.
Los depósitos también tienen un punto final de aceleración de transferencia opcional que usa la red de borde de AWS (la misma infraestructura que alimenta CloudFront) para transferencias más rápidas / optimizadas, particularmente desde ubicaciones geográficas más distantes de la región donde se aprovisiona el depósito, pero sin usar el caché de CloudFront.
Este punto final se parece a
https://example-bucket.s3-accelerate.amazonaws.com
si lo activa, y conlleva un cargo de uso adicional para la mayoría de las solicitudes, ya que está utilizando más de la red de AWS y menos de Internet público. . pero, esa es una diferencia en el despliegue detrás de escena del punto final, no 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.
CloudFront no le permitirá usar un punto final de aceleración para un nombre de dominio de origen, porque eso no tendría sentido: si se permitiera dicha configuración, las solicitudes y respuestas se recorrerían dos veces a través de la red Edge de AWS y aumentarían la latencia y los costos sin proporcionando cualquier beneficio.
También tenía un problema similar, seguí estos pasos que resolvieron este problema
PASOS:
->go to CloudFront Distributions
->click the ID
->after Clicking Id you will find different categories like General, Origins and Origin Groups .
->Click the Origins and Origin Groups
->Click the checkbox of your s3 bucket and click edit
->under grand read Permissions on Bucket click "Yes, Update bucket policy"
Este paso ha resuelto mi problema.
Tuve este problema cuando estaba tratando de incluir el nombre del depósito en mi redirección route53 para un cliente, para que sea 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 cubo de los clientes / o eliminar el cubo de la url funcionó, ahora puedo descargar y abrir los archivos.