Amazon Web Service Con Python Pt2

Fecha de publicaci贸n: 21 Octubre 2020
Tiempo de lectura: 4 min.
Premium: False
N煤mero de visitas: 224


Bienvenido a este nuevo post del curso de AWS con Python. 馃槂

En una entrega anterior aprendimos a configura nuestro entorno AWS con Python, adem谩s de consumir el servicio s3 con client. Algo que sin duda fue super interesante 馃槑 ya que ahora podemos almacenar nuestra informaci贸n de forma segura mediante los servidores de amazon.

Para este nuevo post haremos uso de resource como m茅todo de acceso a los servicios de AWS con Python. Aprendemos a conectar nuestros scripts con el servicio s3. Bien, sin m谩s dilaci贸n comencemos.

Resource

C贸mo mencionamos anteriormente (post anterior) haremos uso de client siempre y cuando deseemos utilizar los servicios de AWS mediante una interfaz de bajo nivel, por otro lado , haremos uso de resouce cuando deseemos utilizar los servicios de AWS mediante una interfaz de alto nivel. 驴En qu茅 se traduce todo esto? F谩cil, en la legibilidad del c贸digo. 鉁

Veamos, nuevamente utilicemos el servicio s3 de amazon. Ahora mediante resource.

import boto3

s3 = boto3.resource('s3')

C贸mo podemos observar, realizar una instancia de tipo ServiceResource es muy f谩cil. Basta con utilizar la funci贸n resource y pasar como argumento el servicio a utilizar, que en este caso es s3.

Una vez con la instancia, podremos realizar todas las operaciones mencionadas anteriormente. Por ejemplo.

Crear bucket

Para crear un bucket haremos uso del m茅todo create_bucket, pasando como argumento el nombre del Bucket a crear y ciertos datos de configuraciones.

s3.create_bucket(Bucket='pywombatv2',
                CreateBucketConfiguration={
                    'LocationConstraint': 'us-east-2'
                }
            )

Aqu铆 un peque帽o tip. Si al crear un nuevo bucket deseamos que este se encuentre en nuestra region por default, debemos acceder a nuestra sesi贸n de AWS y hacer uso de ella. Esto mediante el atributo region_name.

# Accedemos a nuestra session AWS
session = boto3.session.Session()

# Obtenemos nuestra region por default
region = session.region_name

s3.create_bucket(Bucket='pywombatv2',
                CreateBucketConfiguration={
                    'LocationConstraint': region
                }
            )

Esto es super 煤til, ya que no habr谩 necesidad de hard codear la regi贸n, evitando as铆 posibles errores.馃

Subir archivos

Ahora hablemos de subir archivos. Si recuerdas, utilizando una instancia de client_ junto con su m茅todo uploard_file pudimos subir archivos locales a nuestro bucket de s3.

s3.upload_file('/Users/eduardo/Documents/thumbnail.py',
                'customepywombat',
                'newscript.py')

Sin embargo, al nosotros utilizar resource existen 2 formas de realizar esta misma tarea.

  • Mediante una instancia de Object.
  • Mediante una instancia de Bucket

Recordemos, ahora nos encontramos trabajando mediante una interfaz de algo nivel. 馃槂

Veamos. Comencemos con una instancia de Object.

Para ello debemos utilizar la clase Object pasando como argumento el nombre del bucket a utilizar y la llave del objeto. Posteriormente, una vez con la instancia creada, utilizamos el m茅todo upload_file, pasando como argumento la direcci贸n del archivo que deseamos subir.

s3_object = s3.Object('pywombatv2', key='main.py')
s3_object.upload_file('./main.py')

Ahora, con una instancias de Bucket.

En este caso ser谩 necesario utilizar la clase Bucket, pasando como argumento el bucket a utilizar. Una vez con dicha instancia ejecutamos el m茅todo upload_file, pasando como argumentos la llave del objeto a crear y el archivo a subir.

bucket = s3.Bucket('pywombatv2')
bucket.upload_file('main.py', './main.py')

