

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\$1 und AWS CDK
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk"></a>

*Tabby Ward, Susmitha Reddy Gankidi und Vijai Anand Ramalingam, Amazon Web Services*

## Zusammenfassung
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-summary"></a>

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\$1 und das AWS Cloud Development Kit (AWS CDK).

Da dieses Muster einen Fakturierungsalarm auslöst, empfehlen wir, den Stack in der AWS-Region USA Ost (Nord-Virginia) oder US-East-1 bereitzustellen. Weitere Informationen finden Sie in der [AWS-Dokumentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html).

## Voraussetzungen und Einschränkungen
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-prereqs"></a>

**Voraussetzungen******
+ Ein aktives [AWS-Konto](https://aws.amazon.com/account/).
+ Ein AWS Identity and Access Management (IAM) -Principal mit ausreichendem IAM-Zugriff, um AWS-Ressourcen für dieses Muster zu erstellen. Weitere Informationen finden Sie unter [IAM-Rollen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).
+ [Installieren Sie Amazon Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) und [konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) für die AWS-CDK-Bereitstellung.
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) wurde heruntergeladen und installiert oder [Visual Studio Code](https://code.visualstudio.com/download) wurde heruntergeladen und installiert.
+ Einrichtung des [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html).
+ [.NET Core 3.1 oder höher](https://dotnet.microsoft.com/download/dotnet-core/3.1) (erforderlich für C\$1 AWS CDK-Anwendungen)
+ [Amazon.Lambda.Tools installiert](https://github.com/aws/aws-extensions-for-dotnet-cli#aws-lambda-amazonlambdatools).

**Einschränkungen******
+ AWS CDK verwendet [AWS CloudFormation](https://aws.amazon.com/cloudformation/), sodass AWS-CDK-Anwendungen CloudFormation Service-Kontingenten unterliegen. Weitere Informationen finden Sie unter [ CloudFormation AWS-Kontingente](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html). 
+ Der CloudFormation Mandanten-Stack wird mit einer CloudFormation Servicerolle `infra-cloudformation-role` mit Platzhalterzeichen für Aktionen (`sns`\$1 und`sqs*`) erstellt, wobei die Ressourcen jedoch auf das `tenant-cluster` Präfix beschränkt sind. Evaluieren Sie diese Einstellung für einen Produktionsanwendungsfall 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 AWS-CDK-Codes ändern. Weitere Informationen finden Sie im Blogbeitrag [Migration von AWS Lambda Lambda-Funktionen auf ARM-basierte AWS Graviton2-Prozessoren](https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-to-arm-based-aws-graviton2-processors/).
+ 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-Managementkonsole, die CloudWatch Amazon-Konsole oder die API bereinigen.

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:
+ Für den Bucket [AWS Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) ist in diesem Beispiel der Einfachheit halber die Versionierung nicht aktiviert. Evaluieren und aktualisieren Sie das Setup nach Bedarf.
+ In diesem Beispiel werden der [Einfachheit halber Amazon API Gateway](https://aws.amazon.com/api-gateway/) REST-API-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 (Amazon SNS)](https://aws.amazon.com/sns/) und [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/) nur Mindestkonfigurationen. Der [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) für jeden Mandanten wird für [Amazon CloudWatch - und Amazon](https://aws.amazon.com/cloudwatch/) SNS SNS-Services im Konto geöffnet, um sie auf der Grundlage der [AWS KMS KMS-Schlüsselrichtlinie](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#compatibility-with-aws-services) zu nutzen. Das Setup ist nur ein Beispiel für einen Platzhalter. Passen Sie die Setups je nach Bedarf an Ihren geschäftlichen Anwendungsfall an.
+ Das gesamte Setup, das unter anderem API-Endpunkte und die Bereitstellung und Löschung von Backend-Mandanten mithilfe von AWS umfasst 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](https://github.com/cdklabs/cdk-nag) getestet, um zu überprüfen, ob es zum Zeitpunkt der Erstellung dieses Artikels Richtlinien gibt. 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 das AWS-CDK, 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 einzigartig sind und nicht mit anderen Stacks in Konflikt geraten. Weitere Informationen finden Sie in der [AWS-CDK-Dokumentation](https://docs.aws.amazon.com/cdk/v2/guide/resources.html#resources_physical_names). Passen Sie dies an Ihre Geschäftsanforderungen an.
+ Dieser Beispielcode packt .NET Lambda-Artefakte in Docker-basierte Images und wird mit der von Lambda bereitgestellten [Container-Image-Laufzeit](https://docs.aws.amazon.com/lambda/latest/dg/csharp-image.html) 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 die von [Lambda bereitgestellten .NET-Laufzeiten](https://docs.aws.amazon.com/lambda/latest/dg/lambda-csharp.html) verwendet, um die Erstellungszeit der Docker-Images zu reduzieren. Dann müssen Sie jedoch Ü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**
+ AWS CDK Version 2.45.0 oder höher
+ Visual Studio 2022

## Architektur
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-architecture"></a>

**Technologie-Stack**
+ Amazon API Gateway
+ AWS CloudFormation
+ Amazon CloudWatch
+ Amazon DynamoDB
+ AWS Identity and Access Management (IAM)
+ AWS KMS
+ AWS Lambda
+ 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 zur Erstellung eines Mandanten und zur Bereitstellung einer Basisinfrastruktur für den Mandanten auf AWS.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/5baef800-fe39-4eb8-b11d-2c23eb3175fc/images/0b579484-b87c-4acb-8c60-8c33c18370e3.png)


**Ablauf zur Erstellung eines Mandanten-Stacks**

1. Der Benutzer sendet eine POST-API-Anfrage mit neuer Mandanten-Payload (Mandantenname, Mandantenbeschreibung) in JSON an eine von Amazon API Gateway gehostete REST-API. 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 sollte diese API in das Sicherheitssystem der SaaS-Infrastruktur integriert werden.

1. Die Tenant Onboarding-Funktion verifiziert 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. 

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

1. 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. 

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

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

1. Das Alarmereignis wird zu einer Nachricht an ein SNS-Thema, die mit dem AWS-KMS-Schlüssel des Mandanten verschlüsselt wird.

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

Andere Systeme können in Amazon SQS integriert werden, 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 neuer Mandanten-Payload (Mandantenname, Mandantenbeschreibung) in JSON an die von Amazon API Gateway gehostete REST-API, die die Anfrage verarbeitet und an die Tenant-Onboarding-Funktion weiterleitet. In diesem Beispiel gibt es keine Autorisierung oder Authentifizierung. In einem Produktionssetup wird diese API in das Sicherheitssystem der SaaS-Infrastruktur integriert.

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

1. 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.

1. 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.

1. AWS CloudFormation löscht den Zielmandanten-Stack entsprechend der Eingabe.

## Tools
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-tools"></a>

**AWS-Services**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung.
+ Das [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) ist ein Softwareentwicklungs-Framework, das Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt.
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) ist ein Befehlszeilen-Cloud-Entwicklungskit, mit dem Sie mit Ihrer AWS Cloud Development Kit (AWS CDK) -App interagieren können.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) hilft Ihnen dabei, AWS-Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über AWS-Konten und Regionen hinweg zu verwalten.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) unterstützt Sie bei der Erstellung und Kontrolle kryptografischer Schlüssel, um Ihre Daten zu schützen.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) ist ein Rechenservice, 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 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 (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) bietet eine sichere, dauerhafte und verfügbare gehostete Warteschlange, mit der Sie verteilte Softwaresysteme und -komponenten integrieren und entkoppeln können.
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html) ist ein Plugin für die integrierte Entwicklungsumgebung (IDE) von Visual Studio. Das Toolkit for Visual Studio unterstützt die Entwicklung, das Debuggen und die Bereitstellung von.NET-Anwendungen, die AWS-Services verwenden.

