Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

272
Views
¿Diferencia en boto3 entre recurso, cliente y sesión?

Estoy usando Python 2.7.12 en Ubuntu 16.04 LTS. Estoy aprendiendo a usar boto3 desde el siguiente enlace: https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-boto-3 . Mi duda es cuando usar recurso, cliente o sesión, y su respectiva funcionalidad.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Client y Resource son dos abstracciones diferentes dentro del SDK de boto3 para realizar solicitudes de servicio de AWS. Si desea realizar llamadas de API a un servicio de AWS con boto3, debe hacerlo a través de un Cliente o un Recurso.

Por lo general, elegiría usar la abstracción del cliente o la abstracción del recurso, pero una aplicación puede usar ambas, según sea necesario. He esbozado las diferencias entre Cliente y Recurso a continuación para ayudar a los lectores a decidir cuál usar.

La sesión es en gran parte ortogonal a los conceptos de Cliente y Recurso (pero ambos la usan).

Aquí hay información más detallada sobre qué son Client , Resource y Session .

Cliente:

  • esta es la abstracción original de la API de boto3
  • proporciona acceso al servicio de AWS de bajo nivel
  • todas las operaciones de servicio de AWS son compatibles con los clientes
  • expone el cliente botocore al desarrollador
  • normalmente se asigna 1:1 con la API del servicio de AWS
  • expone nombres de métodos en mayúsculas y minúsculas (p. ej. API ListBuckets => método list_buckets )
  • se genera a partir de una descripción de servicio de AWS

Este es un ejemplo de acceso a nivel de cliente a los objetos de un depósito de S3:

 import boto3 client = boto3.client('s3') response = client.list_objects_v2(Bucket='mybucket') for content in response['Contents']: obj_dict = client.get_object(Bucket='mybucket', Key=content['Key']) print(content['Key'], obj_dict['LastModified'])

Nota: este código de nivel de cliente se limita a enumerar como máximo 1000 objetos. Tendría que usar un paginador o implementar su propio bucle, llamando a list_objects_v2() repetidamente con un marcador de continuación si hubiera más de 1000 objetos.

Bien, esa es la interfaz de cliente de bajo nivel. Ahora en la interfaz de recursos de nivel superior (más abstracta).

Recurso:

  • esta es la nueva abstracción de la API de boto3
  • proporciona una API orientada a objetos de alto nivel
  • no proporciona una cobertura API del 100 % de los servicios de AWS
  • utiliza identificadores y atributos
  • tiene acciones (operaciones sobre recursos)
  • expone subrecursos y colecciones de recursos de AWS
  • se genera a partir de una descripción de recurso de AWS

Aquí está el ejemplo equivalente usando acceso a nivel de recursos a los objetos de un depósito S3 (todos):

 import boto3 s3 = boto3.resource('s3') bucket = s3.Bucket('mybucket') for obj in bucket.objects.all(): print(obj.key, obj.last_modified)

Nota: en este caso no es necesario realizar una segunda llamada a la API para obtener los objetos; están disponibles para usted como una colección en el cubo. Estas colecciones de subrecursos tienen una carga lenta.

Puede ver que la versión Resource del código es mucho más simple, más compacta y tiene más capacidad (por ejemplo, hace la paginación por usted y expone las propiedades en lugar de un diccionario sin formato). La versión del Client del código en realidad sería más complicada que la que se muestra arriba si quisiera incluir la paginación.

Finalmente, en Sesión, que es fundamental tanto para el Cliente como para el Recurso y cómo ambos obtienen acceso a las credenciales de AWS, por ejemplo.

Sesión:

  • almacena información de configuración (principalmente credenciales y región seleccionada)
  • le permite crear clientes de servicios y recursos
  • boto3 crea una sesión predeterminada para usted cuando sea necesario

Un recurso útil para aprender más sobre estos conceptos de boto3 es el video introductorio de re:Invent .

over 4 years ago · Santiago Trujillo Report

0

Voy a 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 credenciales predeterminado (por ejemplo, ~/.aws/credentials, o suponga que su EC2 usa 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 al perfil de instancia utilizado, a veces es necesario usar la sesión personalizada para anular la configuración de la sesión predeterminada (p. ej., region_name, endpoint_url, etc.), p. ej.

 # 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 utilizar. Esto le permite vincular recursos de AWS particulares y pasarlos, por lo que solo usa esta abstracción en lugar de preocuparse a qué servicios de destino apuntan. Como notará 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. para pasar. El siguiente es un ejemplo complicado, por ejemplo

 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 destino, el nombre de destino del servicio designado debe ser largo. Perderá la capacidad de abstracción.

Por ejemplo, si solo maneja 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')
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!