


Von Docker zu Lambda: Die Reise eines AWS-Administrators in Python-Anwendungen
Von Python-Skripten zu serverlosem AWS: Meine Investment-Portfolio-Reise
Ich begann mit einfachen Python-Skripten für die AWS-Automatisierung und entwickelte mich nach und nach zu einem komplexeren Projekt. Vor drei Monaten verstand ich Metaklassen kaum; Jetzt habe ich einen vollwertigen Anlageportfoliomanager aufgebaut.
Meine Reise
Die jahrelange Verwendung von Python für die AWS-Automatisierung (einschließlich des berüchtigten „Alles-macht“-Skripts) hat mich dazu gebracht, eine richtige Anwendung zu erstellen. Durch die Nutzung meiner früheren Skripte, Stack Overflow und Claudes KI-Unterstützung habe ich endlich die Prinzipien der Softwareentwicklung verstanden.
App-Screenshot (Startdaten, keine tatsächlichen Investitionen).
Ich hatte keine Lust mehr auf manuelle Excel-Tabellenaktualisierungen für meine Anlageportfolios und habe den Prozess automatisiert. Diese Python-Anwendung verwaltet Portfolios, verfolgt Transaktionen, verarbeitet Dividenden und aktualisiert sogar Preise automatisch. Anfangs lief es wunderbar in Docker auf meinem Heimserver (Flask-Backend, React-Frontend, SQLite-Datenbank).
Das Rätsel „Hobby wird zum Job“
Die Ausführung auf meinem Heimserver fühlte sich ineffizient an. Als AWS-Experte erschien mir die Verwaltung von Containern auf meiner Hardware kontraintuitiv. Die Lösung schien offensichtlich: ECS. Ich hatte bereits die docker-compose
-Datei:
<code>services: backend: build: ./backend container_name: investment-portfolio-backend environment: - DB_DIR=/data/db - LOG_DIR=/data/logs - DOMAIN=${DOMAIN:-localhost} volumes: - /path/to/your/data:/data networks: - app-network frontend: build: context: ./frontend args: - DOMAIN=${DOMAIN:-localhost} - USE_HTTPS=${USE_HTTPS:-false} container_name: investment-portfolio-frontend environment: - DOMAIN=${DOMAIN:-localhost} - USE_HTTPS=${USE_HTTPS:-false} ports: - "80:80" depends_on: - backend networks: - app-network</code>
Die Sichtweise eines AWS-Architekten (und der Preisrechner) deuteten jedoch auf einen serverlosen Ansatz hin:
- Tägliche Preisaktualisierungen und seltener Zugriff empfehlen, 24/7-Container zu vermeiden.
- Statische Frontend-Dateien waren ideal für das S3-Website-Hosting.
- API Gateway und Lambda würden API-Aufrufe verarbeiten.
- Aurora Serverless eignete sich für die relationalen Daten.
- DynamoDB konnte den Preisverlauf speichern (obwohl ich dieses Stadium noch nicht erreicht habe).
Das führte mich in das serverlose Kaninchenloch. Ich hatte bereits Erfahrung ohne Server – ein Temperaturverfolgungsprojekt mit meiner Frau, bei dem ich KNMI-Daten verwendete und eine farbcodierte Tabelle für ein Bastelprojekt erstellte.
<code>| Date | Min.Temp | Min.Kleur | Max.Temp | Max.Kleur | ---------------------------------------------------------------- | 2023-03-01 | -4.1°C | darkblue | 7.1°C | lightblue | | 2023-03-02 | 1.3°C | blue | 6.8°C | lightblue | ...</code>
Dieses Projekt lief lokal oder über Lambda/API Gateway unter Verwendung von Datumsparametern. Die Skalierung auf eine vollständige Flask-Anwendung mit SQLAlchemy, Hintergrundjobs und komplexen Beziehungen erwies sich als Herausforderung.
Der serverlose Reiz
Meine Containeranwendung funktionierte gut, aber die Anziehungskraft serverloser Dienste war groß. Das Potenzial für automatische Skalierung und die Eliminierung der Containerverwaltung waren verlockend.
Also habe ich meine Anwendung für eine serverlose Umgebung umgestaltet. Das ursprüngliche Projekt dauerte zwei Monate; Das wäre ein Kinderspiel... zumindest dachte ich das.
Die Datenbankentscheidung
Die Einschränkungen von SQLite mit Lambda veranlassten mich, PostgreSQL Aurora Serverless in Betracht zu ziehen, um die Kompatibilität mit meinen SQLAlchemy-Kenntnissen aufrechtzuerhalten. Ich habe einen Dual-Handler erstellt:
<code>services: backend: build: ./backend container_name: investment-portfolio-backend environment: - DB_DIR=/data/db - LOG_DIR=/data/logs - DOMAIN=${DOMAIN:-localhost} volumes: - /path/to/your/data:/data networks: - app-network frontend: build: context: ./frontend args: - DOMAIN=${DOMAIN:-localhost} - USE_HTTPS=${USE_HTTPS:-false} container_name: investment-portfolio-frontend environment: - DOMAIN=${DOMAIN:-localhost} - USE_HTTPS=${USE_HTTPS:-false} ports: - "80:80" depends_on: - backend networks: - app-network</code>
Die Lambda-Lernkurve
Die Konvertierung meiner Flask-Anwendung in Lambda-Funktionen war komplexer als erwartet. Mein erster Versuch war ungeschickt:
<code>| Date | Min.Temp | Min.Kleur | Max.Temp | Max.Kleur | ---------------------------------------------------------------- | 2023-03-01 | -4.1°C | darkblue | 7.1°C | lightblue | | 2023-03-02 | 1.3°C | blue | 6.8°C | lightblue | ...</code>
Um die Wartbarkeit zu verbessern, habe ich einen Dekorator erstellt:
<code>@contextmanager def db_session(): # ... (code for environment-aware database session management) ...</code>
Diese verbesserte Lambda-Funktionsstruktur:
<code># ... (initial, inefficient Lambda handler code) ...</code>
Dadurch wurden jedoch die ursprünglichen Flask-Routen unterbrochen. Ein neuer Dekorator ermöglichte eine doppelte Funktionalität:
<code>def lambda_response(func): # ... (decorator for cleaner Lambda responses) ...</code>
Unterstützende Funktionen stellten konsistente Antworten sicher:
<code>@lambda_response def get_portfolios(event, context): # ... (simplified Lambda function) ...</code>
Dies ermöglichte die Verwendung derselben Routen für Flask und Lambda:
<code>def dual_handler(route_path, methods=None): # ... (decorator for both Flask routes and Lambda handlers) ...</code>
Frontend-Einfachheit
Das Frontend war unkompliziert. Das statische S3-Website-Hosting und CloudFront sorgten für eine einfache Bereitstellung. Ein einfaches Skript hat das Frontend auf S3 hochgeladen und den CloudFront-Cache ungültig gemacht:
<code>def create_lambda_response(flask_response): # ... (function to convert Flask response to Lambda response format) ... def create_flask_request(event): # ... (function to convert Lambda event to Flask request) ...</code>
Das Ergebnis
Nach wochenlanger Arbeit war meine Anwendung serverlos. Obwohl ich es aus Sicherheitsgründen nicht online halte, habe ich wertvolle Lektionen gelernt:
- Pythons Fähigkeiten gehen über die Skripterstellung hinaus.
- Das kostenlose AWS-Kontingent ist für die Entwicklung von unschätzbarem Wert.
- CloudWatch-Protokolle sind für das Debuggen unerlässlich.
- Der „richtige“ Weg ist nicht immer der AWS-Weg.
Würde ich das wiederholen? Wahrscheinlich nicht. Aber die Reise hat sich gelohnt und mir etwas über Python und die Dual-Stack-Entwicklung beigebracht. Mein Anlageportfoliomanager läuft jetzt sicher in meinem privaten Netzwerk.
Das obige ist der detaillierte Inhalt vonVon Docker zu Lambda: Die Reise eines AWS-Administrators in Python-Anwendungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Python ist leichter zu lernen und zu verwenden, während C leistungsfähiger, aber komplexer ist. 1. Python -Syntax ist prägnant und für Anfänger geeignet. Durch die dynamische Tippen und die automatische Speicherverwaltung können Sie die Verwendung einfach zu verwenden, kann jedoch zur Laufzeitfehler führen. 2.C bietet Steuerung und erweiterte Funktionen auf niedrigem Niveau, geeignet für Hochleistungsanwendungen, hat jedoch einen hohen Lernschwellenwert und erfordert manuellem Speicher und Typensicherheitsmanagement.

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