**Andere Tools**
+ [Visual Studio](https://docs.microsoft.com/en-us/visualstudio/ide/whats-new-visual-studio-2022?view=vs-2022) ist eine IDE, die Compiler, Tools zur Codevervollständigung, Grafikdesigner und andere Funktionen zur Unterstützung der Softwareentwicklung enthält.

**Code**

Der Code für dieses Muster befindet sich im [APG-Beispiel-Repository Tenant Onboarding in SaaS Architecture for Silo Model](https://github.com/aws-samples/tenant-onboarding-in-saas-architecture-for-silo-model-apg-example).

## Epen
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-epics"></a>

### AWS CDK einrichten
<a name="set-up-aws-cdk"></a>


| Aufgabe | Description | Erforderliche 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.<pre>node --version</pre> | AWS-Administrator, 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.<pre>npm install -g aws-cdk</pre>[Wenn npm nicht installiert ist, können Sie es von der Website Node.js aus installieren.](https://nodejs.org/en/download/package-manager/) | AWS-Administrator, AWS DevOps | 
| Überprüfen Sie die Version des AWS CDK Toolkit. | Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Version des AWS CDK Toolkit korrekt auf Ihrem Computer installiert ist.  <pre>cdk --version</pre> | AWS-Administrator, AWS DevOps | 

### Überprüfen Sie den Code für die Onboarding-Kontrollebene des Mandanten
<a name="review-the-code-for-the-tenant-onboarding-control-plane"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Klonen Sie das [Repository](https://github.com/aws-samples/tenant-onboarding-in-saas-architecture-for-silo-model-apg-example) 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | AWS-Administrator, 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 SNS, Amazon SQS und der CloudWatch Alarm bereitgestellt. | App-Entwickler, AWS DevOps | 
| Sehen Sie sich die Onboarding-Funktion für Mandanten an. | Öffnen `Function.cs` und überprüfen Sie den Code für die Mandanten-Onboarding-Funktion, die mit der Visual Studio AWS Lambda Lambda-Projektvorlage (.NET Core-C\$1) mit dem.NET 6-Blueprint (Container Image) erstellt wurde.Öffnen Sie die `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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | 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 der Vorlage Visual Studio AWS Lambda Project (.NET Core — C\$1) mit dem.NET 6-Blueprint (Container Image) erstellt wurde.Öffnen Sie die `Dockerfile` und überprüfen Sie den Code. Beachten Sie, dass die folgenden NuGet Pakete dem `InfraProvisioningFunction` Projekt als Abhängigkeiten hinzugefügt werden:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | App-Entwickler, AWS DevOps | 

### Stellen Sie die AWS-Ressourcen bereit
<a name="deploy-the-aws-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die Lösung. | Gehen Sie wie folgt vor, um die Lösung zu erstellen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html)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-Befehlszeile 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.<pre>cdk bootstrap </pre>Wenn Sie ein AWS-Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.<pre>cdk bootstrap --profile <profile name><br />  </pre> | AWS-Administrator, AWS DevOps | 
| Listet die AWS-CDK-Stacks auf. | Führen Sie den folgenden Befehl aus, um alle Stacks aufzulisten, die im Rahmen dieses Projekts erstellt werden sollen.<pre>cdk ls<br />cdk ls --profile <profile name></pre>Wenn Sie ein AWS-Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.<pre>cdk ls --profile <profile name></pre> | AWS-Administrator, 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.<pre>cdk diff</pre>Wenn Sie ein AWS-Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.<pre>cdk diff --profile <profile name></pre> | AWS-Administrator, AWS DevOps | 
| Stellen Sie alle AWS-Ressourcen mithilfe von AWS CDK bereit. | Führen Sie den folgenden Befehl aus, um alle AWS-Ressourcen bereitzustellen.<pre>cdk deploy --all --require-approval never</pre>Wenn Sie ein AWS-Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.<pre>cdk deploy --all --require-approval never --profile <profile name></pre>Kopieren Sie nach Abschluss der Bereitstellung die API-URL aus dem Ausgabebereich in der Befehlszeile, wie im folgenden Beispiel gezeigt.<pre>Outputs:<br />TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/</pre> | AWS-Administrator, AWS DevOps | 

### Überprüfen Sie die Funktionalität
<a name="verify-the-functionality"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen neuen Mandanten. | Um den neuen Mandanten zu erstellen, senden Sie die folgende Curl-Anfrage.<pre>curl -X POST <TenantOnboardingAPIEndpoint* from CDK Output>tenant -d '{"Name":"Tenant123", "Description":"Stack for Tenant123"}'</pre>Ändern Sie den Platzhalter `<TenantOnboardingAPIEndpoint* from CDK Output>` auf den tatsächlichen Wert von AWS CDK, wie im folgenden Beispiel gezeigt.<pre>curl -X POST https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant -d '{"Name":"Tenant123", "Description":"test12"}'</pre>Das folgende Beispiel zeigt die Ausgabe.<pre>{"message": "A new tenant added - 5/4/2022 7:11:30 AM"}</pre> | 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.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | 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.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 
| Löschen Sie den Mandanten-Stack. | Um den Tenant-Stack zu löschen, senden Sie die folgende Curl-Anfrage.<pre>curl -X DELETE <TenantOnboardingAPIEndpoint* from CDK Output>tenant/<Tenant Name from previous step></pre>Ändern Sie den Platzhalter `<TenantOnboardingAPIEndpoint* from CDK Output>` auf den tatsächlichen Wert aus AWS CDK und ändern Sie ihn `<Tenant Name from previous step>` auf den tatsächlichen Wert aus dem vorherigen Schritt zur Mandantenerstellung, wie im folgenden Beispiel gezeigt.<pre>curl -X DELETE https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant/Tenant123</pre>Das folgende Beispiel zeigt die Ausgabe.<pre>{"message": "Tenant destroyed - 5/4/2022 7:14:48 AM"}</pre> | 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | App-Entwickler, AWS-Administrator, AWS DevOps | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Zerstöre die Umwelt. | Stellen Sie vor dem Aufräumen des Stacks Folgendes sicher:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html)Nach Abschluss der Tests kann AWS CDK verwendet werden, um alle Stacks und zugehörigen Ressourcen zu löschen, indem Sie den folgenden Befehl ausführen.<pre>cdk destroy --all;</pre>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. | AWS-Administrator, 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 der API. | App-Entwickler, AWS DevOps, AWS-Administrator | 

## Zugehörige Ressourcen
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-resources"></a>
+ [AWS CDK .NET-Workshop](https://cdkworkshop.com/40-dotnet.html)
+ [Arbeiten mit dem AWS-CDK in C\$1](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-csharp.html)
+ [CDK.NET-Referenz](https://docs.aws.amazon.com/cdk/api/v2/dotnet/api/index.html)

## Zusätzliche Informationen
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-additional"></a>

**Technologie-Stack auf Steuerungsebene**

Der in .NET geschriebene CDK-Code wird verwendet, um die Infrastruktur der Steuerungsebene bereitzustellen, die aus den folgenden Ressourcen besteht:

1. **API Gateway**

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

1. **Lambda-Funktion für Mandanten-Onboarding**

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

   Eine API-Anfrage der POST-Methode 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 Mandanten-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. Eine detaillierte Einrichtung der Eingabevalidierung wird in der Dokumentation zu den [IAM-Rollen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 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` Methoden-API-Anfrage 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.

1. **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. 

1. **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, ruft er AWS CloudFormation auf, um eine neue Mandanteninfrastruktur mit der CloudFormation Vorlage zu erstellen, die in einem S3-Bucket gespeichert ist. Wenn der Datensatz für ist`REMOVE`, initiiert er das Löschen eines vorhandenen Stacks auf der Grundlage des Felds `Tenant Name` des Stream-Datensatzes.

1. **S3 bucket**

   Dies dient zum Speichern der CloudFormation Vorlage.

1. **IAM-Rollen 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege). Die `Tenant On-boarding` Lambda-Funktion hat beispielsweise read/write Zugriff auf DynamoDB, und die `Tenant Infrastructure` Lambda-Funktion kann nur den DynamoDB-Stream lesen.

   Für die Bereitstellung von Mandanten-Stacks wird eine benutzerdefinierte CloudFormation Servicerolle 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 ist AWS KMS aufgrund seiner Benennungskonvention für Ressourcen. Dem aus der API aufgenommenen Mandantennamen werden `tenantcluster-` zusammen mit anderen Validierungsprüfungen vorangestellt (nur alphanumerisch mit Bindestrich und begrenzt auf weniger als 30 Zeichen, sodass er in die meisten AWS-Ressourcenbenennungen passt). 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.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-identity-based-policies.html)

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](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md) empfehlen, dass Sie Amazon SNS und Amazon SQS mit Verschlüsselung einrichten. CloudWatch Alarme funktionieren jedoch nicht mit Amazon SNS, wenn Sie einen von AWS verwalteten Schlüssel verwenden. Daher müssen Sie in diesem Fall einen vom Kunden verwalteten Schlüssel verwenden. Weitere Informationen finden Sie im [AWS Knowledge Center](https://aws.amazon.com/premiumsupport/knowledge-center/cloudwatch-receive-sns-for-alarm-trigger/).

Die SQS-Richtlinie wird in der Amazon SQS SQS-Warteschlange verwendet, damit das erstellte SNS-Thema die Nachricht an die Warteschlange übermitteln kann. Ohne die SQS-Richtlinie wird der Zugriff verweigert. Weitere Informationen finden Sie in der [Amazon SNS SNS-Dokumentation](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html#SendMessageToSQS.sqs.permissions).