Salta al contingut principal

Projecte Flask + S3 #4: El MEU gestor S3(definitiu)


Començo donant les gràcies a les coses bones de l’any passat i les que no han sigut tan bones però que m’han fet veure el món des d'un altre punt de vista. I pels que voleu fer del món un de millor i de més segur, doncs et desitjo també el mateix, que compleixis els teus objectius i que res t’aturi. Bon any nou 2026.

Vull finalitzar aquesta serie d’entrades al meu bloc sobre el projecte que vaig començar i que vas veure des del primer dia com es desenvolupa. Com ja saps, disposes de tota la resta aquí(Per ordre):
-Projecte Flask + S3: De 0 a connectat/ Preparació de l’entorn i requisits previs.
-Projecte Flask + S3 #2: El cervell i la xarxa de seguretat/ Importància de la classe S3 i de les proves de funcionament.(Pytest)
-Projecte Flask + S3 #3: Del servidor local a S3/ Blueprints, connexió amb AWS S3, seguretat de pujada al bucket, html de Flask i templates.

Arquitectura

Quan miro el projecte ja acabat veig 3 capes que conformen un engranatge: la capa Client, la Service i la Flask.
M’ha agradat posar-me amb aquest repte per què m’he adonat que he pogut passar de intentar entendre com funcionava Python a veure que sóc capaç de construir, això és molt més avançat que el que feia mesos abans.
  • Capa Client: La que parla llenguatge d’Amazon(boto3), en el cas que un dia Amazon deixes de parlar de la mateixa manera, hauriem de venir a aquesta capa. De fet, ho tinc tot pensat per treballar d’aquesta manera perquè és actualment on estic certificat, però també hi ha altres serveis similars com Azure de Microsoft o Google Cloud. En el cas que tinguem una aplicació i la volguessim migrar aquesta seria la part a canviar.
  • Capa Service: Decideix la lògica, on especifiquem la mida dels arxius que poden entrar, que siguin noms segurs… No parla amb Amazon directament sinó que pren decisions.
  • Capa Flask: La que rep l’usuari, rep fitxers i mostra missatges senzills. Aquesta només es comunica amb l’usuari.
Una de les tantes bones decisions que he anat aprenent i prenent és que he aconseguit dividir correctament el projecte, si no ho hagués fet d’aquesta manera, seria com intentar moure un mur de formigó, però connectant-lo amb ara que ha vingut el Nadal i m’han caigut unes figures de LEGO havent construit aquestes capes ha sigut com si construissim una figura d’aquestes, on les peces encaixen correctament.

Eficiència

Aquesta modularitat no és només estètica, ens permet ser eficients. Aquí és on podem parlar d’una altra decisió important: he fet que els arxius es pugin directament, l’arxiu passa per la RAM però no es queda ocupant al disc al servidor. És el que vam parlar de l’upload_fileobj.

Seguretat no visible

He pensat també amb molta cura de la seguretat, quan “construeixo” és una de les característiques que m’agrada aturar-m’hi més. Pensar en què podria sortir malament, com he comentat abans: Establir noms nets, IDs que siguin únics i que no creïn conflictes emprant UUID, que siguin d’un tipus d’extensió: jpg, png, txt… i determinant la grandària en aquest cas un màxim de 3 MB per arxiu. Totes aquestes mesures tot i ser invisibles són importants.

Ara tinc un control total des de l’aplicació: puc llistar, esborrar, descarregar i crear nous buckets(contenidors), amb un únic clic.

Si t’ha agradat l’explicació sobre el gestor o vols provar a fer el teu propi, et convido a fer un cop d’ull al codi del meu repositori. Qualsevol feedback és benvingut!

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