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 , ...

A la vigesimoséptima, va la vencida

  Ayer sentía que estaba bien con Linux Mint pero a la vez lo veía demasiado cerrado y probé OpenSuse Leap(no me convenció) y hoy vuelvo a intentar instalar Fedora Workstation 42. Eh! Y Linux Mint lo recomiendo 100% para todo el mundo. Según yo mismo, la semana pasada no me funcionó Fedora por el tema de la BIOSLegacy. No le voy a dar más vueltas no es un portátil viejo pero por lo que sea ésta BIOS es la única manera que tiene de funcionar con Linux y un disco duro externo. En realidad no pasa nada (mientras nos quede Windows). Equisde que he estado rajando de Fedora cuando va de puta madre solo que no lo configure bien, no haría honor al nombre del blog sinó. De hecho empiezo a pensar que a lo mejor el UEFI sí funcionaría pero la lié al instalar, de momento lo voy a dejar así con MBR. Bof, empecé por la mañana y todo bien, mi error ha sido al querer instalarle los drivers de Nvidia, ha tenido un conflicto con Nouveau. A veces es mejor dejar las cosas como están. Si fuera mi único...

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...