#python #python-3.x #amazon-web-services #amazon-s3 #boto3
#python #python-3.x #amazon-веб-сервисы #amazon-s3 #boto3
Вопрос:
Я видел примеры проверки того, существует ли сегмент S3, и реализовал их ниже. Моя корзина расположена в регионе us-east-1, но следующий код не генерирует исключение. Есть ли способ сделать область проверки конкретной в зависимости от моего сеанса?
session = boto3.Session(
profile_name = 'TEST'
,region_name='ap-south-1'
)
s3 = session.resource('s3')
bucket_name = 'TEST_BUCKET'
try:
s3.meta.client.head_bucket(Bucket = bucket_name)
except ClientError as c:
print(c)
Комментарии:
1. Я не уверен, что в любом случае стоит жестко кодировать регион в коде. boto3 будет использовать конфигурацию из системы через среду, конфигурационные файлы, профиль и т.д. Вероятно, более гибко настроить регион в одном из этих мест.
2. Каковы ваши фактические требования? Вам нужно знать, существует ли корзина (где угодно), или вам нужно знать, в каком регионе существует корзина? Пожалуйста, обратите внимание, что имена сегментов глобально уникальны .
3. Жестко заданный регион был предназначен только для целей тестирования. Пользователь укажет регион, который он хочет использовать. Я хотел убедиться, что корзина существует, прежде чем пытаться передать файл. Я не знал, что имена сегментов глобально уникальны, так что это помогает. Спасибо вам обоим за ваши ответы!
Ответ №1:
Не имеет значения, в какую региональную конечную точку S3 вы отправляете запрос. Базовый SDK (boto3) будет перенаправляться по мере необходимости. Однако предпочтительнее ориентироваться на правильный регион, если вы знаете его заранее, чтобы сэкономить на перенаправлениях.
Вы можете увидеть это подробно, если используете awscli в режиме отладки:
aws s3api head-bucket --bucket mybucket --region ap-south-1 --debug
Вы увидите вывод отладки, аналогичный этому:
DEBUG - S3 client configured for region ap-south-1 but the bucket mybucket is in region us-east-1; Please configure the proper region to avoid multiple unnecessary redirects and signing attempts.
DEBUG - Switching signature version for service s3 to version s3v4 based on config file override.
DEBUG - Updating URI from https://s3.ap-south-1.amazonaws.com/mybucket to https://s3.us-east-1.amazonaws.com/mybucket
Обратите внимание, что awscli использует boto3 SDK, как и ваш скрипт на Python.