Konzept für eine Webapplikation - wo muss was hin?

Django, Flask, Bottle, WSGI, CGI…
Antworten
sokakp
User
Beiträge: 3
Registriert: Montag 21. Juni 2021, 16:56

Hallo,

Ich habe Grundkenntnisse in DS mit Python und versuche jetzt das erste Mal eine Anwendung zu bauen und brauche ein bisschen Rat:
- welche Infrastruktur ich auf AWS wählen soll
- und wie ich die Anwendung strukturieren soll
- und wo was stattfinden soll?

Den Code kann ich (hoffentlich) selbst entwickeln/googeln :)

Was soll bei der Anwendung passieren:
1. Ein Benutzer gibt Werte in ein Formular auf einer Website ein und sendet diese Daten irgendwo hin, wo die Anwendung die Werte verarbeiten soll. (im Moment werden die Daten per Email weitergesendet)
2. Die Werte/Daten müssen irgendwo empfangen werden und eine automatische Verarbeitung soll starten: neue Werte berechnen, get Methode für eine externe API
3. Alle Werte in eine Datenbank kopieren
4. Werte in ein pdf Formular einfügen und per Mail versenden

Ich hader gerade mit der Struktur bei dieser Anwendung und wo und mit welchem Tech-Stack, die applikation was machen muss?

Danke für eure Hilfe! :)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

- welche Infrastruktur ich auf AWS wählen soll
Die AWS Preisgestaltung ist unglaublich komplex und bietet keine brauchbaren Mechanismen um Kosten in einem bestimmten Rahmen zu halten. Das führt dazu dass AWS einfach mal auszuprobieren nicht ganz unproblematisch ist, wenn man es nicht mit Jemandem macht der sich auskennt.

Auch wenn ich AWS beruflich nutze würde ich für kleine private Projekte oder zum lernen doch eher was nutzen wo man einfach eine feste Summe zahlt und der Anbieter ggfs. abschaltet wenn man zu viele Resourcen verbraucht.
sokakp
User
Beiträge: 3
Registriert: Montag 21. Juni 2021, 16:56

Hi,

vielen Dank für deine Antwort.

Es wird nicht viele Anfragen geben und die Berechungen sind wirklich sehr simpel.

Ich wollte gerne erstmal den Code schreiben und einer kostenlosen Ressource und testen ob das ganze überhaupt techisch funktioniert und Menschen an dieser Berechnung interessiert sind.

Ich dachte AWS wäre vorteilhaft, weil es "alles kann/Verfügbar" hat und ich leider nur in Python schreiben kann.
sokakp
User
Beiträge: 3
Registriert: Montag 21. Juni 2021, 16:56

In einem anderen Forum hatte ich auch folgende Antwort erhalten:
" I would strongly recommend you to use AWS EC2 instance to host your application, NGNIX as web server, postgress as database and most importantly Django as the webframe work, you should have the user fill the require data in form and send that form directly to the back end server which can then save it directly to your database "

Das klang erstmal ganz gut, aber ich weiß noch nicht wie ich das verbinde.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du noch keine Erfahrung mit Webprogrammierung hast, dann vergiss erst einmal wie Du das irgendwo hostest, sondern konzentriere Dich darauf, das lokal bei Dir zum Laufen zu bringen.
Django kann ein guter Einstieg sein, weil es ein gutes Tutorial hat. Das würde ich an Deiner Stelle als erstes durcharbeiten. Wenn dann noch konkrete Fragen da sind, kannst Du sie hier gerne stellen.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

bevor du dich mit dem Hoster beschäftigst solltest du doch vielleicht erstmal die Software festlegen, die du nutzt...

Wäre Django + SQL Datenbank denn eine Option für dich? Oder hast du Ansprüche, die sich mit Django schlecht abdecken lassen und du brauchst ein spezialisiertes Framework oder eine andere Art von DB?

