1
 
 
Profil
In deinem persönlichen Profilbereich kannst du den Status deiner Bewerbung einsehen, unvollständige Bewerbungen zwischenspeichern und aktuelle News und Events einsehen
10. Juli 2023

Self-healing StackSets auf Unternehmensebene

Worum geht es in dem Artikel?

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.

Voraussetzungen

Die folgenden Voraussetzungen sind notwendig, um den Inhalt dieses Beitrags zu verstehen:

Überblick über die Lösung

Die folgende Architektur zeigt die gesamte Lösung der Self Healing StackSets:

Figure 1: Architecture of fully-automated Self Healing Solution with integration to Confluence
Figure 1: Architecture of fully-automated Self Healing Solution with integration to Confluence

Abbildung 1: Architektur einer vollautomatischen Self Healing Lösung mit Integration in Confluence

Tagging Konzept für StackSets

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

KeyValueResultExample
antidependsonStackSet Nameantidependson 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
mandatorytrue or falseThe stackset instances must be present on all AWS accountstrue
selfhealingtrue or falseStackSet 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 deployedeu-west-1:eu-central-1:us-east-1

StackSet-Konfiguration im ParameterStore automatisch erstellen

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.

Implementierung von StepFunction für StackSet Self-Healing

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.

Figure 2:StepFunction Workflow
Figure 2:StepFunction Workflow

Abbildung 2: StepFunction Workflow

Funktionsweise

ƛ Serverlose Funktionen

  • StackSetInitCleanupLambda: Führt eine Suche durch, um StackSet-Instanzen von AWS-Konten zu identifizieren, die entweder nicht in der AWS-Organisation vorhanden sind oder auf AWS-Konten bereitgestellt werden, die ausgesetzt sind. Sobald sie identifiziert sind, werden diese Instanzen aus allen zugehörigen StackSets gelöscht.
  • MandatoryStackSetDeploymentLambda: Sucht nach fehlenden StackSets-Instanzen (die mit "mandatory = true" gekennzeichnet sind) und stellt diese Instanzen bereit
  • StackSetDriftDetectionLambda: Löst die Drift-Erkennung für alle StackSets aus
  • TriggerDriftStatusLambda: Prüft, ob die Drifterkennung für alle StackSets abgeschlossen ist
  • SearchStackSetInstanceToHealLambda: Sucht nach abgedrifteten StackSet-Instanzen von StackSets, die mit Selfhealing = true gekennzeichnet sind
  • StackSetCleanupLambda: Entfernt ungesunde StackSet-Instanzen und setzt sie neu ein. Parameterüberschreibungen werden zwischengespeichert, so dass die neu bereitgestellte Instanz die gleichen Einstellungen wie zuvor hat.
  • StatusPrepareHTMLLambda: Bereitet die HTML-Ausgabe des Dashboards für Confluence und die JSON-Protokolldatei des aktuellen StackSet-Gesundheitszustands vor.
  • TeamsBenachrichtigungLambda: Sendet eine Teams-Benachrichtigung, die eine Zusammenfassung enthält, um das GAS-Team nach jeder Ausführung zu benachrichtigen.
?!Entscheidungen

  • InitCleanup abgeschlossen: Prüft, ob alle unnötigen Instanzen entfernt wurden. Wenn nicht, löst StepFunction erneut die Funktion StackSetInitCleanupLambda aus.
  • MandatoryStackSetDeployment Complete: Prüft, ob alle obligatorischen Instanzen bereitgestellt wurden. Wenn nicht, löst StepFunction erneut die Funktion MandatoryStackSetDeploymentLambda aus.
  • StackSetDriftDetection Complete: Wartet, bis die StackSet Drift Detection für alle StackSets abgeschlossen ist.
  • Heilung abgeschlossen: Prüft, ob alle ungesunden Instanzen geheilt sind, andernfalls ruft StackSetCleanupLambda erneut auf.


Beschränkungen

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.

Dokumentation

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.

Figure 3: Documentation
Figure 3: Documentation

Abbildung 3: Status Updates über MS Teams

Dashboard

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.

Figure 4: Dashboard
Figure 4: Dashboard

Abbildung 4: Dashboard

Fazit

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?

2 Personen gefällt das

0Noch keine Kommentare

Dein Kommentar
Antwort auf:  Direkt auf das Thema antworten

Geschrieben von

Alexander Mannsfeld
Alexander Mannsfeld
Cloud Solution Architect
David Krohn
David Krohn
AWS Solution Architect @globaldatanet

Ähnliche Beiträge

We want to improve out content with your feedback.

How interesting is this blogpost?

We have received your feedback.

Cookies erlauben?

OTTO und drei Partner brauchen deine Einwilligung (Klick auf "OK") bei einzelnen Datennutzungen, um Informationen auf einem Gerät zu speichern und/oder abzurufen (IP-Adresse, Nutzer-ID, Browser-Informationen).
Die Datennutzung erfolgt für personalisierte Anzeigen und Inhalte, Anzeigen- und Inhaltsmessungen sowie um Erkenntnisse über Zielgruppen und Produktentwicklungen zu gewinnen. Mehr Infos zur Einwilligung gibt’s jederzeit hier. Mit Klick auf den Link "Cookies ablehnen" kannst du deine Einwilligung jederzeit ablehnen.

Datennutzungen

OTTO arbeitet mit Partnern zusammen, die von deinem Endgerät abgerufene Daten (Trackingdaten) auch zu eigenen Zwecken (z.B. Profilbildungen) / zu Zwecken Dritter verarbeiten. Vor diesem Hintergrund erfordert nicht nur die Erhebung der Trackingdaten, sondern auch deren Weiterverarbeitung durch diese Anbieter einer Einwilligung. Die Trackingdaten werden erst dann erhoben, wenn du auf den in dem Banner auf otto.de wiedergebenden Button „OK” klickst. Bei den Partnern handelt es sich um die folgenden Unternehmen:
Google Inc., Meta Platforms Ireland Limited, elbwalker GmbH
Weitere Informationen zu den Datenverarbeitungen durch diese Partner findest du in der Datenschutzerklärung auf otto.de/jobs. Die Informationen sind außerdem über einen Link in dem Banner abrufbar.