Bei OTTO standen wir vor mehreren Herausforderungen, um AWS CloudFormation StackSets at Scale zu betreiben. Wir müssen mehrere hundert AWS-Konten für unsere Produktteams verwalten und dabei den Spagat zwischen Agilität und Kontrolle schaffen.
Bei dieser Größenordnung kann der Betrieb viel Zeit in Anspruch nehmen, da es mehrere operative Aufgaben gibt, die wir erledigen müssen, wenn AWS-Konten die AWS-Organisation verlassen oder Teams das AWS-Konto löschen, StackSets-Instanzen verschoben werden, weil nicht alle für die Compliance erforderlichen Ressourcen gesichert werden können (SCP-Beschränkungen), bestehende AWS-Konten der AWS-Organisation beitreten und alle obligatorischen StackSets bereitgestellt werden müssen, und manuelle Schritte auf ein Minimum reduziert werden sollten. Darüber hinaus gibt es im Service selbst keine Funktion, um sich einen Überblick über den Status der getriebenen Instanzen und den allgemeinen Zustand des StackSets und der Compliance zu verschaffen.
Das Cloud-Kompetenzzentrum der OTTO IT, auch bekannt als das Governance at Scale (GAS) Team, entwickelte eine Lösung zur Selbstheilung von StackSets, die in das OTTO-Tooling-Ökosystem mit Confluence und Microsoft Teams integriert ist.
OTTO arbeitete mit globaldatanet zusammen, um seine Landing Zone einzurichten. globaldatanet ist ein preisgekrönter AWS Advanced Consulting Partner und langjähriger Cloud Solution Provider für OTTO und unterstützt das Team in den Bereichen Cloud-Sicherheit und GAS. Ihr Fokus auf den Aufbau von Cloud-nativen Lösungen mit Serverless unterstützte innerhalb von 5 Jahren über 100 Unternehmen bei der Entwicklung und Innovation von Produkten und Dienstleistungen in der Cloud.
In diesem Beitrag zeigen wir euch, wie ihr mithilfe von AWS StepFunctions eine vollautomatische Selbstheilung auf StackSets auf Unternehmensebene implementieren und ein Dashboard erstellen, um einen Überblick über den Zustand und die Compliance eures StackSets zu erhalten und die Betriebszeit zu reduzieren.
Der Lösungsworkflow umfasst die folgenden Schritte:
• Das Tagging-Konzept für StackSets
• Automatisches Erstellen der StackSets-Konfiguration im SSM Parameter Store
• Implementierung der StepFunction für StackSet Self-Healing
Schauen wir uns an, wie das funktioniert.
Die folgenden Voraussetzungen sind notwendig, um den Inhalt dieses Beitrags zu verstehen:
Die folgende Architektur zeigt die gesamte Lösung der Self Healing StackSets:
Abbildung 1: Architektur einer vollautomatischen Self Healing Lösung mit Integration in Confluence
Die Lösung benötigt eine JSON-Datei im AWS-Parameter-Store. Am einfachsten ist es, diese automatisch auf Basis der StackSet-Konfigurationen und der dort vergebenen Tags zu erstellen. Darauf gehen wir im nächsten Abschnitt des Artikels StackSet-Konfiguration automatisch erstellen Parameter Store näher ein. Im Folgenden beschreiben wir, welche Tags wir in unser StackSet eingeführt haben und wofür wir diese Tags benötigen.
⚠️ AWS-Tags erlauben keine Kommas im Wert, daher ":" als Trennzeichen für Arrays
Key | Value | Result | Example |
---|---|---|---|
antidependson | StackSet Name | antidependson marks stacksets which collide with each other. | MYSTACKSET |
dependson | [List of StackSet Names] | List of Stacksets that need to be rolled out before deploying this stackset (e.g. Enable Config before Activate Config Rules). NOTE : Please reduce to only one dependson-stackset for now. Form "chains" for multi-dependencies. | MY-STACKSET1:MYSTACKSET2 |
mandatory | true or false | The stackset instances must be present on all AWS accounts | true |
selfhealing | true or false | StackSet can be healed via Delete & Redeploy (exception e.g. IDP roles) - Parameter Overwrites will be cached. | true |
region | [Regions] | List of Regions in which the stackset instances are to be deployed | eu-west-1:eu-central-1:us-east-1 |
Die automatische Generierung der Stackset-Konfiguration über JSON im ParameterStore ist ein vielseitiges Hilfsmittel:
• Die manuelle Konfiguration eines JSON-Dokuments entfällt
• Sicherstellen, dass die Account-Automaten wissen, was sie in welcher Reihenfolge einsetzen sollen
• Unterstützung der selbstheilenden StepFunction über die zu erwartende Einrichtung der Member-Accounts
Der für diese Aufgabe zuständige Lambda wird über eine Events-Rule aufgerufen:
Immer dann, wenn eine Stackset-Operation mit dem Status "succeeded" abgeschlossen wurde.
Das liegt daran, dass die Tags auf einem Stackset Teil des Stackset sind, nicht zusätzliche Elemente, die ein Stackset beschreiben, daher führt eine Änderung der Tags immer zu einer Stackset-Update-Operation.
In Bezug auf die Informatik ist Lambda recht interessant, da das primäre Problem darin bestand, einen nicht gewichteten Baum auf der Grundlage der Tags "dependson" und "antidependson" zu erstellen und dann eine geordnete eindimensionale Liste zu kompilieren, wie beim guten alten "travelling salesmen"-Problem.
AWS Step Functions ist ein Cloud-Service, mit dem ihr die Komponenten von verteilten Anwendungen und Microservices mithilfe visueller Workflows koordinieren können. Damit könnt ihr die Ausführung komplexer Prozesse und Aufgaben über mehrere AWS-Services hinweg erstellen und automatisieren, indem ihr eine visuelle Schnittstelle zur Definition und Ausführung eures Workflows verwendet. Da die Self Healing Solutions einen komplexen Workflow benötigen, haben wir uns entschieden, Step Functions für diesen Usecase zu verwenden. Im Folgenden erklären wir Ihnen den Workflow der Selbstheilung.
Abbildung 2: StepFunction Workflow
Während der Entwicklung der Lösung stießen wir auf mehrere Einschränkungen. Hier sind unsere Erkenntnisse:
🚨 StackSets Instanzoperationen: Die maximale Anzahl von Stack-Instanzen über alle StackSets hinweg, auf denen ihr in jeder Region gleichzeitig Operationen ausführen könnt, ist pro Administratorkonto auf 10.000 Operationen begrenzt.
✅ Wir haben einen Zähler implementiert, um die laufenden StackSets-Operationen zu zählen, außerdem fangen wir auch die Ausnahme von CloudFormation ab und warten einige Sekunden, um die Operation erneut zu versuchen.
🚨 Parameter Overwrites Caching: Beim Entfernen einer gedrifteten StackSet-Instanz mit Parameter Overwrite gehen die einzelnen Parameter der Instanz verloren.
✅ Vor dem Löschen der gedrifteten StackSet Instance werden die Parameter Overwrites gecached und die StackSet Instance nach erfolgreichem Löschen wieder mit den gecachten Parameter Overwrites bereitgestellt.
🚨 AWS Step Functions Payload Größe: AWS Step Functions unterstützt Payload-Größen bis zu 256KB. Für unsere Lösung benötigen wir mehr Payloads zwischen den States, insbesondere wenn wir unser Log oder die gleichzeitigen Parameter Overwrites pro StackSet weitergeben wollen.
✅ Wir speichern unsere Zustände in einem S3-Bucket, um den Zustand zu übergeben. Am Ende der Ausführung löschen wir den Status aus S3, um die nächste Step Function Ausführung nicht mit einem falschen Status zu beeinflussen.
Nach jeder Ausführung der StackSet Health StepFunction möchten wir unser GAS-Team über die während des vorherigen Laufs durchgeführten Aktionen informieren. Daher haben wir eine Teams-Benachrichtigung implementiert, die eine Statusaktualisierung, einen Link zum generierten Dashboard und einen Link zur Protokolldatei enthält.
Der folgende Screenshot veranschaulicht ein Beispiel für eine Teams-Benachrichtigung. Sie bietet einen zusammenfassenden Bericht und verweist auf das Dashboard und die Protokolldatei für weitere Details.
Abbildung 3: Status Updates über MS Teams
Unser StackSet Health Dashboard ist eine einfache HTML-Datei, die über eine Lambda-Funktion erzeugt, in S3 gespeichert und über einen CloudFrount verteilt wird. Ihr könnt dieses Dashboard in euer Confluence oder jedes andere interne Wiki integrieren. Dieses Dashboard wird über eine CloudFormation Funktion gesichert - zusätzlich könnt ihr auch eine Firewall hinzufügen, um den Zugriff auf eine bestimmte CIDR oder geographische Region zu beschränken und den Zugriff von Dritten zu verhindern. Der folgende Screenshot zeigt ein Beispiel für den Gesamtstatus von StackSet Health für eine ganze AWS-Organisation.
Abbildung 4: Dashboard
In diesem Beitrag haben wir eine Lösung zum automatischen Heilen von AWS CloudFormation StackSets im großen Maßstab vorgestellt. Durch die Implementierung dieser Lösung konnten wir den manuellen Aufwand für StackSet-Bereinigungsvorgänge um 4 Stunden pro Woche reduzieren, die Gesamtzuverlässigkeit unserer StackSets verbessern, die Compliance in der Organisation erhöhen und einen tagesaktuellen Überblick über alle StackSet-Instanzen mithilfe der Dashboards erhalten. Zusammenfassend lässt sich sagen, dass die selbstheilende CloudFormation StackSets-Lösung Automatisierung, Überwachung und Selbstwiederherstellungsfunktionen kombiniert, um ein robustes und widerstandsfähiges System für StackSets bereitzustellen.
Möchtest du Teil des Teams werden?
We have received your feedback.