- Jede Entscheidung ist als Endorse (befürwortet) oder Regret (bereut) gekennzeichnet
Wahl von AWS
- AWS statt Google Cloud: Ich befürworte die Entscheidung für AWS. AWS ist stark auf Kunden fokussiert. Bei Google Cloud fühlt es sich an, als würde man sich auf Roboter und Automatisierung verlassen.
- EKS: Ich befürworte den Einsatz von EKS. EKS bietet eine tiefe Integration mit AWS-Services, und auch Kubernetes hat in vielerlei Hinsicht aufgeholt (z. B. Integration mit Route53 über externaldns).
- EKS Managed Add-ons: Ich bereue den Einsatz von EKS Managed Add-ons. Es war nötig, die Installation anzupassen, und nach dem Wechsel zu Helm-Charts war der Betrieb deutlich besser.
Datenbanken und Caching
- RDS: Ich befürworte den Einsatz von RDS. Daten sind der wichtigste Teil der Infrastruktur, und die Kosten für RDS sind es wert.
- Redis ElastiCache: Ich befürworte den Einsatz von Redis. Redis ist sowohl als Cache als auch für allgemeine Zwecke sehr effektiv.
- ECR: Ich befürworte den Umzug von quay.io zu ECR. ECR ist stabiler und die Rechteintegration ist deutlich tiefer.
Netzwerk und Support
- AWS VPN: Ich befürworte den Einsatz von AWS VPN. Das VPN ist sehr einfach einzurichten und zu verstehen. Für die Verwaltung des VPN-Zugangs wird Okta verwendet, was eine sehr gute Erfahrung bietet.
- AWS Premium Support: Ich bereue ihn. AWS Premium Support ist sehr teuer und lohnt sich nicht, wenn intern nicht gerade AWS-Wissen fehlt.
- Control Tower Account Factory for Terraform: Ich befürworte die Integration von AFT. Sie automatisiert die Kontoerstellung und hilft bei der Standardisierung von Tags.
Prozessautomatisierung
- Automatisierung von Postmortems mit einem Slack-Bot: Ich befürworte die Automatisierung des Postmortem-Prozesses. Sie hilft dabei, Menschen dazu zu bringen, Postmortems auch wirklich zu schreiben.
- Verwendung von Incident-Templates in PagerDuty: Ich befürworte die Nutzung von Templates bei Incidents. Durch die Flexibilität von Notion ist auch etwas Anpassung möglich.
- Regelmäßige Überprüfung von PagerDuty-Tickets: Ich befürworte die regelmäßige Überprüfung von Alarmkonfigurationen. So wird sichergestellt, dass auch weniger wichtige Alarme nicht ignoriert werden.
- Postmortem-Verwaltung in Datadog oder PagerDuty: Ich bereue die Nutzung eines integrierten Verwaltungstools für Postmortems. Bei beiden ist es schwer, den Postmortem-Prozess anzupassen. Ich halte ein leistungsfähiges Tool wie Notion für die bessere Wahl.
Sonstiges
- Monatliches Meeting zur Kostenverfolgung: Ich befürworte ein monatliches Meeting zur Überprüfung der SaaS-Kosten. So lässt sich prüfen, ob die Kosten angemessen sind und welche Maßnahmen nötig sind. In AWS werden Positionen nach Tags gruppiert und nach Konten getrennt. Die Empfehlung ist, nicht nur auf AWS zu schauen, sondern auf alle großen Ausgabenquellen des Unternehmens.
- Nicht mehr FaaS genutzt: Ich bereue, FaaS nicht stärker genutzt zu haben. Für GPU-Workloads gab es keine FaaS-Optionen, daher war ein vollständiger Einsatz nicht möglich. Viele CPU-Workloads hätten aber mit FaaS umgesetzt werden können. Ein weiterer versteckter Vorteil von Lambda ist, dass sich Kosten sehr einfach und mit hoher Genauigkeit nachverfolgen lassen.
- GitOps: Ich befürworte GitOps. Es wird für große Teile der Infrastruktur verwendet, und es wurde in Tooling investiert, das hilft, den Status von Deployments zu verstehen.
- Team-Effizienz priorisieren: Ich befürworte, die Effizienz des Teams zu priorisieren. Ich habe nie bereut, Zeit in Automatisierung oder Dokumentation investiert zu haben.
- Mehrere Anwendungen teilen sich eine Datenbank: Ich bereue, dass mehrere Anwendungen sich eine Datenbank teilen. Das hat zu verschiedenen Problemen geführt.
Einführung von SaaS
- Identity-Plattform spät eingeführt: Früher wurden Berechtigungen über Google Workspace vergeben, aber ich bereue, nicht früher eine Identity-Lösung wie Okta eingeführt zu haben. Okta ist gut integriert und hilft bei Sicherheits- und Compliance-Fragen.
- Notion: Ich befürworte Notion für Dokumentation. Notion war eine ausgezeichnete Wahl und deutlich einfacher zu nutzen als frühere Werkzeuge wie Wikis, Google Docs oder Confluence. Das Datenbankkonzept zur Organisation von Seiten ist nützlich.
- Slack: Ich befürworte Slack. Es ist als zentrales Kommunikationstool effektiv.
Entwicklungstools und Services
- Von JIRA zu Linear gewechselt: Ich befürworte Linear statt JIRA. JIRA ist meiner Meinung nach zu komplex und zu schwergewichtig.
- Terraform Cloud nicht genutzt: Ich bereue nicht, Terraform Cloud nicht eingesetzt zu haben, weil sich die Kosten nicht rechtfertigen ließen. Stattdessen wurde zu Atlantis gewechselt und die nötige Automatisierung in die CI/CD-Pipeline eingebaut.
- GitHub Actions für CI/CD: Ich befürworte GitHub Actions mehr oder weniger (Endorse-ish). Die Actions aus dem Marketplace und die Syntax sind einfach zu nutzen. Als Nachteil sehe ich die begrenzte Unterstützung für Self-hosted-Workflows.
Technologiewahl
- Datadog: Ich bereue den Einsatz von Datadog. Es ist sehr teuer, und das Kostenmodell ist für Kubernetes-Cluster und ein AI-Unternehmen ungeeignet.
- PagerDuty: Ich befürworte PagerDuty. Das Produkt ist gut und der Preis angemessen.
- Schema-Migrationen per Diff: Ich befürworte den Einsatz eines Tools für Schema-Migrationen bis zu einem gewissen Grad. Daten sind wichtig, und Schema-Migrationen können riskant sein.
- Ubuntu for dev servers: Ich befürworte Ubuntu für Entwicklungsserver. Es wird gut unterstützt und enthält die meisten benötigten Pakete.
- AppSmith: Ich befürworte AppSmith für die Prozessautomatisierung für interne Engineers. Es wird selbst gehostet und ist ausreichend zufriedenstellend. Anfangs wurde retool genutzt, um tiefere Integrationen zu prüfen, aber der Preis ließ sich damals für nur einige wenige Integrationen nicht rechtfertigen.
- helm: Ich befürworte Helm v3. Es gibt zwar Probleme bei der Bereitstellung von CRDs und bei der Schulung von Entwicklern, aber zum Paketieren und Ausrollen von Kubernetes-Objekten ist es gut genug.
- helm charts in ECR (oci): Ich befürworte das Speichern von Helm-Charts in einem OCI-Repository. Im Vergleich zur früheren Methode mit S3 und Plugins gibt es weniger Probleme.
- bazel: Bei bazel bin ich unsicher. Für das Deployment von Go-Services wirkt es überdimensioniert, und GitHub Actions ist für mehr Engineers leichter nutzbar.
- OpenTelemetry nicht genutzt: Ich bereue, Metriken direkt über die DataDog-API gesendet zu haben. Ich empfehle, von Anfang an OpenTelemetry zu verwenden.
- renovatebot statt dependencyabot gewählt: Ich bereue, nicht früher darüber nachgedacht zu haben, Abhängigkeiten aktuell zu halten. Renovatebot ist anpassbar, aber Konfiguration und Debugging sind komplex.
- Kubernetes: Ich befürworte Kubernetes. Es wird eine Möglichkeit gebraucht, langlebige Services zu hosten, und Kubernetes ist populär und funktioniert gut.
- Eigene IPs gekauft: Ich befürworte den Kauf eigener IP-Blöcke bei der Arbeit mit externen Partnern. Das hilft dabei, externen Partnern größere CIDR-Blöcke zum Whitelisting bereitzustellen.
- Flux als GitOps-Tool für k8s gewählt: Ich bereue nicht, Flux als GitOps-Tool für Kubernetes gewählt zu haben. Es war nötig, Tooling zu entwickeln, das hilft, den Deployment-Status zu verstehen.
- Karpenter for node management: Ich befürworte Karpenter bei der Nutzung von EKS. Es ist zuverlässiger und kosteneffizienter als andere Autoscaler.
- SealedSecrets genutzt: Ich bereue den Einsatz von SealedSecrets. Es ist für Entwickler komplex und man verliert die bestehende automatische Passwortrotation von AWS.
- ExternalSecrets genutzt: Ich befürworte ExternalSecrets zur Synchronisierung von Secrets von AWS -> Kubernetes. Es ist für Entwickler leichter verständlich und mit Terraform lassen sich Secrets in AWS einfach erzeugen oder aktualisieren.
- ExternalDNS genutzt: Ich befürworte ExternalDNS. Es synchronisiert DNS-Einträge von Kubernetes -> Route53 und hat in den letzten 4 Jahren kaum Probleme gemacht.
- cert-manager genutzt: Ich befürworte cert-manager für die Verwaltung von SSL-Zertifikaten. Für die Erstellung von Let's Encrypt-Zertifikaten ist es sehr intuitiv und problemlos.
- Bottlerocket for EKS: Ich bereue den Betrieb von EKS-Clustern mit Bottlerocket. Es gibt häufig Probleme mit dem Networking-CSI und das Debugging ist schwierig.
- Terraform statt CloudFormation gewählt: Ich befürworte Terraform. Es lässt sich leichter auf andere SaaS-Anbieter ausweiten und hat eine besser lesbare Syntax als CloudFormation.
- Keine codebasierte IaC-Lösung verwendet: Ich bereue das nicht. Terraform und CloudFormation nutzen Datendateien, während Pulumi oder CDK Infrastruktur als Code beschreiben. Die eher eingeschränkte Natur von Terraforms HCL hilft dabei, Komplexität zu reduzieren.
- Kein Service Mesh verwendet: Ich bereue das nicht. Service Meshes sind zwar cool, aber Unternehmen unterschätzen oft die Komplexität. Allgemein gilt für Infrastruktur: „Weniger ist besser“.
- Nginx-Load-Balancer für EKS Ingress: Ich bereue das nicht und befürworte Nginx. Es ist alt, aber stabil und bewährte Technik.
- homebrew for company scripts: Ich befürworte homebrew für die Verteilung von Unternehmensskripten. Es ist gut genug, um Skripte und Binärdateien sowohl an Linux- als auch an Mac-Nutzer zu verteilen.
- Go for services: Ich befürworte Go für Services. Neue Engineers können es leicht lernen und insgesamt ist es eine gute Wahl.
4 Kommentare
Ältere GeekNews-Artikel, die dazu sehenswert sind
Welche Tech-Stacks nutzt ihr als Ein-Personen-Entwicklerfirma?
Der Architektur-Stack eines technischen Ein-Personen-Startups
Der Tech-Stack von Healthchecks.io, einem Ein-Personen-SaaS
Werkzeugempfehlungen für Ein-Personen-SaaS-Entwickler
Der Tech-Stack eines Ein-Personen-Hardwareunternehmens von einer Frau
Ein Startup für 6 US-Dollar pro Jahr betreiben
Stack on a Budget - Entwicklung auf Basis des Free Tier
Ein Software-Startup mit minimalem Aufwand betreiben
Wie man mit 500.000 Won pro Monat (400 US-Dollar) 80 TB Traffic und 5 Mio. Pageviews verarbeitet
Sowohl der Artikel als auch die Kommentare sind voller wertvoller Inhalte.
Wow … das sind wirklich praktische Informationen, die man kaum irgendwo sonst findet.
Hacker-News-Kommentare
Die Mehrkosten für die Nutzung von RDS sind es wert
Es mag eine unpopuläre Meinung sein, dass Google Cloud besser als AWS ist, aber mit Google Cloud Run lassen sich Docker-Container wie im Traum in der Cloud ausführen. Die Servicenamen sind einfach, es gibt weniger wichtige Services als bei den komplexen Angeboten von AWS, und die UI ist intuitiver. Nachteile sind der Mangel an Community, dadurch weniger Tutorials, Schwierigkeiten, erfahrene Leute zu finden, und weniger Third-Party-Tools. Ich würde empfehlen, es auszuprobieren.
Die Nutzung von EC2 + ASG macht sehr viel Freude. Es ist konzeptionell einfach: Man startet ein Image in einer ASG und setzt Auto-Scaling-Richtlinien. Es gibt fast nichts, worüber man sich Sorgen machen muss. Im Gegensatz dazu ist die Nutzung von k8s immer eine große Sache. Man stellt ganze Teams zusammen, um k8s zu verwalten. Man führt Dutzende von k8s-Konzepten ein oder investiert Personenjahre in „Platform Engineering“, um diese Konzepte zu verstecken. Man veröffentlicht Richtlinien, SDKs und allerlei Validatoren, damit k8s „richtig“ genutzt werden kann. Trotzdem schreibt man Zehntausende Zeilen YAML und Code, um Operatoren zu implementieren. Manchmal frage ich mich, ob k8s nicht zu invasiv ist.
Meinungen zu SaaS-Produkten
Ich stelle mir vor, wie Entwickler aus den 90ern/00ern diese Liste lesen und von der Komplexität und den Begriffen verwirrt sind.
Interessanter Lesestoff, aber ich bin mir nicht sicher, ob die Person genug bereut, um darüber einen Blogpost zu schreiben.
Ich verspüre den Drang, zurückzugehen und damit zu experimentieren, alles auf einem einzigen gigantischen 100k-$-Server in einer Box laufen zu lassen.
Ich habe es geschafft, die Grundlagen von Kubernetes / EKS zu lernen, erwäge aber einen Wechsel zu ECS. Kubernetes ist für unsere Anforderungen zu komplex. Es lässt sich mit etwas wie CloudFormation nur schwer steuern. Die durch Add-ons bereitgestellten Load Balancer lassen sich außerhalb von Kubernetes nur schwer referenzieren. Das Logging von EKS Fargate nach Cloudwatch scheint selbst dann nicht zu funktionieren, wenn man der Dokumentation folgt. CPU-/Speichermetriken funktionieren nicht wie bei EKS EC2, und offenbar wird ADOT benötigt. Mit ECS habe ich die Umgebung in einem Zehntel der Zeit neu aufgebaut, und alles funktionierte gut.
Mir gefällt, wie dieser Beitrag geschrieben ist und was er enthält. Ich stimme einigen Entscheidungen und Empfehlungen nicht zu, aber selbst dann ist es großartig, die Begründungen zu lesen. Es wäre schön, wenn mehr ähnliche Beiträge veröffentlicht würden und man sie vergleichen könnte. Ich fühle mich inspiriert, selbst einen ähnlichen Beitrag zu schreiben.
Die Küchen-Spülbecken-Datenbank, die von allen benutzt wird, ist ein häufiges Problem, das sich aber immer wiederholt. Beim Wachstum wird sie zu erheblicher technischer Schuld und zu einem Performance-Flaschenhals. Mit einer Managed DB wie RDS kann man leicht separate DB-Cluster pro Kernanwendung betreiben.