Я постараюсь объяснить это как можно проще. Таким образом, нет гарантии точности фактических сроков.
Сессия - это место, где можно инициировать подключение к сервисам AWS. Например, следующий - это сеанс по умолчанию, в котором используется профиль учетных данных по умолчанию (например, ~ / .aws / учетные данные или предполагается, что ваш EC2 использует профиль экземпляра IAM)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Поскольку сеанс по умолчанию ограничен используемым профилем или профилем экземпляра, иногда вам нужно использовать пользовательский сеанс для переопределения конфигурации сеанса по умолчанию (например, region_name, endpoint_url и т. Д.), Например
# custom resource session must use boto3.Session to do the override
my_west_session = boto3.Session(region_name = 'us-west-2')
my_east_session = boto3.Session(region_name = 'us-east-1')
backup_s3 = my_west_session.resource('s3')
video_s3 = my_east_session.resource('s3')
# you have two choices of create custom client session.
backup_s3c = my_west_session.client('s3')
video_s3c = boto3.client("s3", region_name = 'us-east-1')
Ресурс : это класс обслуживания высокого уровня, который рекомендуется использовать. Это позволяет вам связывать определенные ресурсы AWS и передавать их, так что вы просто используете эту абстракцию, а не беспокоитесь о том, на какие целевые сервисы указывают. Как вы заметили из части сеанса, если у вас есть пользовательский сеанс, вы просто передаете этот абстрактный объект, а не беспокоитесь обо всех пользовательских областях и т. Д., Чтобы передать их дальше. Ниже приведен сложный пример, например
import boto3
my_west_session = boto3.Session(region_name = 'us-west-2')
my_east_session = boto3.Session(region_name = 'us-east-1')
backup_s3 = my_west_session.resource("s3")
video_s3 = my_east_session.resource("s3")
backup_bucket = backup_s3.Bucket('backupbucket')
video_bucket = video_s3.Bucket('videobucket')
# just pass the instantiated bucket object
def list_bucket_contents(bucket):
for object in bucket.objects.all():
print(object.key)
list_bucket_contents(backup_bucket)
list_bucket_contents(video_bucket)
Клиент - это объект класса низкого уровня. Для каждого вызова клиента необходимо явно указывать ресурсы таргетинга, назначенное имя цели службы должно быть длинным. Вы потеряете способность к абстракции.
Например, если вы имеете дело только с сеансом по умолчанию, это похоже на boto3.resource.
import boto3
s3 = boto3.client('s3')
def list_bucket_contents(bucket_name):
for object in s3.list_objects_v2(Bucket=bucket_name) :
print(object.key)
list_bucket_contents('Mybucket')
Однако, если вы хотите перечислить объекты из группы в разных регионах, вам нужно указать явный параметр корзины, требуемый для клиента.
import boto3
backup_s3 = my_west_session.client('s3',region_name = 'us-west-2')
video_s3 = my_east_session.client('s3',region_name = 'us-east-1')
# you must pass boto3.Session.client and the bucket name
def list_bucket_contents(s3session, bucket_name):
response = s3session.list_objects_v2(Bucket=bucket_name)
if 'Contents' in response:
for obj in response['Contents']:
print(obj['key'])
list_bucket_contents(backup_s3, 'backupbucket')
list_bucket_contents(video_s3 , 'videobucket')