Python ist in der Entwicklungseffizienz besser als C, aber C ist in der Ausführungsleistung höher. 1. Pythons prägnante Syntax und reiche Bibliotheken verbessern die Entwicklungseffizienz. 2. Die Kompilierungsmerkmale von Compilation und die Hardwarekontrolle verbessern die Ausführungsleistung. Bei einer Auswahl müssen Sie die Entwicklungsgeschwindigkeit und die Ausführungseffizienz basierend auf den Projektanforderungen abwägen.

Ist es genug, um Python für zwei Stunden am Tag zu lernen? Es hängt von Ihren Zielen und Lernmethoden ab. 1) Entwickeln Sie einen klaren Lernplan, 2) Wählen Sie geeignete Lernressourcen und -methoden aus, 3) praktizieren und prüfen und konsolidieren Sie praktische Praxis und Überprüfung und konsolidieren Sie und Sie können die Grundkenntnisse und die erweiterten Funktionen von Python während dieser Zeit nach und nach beherrschen.

PythonlistsarePartThestandardlibrary, whilearraysarenot.listarebuilt-in, vielseitig und UNDUSEDFORSPORINGECollections, während dieArrayRay-thearrayModulei und loses und loses und losesaluseduetolimitedFunctionality.

Python und C haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1) Python ist aufgrund seiner prägnanten Syntax und der dynamischen Typisierung für die schnelle Entwicklung und Datenverarbeitung geeignet. 2) C ist aufgrund seiner statischen Tipp- und manuellen Speicherverwaltung für hohe Leistung und Systemprogrammierung geeignet.

