Mandanten-Onboarding in der SaaS-Architektur für das Silomodell mit C# und AWS CDK - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Mandanten-Onboarding in der SaaS-Architektur für das Silomodell mit C# und AWS CDK

Erstellt von Tabby Ward (AWS), Susmitha Reddy Gankidi () und Vijai Anand Ramalingam () AWS AWS

Code-Repository: Tennat Onboarding Silo

Umgebung: PoC oder Pilotprojekt

Technologien: Modernisierung; DevOps

Arbeitsaufwand: Open Source

AWSDienste: AWS CloudFormation; Amazon DynamoDB; Amazon DynamoDB DynamoDB-Streams; Lambda; AWS Amazon Gateway API

Übersicht

Software-as-a-Service (SaaS) -Anwendungen können mit einer Vielzahl unterschiedlicher Architekturmodelle erstellt werden. Das Silomodell bezieht sich auf eine Architektur, in der Mandanten dedizierte Ressourcen zur Verfügung gestellt werden.

SaaS-Anwendungen basieren auf einem reibungslosen Modell für die Einführung neuer Mandanten in ihre Umgebung. Dies erfordert häufig die Orchestrierung einer Reihe von Komponenten, um alle Elemente, die für die Erstellung eines neuen Mandanten erforderlich sind, erfolgreich bereitzustellen und zu konfigurieren. Dieser Prozess wird in der SaaS-Architektur als Mandanten-Onboarding bezeichnet. Das Onboarding sollte für jede SaaS-Umgebung vollständig automatisiert werden, indem Infrastruktur als Code in Ihrem Onboarding-Prozess verwendet wird.

Dieses Muster führt Sie durch ein Beispiel für die Erstellung eines Mandanten und die Bereitstellung einer Basisinfrastruktur für den Mandanten auf Amazon Web Services (AWS). Das Muster verwendet C# und das AWS Cloud Development Kit (AWSCDK).

Da dieses Muster einen Fakturierungsalarm auslöst, empfehlen wir, den Stack in der Region USA Ost (Nord-Virginia) oder US-East-1 bereitzustellen. AWS Weitere Informationen finden Sie in der AWS Dokumentation.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • AWSCDKverwendet AWS CloudFormation, sodass AWS CDK für Anwendungen CloudFormation Dienstkontingente gelten. Weitere Informationen finden Sie unter AWS CloudFormation Kontingente

  • Der CloudFormation Mandantenstapel wird mit einer CloudFormation Servicerolle infra-cloudformation-role mit Platzhalterzeichen für Aktionen (sns* undsqs*) erstellt, wobei die Ressourcen jedoch auf das tenant-cluster Präfix beschränkt sind. Evaluieren Sie diese Einstellung für einen produktiven Anwendungsfall und gewähren Sie nur den erforderlichen Zugriff auf diese Servicerolle. Die InfrastructureProvision Lambda-Funktion verwendet auch ein Platzhalterzeichen (cloudformation*), um den CloudFormation Stack bereitzustellen, wobei die Ressourcen jedoch auf das tenant-cluster Präfix beschränkt sind.

  • Der Docker-Build dieses Beispielcodes verwendet--platform=linux/amd64, um linux/amd64 basierte Images zu erzwingen. Dadurch soll sichergestellt werden, dass die endgültigen Bildartefakte für Lambda geeignet sind, das standardmäßig die x86-64-Architektur verwendet. Wenn Sie die Lambda-Zielarchitektur ändern müssen, stellen Sie sicher, dass Sie sowohl die Dockerfiles als auch die Codes ändern. AWS CDK Weitere Informationen finden Sie im Blogbeitrag Migration von AWS Lambda-Funktionen auf AWS ARM-basierte Graviton2-Prozessoren.

  • Beim Löschen des Stacks werden keine vom Stack generierten CloudWatch Protokolle (Protokollgruppen und Protokolle) bereinigt. Sie müssen die Protokolle manuell über die AWS Management Console Amazon CloudWatch Console oder über die bereinigenAPI.

