Spróbuję wyjaśnić to tak prosto, jak to możliwe. Dlatego nie ma gwarancji dokładności rzeczywistych warunków.
Sesja jest miejscem, w którym można nawiązać połączenie z usługami AWS. Np. Następująca jest domyślna sesja, która korzysta z domyślnego profilu poświadczeń (np. ~ / .Aws / credentials, lub załóż EC2 za pomocą profilu wystąpienia IAM)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Ponieważ sesja domyślna jest ograniczona do użytego profilu lub profilu instancji, czasami trzeba użyć sesji niestandardowej, aby zastąpić domyślną konfigurację sesji (np. Nazwa_ regionu, adres_początkowy itp.) Np.
# 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')
Zasób : zalecana do użycia klasa usług wysokiego poziomu. Pozwala to na powiązanie określonych zasobów AWS i przekazywanie ich dalej, więc po prostu korzystasz z tej abstrakcji, nie martwiąc się o to, które usługi docelowe są wskazywane. Jak zauważyłeś z części sesji, jeśli masz sesję niestandardową, po prostu przekazujesz ten obiekt abstrakcyjny, niż martwisz się o wszystkie niestandardowe regiony itp. Poniżej znajduje się skomplikowany przykład np
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)
Klient jest obiektem klasy niskiego poziomu. Dla każdego połączenia z klientem należy jawnie określić zasoby kierowania, nazwa docelowej usługi musi być długa. Utracisz zdolność abstrakcji.
Na przykład, jeśli zajmujesz się tylko sesją domyślną, wygląda to podobnie do 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')
Jeśli jednak chcesz wyświetlić listę obiektów z segmentu w różnych regionach, musisz określić jawny parametr segmentu wymagany dla klienta.
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')