Trataré de explicarlo lo más simple posible. Por lo tanto, no hay garantía de la exactitud de los términos reales.
La sesión es donde iniciar la conectividad a los servicios de AWS. Por ejemplo, la siguiente es una sesión predeterminada que usa el perfil de credencial predeterminado (por ejemplo, ~ / .aws / credentials, o asume tu EC2 usando el perfil de instancia de IAM)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Debido a que la sesión predeterminada está limitada al perfil o perfil de instancia utilizado, a veces necesita usar la sesión personalizada para anular la configuración de sesión predeterminada (por ejemplo, nombre_región, extremo_url, etc.)
# 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')
Recurso : Esta es la clase de servicio de alto nivel que se recomienda usar. Esto le permite vincular recursos particulares de AWS y transmitirlos, por lo que solo debe usar esta abstracción que preocuparse de los servicios de destino a los que apunta. Como observa en la parte de la sesión, si tiene una sesión personalizada, simplemente pasa este objeto abstracto en lugar de preocuparse por todas las regiones personalizadas, etc. El siguiente es un ejemplo complicado Ej.
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)
El cliente es un objeto de clase de bajo nivel. Para cada llamada de cliente, debe especificar explícitamente los recursos de orientación, el nombre del objetivo del servicio designado debe pasar mucho tiempo. Perderás la habilidad de abstracción.
Por ejemplo, si solo se ocupa de la sesión predeterminada, esto se parece a 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')
Sin embargo, si desea enumerar objetos de un depósito en diferentes regiones, debe especificar el parámetro de depósito explícito requerido para el cliente.
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')