Proverò a spiegarlo nel modo più semplice possibile. Quindi non esiste alcuna garanzia sull'accuratezza dei termini effettivi.
La sessione è dove avviare la connettività ai servizi AWS. Ad esempio, la seguente è una sessione predefinita che utilizza il profilo delle credenziali predefinito (ad esempio ~ / .aws / credentials o assume l'EC2 utilizzando il profilo dell'istanza IAM)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Poiché la sessione predefinita è limitata al profilo o al profilo dell'istanza utilizzato, a volte è necessario utilizzare la sessione personalizzata per sovrascrivere la configurazione della sessione predefinita (ad esempio region_name, endpoint_url, ecc.) Ad es.
# 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')
Risorsa : questa è la classe di servizio di alto livello che si consiglia di utilizzare. Ciò ti consente di collegare determinate risorse AWS e di trasmetterle, quindi devi semplicemente usare questa astrazione piuttosto che preoccuparti di quali servizi di destinazione sono indicati. Come noterai dalla parte della sessione, se hai una sessione personalizzata, devi semplicemente passare questo oggetto astratto piuttosto che preoccuparti di passare tutte le regioni personalizzate, ecc. Di seguito è riportato un esempio complicato, ad es
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)
Il client è un oggetto di classe di basso livello. Per ogni chiamata del cliente, è necessario specificare esplicitamente le risorse di targeting, il nome di destinazione del servizio designato deve essere lungo. Perderai l'abilità di astrazione.
Ad esempio, se hai a che fare solo con la sessione predefinita, sembra simile 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')
Tuttavia, se si desidera elencare oggetti da un bucket in diverse aree, è necessario specificare il parametro bucket esplicito richiesto per il 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')