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 *