Descargar archivos

Para descargar archivos sucede exactamente lo mismo, podemos hacerlo mediante un objeto Object o un objeto Bucket. En ambos casos haremos uso del m茅todo download_file, pasando como argumento la direcci贸n en nuestro sistema donde deseamos almacenar el archivo.

Objeto

s3_object.upload_file('./main.py')
s3_object.download_file('./tmp/main.py')

Bucket

bucket = s3.Bucket('pywombatv2')
bucket.download_file('main.py', './tmp/main.py')

Eliminar archivos

Para eliminar archivos, c贸mo quiz谩s ya te lo estes imaginando, existen 2 formas de hacerlo. S铆, as铆 es, mediante una instancia de Object o una instancia a bucket. Eso s铆, los m茅todos cambian much铆simo. 馃

Object

s3_object = s3.Object('pywombatv2', key='main.py')
s3_object.delete()

Para el bucket ser谩 necesario pasar como argumento al m茅todo delete_objects el listado de objetos a eliminar. En mi caso solo uno, main.py.

Bucket

bucket = s3.Bucket('pywombatv2')
response = bucket.delete_objects(
    Delete={
        'Objects': [
            {
                'Key': 'main.py',
            },
        ],
    }
)

Aqu铆 de forma personal recomiendo ampliamente utilizar una instancia Object sobre Bucket, ya que creo, el c贸digo se vuelve mucho m谩s legible.

Renombrar archivos.

Para renombrar archivos, contrario a lo que uno puede pensar, no existe m茅todo, o instancia alguna que realice esta tarea de forma perse, sin embargo ejecutando un par de acciones es posible "emular" dicha operaci贸n. Veamos.

Para ello ser谩 necesario primero ser谩 necesario realizar una copia del objeto a renombrar utilizando el nuevo nombre. Una vez el objeto haya sido creado (con el nuevo nombre), procedemos a eliminar el objeto base, el objeto con el nombre viejo.

s3 = boto3.resource('s3')

s3.Object(bucket, new_mediafile_key).copy_from(CopySource=bucket +  '/' + old_mediafile_key)
s3.Object(bucket, old_mediafile_key).delete()
s3.Object(bucket, new_mediafile_key).Acl().put(ACL='public-read')

Para crear un nuevo objeto a partir de uno ya existente, es decir, realizar una copia, haremos uso del m茅todo copy_from.


Perfecto, estas ser铆an las operaciones b谩sicas que podemos hacer utilizando resource y el servicio de AWS con Python. Para este post trabajamos principalmente con los objetos de tipo Object y Bucket, objetos que sin duda alguna no ser谩n de mucha utilidad al momento de administrar nuestros contenedores. De

C贸mo pudimos observar al nosotros utilizar source sobre client nuestro c贸digo se vuelve mucho m谩s legible, f谩cil de comprender, y sobre todo f谩cil de mantener. As铆 que, siempre que tengas la oportunidad te recomiendo ampliamente utilices source sobre cliente.

En la pr贸xima entrega estaremos ahora utilizando el servicio de Amazon Polly, para pode crear nuestros propios archivos de voz a trav茅s de texto. Ser谩 un tutorial bastante interesante, as铆 que no te lo puedes perder.

Espero el tutorial haya sido de tu agrado, si es as铆 me gustar铆a nos lo hicieras saber en la secci贸n de comentarios, y no olvides subscribirte para tener acceso a todo el contenido de la plataforma. Sin m谩s yo me despido, hasta la pr贸xima. 鈽

M谩s Tips y Ejercicios 馃悕

Adquiere una subscripci贸n PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 馃敁
Nuevo l铆mite: Incrementa tu l铆mite de ejercicios por semana. 馃殌
Contenido 煤nico: Recibe semanalmente recursos exclusivos de Python (Videos, Art铆culos y Capitulos del libro PyWombat, comienza como desarrollador Python. 馃悕

Comentarios

Para poder conocer tu opini贸n es necesario ser un usuario autenticado. Login