Salta al contingut principal

Projecte Flask + S3: De 0 a connectat

 


Idea i objectiu -

Havent passat uns dies aprenent Python. M’he plantejat fer un petit projecte integrant la potencia de Python per fer automatitzacions, la gestió d’objectes al Cloud: S3 i d’una manera senzilla usar Flask d’això sí que no en tinc gaires coneixements però per algo es comença.

Requisits de l’entorn:

  • Python 3.10.12: Versió base.
  • AWS CLI. Configurat amb un usuari IAM. Per a aquest laboratori li he donat AmazonS3FullAccess (que és accés complet a S3). En un entorn de producció, les millors pràctiques(IAM) serien crear una política personalitzada que restrigeixi l’accès només a uns buckets específics seguint la regla del mínim privilegi, que és una regla que limita a l’usuari als recursos necessaris, ni més, ni menys.
  • Un entorn virtual(aws-venv): Aislat al meu servidor de proves(Gojira).
  • Llibreries claus:
    • Boto3 és un SDK(Software Development Kit) una mena de traductor oficial d’Amazon, que passa les ordres de Python al llenguatge que necessita el servidor d’AWS.
    • Flask és un entorn de treball minimalista que permet crear aplicacions ràpidament.
Tenint en compte els requisits anteriors ja podem posar-nos a fer!

En primer lloc m’he fet una llista amb les funcions bàsiques que hauria de tenir un gestor d’arxius. Que puguem:

  • Llistar els buckets
  • Crear buckets
  • Pujar arxius(objectes)
  • Baixar arxius
  • Borrar arxius
  • Llistar els objectes dins dels buckets
Un concepte clau: Un bucket és una espècie de caixa mestra on guardem els nostres arxius. Entenem que al nostre ordinador utilitzem un sistema de carpetes(una carpeta dins d’una altra), a S3 funciona diferent.
El servei S3 és l’emmagatzematge d’objectes de tota Amazon. Imagineu-vos-el com el magatzem gegantí i infinit que Amazon posa a la vostra disposició.
El Bucket és teu propi, en el sentit de que està separat de la resta i tu el llogues dins d’aquest gran magatzem. En pots tenir més d’un. Però el que és diferent és que dins del teu Bucket no fas carpetes sinó que guardes objectes i els poses una etiqueta(Key) on està tota l’adreça per trobar-lo.

Després hem creat les carpetes que més o menys necessitarem en el projecte com són la mateixa carpeta arrel del projecte, una carpeta anomenada app, una de scripts per probar algunes funcions i una de tests que imagino que aquí crearé tests per a pytest.

Aquesta és la estructura inicial que anirà canviant a mesura que avancem:

Arxiu/Carpeta
Contingut
flask_s3_file_manager/

Carpeta principal del projecte.

├── app/
Nucli de l’aplicació. Conté tota la lògica de Flask i l’abstracció(amagar els detalls complexos) d’S3.
├── s3_client.py

El Mòdul Cervell. Centralitza tota la comunicació amb la API de AWS Boto3.

├── web.py
S’encarrega de les rutes i la interfície web amb Flask.
├── scripts/
Arxius independents per a proves ràpides i demostracions de funcions claus.
├── tests/
Tests unitaris i d’integració per a assegurar que les funcions d’S3 operin correctament.
└── requirements.txt
Llista de llibreries de Python necessàries (boto3, Flask).

Instal·lació i configuració del AWS CLI

Per començar i per tenir tots el requisits previs a engegar el projecte, hem de tenir un usuari IAM amb el privilegi AmazonS3FullAccess i torno a dir que és totalment desaconsellable com a pràctica comuna en un entorn de producció donar aquests privilegis a un usuari qualsevol ja que seria donar-li molt de poder. Però en aquest cas és només per fer el laboratori.

1

Entrem al nostre compte d’administrador IAM, un cop dins anem al servei IAM. Anem a Usuaris, on fem clic a “Crear persona”, li donem el nom boto3_user i NO li donem accés a la consola d’administració d’AWS.

2

Creem un nou grup. Fem clic a “Crear un grupo”, busquem la política, la marquem i afegim el nostre usuari.

