Vou tentar explicar o mais simples possível. Portanto, não há garantia da precisão dos termos reais.
Sessão é onde iniciar a conectividade com os serviços da AWS. Por exemplo, a seguir é a sessão padrão que usa o perfil de credencial padrão (por exemplo, ~ / .aws / credentials ou assume seu EC2 usando o perfil de instância do IAM)
sqs = boto3.client('sqs')
s3 = boto3.resource('s3')
Como a sessão padrão é o limite para o perfil ou perfil de instância usado, às vezes você precisa usar a sessão personalizada para substituir a configuração da sessão padrão (por exemplo, region_name, endpoint_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 é a classe de serviço de alto nível recomendada para ser usada. Isso permite que você vincule determinados recursos da AWS e os repasse, para que você use essa abstração apenas para se preocupar com os serviços de destino. Como você notou na parte da sessão, se você tiver uma sessão personalizada, basta passar este objeto abstrato do que se preocupar com todas as regiões personalizadas, etc. A seguir, é apresentado um exemplo complicado
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)
Cliente é um objeto de classe de baixo nível. Para cada chamada de cliente, você precisa especificar explicitamente os recursos de segmentação, o nome da meta de serviço designada deve ser longo. Você perderá a capacidade de abstração.
Por exemplo, se você lida apenas com a sessão padrão, isso é semelhante ao 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')
No entanto, se você quiser listar objetos de um bucket em diferentes regiões, precisará especificar o parâmetro explícito do bucket necessário para o 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')