Python zeichnet sich in Automatisierung, Skript und Aufgabenverwaltung aus. 1) Automatisierung: Die Sicherungssicherung wird durch Standardbibliotheken wie OS und Shutil realisiert. 2) Skriptschreiben: Verwenden Sie die PSUTIL -Bibliothek, um die Systemressourcen zu überwachen. 3) Aufgabenverwaltung: Verwenden Sie die Zeitplanbibliothek, um Aufgaben zu planen. Die Benutzerfreundlichkeit von Python und die Unterstützung der reichhaltigen Bibliothek machen es zum bevorzugten Werkzeug in diesen Bereichen.

Zu den wichtigsten Anwendungen von Python in der Webentwicklung gehören die Verwendung von Django- und Flask -Frameworks, API -Entwicklung, Datenanalyse und Visualisierung, maschinelles Lernen und KI sowie Leistungsoptimierung. 1. Django und Flask Framework: Django eignet sich für die schnelle Entwicklung komplexer Anwendungen, und Flask eignet sich für kleine oder hochmobile Projekte. 2. API -Entwicklung: Verwenden Sie Flask oder Djangorestframework, um RESTFUFFUPI zu erstellen. 3. Datenanalyse und Visualisierung: Verwenden Sie Python, um Daten zu verarbeiten und über die Webschnittstelle anzuzeigen. 4. Maschinelles Lernen und KI: Python wird verwendet, um intelligente Webanwendungen zu erstellen. 5. Leistungsoptimierung: optimiert durch asynchrones Programmieren, Caching und Code
