Я спробую пояснити це якомога простіше. Тож немає гарантії точності фактичних термінів.
Сесія - це місце, де ініціювати підключення до служб AWS. Наприклад, це сеанс за замовчуванням, який використовує профіль облікових даних за замовчуванням (наприклад, ~ / .aws / облікові дані, або припустимо, що ваш EC2 використовується профіль екземпляра IAM)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Оскільки сеанс за замовчуванням обмежений для використовуваного профілю або профілю екземпляра, іноді вам потрібно скористатися спеціальним сеансом, щоб змінити конфігурацію сеансу за замовчуванням (наприклад, ім'я регіону, кінцевої точки_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')