Listado de contenidos de un cubo con boto3


¿Cómo puedo ver lo que hay dentro de un cubo en S3 con boto3? (es decir, hacer un "ls")?

Haciendo lo siguiente:

import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some/path/')

Devuelve:

s3.Bucket(name='some/path/')

¿Cómo veo su contenido?

Author: Amelio Vazquez-Reina, 2015-05-15

6 answers

Una forma de ver el contenido sería:

for object in my_bucket.objects.all():
    print(object)
 97
Author: garnaat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-03 21:18:43

Esto es similar a un 'ls' pero no tiene en cuenta la convención de la carpeta de prefijos y listará los objetos en el cubo. Queda en manos del lector filtrar los prefijos que forman parte del nombre de la clave.

En Python 2:

from boto.s3.connection import S3Connection

conn = S3Connection() # assumes boto.cfg setup
bucket = conn.get_bucket('bucket_name')
for obj in bucket.get_all_keys():
    print(obj.key)

En Python 3:

from boto3 import client

conn = client('s3')  # again assumes boto.cfg setup, assume AWS S3
for key in conn.list_objects(Bucket='bucket_name')['Contents']:
    print(key['Key'])
 50
Author: cgseller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-05 10:35:11

Si desea pasar las claves de ACCESO y SECRETO:

from boto3.session import Session

ACCESS_KEY='your_access_key'
SECRET_KEY='your_secret_key'

session = Session(aws_access_key_id=ACCESS_KEY,
                  aws_secret_access_key=SECRET_KEY)
s3 = session.resource('s3')
your_bucket = s3.Bucket('your_bucket')

for s3_file in your_bucket.objects.all():
    print(s3_file.key)
 17
Author: Erwin Alberto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-07 13:16:47

Asumo que ha configurado la autenticación por separado.

import boto3
s3 = boto3.resource('s3')

my_bucket = s3.Bucket('bucket_name')

for awsfile in my_bucket.objects.all():
    print file.key
 11
Author: Tushar Niras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-05 04:48:50

Una forma más parsimoniosa, en lugar de iterar a través de un bucle for, también podría imprimir el objeto original que contiene todos los archivos dentro de su bucket S3:

session = Session(aws_access_key_id=aws_access_key_id,aws_secret_access_key=aws_secret_access_key)
s3 = session.resource('s3')
bucket = s3.Bucket('bucket_name')

files_in_s3 = bucket.objects.all() 
#you can print this iterable with print(list(files_in_s3))
 2
Author: Daniel Vieira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 14:21:48

Lo hice así, incluyendo el método de autenticación:

s3_client = boto3.client(
                's3',
                aws_access_key_id='access_key',
                aws_secret_access_key='access_key_secret',
                config=boto3.session.Config(signature_version='s3v4'),
                region_name='region'
            )

response = s3_client.list_objects(Bucket='bucket_name', Prefix=key)
if ('Contents' in response):
    # Object / key exists!
    return True
else:
    # Object / key DOES NOT exist!
    return False
 0
Author: Milean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-30 19:21:10