Ich werde versuchen, es so einfach wie möglich zu erklären. Es gibt also keine Garantie für die Richtigkeit der tatsächlichen Bedingungen.
In der Sitzung wird die Konnektivität zu AWS-Diensten initiiert. Beispiel: Es folgt eine Standardsitzung, die das Standardprofil für Anmeldeinformationen verwendet (z. B. ~ / .aws / credentials, oder nehmen Sie an, dass Ihr EC2 das IAM-Instanzprofil verwendet).
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Da die Standardsitzung auf das verwendete Profil oder Instanzprofil beschränkt ist, müssen Sie manchmal die benutzerdefinierte Sitzung verwenden, um die Standardsitzungskonfiguration (z. B. region_name, endpoint_url usw.) zu überschreiben, z
# 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')
Ressource : Dies ist die übergeordnete Serviceklasse, deren Verwendung empfohlen wird. Auf diese Weise können Sie bestimmte AWS-Ressourcen verknüpfen und weitergeben. Verwenden Sie also nur diese Abstraktion, um sich Sorgen zu machen, auf welche Zieldienste verwiesen wird. Wie Sie im Sitzungsteil feststellen, übergeben Sie bei einer benutzerdefinierten Sitzung nur dieses abstrakte Objekt, ohne sich Gedanken über die Weitergabe aller benutzerdefinierten Regionen usw. zu machen. Es folgt ein kompliziertes Beispiel, z
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 ist ein Low-Level-Klassenobjekt. Für jeden Clientaufruf müssen Sie die Targeting-Ressourcen explizit angeben. Der angegebene Service-Zielname muss lange übergeben werden. Sie verlieren die Abstraktionsfähigkeit.
Wenn Sie sich beispielsweise nur mit der Standardsitzung befassen, ähnelt dies 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')
Wenn Sie jedoch Objekte aus einem Bucket in verschiedenen Regionen auflisten möchten, müssen Sie den expliziten Bucket-Parameter angeben, der für den Client erforderlich ist.
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')