3
5
6
7

Ja creat, seleccionem boto3_user i anem a la pestanya on diu “Credenciales de seguridad”, aquesta és la part on aconseguirem la clau d’accés per entrar desde la CLI.

8
9

Anem a “Claves de acceso”, creem la clau d’accés i d’aquesta forma tindrem la clau d’accés i una clau d’accés secreta, aquesta clau mai s’ha de compartir és un perill MORTAL, per tant molt de compte amb això. Censureu-la a les captures. Podries ser hackejat en qüestió de minuts.

10
11
Anem al nostre terminal. On ja tenim instal·lat aws. Escriurem aws configure i aquest ens demanarà les dos claus que hem creat, la regió que utilitzarem per defecte a aquest compte i el format de sortida predeterminat, que jo he posat JSON. Per veure si està tot correcte farem un aws s3 ls i deuries veure els buckets que tens al teu compte d’AWS. Fins aquí la primera part.

Comentaris

Entrades populars d'aquest blog

Projecte Flask + S3 #3: Del servidor local a S3

  Aquesta és la tercera part que parlo del projecte. Si encara no estàs seguint-lo, et recomano que miris les entrades anteriors dedicades al tema. A la primera part vam configurar l’entorn i decidir les pautes. A la segona , dedicàrem el seu temps a la importància de fer una bona classe S3Client i uns tests de pytest correctes. A l’hora de pensar en desenvolupar l’app , hem de canviar la manera de pensar. Passem d’una filosofia de backend en la que pensem únicament en Python - A una full-stack amb Flask. Què és un full-stack ? La seva traducció literal és una “pila complerta”, es refereix a quan en programació s’escriu un codi des de zero. I disposa de tres parts:  Front-end , la interfície d'usuari, és el que interactua directament des del seu dispositiu i en el nostre cas és HTML/Jinja2. Back-end , el cervell que s'encarrega de processar les peticions del Front-end, executar la lògica de l’aplicació, les autoritzacions i la connexió amb la base de dades. Base de dades , ...

Projecte Flask + S3 #2: El cervell i la xarxa de seguretat

  Aquesta és la segona part del projecte. Si has parat aqui et convido a consultar la primera entrada , on vam configurar l’entorn i vam establir els requisits previs. Ara passem a la implementació del codi. Objectiu d’avui/Introducció Documentar la creació del backend . Tot el desenvolupament del codi i que faré menció el podeu trobar al repositori corresponent al meu perfil de Git , o sigui que pots anar directament allà o obrir-lo a una finestra mentre veus els comentaris que descric. No vull deixar-me a aquesta introducció la importància que ha tingut pel bon i correcte desenvolupament del codi:  La documentació oficial d’ Amazon Web Services de Boto3  i les seves guies de millors pràctiques, per exemple . La Classe S3Client i la seva importància La finalitat de crear una classe S3Client com a façana/embolcall(més conegut com a Wrapper) és que amaga tota la complexitat de boto3. Faig un parèntesi, diguem que:  Estem creant "un embolcall dins d’un altre embol...

Droidian, cap a l'ordinador a la butxaca o no

  Al nostre dia a dia, poc ens parem a pensar en un company que ens fa la vida més fàcil , ens facilita l'accés a la informació, ens connecta amb els amics locals i d'arreu del món. Hi podem escoltar música, el podem utilitzar de GPS, hi podem editar vídeos o fins i tot dibuixar-hi (tot i que encara no es gaire còmode), podem consultar les nostres pàgines web favorites, aprendre nous idiomes... Si ens hi fixem, encara podem seguir dient més sobre els smartphones. En les seves característiques negatives podem trobar addiccions, estimulacions constants, desconnexió del món real , control sobre nosaltres i de la nostra privacitat. Potser estic fent una introducció massa llarga únicament per descriure i per posar en valor el hardware que tenen aquests petits dispositius. Si parlem d'hardware (o de maquinari) i comparem els primers models amb els dels últims 5 anys, ja estem parlant de supercomputadores . Sense anar més lluny, fa uns pocs mesos, va sortir al mercat el Macbook Ne...