Je vais essayer de l'expliquer le plus simplement possible. Il n'y a donc aucune garantie de l'exactitude des termes réels.
La session est l'endroit où initier la connectivité aux services AWS. Par exemple, la session par défaut suivante utilise le profil d'informations d'identification par défaut (par exemple, ~ / .aws / credentials, ou suppose que votre EC2 utilise le profil d'instance IAM)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Étant donné que la session par défaut est limitée au profil ou au profil d'instance utilisé, vous devez parfois utiliser la session personnalisée pour remplacer la configuration de session par défaut (par exemple, region_name, endpoint_url, etc.), par exemple
# 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 : il s'agit de la classe de service de haut niveau recommandée à utiliser. Cela vous permet de lier des ressources AWS particulières et de les transmettre, de sorte que vous n'utilisez cette abstraction que pour vous soucier des services cibles vers lesquels vous pointez. Comme vous le constatez dans la partie session, si vous avez une session personnalisée, vous passez simplement cet objet abstrait plutôt que de vous soucier de toutes les régions personnalisées, etc. à transmettre. Voici un exemple compliqué Par exemple
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)
Le client est un objet de classe de bas niveau. Pour chaque appel client, vous devez spécifier explicitement les ressources de ciblage, le nom cible du service désigné doit être long. Vous perdrez la capacité d'abstraction.
Par exemple, si vous ne traitez qu'avec la session par défaut, cela ressemble à 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')
Toutefois, si vous souhaitez répertorier les objets d'un compartiment dans différentes régions, vous devez spécifier le paramètre de compartiment explicite requis pour le client.
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')