martes, enero 24, 2017

boto3: Colecciones y acceso a S3

Estos últimos días estoy empezando a usar el Amazon Web Services (AWS) SDK for Python, llamado boto3. Una de las cosas interesantes de esta versión del SDK es la disponibilidad de las colecciones, gracias a las cuales es muy sencillo iterar sobre conjuntos de datos o filtrar los mismos sin necesidad de usar los paginadores, ya que el sistema se encarga de hacerlo por nosotros.

Por ejemplo, obtener todos los objetos que hay en un bucket S3 es tan sencillo como:

bucket = s3.Bucket(TARGET_BUCKET)
for obj in bucket.objects.all():
    print(obj)

Recordar, que aunque parezca extraño, el espacio de nombres de un bucket S3 es plano. Todos los objetos están identificados por una clave única, sólo que por convención, se usa un separador de path (normalmente "/") para dar la ilusión de la existencia de directorios.

Es más, con ayudas de las colecciones se puede filtra para que nos devuelva todos los objetos cuya clave coincida con un prefijo determinado y pertenezca a un bucket:

TARGET_KEYS="list_3000_objects"
KEY_SEPARATOR="/"
s3 = boto3.resource('s3')
bucket = s3.Bucket(TARGET_BUCKET)
for obj in bucket.objects.filter(Bucket=TARGET_BUCKET, Prefix=TARGET_KEYS + KEY_SEPARATOR):
    print(obj)

La información la saqué de esta pregunta sobre boto3 en StackOverflow que hice.

No hay comentarios: