Ejemplo: cargar un archivo en AWS S3 con Boto

    C贸digo de ejemplo

    Amazon Web Services (AWS) es un conjunto de servicios extremadamente populares para sitios web y aplicaciones, por lo que es importante saber c贸mo interactuar con los distintos servicios. Aqu铆, nos centramos en el Servicio de almacenamiento simple (S3), que es esencialmente un servicio de almacenamiento de archivos.

    Todos los archivos deben asignarse a un dep贸sito, al que se le asigna un nombre y se puede dirigir mediante http://s3.amazonaws.com/{bucket}/{key}. A cada archivo se le asigna una clave 煤nica, que se puede utilizar m谩s adelante para recuperar el archivo.

    Hay muchas otras opciones para asignar a dep贸sitos y archivos (cifrado, ACL, etc.), pero no hablaremos mucho aqu铆. Solo observe las referencias a ‘lectura p煤blica’, que permite que cualquiera pueda descargar el archivo.

    El c贸digo

    El siguiente c贸digo muestra, en Python usando boto, c贸mo cargar un archivo en S3.

    import os
    
    import boto
    from boto.s3.key import Key
    
    def upload_to_s3(aws_access_key_id, aws_secret_access_key, file, bucket, key, callback=None, md5=None, reduced_redundancy=False, content_type=None):
        """
        Uploads the given file to the AWS S3
        bucket and key specified.
        
        callback is a function of the form:
        
        def callback(complete, total)
        
        The callback should accept two integer parameters,
        the first representing the number of bytes that
        have been successfully transmitted to S3 and the
        second representing the size of the to be transmitted
        object.
        
        Returns boolean indicating success/failure of upload.
        """
        try:
            size = os.fstat(file.fileno()).st_size
        except:
            # Not all file objects implement fileno(),
            # so we fall back on this
            file.seek(0, os.SEEK_END)
            size = file.tell()
        
        conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key)
        bucket = conn.get_bucket(bucket, validate=True)
        k = Key(bucket)
        k.key = key
        if content_type:
            k.set_metadata('Content-Type', content_type)
        sent = k.set_contents_from_file(file, cb=callback, md5=md5, reduced_redundancy=reduced_redundancy, rewind=True)
        
        # Rewind for later use
        file.seek(0)
        
        if sent == size:
            return True
        return False
    

    Usando el c贸digo

    Y as铆 es como usar铆as el c贸digo:

    AWS_ACCESS_KEY = 'your_access_key'
    AWS_ACCESS_SECRET_KEY = 'your_secret_key'
    
    file = open('someFile.txt', 'r+')
    
    key = file.name
    bucket="your-bucket"
    
    if upload_to_s3(AWS_ACCESS_KEY, AWS_ACCESS_SECRET_KEY, file, bucket, key):
        print 'It worked!'
    else:
        print 'The upload failed...'
    

    boto funciona con mucho m谩s que S3, tambi茅n puede acceder EC2, SES, SQSy casi todos los dem谩s servicios de AWS. Los documentos de boto son geniales, por lo que leerlos deber铆a darte una buena idea de c贸mo usar los otros servicios. Pero si no, publicaremos m谩s ejemplos de boto, como c贸mo recuperar los archivos de S3.

    Recursos

     

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *