Межрегиональное копирование S3 с использованием SourceClient не выполняется в Boto3 и AWS CLI на ScalewayPython

Программы на Python
Ответить
Anonymous
 Межрегиональное копирование S3 с использованием SourceClient не выполняется в Boto3 и AWS CLI на Scaleway

Сообщение Anonymous »

TL;DR
У меня возникли проблемы с использованием boto3/aws cli для копирования файлов между сегментами, которые находятся в другом регионе (Примечание: в качестве облачного провайдера я использую Scaleway, а не AWS). ).
Мне не удалось заставить его работать с помощью boto3, но удалось найти решение с помощью rclone. Я хотел бы знать, есть ли у boto3 возможность ограничить количество зависимостей в моем стеке.
Описание
При выполнении межрегионального взаимодействия Операция копирования S3 с использованием Boto3 (или CLI AWS), параметр SourceClient в Boto3 и параметр --endpoint-url в CLI AWS не применяются последовательно. Это приводит к ошибкам при попытке скопировать объекты из исходного сегмента в одном регионе в целевой сегмент в другом регионе без загрузки объектов локально.
Ожидаемое поведение: объект должен успешно скопироваться из исходный сегмент в целевой сегмент между регионами, используя SourceClient для правильного разрешения региона исходного сегмента.
Фактическое поведение: возникает ошибка.

Код: Выделить всё

botocore.exceptions.ClientError: An error occurred (NoSuchBucket) when calling the CopyObject operation: The specified bucket does not exist
Команда копирования не использует информацию из входных данных SourceClient, а использует только информацию (учетные данные, местоположение и т. д.) от клиента, на котором был вызван метод копирования. .
Я также пробовал это с помощью aws cli, но получил те же результаты:

Код: Выделить всё

aws s3 sync s3://source-bucket s3://dest-bucket \
--source-region fr-par \
--region nl-ams \
--endpoint-url https://s3.fr-par.scw.cloud \
--profile mys3profile
Похоже, что интерфейс aws использует конечную точку amazonaws:

Код: Выделить всё

fatal error: Could not connect to the endpoint URL: "https://source-bucket.s3.fr-par.amazonaws.com/?list-type=2&prefix=&encoding-type=url"
Этапы воспроизведения:

Код: Выделить всё

import boto3
from dotenv import dotenv_values
config = dotenv_values(".env")

# Initialize source and destination clients
s3_session = boto3.Session(
aws_access_key_id=config.get("SCW_ACCESS_KEY"),
aws_secret_access_key=config.get("SCW_SECRET_KEY"),
region_name="fr-par",
)
src_s3 = s3_session.client(
service_name="s3",
region_name="fr-par",
endpoint_url="https://s3.fr-par.scw.cloud",
)
s3_session = boto3.Session(
aws_access_key_id=config.get("SCW_ACCESS_KEY"),
aws_secret_access_key=config.get("SCW_SECRET_KEY"),
region_name="nl-ams",
)
dest_s3 = s3_session.client(
service_name="s3",
region_name="nl-ams",
endpoint_url="https://s3.nl-ams.scw.cloud",
)

# Set up source and destination parameters
copy_source = {
"Bucket": "source_bucket_name",
"Key": "source_object_name",
}

# Attempt to copy with SourceClient
dest_s3.copy(
copy_source,
"destination_bucket_name",
source_object_name,
SourceClient=src_s3
)
Возможное решение
Мне не удалось заставить его работать с помощью boto3, но мне удалось получить приемлемое для меня решение с помощью rclone.< /p>
Пример конфигурации для размещения в ~.conf/rclone/rclone.conf:

Код: Выделить всё

[scw_s3_fr]
type = s3
provider = Scaleway
access_key_id = ...
secret_access_key = ...
region = fr-par
endpoint = s3.fr-par.scw.cloud
acl = private

[scw_s3_nl]
type = s3
provider = Scaleway
access_key_id = ...
secret_access_key = ...
region = nl-ams
endpoint = s3.nl-ams.scw.cloud
acl = private
синхронизировать источник с пунктом назначения в одностороннем порядке:

Код: Выделить всё

rclone sync scw_s3_fr:source-bucket scw_s3_nl:destination-bucket -P --metadata --checksum --check-first
самый вопрос
Кто-нибудь знает, что я здесь сделал не так? Или может направить меня в правильном направлении, чтобы правильно настроить конфигурацию.
Мои краткосрочные потребности в настоящее время полностью определены, но мне интересно, возможно ли еще решение на чистом boto3.
Сведения о среде
Python 3.11.2 (основная версия, 7 марта 2023 г., 16:53:12) [GCC 12.2.1 20230201] в Linux
boto3='1.35.66'

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-scaleway
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»