Dieses Muster dient als Beispiel. Evaluieren Sie für den Einsatz in der Produktion die folgenden Konfigurationen und nehmen Sie je nach Ihren Geschäftsanforderungen Änderungen vor:

  • Der Einfachheit halber ist für den AWSSimple Storage Service (Amazon S3) -Bucket in diesem Beispiel die Versionierung nicht aktiviert. Evaluieren und aktualisieren Sie das Setup nach Bedarf.

  • In diesem Beispiel werden der Einfachheit halber Amazon API REST API Gateway-Endpunkte ohne Authentifizierung, Autorisierung oder Drosselung eingerichtet. Für den Produktionseinsatz empfehlen wir, das System in die Sicherheitsinfrastruktur des Unternehmens zu integrieren. Bewerten Sie diese Einstellung und fügen Sie bei Bedarf die erforderlichen Sicherheitseinstellungen hinzu.

  • Für dieses Beispiel mit einer Mandanteninfrastruktur haben Amazon Simple Notification Service (AmazonSNS) und Amazon Simple Queue Service (AmazonSQS) nur Mindestkonfigurationen. Der AWSKey Management Service (AWSKMS) für jeden Mandanten wird für Amazon CloudWatch - und SNS Amazon-Dienste im Konto geöffnet, um sie auf der Grundlage der AWSKMSSchlüsselrichtlinie in Anspruch zu nehmen. Das Setup ist nur ein Beispiel für einen Platzhalter. Passen Sie die Setups je nach Bedarf an Ihren geschäftlichen Anwendungsfall an.

  • Die gesamte Konfiguration, die unter anderem die Bereitstellung und Löschung von Mandanten im Backend umfasst, aber nicht API darauf beschränkt ist AWS CloudFormation, deckt nur den grundlegenden Happy-Path-Fall ab. Evaluieren und aktualisieren Sie das Setup mit der erforderlichen Wiederholungslogik, zusätzlicher Fehlerbehandlungslogik und Sicherheitslogik auf der Grundlage Ihrer Geschäftsanforderungen.

  • Der Beispielcode wurde mit up-to-date cdk-nag getestet, um zu überprüfen, ob zum Zeitpunkt der Erstellung dieses Artikels Richtlinien vorliegen. In future könnten neue Richtlinien durchgesetzt werden. Diese neuen Richtlinien erfordern möglicherweise, dass Sie den Stack anhand der Empfehlungen manuell ändern müssen, bevor der Stack bereitgestellt werden kann. Überprüfen Sie den vorhandenen Code, um sicherzustellen, dass er Ihren Geschäftsanforderungen entspricht.

  • Der Code verwendet die AWSCDK, um ein zufälliges Suffix zu generieren, anstatt sich auf statisch zugewiesene physische Namen für die meisten erstellten Ressourcen zu verlassen. Dieses Setup soll sicherstellen, dass diese Ressourcen eindeutig sind und nicht mit anderen Stacks in Konflikt geraten. Weitere Informationen finden Sie in der AWSCDKDokumentation. Passen Sie dies an Ihre Geschäftsanforderungen an.

  • Dieses Beispiel enthält Code-Pakete. NETLambda-Artefakte werden in Docker-basierte Images übertragen und mit der von Lambda bereitgestellten Container-Image-Laufzeit ausgeführt. Die Container-Image-Laufzeit bietet Vorteile für standardmäßige Übertragungs- und Speichermechanismen (Container-Registries) und genauere lokale Testumgebungen (über das Container-Image). Sie können das Projekt so umstellen, dass es das bereitgestellte Lambda verwendet. NETLaufzeiten, um die Build-Zeit der Docker-Images zu reduzieren, aber dann müssen Sie Übertragungs- und Speichermechanismen einrichten und sicherstellen, dass das lokale Setup mit dem Lambda-Setup übereinstimmt. Passen Sie den Code an die Geschäftsanforderungen der Benutzer an.

Produktversionen

  • AWSCDKVersion 2.45.0 oder höher

  • Visual Studio 2022

Architektur

Technologie-Stack

  • APIAmazon-Gateway

  • AWS CloudFormation

  • Amazon CloudWatch

  • Amazon-DynamoDB

  • AWSIdentity and Access Management (IAM)

  • AWS KMS

  • AWSLambda

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

Architektur

Das folgende Diagramm zeigt den Ablauf der Erstellung von Mandanten-Stacks. Weitere Informationen zu den Technologie-Stacks für Steuerungsebene und Mandanten finden Sie im Abschnitt Zusätzliche Informationen.

Workflow zum Erstellen eines Mandanten und zum Bereitstellen einer Basisinfrastruktur für den Mandanten auf. AWS

