AWS S3: El bucket al que intenta acceder debe dirigirse mediante el punto de conexión especificado


Estoy intentando eliminar los archivos de imagen cargados con la gema Ruby AWS-SDK-Core.

Tengo el siguiente código:

require 'aws-sdk-core'

def pull_picture(picture)
    Aws.config = {
        :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
        :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
        :region => 'us-west-2'
    }

    s3 = Aws::S3::Client.new

    test = s3.get_object(
        :bucket => ENV["AWS_S3_BUCKET"],
        :key => picture.image_url.split('/')[-2],   
    )
end

Sin embargo, estoy recibiendo el siguiente error:

El bucket al que intenta acceder debe dirigirse mediante el punto final especificado. Envíe todas las solicitudes futuras a este punto final.

Sé que la región es correcta porque si la cambio a us-east-1, aparece el siguiente error:

La clave especificada no existir.

¿Qué estoy haciendo mal aquí?

Author: thanksd, 2014-07-30

7 answers

Parece probable que este cubo se creó en una región diferente, es decir, no us-west-2. Esa es la única vez que he visto "El bucket al que está intentando acceder debe abordarse utilizando el punto final especificado. Envíe todas las solicitudes futuras a este punto final."

El estándar estadounidense es us-east-1

 235
Author: Marcus Walser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-21 21:56:12

Compruebe la ubicación de su bucket en la consola y, a continuación, utilícela como referencia a qué extremo usar: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

 14
Author: Jay Q.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-11 10:37:52

Me enfrentaba a un error similar porque el bucket estaba en la región us-west-2 y el patrón de URL tenía bucketname en la ruta. Una vez, cambié el patrón de URL para tener bucketname como subdominio de URL para agarrar los archivos y funcionó.

Por ejemplo, la URL anterior fue

https://s3.amazonaws.com/bucketname/filePath/filename

Luego lo reemplazé como

https://bucketname.s3.amazonaws.com/filePath/filename
 13
Author: prasun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-06 06:49:41

Para muchos paquetes de API S3 (recientemente tuve este problema con el paquete npm s3) puede encontrarse con problemas en los que se asume que la región es estándar de EE.UU., y buscar por nombre requerirá que defina explícitamente la región si elige alojar un bucket fuera de esa región.

 0
Author: Duncan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-16 02:44:47

Para las personas que todavía se enfrentan a este problema, intente agregar s3_host de la siguiente manera al hash de configuración

   :storage => :s3,
   :s3_credentials => {:access_key_id => access key,
   :secret_access_key => secret access key},
   :bucket => bucket name here,
   :s3_host_name => s3-us-west-1.amazonaws.com or whatever comes as per your region}.

Esto solucionó el problema para mí.

 0
Author: RamanSM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-25 07:21:52

Durante la creación de S3Client puede especificar la asignación de endpoint a una región en particular. Si el valor predeterminado es s3.amazonaws.com, se creará el bucket en us-east-1 que es North Virginia.

Más detalles sobre endpoints y regiones de S3 en AWS docs: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .

Por lo tanto, asegúrese siempre del endpoint/región mientras crea el S3Client y acceda a los recursos S3 usando el mismo cliente en la misma región.

Si el el bucket se crea desde la consola AWS S3, luego verifique la región desde la consola para ese bucket y luego cree un cliente S3 en esa región utilizando los detalles del punto final mencionados en el enlace anterior.

 0
Author: Rathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-21 20:48:24

Recibí este error cuando intenté acceder a un cubo que no existía.

Cambié por error una variable de ruta con la variable nombre del bucket y, por lo tanto, el nombre del bucket tenía el valor de ruta del archivo. Así que tal vez vuelva a verificar si el nombre del cubo que configuró en su solicitud es correcto.

 0
Author: Sven Möhring,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-02 13:07:45