Ansonsten ist Django eine gute Wahl, weil das "batteries included" ist, sehr gut dokumentiert ist und es auch viele Leute gibt, die das nutzen. Sprich: du bekommst bei Problemen in der Regel schnell Hilfe.

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

sokakp hat geschrieben: Montag 21. Juni 2021, 21:37 In einem anderen Forum hatte ich auch folgende Antwort erhalten:
" I would strongly recommend you to use AWS EC2 instance to host your application, NGNIX as web server, postgress as database and most importantly Django as the webframe work, you should have the user fill the require data in form and send that form directly to the back end server which can then save it directly to your database "
Ich erklär mal was dass konkret bedeutet. Als Einstieg ist es vielleicht sinnvoll zu verstehen was EC2 Instanzen sind und was man da erwarten kann und sollte.
Amazon Compute Service Level Agreement hat geschrieben: Single EC2 Instances
AWS will use commercially reasonable efforts to ensure that each individual Amazon EC2 instance (“Single EC2 Instance”) has an Hourly Uptime Percentage of at least 90% of the time in which that Single EC2 Instance is deployed during each clock hour (the “Hourly Commitment”). In the event any Single EC2 Instance does not meet the Hourly Commitment, you will not be charged for that instance hour of Single EC2 Instance usage.
Also innerhalb einer Stunde soll die mindestens 54 Minuten laufen. Wenn die Instanz die restlichen 6 Minuten lang nicht läuft ist aus AWS Sicht noch alles in Ordnung.

Die Konsequenz ist dass du eigentlich mindestens 2 Instanzen brauchst, es sei den du kannst mit dem AWS SLA auch für deine Anwendung leben. Außerdem möchtest du Instanzen ersetzen wenn sie nicht mehr laufen. Dafür brauchst du eine Autoscaling Group (ASG). Sinnvollerweise hat man auch einen Load Balancer Traffic auf deine funktionierenden Instanzen verteilt und TLS terminiert.

Nächstes Problem ist dass du ja nicht nur deine Instanzen brauchst sondern auch Postgres. Das heisst bei AWS RDS. Da hast du auch nochmal viele Möglichkeiten zur Konfiguration z.B. bei Backup und Restore.

Deine RDS Datenbank möchtest du natürlich auch von deinen EC2 Instanzen erreichen ohne dass der Rest der Welt es auch kann. Das bringt uns zum Thema Netzwerke. Dafür ist es sinnvoll eine VPC aufzusetzen in der deine EC2 Instanzen und die RDS Datenbank läuft und dann setzt du Security Groups auf damit Traffic vom Load Balancer zu deinen EC2 Instanzen kommt und von deinen EC2 Instanzen zu RDS.

Weitere spannende Themen mit denen du dich beschäftigen solltest sind: EBS und ggfs. EBS Snapshots. S3 als Object Store für Backups und Dateien. SES um E-Mails zu verschicken, wo du auch Maßnahmen treffen musst um unerwünschte E-Mails und Spam zu verhindern. AWS hat da Erwartungen die du erfüllen musst, sonst erlaubt dir AWS nicht SES zum E-Mail Versand zu nutzen.

Das alles kostet natürlich Geld, machst du Fehler oder verstehst die Preise nicht auch vielleicht mehr als du gedacht hast. Außerdem hast du mehr als genug Flexibilität um Sicherheitsprobleme zu produzieren z.B. falls du HTTP Traffic zu den Instanzen erlaubst (am Load Balancer vorbei), falls du die Datenbank aus dem Internet erreichbar machst, falls du S3 Buckets falsch konfigurierst und plötzlich Daten öffentlich verfügbar sind (Gorillas hat da letztens erst gezeigt wie man es nicht macht). Dazu musst du dich damit beschäftigen wie du dies alles sinnvollerweise aufsetzt (manuell über AWS Console oder doch eher IaaC mit CloudFormation o.ä.), wie du Deployments machst wenn du deine Anwendung verändern willst usw.
Antworten