Ablauf bei der Erstellung eines Mandantenstapels

  1. Der Benutzer sendet eine POST API Anfrage mit neuer Mandanten-Payload (Mandantenname, Mandantenbeschreibung) JSON an einen von Amazon API Gateway REST API gehosteten Server. Das API Gateway verarbeitet die Anfrage und leitet sie an die Lambda Tenant Onboarding-Funktion im Backend weiter. In diesem Beispiel gibt es keine Autorisierung oder Authentifizierung. In einer Produktionsumgebung API sollte dies in das Sicherheitssystem der SaaS-Infrastruktur integriert werden.

  2. Die Tenant Onboarding-Funktion überprüft die Anfrage. Anschließend wird versucht, den Mandantendatensatz, der den Namen des Mandanten, die generierte allgemeine eindeutige Kennung (UUID) und die Mandantenbeschreibung enthält, in der Amazon DynamoDB Tenant Onboarding-Tabelle zu speichern. 

  3. Nachdem DynamoDB den Datensatz gespeichert hat, initiiert ein DynamoDB-Stream die nachgeschaltete Lambda Tenant Infrastructure-Funktion.

  4. Die Lambda-Funktion Tenant Infrastructure agiert auf der Grundlage des empfangenen DynamoDB-Streams. Wenn der Stream für das INSERT Ereignis bestimmt ist, verwendet die Funktion den NewImage Abschnitt des Streams (letzter Aktualisierungsdatensatz, Feld Mandantenname), um mithilfe der Vorlage, die im S3-Bucket gespeichert ist, eine neue Mandanteninfrastruktur aufzurufen CloudFormation . Für die CloudFormation Vorlage ist der Parameter Tenant Name erforderlich. 

  5. AWS CloudFormation erstellt die Mandanteninfrastruktur auf der Grundlage der CloudFormation Vorlage und der Eingabeparameter.

  6. Jede Einrichtung der Mieterinfrastruktur verfügt über einen CloudWatch Alarm, einen Abrechnungsalarm und ein Alarmereignis.

  7. Das Alarmereignis wird zu einer Nachricht zu einem SNS Thema, die mit dem AWS KMS Schlüssel des Mieters verschlüsselt wird.

  8. Das SNS Thema leitet die empfangene Alarmnachricht an die SQS Warteschlange weiter, die mit dem Verschlüsselungsschlüssel des AWS KMS Mandanten verschlüsselt wird.

Andere Systeme können in Amazon integriert werdenSQS, um Aktionen auf der Grundlage von Nachrichten in der Warteschlange durchzuführen. In diesem Beispiel bleiben eingehende Nachrichten in der Warteschlange und müssen manuell gelöscht werden, um den Code generisch zu halten.

Ablauf beim Löschen von Mandantenstapeln

  1. Der Benutzer sendet eine DELETE API Anfrage mit der Nutzlast für neue Mandanten (Mandantenname, Mandantenbeschreibung) JSON an das von Amazon REST API gehostete API Gateway, das die Anfrage bearbeitet und an die Mandanten-Onboarding-Funktion weiterleitet. In diesem Beispiel gibt es keine Autorisierung oder Authentifizierung. In einem Produktionssetup API wird dies in das Sicherheitssystem der SaaS-Infrastruktur integriert.

  2. Die Tenant-Onboarding-Funktion überprüft die Anfrage und versucht dann, den Mandantendatensatz (Mandantenname) aus der Tenant-Onboarding-Tabelle zu löschen. 

  3. Nachdem DynamoDB den Datensatz erfolgreich gelöscht hat (der Datensatz ist in der Tabelle vorhanden und wird gelöscht), initiiert ein DynamoDB-Stream die Downstream-Funktion Lambda Tenant Infrastructure.

  4. Die Lambda-Funktion Tenant Infrastructure handelt auf der Grundlage des empfangenen DynamoDB-Stream-Datensatzes. Wenn der Stream für das REMOVE Ereignis bestimmt ist, verwendet die Funktion den OldImage Abschnitt des Datensatzes (Datensatzinformationen und Feld Mandantenname vor der letzten Änderung, d. h. Löschen), um das Löschen eines vorhandenen Stacks auf der Grundlage dieser Datensatzinformationen zu initiieren.

  5. AWS CloudFormation löscht den Zielmandantenstapel entsprechend der Eingabe.

