Subir un fichero a Amazon S3 con Python

26/Ene/2016 Python

Cuando estemos trabajando con el almacenamiento de ficheros en la web una buena alternativa puede ser Amazon S3. Amazon S3 es un sistema de almacenamiento de ficheros en Cloud. En este ejemplo vamos a ver como subir un fichero a Amazon S3 con Python.

Lo primero será activar el uso del servicio Amazon S3 desde la consola de Amazon. En ella encontrareis la opción de uso.

s3

Una vez que estemos dentro de Amazon S3 podremos crear bucket que son algo parecido a los directorios y subir ficheros. Aunque nosotros subamos ficheros a Amazon S3 lo que realmente se almacena son objetos, objetos que tienen una clave. Esto es primordial ya que todo el manejo que hagamos con Amazon S3 será mediante dicha clave.

Para poder subir un fichero a Amazon S3 con Python vamos a utilizar la librería s3tiny. s3tiny es una librería muy sencilla que nos permitirá manejar Amazon S3 con unos pocos métodos, abstrayéndonos de la complejidad de su API. Podéis echarle un ojo al GitHub de s3tiny para ver su documentación en detalle.

Lo primero será instalar s3tiny.

pip install tinys3

Una vez instalado creamos nuestro programa en Python, el cual importará la librería:

  1. import tinys3

La clase que nos ofrece la conexión a Amazon S3 es Connection, dicha clase necesita la clave de acceso y el secreto de nuestra cuenta de Amazon. Para poder tener estos dos datos tienes que haberte creado un usuario IAM desde la consola de Amazon. El usuario tendrá esos dos valores, algo parecido a lo siguiente:

  1. S3_ACCESS_KEY = 'BAKIBAKI678H67HGA'
  2. S3_SECRET_KEY = '+vpOpILD+E9872AialendX0Ui123CKCKCKw'

Es importante que sepas que esta información es privada y no debes publicarla en ningún sitio público o repositorio de código.

Ahora vamos a establecer la conexión.

  1. conn = tinys3.Connection(S3_ACCESS_KEY,S3_SECRET_KEY,endpoint='s3-eu-west-1.amazonaws.com')

Es importante ver que a parte de las claves estamos pasando como parámetro el endpoint que representa la región en la que hemos creado nuestro bucket dentro de Amazon S3.

Ahora pasamos a leer el fichero en local mediante el método open.

  1. f = open('foto.png','rb')

Vemos que utilizamos los modificadores 'rb' para indicar que la apertura es en modo lectura y que el fichero es binario.

Lo siguiente será subir el fichero. En este caso tinys3 nos ofrece el método .upload(), este método necesita saber la clave del fichero en Amazon S3, el fichero que vamos a subir (que está en la variable f) y el bucket (o directorio) de destino. De esta forma nuestro código será:

  1. BUCKET = 'la-prueba'
  2. conn.upload('foto2.png',f,BUCKET)

Vemos que lo hemos subido a un bucket llamado 'la-prueba'. De esta forma tan sencilla habremos conseguido subir un fichero a Amazon S3 con Python.

Vídeos sobre Python


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D