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.