Tools

AWSDienste

  • Amazon API Gateway unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung REST — HTTP und das WebSocket APIs in jeder Größenordnung.

  • AWSCloud Development Kit (AWSCDK) ist ein Softwareentwicklungs-Framework, mit dem Sie AWS Cloud-Infrastruktur im Code definieren und bereitstellen können.

  • AWSCDKToolkit ist ein Befehlszeilen-Cloud-Entwicklungskit, mit dem Sie mit Ihrer AWS Cloud Development Kit (AWSCDK) -App interagieren können.

  • AWSCommand Line Interface (AWSCLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS Diensten interagieren können.

  • AWS CloudFormationhilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus AWS konto- und regionsübergreifend zu verwalten.

  • Amazon DynamoDB ist ein vollständig verwalteter Service ohne SQL Datenbank, der eine schnelle, vorhersehbare und skalierbare Leistung bietet.

  • AWSMit Identity and Access Management (IAM) können Sie den Zugriff auf Ihre AWS Ressourcen sicher verwalten, indem Sie kontrollieren, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • AWSMit dem Key Management Service (AWSKMS) können Sie kryptografische Schlüssel erstellen und kontrollieren, um Ihre Daten zu schützen.

  • AWSLambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

  • Amazon Simple Notification Service (AmazonSNS) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.

  • Amazon Simple Queue Service (AmazonSQS) bietet eine sichere, dauerhafte und verfügbare gehostete Warteschlange, mit der Sie verteilte Softwaresysteme und -komponenten integrieren und entkoppeln können.

  • AWSToolkit for Visual Studio ist ein Plugin für die integrierte Entwicklungsumgebung von Visual Studio (IDE). Das Toolkit for Visual Studio unterstützt das Entwickeln, Debuggen und Bereitstellen. NETAnwendungen, die Dienste verwendenAWS.

Andere Tools

  • Visual Studio umfasst CompilerIDE, Tools zur Codevervollständigung, Grafikdesigner und andere Funktionen, die die Softwareentwicklung unterstützen.

Code

Der Code für dieses Muster befindet sich im APGBeispiel-Repository Tenant Onboarding in SaaS Architecture for Silo Model.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Überprüfen Sie die Installation von Node.js.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Node.js auf Ihrem lokalen Computer installiert ist.

node --version
AWSAdministrator, AWS DevOps

Installieren Sie das AWS CDK Toolkit.

Führen Sie den folgenden Befehl aus, um AWS CDK Toolkit auf Ihrem lokalen Computer zu installieren.

npm install -g aws-cdk

Wenn npm nicht installiert ist, können Sie es von der Site Node.js aus installieren.

AWSAdministrator, AWS DevOps

Überprüfen Sie die AWS CDK Toolkit-Version.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die AWS CDK Toolkit-Version korrekt auf Ihrem Computer installiert ist.  

cdk --version
AWSAdministrator, AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das Repository

Klonen Sie das Repository und navigieren Sie zu dem \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example Ordner.

Öffnen Sie die \src\TenantOnboardingInfra.sln Lösung in Visual Studio 2022. Öffnen Sie die TenantOnboardingInfraStack.cs Datei und überprüfen Sie den Code.

Die folgenden Ressourcen werden als Teil dieses Stacks erstellt:

  • DynamoDB-Tabelle

  • S3-Bucket (Laden Sie die CloudFormation Vorlage in den S3-Bucket hoch.)

  • Lambda-Ausführungsrolle

  • Lambda-Funktion

  • APIGateway API

  • Ereignisquelle zur Lambda-Funktion

AWSAdministrator, AWS DevOps

Überprüfen Sie die CloudFormation Vorlage.

Öffnen \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\template infra.yaml Sie im Ordner die CloudFormation Vorlage und überprüfen Sie sie. Diese Vorlage wird mit dem Mandantennamen, der aus der DynamoDB-Tabelle zum Onboarding des Mandanten abgerufen wurde, hydratisiert.

Die Vorlage stellt die mandantenspezifische Infrastruktur bereit. In diesem Beispiel werden der AWS KMS Schlüssel, Amazon SNSSQS, Amazon und der CloudWatch Alarm bereitgestellt.

App-Entwickler, AWS DevOps

Überprüfen Sie die Onboarding-Funktion für Mandanten.

Öffnen Function.cs und überprüfen Sie den Code für die Mandanten-Onboarding-Funktion, die mit dem Visual Studio AWS Lambda-Projekt erstellt wurde (. NETCore-C#) -Vorlage mit dem. NET6 (Container-Image) -Blueprint.

Öffnen Sie den Dockerfile und überprüfen Sie den Code. Das Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen des Lambda-Container-Images enthält.

Beachten Sie, dass die folgenden NuGet Pakete dem TenantOnboardingFunction Projekt als Abhängigkeiten hinzugefügt werden:

  • Amazon.Lambda.APIGatewayEvents

  • AWSSDK.DynamoDBv2

  • Newtonsoft.Json

App-Entwickler, AWS DevOps

Überprüfen Sie die InfraProvisioning Mandantenfunktion.

Navigieren Sie zu \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\InfraProvisioningFunction.

Öffnen Function.cs und überprüfen Sie den Code für die Funktion zur Bereitstellung der Mandanteninfrastruktur, die mit dem Visual Studio AWS Lambda-Projekt erstellt wurde (. NETCore-C#) -Vorlage mit dem. NET6 (Container-Image) -Blueprint.

Öffnen Sie den Dockerfile und überprüfen Sie den Code.

Beachten Sie, dass die folgenden NuGet Pakete dem InfraProvisioningFunction Projekt als Abhängigkeiten hinzugefügt werden:

  • Amazon.Lambda.DynamoDBEvents

  • AWSSDK.DynamoDBv2

  • AWSSDK.Cloudformation

App-Entwickler, AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die Lösung.

Gehen Sie wie folgt vor, um die Lösung zu erstellen:

  1. Öffnen Sie die \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra.sln Lösung in Visual Studio 2022. 

  2. Öffnen Sie das Kontextmenü (Rechtsklick) für die Lösung und wählen Sie Lösung erstellen aus.

Hinweis: Stellen Sie sicher, dass Sie das Amazon.CDK.Lib NuGet Paket auf die neueste Version im \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra Projekt aktualisieren, bevor Sie die Lösung erstellen.

App-Developer

Bootstrap für die AWS CDK Umgebung.

Öffnen Sie die Windows-Eingabeaufforderung und navigieren Sie zum Stammordner der AWS CDK App, in dem die cdk.json Datei verfügbar ist (\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example). Führen Sie den folgenden Befehl für das Bootstrapping aus.

cdk bootstrap

Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.

cdk bootstrap --profile <profile name>
AWSAdministrator, AWS DevOps

Listet die AWS CDK Stapel auf.

Führen Sie den folgenden Befehl aus, um alle Stapel aufzulisten, die im Rahmen dieses Projekts erstellt werden sollen.

cdk ls cdk ls --profile <profile name>

Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.

cdk ls --profile <profile name>
AWSAdministrator, AWS DevOps

Prüfen Sie, welche AWS Ressourcen erstellt werden.

Führen Sie den folgenden Befehl aus, um alle AWS Ressourcen zu überprüfen, die im Rahmen dieses Projekts erstellt werden.

cdk diff

Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.

cdk diff --profile <profile name>
AWSAdministrator, AWS DevOps

Stellen Sie alle AWS Ressourcen bereit, indem Sie AWS CDK

Führen Sie den folgenden Befehl aus, um alle AWS Ressourcen bereitzustellen.

cdk deploy --all --require-approval never

Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.

cdk deploy --all --require-approval never --profile <profile name>

Kopieren Sie nach Abschluss der Bereitstellung den Abschnitt API URL aus den Ausgaben in der Befehlszeile, der im folgenden Beispiel gezeigt wird.

Outputs: TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/
AWSAdministrator, AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie einen neuen Mandanten.

Um den neuen Mandanten zu erstellen, senden Sie die folgende Curl-Anfrage.

curl -X POST <TenantOnboardingAPIEndpoint* from CDK Output>tenant -d '{"Name":"Tenant123", "Description":"Stack for Tenant123"}'

Ändern Sie den Platzhalter <TenantOnboardingAPIEndpoint* from CDK Output> auf den tatsächlichen Wert von AWSCDK, wie im folgenden Beispiel gezeigt.

curl -X POST https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant -d '{"Name":"Tenant123", "Description":"test12"}'

Das folgende Beispiel zeigt die Ausgabe.

{"message": "A new tenant added - 5/4/2022 7:11:30 AM"}
App-Entwickler, AWS Administrator, AWS DevOps

Überprüfen Sie die neu erstellten Mandantendetails in DynamoDB.

Gehen Sie wie folgt vor, um die neu erstellten Mandantendetails in DynamoDB zu überprüfen.

  1. Öffnen Sie die AWS Management Console und navigieren Sie zum Amazon DynamoDB-Service.

  2. Wählen Sie in der linken Navigationsleiste Elemente erkunden und wählen Sie die TenantOnboarding Tabelle aus.

    Hinweis: Dem Namen des Mandanten wird ein vorangestellt. tenantcluster- Weitere Informationen finden Sie im Abschnitt Zusätzliche Informationen.

  3. Stellen Sie sicher, dass ein neues Element mit den Mandantendetails erstellt wurde.

App-Entwickler, AWS Administrator, AWS DevOps

Überprüfen Sie die Stack-Erstellung für den neuen Mandanten.

Stellen Sie sicher, dass der neue Stack erfolgreich erstellt und mit der Infrastruktur für den neu erstellten Mandanten gemäß der CloudFormation Vorlage ausgestattet wurde.

  1. Öffnen Sie die CloudFormation Konsole.

  2. Wählen Sie in der linken Navigationsleiste Stacks aus und vergewissern Sie sich, dass ein Stack mit dem Mandantennamen erfolgreich erstellt wurde.

  3. Wählen Sie den neu erstellten Mandanten-Stack und dann die Registerkarte Ressourcen aus. Beachten Sie die Alarm-Ressource und die SQS Amazon-Ressource.

  4. Öffnen Sie ein neues Terminal mit konfigurierten AWS Anmeldeinformationen und zeigen Sie auf die richtige Region. Um einen Testalarm auszulösen, geben Sie den folgenden Code ein und <alarm resource name> ersetzen Sie ihn durch den in Schritt 3 angegebenen Namen der Alarm-Ressource.

    aws cloudwatch set-alarm-state --alarm-name <alarm resource name> --state-value ALARM --state-reason 'Test setup'

    Das folgende Beispiel zeigt den Code mit einem Alarm-Ressourcennamen.

    aws cloudwatch set-alarm-state --alarm-name tenantcluster-tenant123-alarm --state-value ALARM --state-reason 'Test setup'
  5. Öffnen Sie die Konsole und navigieren Sie zur SQS Amazon-Konsole. Wählen Sie den in Schritt 3 identifizierten SQS Amazon-Ressourcennamen aus. Folgen Sie den Anweisungen in der AWS Dokumentation, um die Testnachricht zu empfangen und aus dem in Schritt 4 ausgelösten Alarm zu löschen.

App-Entwickler, AWS Administrator, AWS DevOps

Löschen Sie den Tenant-Stack.

Um den Tenant-Stack zu löschen, senden Sie die folgende Curl-Anfrage.

curl -X DELETE <TenantOnboardingAPIEndpoint* from CDK Output>tenant/<Tenant Name from previous step>

Ändern Sie den Platzhalter <TenantOnboardingAPIEndpoint* from CDK Output> auf den tatsächlichen Wert von AWS CDK und ändern Sie ihn <Tenant Name from previous step> auf den tatsächlichen Wert aus dem vorherigen Schritt der Mandantenerstellung, wie im folgenden Beispiel gezeigt.

curl -X DELETE https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant/Tenant123

Das folgende Beispiel zeigt die Ausgabe.

{"message": "Tenant destroyed - 5/4/2022 7:14:48 AM"}
App-Entwickler AWS DevOps, AWS Administrator

Überprüfen Sie, ob der Stack für den vorhandenen Mandanten gelöscht wurde.

Gehen Sie wie folgt vor, um zu überprüfen, ob der vorhandene Mandanten-Stack gelöscht wurde:

  1. Öffnen Sie die Konsole und navigieren Sie zur CloudFormation Konsole.

  2. Vergewissern Sie sich im linken Navigationsbereich, dass sich der vorhandene Stack mit dem Mandantennamen nicht mehr in der CloudFormation Konsole befindet (wenn die Konsole so eingerichtet ist, dass sie nur aktive Stacks anzeigt) oder gerade gelöscht wird. Wenn sich der Stack nicht mehr in der CloudFormation Konsole befindet, ändern Sie mithilfe der Dropdownliste die Einstellung der Konsole von Aktiv auf Gelöscht, um den gelöschten Stack zu sehen und zu überprüfen, ob der Stack erfolgreich gelöscht wurde.

App-Entwickler, AWS Administrator, AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Zerstöre die Umwelt.

Stellen Sie vor dem Aufräumen des Stacks Folgendes sicher:

  • Alle Datensätze in DynamoDB werden entweder durch den vorherigen Mandantenlöschvorgang oder über die DynamoDB-Konsole oder entfernt. API Bei jedem Löschen von Mandantendatensätzen wird die Säuberung des entsprechenden Datensatzes eingeleitet. AWS CloudFormation  

  • Alle mandantenbasierten AWS CloudFormation Stacks werden auf der Konsole bereinigt (falls die Cleanup-Logik des DynamoDB-Triggers fehlschlägt). AWS CloudFormation

AWSCDKKann nach Abschluss des Tests verwendet werden, um alle Stacks und die zugehörigen Ressourcen zu löschen, indem der folgende Befehl ausgeführt wird.

cdk destroy --all;

Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie das Profil.

Bestätigen Sie die Aufforderung zum Löschen des Stacks, um den Stack zu löschen.

AWSAdministrator, AWS DevOps

Bereinigen Sie Amazon CloudWatch Logs.

Beim Löschen des Stacks werden keine CloudWatch Protokolle (Protokollgruppen und Protokolle) bereinigt, die vom Stack generiert wurden. Bereinigen Sie die CloudWatch Ressourcen manuell mithilfe der CloudWatch Konsole oder derAPI.

App-Entwickler AWS DevOps, AWS Administrator

Zugehörige Ressourcen

Zusätzliche Informationen

Technologie-Stack für die Steuerungsebene

Der CDK Code, der eingeschrieben ist. NETwird verwendet, um die Infrastruktur der Steuerungsebene bereitzustellen, die aus den folgenden Ressourcen besteht:

  1. APIGateway

    Dient als REST API Einstiegspunkt für den Steuerebenen-Stack.

  2. Lambda-Funktion für Mandanten-Onboarding

    Diese Lambda-Funktion wird von API Gateway mit der m-Methode initiiert.

    Eine POST API Methodenanforderung führt dazu, dass (tenant name,tenant description) in die DynamoDB-Tabelle Tenant Onboarding eingefügt wird.

    In diesem Codebeispiel wird der Mandantenname auch als Teil des Tenant-Stack-Namens und der Namen der Ressourcen innerhalb dieses Stacks verwendet. Dies soll die Identifizierung dieser Ressourcen erleichtern. Dieser Mandantenname muss im gesamten Setup eindeutig sein, um Konflikte oder Fehler zu vermeiden. Die detaillierte Einrichtung der Eingabevalidierung wird in der IAMRollendokumentation und im Abschnitt Einschränkungen erläutert.

    Der Persistenzprozess für die DynamoDB-Tabelle ist nur erfolgreich, wenn der Mandantenname in keinem anderen Datensatz in der Tabelle verwendet wird.

    Der Mandantenname ist in diesem Fall der Partitionsschlüssel für diese Tabelle, da nur der Partitionsschlüssel als Bedingungsausdruck verwendet werden kann. PutItem

    Wenn der Mandantenname noch nie zuvor aufgezeichnet wurde, wird der Datensatz erfolgreich in der Tabelle gespeichert.

    Wenn der Mandantenname jedoch bereits von einem vorhandenen Datensatz in der Tabelle verwendet wird, schlägt der Vorgang fehl und löst eine DynamoDB-Ausnahme ConditionalCheckFailedException aus. Die Ausnahme wird verwendet, um eine Fehlermeldung (HTTP BadRequest) zurückzugeben, die angibt, dass der Mandantenname bereits existiert.

    Eine DELETE API Methodenanforderung entfernt den Datensatz für einen bestimmten Mandantennamen aus der Tenant Onboardin G-Tabelle.

    Das Löschen von DynamoDB-Datensätzen in diesem Beispiel ist erfolgreich, auch wenn der Datensatz nicht existiert.

    Wenn der Zieldatensatz existiert und gelöscht wird, wird ein DynamoDB-Stream-Datensatz erstellt. Andernfalls wird kein Downstream-Datensatz erstellt.

  3. Einbindung von Mandanten in DynamoDB mit aktivierten Amazon DynamoDB DynamoDB-Streams

    Dadurch werden die Metadateninformationen des Mandanten aufgezeichnet, und bei jedem Speichern oder Löschen von Datensätzen wird ein Stream flussabwärts an die Tenant Infrastructure Lambda-Funktion gesendet. 

  4. Lambda-Funktion für Mandanteninfrastruktur

    Diese Lambda-Funktion wird durch den DynamoDB-Stream-Datensatz aus dem vorherigen Schritt initiiert. Wenn sich der Datensatz auf ein INSERT Ereignis bezieht, wird er aufgerufen, AWS CloudFormation um eine neue Mandanteninfrastruktur mit der CloudFormation Vorlage zu erstellen, die in einem S3-Bucket gespeichert ist. Wenn der Datensatz für istREMOVE, initiiert er das Löschen eines vorhandenen Stacks auf der Grundlage des Felds Tenant Name des Stream-Datensatzes.

  5. S3 bucket

    Dies dient zum Speichern der CloudFormation Vorlage.

  6. IAMRollen für jede Lambda-Funktion und eine Servicerolle für CloudFormation

    Jede Lambda-Funktion hat ihre eigene IAM Rolle mit den geringsten Rechten, um ihre Aufgabe zu erfüllen. Die Tenant On-boarding Lambda-Funktion hat beispielsweise Lese-/Schreibzugriff auf DynamoDB, und die Tenant Infrastructure Lambda-Funktion kann nur den DynamoDB-Stream lesen.

    Eine benutzerdefinierte CloudFormation Servicerolle wird für die Bereitstellung von Mandanten-Stacks erstellt. Diese Servicerolle enthält zusätzliche Berechtigungen für die CloudFormation Stack-Bereitstellung (z. B. den AWS KMS Schlüssel). Dadurch werden Rollen zwischen Lambda aufgeteilt und alle Berechtigungen CloudFormation für eine einzelne Rolle (Infrastructure Lambda-Rolle) vermieden.

    Berechtigungen, die leistungsstarke Aktionen (wie das Erstellen und Löschen von CloudFormation Stacks) ermöglichen, sind gesperrt und nur für Ressourcen zulässig, die mit beginnen. tenantcluster- Die Ausnahme liegt AWS KMS in der Benennungskonvention für Ressourcen. Dem aufgenommenen Mandantennamen von API werden tenantcluster- zusammen mit anderen Validierungsprüfungen vorangestellt (nur alphanumerisch mit Bindestrich und begrenzt auf weniger als 30 Zeichen, um in die meisten AWS Ressourcenbenennungen zu passen). Dadurch wird sichergestellt, dass der Mandantenname nicht versehentlich zu einer Störung der Stacks oder Ressourcen der Kerninfrastruktur führt.

Technologie-Stack für Mandanten

Eine CloudFormation Vorlage wird im S3-Bucket gespeichert. Die Vorlage stellt den mandantenspezifischen AWS KMS Schlüssel, einen CloudWatch Alarm, ein SNS Thema, eine SQS Warteschlange und eine SQS Richtlinie bereit.

Der AWS KMS Schlüssel wird von Amazon SNS und Amazon SQS für die Datenverschlüsselung ihrer Nachrichten verwendet. Die Sicherheitspraktiken für AwsSolutions— SNS2 und AwsSolutions — SQS2 empfehlen, dass Sie Amazon SNS und Amazon SQS mit Verschlüsselung einrichten. CloudWatch Alarme funktionieren jedoch nicht mit Amazon, SNS wenn Sie einen AWS verwalteten Schlüssel verwenden. Daher müssen Sie in diesem Fall einen vom Kunden verwalteten Schlüssel verwenden. Weitere Informationen finden Sie im AWSKnowledge Center.

Die SQS Richtlinie wird in der SQS Amazon-Warteschlange verwendet, damit das erstellte SNS Thema die Nachricht an die Warteschlange weiterleiten kann. Ohne die SQS Richtlinie wird der Zugriff verweigert. Weitere Informationen finden Sie in der SNSAmazon-Dokumentation.