python - cli - PermanentRedirect al llamar a la operación PutObject
python s3 bucket (1)
Los errores dicen:
Se ha producido un error ( PermanentRedirect ) al llamar a la operación PutObject: el depósito al que está intentando acceder debe abordarse utilizando el punto final especificado . Envíe todas las solicitudes futuras a este punto final .
Esto normalmente ocurre cuando el segmento de Amazon S3 que está utilizando se encuentra en una región diferente a la que se creó el cliente de Amazon S3.
Por ejemplo, el depósito está en us-west-2
pero el cliente se creó para ap-southeast-2
.
Puede especificar la región a través de un archivo de credenciales o al pasar un region_name
al crear el objeto de cliente. Una región predeterminada también se puede definir en boto3.setup_default_session()
.
El siguiente código funciona localmente y carga archivos desde un directorio a S3. Está usando Boto3 con Python 3.
s3 = boto3.resource(''s3'', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_ACCESS_KEY_SECRET)
bucket = s3.Bucket(bucket_name)
uploadFileNames = []
for (sourceDir, dirname, filenames) in os.walk(sourceDir):
for filename in filenames:
bucket.put_object(Key=filename, Body=open("{}{}".format(sourceDir, filename), "rb"))
break
Mi problema es que cuando ejecuto el mismo código en mi servidor de producción (Ubuntu) obtengo el siguiente error, ¿por qué?
return self._make_api_call(operation_name, kwargs)
File "/usr/local/lib/python3.4/site-packages/botocore/client.py", line 335, in _make_api_call
raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (PermanentRedirect) when calling the PutObject operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
De nuevo localmente en mi Mac este código funciona, solo en mi servidor Ubuntu me sale este error.