

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Intégration des locataires dans l'architecture SaaS pour le modèle de silo à l'aide de C\$1 et d'AWS CDK
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk"></a>

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

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

Les applications SaaS (Software as a Service) peuvent être créées à l'aide de différents modèles architecturaux. Le *modèle de silo* fait référence à une architecture dans laquelle les locataires disposent de ressources dédiées.

Les applications SaaS s'appuient sur un modèle fluide pour introduire de nouveaux locataires dans leur environnement. Cela nécessite souvent l'orchestration d'un certain nombre de composants pour approvisionner et configurer correctement tous les éléments nécessaires à la création d'un nouveau locataire. Ce processus, dans l'architecture SaaS, est appelé intégration des locataires. L'intégration doit être entièrement automatisée pour chaque environnement SaaS en utilisant l'infrastructure sous forme de code dans votre processus d'intégration.

Ce modèle vous guide à travers un exemple de création d'un locataire et de mise en service d'une infrastructure de base pour le locataire sur Amazon Web Services (AWS). Le modèle utilise le C\$1 et l'AWS Cloud Development Kit (AWS CDK).

Étant donné que ce modèle crée une alarme de facturation, nous vous recommandons de déployer la pile dans la région AWS de l'est des États-Unis (Virginie du Nord), ou us-east-1. Pour plus d'informations, consultez la [documentation AWS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html).

## Conditions préalables et limitations
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-prereqs"></a>

**Prérequis******
+ Un [compte AWS](https://aws.amazon.com/account/) actif.
+ Un responsable AWS Identity and Access Management (IAM) disposant d'un accès IAM suffisant pour créer des ressources AWS correspondant à ce modèle. Pour en savoir plus, consultez [Rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).
+ [Installez l'interface de ligne de commande Amazon (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) [et configurez l'interface de ligne de commande AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) pour effectuer le déploiement d'AWS CDK.
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) téléchargé et installé ou [Visual Studio Code](https://code.visualstudio.com/download) téléchargé et installé.
+ Configuration d'[AWS Toolkit pour Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html).
+ [.NET Core 3.1 ou version ultérieure](https://dotnet.microsoft.com/download/dotnet-core/3.1) (requis pour les applications C\$1 AWS CDK)
+ [Amazon.Lambda.Tools installé.](https://github.com/aws/aws-extensions-for-dotnet-cli#aws-lambda-amazonlambdatools)

**Limites******
+ AWS CDK utilise [AWS CloudFormation](https://aws.amazon.com/cloudformation/). Les applications AWS CDK sont donc soumises à des quotas de CloudFormation service. Pour plus d'informations, consultez la section [ CloudFormation Quotas AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html). 
+ La CloudFormation pile de locataires est créée avec un rôle de CloudFormation service `infra-cloudformation-role` avec des caractères génériques sur les actions (`sns`\$1 et`sqs*`) mais avec des ressources limitées au `tenant-cluster` préfixe. Pour un cas d'utilisation en production, évaluez ce paramètre et fournissez uniquement l'accès requis à ce rôle de service. La fonction `InfrastructureProvision` Lambda utilise également un caractère générique (`cloudformation*`) pour approvisionner la CloudFormation pile, mais les ressources sont limitées au préfixe. `tenant-cluster`
+ La version docker de cet exemple de code est utilisée `--platform=linux/amd64` pour forcer les images`linux/amd64`. Cela permet de garantir que les artefacts d'image finaux seront adaptés à Lambda, qui utilise par défaut l'architecture x86-64. Si vous devez modifier l'architecture Lambda cible, veillez à modifier à la fois les codes Dockerfiles et AWS CDK. Pour plus d'informations, consultez le billet de blog [Migration des fonctions AWS Lambda vers les processeurs AWS Graviton2 basés sur ARM](https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-to-arm-based-aws-graviton2-processors/).
+ Le processus de suppression de la pile ne nettoie pas CloudWatch les journaux (groupes de journaux et journaux) générés par la pile. Vous devez nettoyer manuellement les journaux via la console Amazon AWS Management CloudWatch Console ou via l'API.

Ce modèle est configuré à titre d'exemple. Pour une utilisation en production, évaluez les configurations suivantes et apportez des modifications en fonction des besoins de votre entreprise :
+ Dans cet exemple, la gestion des versions du bucket [AWS Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) n'est pas activée pour des raisons de simplicité. Évaluez et mettez à jour la configuration selon les besoins.
+ Cet exemple configure les points de terminaison de [l'API REST Amazon API Gateway](https://aws.amazon.com/api-gateway/) sans authentification, autorisation ou limitation pour des raisons de simplicité. Pour une utilisation en production, nous recommandons d'intégrer le système à l'infrastructure de sécurité de l'entreprise. Évaluez ce paramètre et ajoutez les paramètres de sécurité requis selon les besoins.
+ Pour cet exemple d'infrastructure client, [Amazon Simple Notification Service (Amazon SNS) et Amazon](https://aws.amazon.com/sns/) [Simple Queue Service (Amazon SQS) ne proposent que des configurations](https://aws.amazon.com/sqs/) minimales. L'[AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) de chaque locataire ouvre la voie aux services [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) et Amazon SNS du compte à utiliser conformément à la politique [clé d'AWS KMS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#compatibility-with-aws-services). La configuration n'est qu'un exemple d'espace réservé. Ajustez les configurations selon vos besoins en fonction de votre cas d'utilisation professionnel.
+ L'ensemble de la configuration, qui inclut, sans s'y limiter, les points de terminaison d'API et le provisionnement et la suppression des locataires du backend à l'aide d'AWS CloudFormation, ne couvre que le cas de base du happy path. Évaluez et mettez à jour la configuration avec la logique de nouvelle tentative nécessaire, la logique de gestion des erreurs supplémentaire et la logique de sécurité en fonction des besoins de votre entreprise.
+ L'exemple de code est testé avec up-to-date [cdk-nag](https://github.com/cdklabs/cdk-nag) pour vérifier les politiques au moment de la rédaction de cet article. De nouvelles politiques pourraient être appliquées à l'avenir. Ces nouvelles politiques peuvent vous obliger à modifier manuellement la pile en fonction des recommandations avant que la pile ne puisse être déployée. Passez en revue le code existant pour vous assurer qu'il correspond aux exigences de votre entreprise.
+ Le code s'appuie sur le CDK AWS pour générer un suffixe aléatoire au lieu de s'appuyer sur des noms physiques assignés de manière statique pour la plupart des ressources créées. Cette configuration permet de garantir que ces ressources sont uniques et n'entrent pas en conflit avec d'autres piles. Pour plus d'informations, consultez la [documentation AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/resources.html#resources_physical_names). Ajustez cela en fonction des besoins de votre entreprise.
+ [Cet exemple de code regroupe les artefacts .NET Lambda dans des images basées sur Docker et s'exécute avec le moteur d'exécution d'images Container fourni par Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/csharp-image.html) L'environnement d'exécution de l'image du conteneur présente des avantages pour les mécanismes de transfert et de stockage standard (registres de conteneurs) et pour les environnements de test locaux plus précis (via l'image du conteneur). Vous pouvez modifier le projet pour utiliser les environnements d'[exécution .NET fournis par Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-csharp.html) afin de réduire le temps de génération des images Docker, mais vous devrez ensuite configurer les mécanismes de transfert et de stockage et vous assurer que la configuration locale correspond à la configuration Lambda. Ajustez le code pour l'aligner sur les exigences commerciales des utilisateurs.

**Versions du produit**
+ AWS CDK version 2.45.0 ou ultérieure
+ Visual Studio 2022

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

**Pile technologique**
+ 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

**Architecture**

Le schéma suivant montre le flux de création de la pile de locataires. Pour plus d'informations sur les piles technologiques du plan de contrôle et des locataires, consultez la section *Informations supplémentaires*.

![\[Flux de travail pour créer un locataire et fournir une infrastructure de base pour le locataire sur AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/5baef800-fe39-4eb8-b11d-2c23eb3175fc/images/0b579484-b87c-4acb-8c60-8c33c18370e3.png)


**Flux de création d'une pile de locataires**

1. L'utilisateur envoie une demande d'API POST avec la nouvelle charge utile du locataire (nom du locataire, description du locataire) au format JSON à une API REST hébergée par Amazon API Gateway. L'API Gateway traite la demande et la transmet à la fonction principale Lambda Tenant Onboarding. Dans cet exemple, il n'y a aucune autorisation ni authentification. Dans une configuration de production, cette API doit être intégrée au système de sécurité de l'infrastructure SaaS.

1. La fonction d'intégration des locataires vérifie la demande. Il tente ensuite de stocker l'enregistrement du locataire, qui inclut le nom du locataire, l'identifiant unique universel (UUID) généré et la description du locataire, dans la table d'intégration des locataires Amazon DynamoDB. 

1. Une fois que DynamoDB a enregistré l'enregistrement, un flux DynamoDB lance la fonction Lambda Tenant Infrastructure en aval.

1. La fonction Lambda de l'infrastructure Tenant agit en fonction du flux DynamoDB reçu. Si le flux est destiné à l'événement INSERT, la fonction utilise la NewImage section du flux (dernier enregistrement de mise à jour, champ Nom du tenant) CloudFormation pour créer une nouvelle infrastructure locataire à l'aide du modèle stocké dans le compartiment S3. Le CloudFormation modèle nécessite le paramètre Tenant Name. 

1. AWS CloudFormation crée l'infrastructure du locataire en fonction du CloudFormation modèle et des paramètres d'entrée.

1. Chaque configuration de l'infrastructure du locataire comporte une CloudWatch alarme, une alarme de facturation et un événement d'alarme.

1. L'événement d'alarme devient un message envoyé à une rubrique SNS, qui est chiffré par la clé AWS KMS du locataire.

1. La rubrique SNS transmet le message d'alarme reçu à la file d'attente SQS, qui est chiffrée par la clé de chiffrement AWS KMS du locataire.

D'autres systèmes peuvent être intégrés à Amazon SQS pour effectuer des actions en fonction des messages en file d'attente. Dans cet exemple, pour que le code reste générique, les messages entrants restent en file d'attente et doivent être supprimés manuellement.

**Flux de suppression de la pile de locataires**

1. L'utilisateur envoie une demande d'API DELETE avec la nouvelle charge utile du locataire (nom du locataire, description du locataire) au format JSON à l'API REST hébergée par Amazon API Gateway, qui traitera la demande et la transmettra à la fonction d'intégration des locataires. Dans cet exemple, il n'y a aucune autorisation ni authentification. Dans une configuration de production, cette API sera intégrée au système de sécurité de l'infrastructure SaaS.

1. La fonction d'intégration des locataires vérifiera la demande, puis tentera de supprimer le dossier du locataire (nom du locataire) de la table d'accueil des locataires. 

1. Une fois que DynamoDB a correctement supprimé l'enregistrement (l'enregistrement existe dans la table et est supprimé), un flux DynamoDB lance la fonction Lambda Tenant Infrastructure en aval.

1. La fonction Lambda de l'infrastructure Tenant agit en fonction de l'enregistrement de flux DynamoDB reçu. Si le flux est destiné à l'événement REMOVE, la fonction utilise la OldImage section de l'enregistrement (informations sur l'enregistrement et champ Nom du locataire, avant la dernière modification, qui est la suppression) pour lancer la suppression d'une pile existante sur la base de ces informations d'enregistrement.

1. AWS CloudFormation supprime la pile de locataires cible en fonction de l'entrée.

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

**Services AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) vous aide à créer, publier, gérer, surveiller et sécuriser REST, HTTP, et ce, WebSocket APIs à n'importe quelle échelle.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) est un kit de développement cloud en ligne de commande qui vous permet d'interagir avec votre application AWS Cloud Development Kit (AWS CDK).
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à approvisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fournit une file d'attente hébergée sécurisée, durable et disponible qui vous permet d'intégrer et de dissocier les systèmes et composants logiciels distribués.
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html) est un plugin pour l'environnement de développement intégré (IDE) Visual Studio. Le Toolkit for Visual Studio prend en charge le développement, le débogage et le déploiement d'applications .NET utilisant les services AWS.

**Autres outils**
+ [Visual Studio](https://docs.microsoft.com/en-us/visualstudio/ide/whats-new-visual-studio-2022?view=vs-2022) est un IDE qui inclut des compilateurs, des outils de complétion de code, des concepteurs graphiques et d'autres fonctionnalités qui prennent en charge le développement de logiciels.

**Code**

Le code de ce modèle se trouve dans le référentiel d'exemples [APG d'intégration des locataires dans l'architecture SaaS pour Silo Model](https://github.com/aws-samples/tenant-onboarding-in-saas-architecture-for-silo-model-apg-example).

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

### Configuration d'AWS CDK
<a name="set-up-aws-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez l'installation de Node.js. | Pour vérifier que Node.js est installé sur votre ordinateur local, exécutez la commande suivante.<pre>node --version</pre> | Administrateur AWS, AWS DevOps | 
| Installez le kit d'outils AWS CDK. | Pour installer AWS CDK Toolkit sur votre machine locale, exécutez la commande suivante.<pre>npm install -g aws-cdk</pre>Si npm n'est pas installé, vous pouvez l'installer depuis le [site Node.js](https://nodejs.org/en/download/package-manager/). | Administrateur AWS, AWS DevOps | 
| Vérifiez la version d'AWS CDK Toolkit. | Pour vérifier que la version d'AWS CDK Toolkit est correctement installée sur votre machine, exécutez la commande suivante.  <pre>cdk --version</pre> | Administrateur AWS, AWS DevOps | 

### Vérifiez le code du plan de contrôle d'embarquement du locataire
<a name="review-the-code-for-the-tenant-onboarding-control-plane"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Clonez le [référentiel](https://github.com/aws-samples/tenant-onboarding-in-saas-architecture-for-silo-model-apg-example) et naviguez jusqu'au `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example` dossier.Dans Visual Studio 2022, ouvrez la `\src\TenantOnboardingInfra.sln` solution. Ouvrez le `TenantOnboardingInfraStack.cs` fichier et examinez le code.Les ressources suivantes sont créées dans le cadre de cette pile :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | Administrateur AWS, AWS DevOps | 
| Passez en revue le CloudFormation modèle. | Dans le `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\template` dossier`infra.yaml`, ouvrez et examinez le CloudFormation modèle. Ce modèle sera hydraté avec le nom du locataire extrait de la table DynamoDB d'accueil du locataire.Le modèle fournit l'infrastructure spécifique au locataire. Dans cet exemple, il fournit la clé AWS KMS, Amazon SNS, Amazon SQS et l'alarme. CloudWatch  | Développeur d'applications, AWS DevOps | 
| Passez en revue la fonction d'intégration des locataires. | Ouvrez `Function.cs` et examinez le code de la fonction d'intégration des locataires, qui est créée avec le modèle Visual Studio AWS Lambda Project (.NET Core- C\$1) avec le plan .NET 6 (Container Image).Ouvrez le `Dockerfile` et passez en revue le code. `Dockerfile`Il s'agit d'un fichier texte contenant des instructions pour créer l'image du conteneur Lambda.Notez que les NuGet packages suivants sont ajoutés en tant que dépendances au `TenantOnboardingFunction` projet :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | Développeur d'applications, AWS DevOps | 
| Passez en revue la InfraProvisioning fonction Tenant. | Accédez à `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\InfraProvisioningFunction`.Ouvrez `Function.cs` et examinez le code de la fonction de provisionnement de l'infrastructure locataire, qui est créé avec le modèle Visual Studio AWS Lambda Project (.NET Core- C\$1) avec le plan .NET 6 (Container Image).Ouvrez le `Dockerfile` et passez en revue le code. Notez que les NuGet packages suivants sont ajoutés en tant que dépendances au `InfraProvisioningFunction` projet :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | Développeur d'applications, AWS DevOps | 

### Déployer les ressources AWS
<a name="deploy-the-aws-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la solution. | Pour créer la solution, effectuez les opérations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html)Assurez-vous de mettre à jour le `Amazon.CDK.Lib NuGet` package avec la dernière version du `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra` projet avant de créer la solution. | Développeur d’applications | 
| Démarrez l'environnement AWS CDK. | Ouvrez l'invite de commande Windows et accédez au dossier racine de l'application AWS CDK dans lequel le `cdk.json` fichier est disponible (`\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example`). Exécutez la commande suivante pour le démarrage.<pre>cdk bootstrap </pre>Si vous avez créé un profil AWS pour les informations d'identification, utilisez la commande avec votre profil.<pre>cdk bootstrap --profile <profile name><br />  </pre> | Administrateur AWS, AWS DevOps | 
| Répertoriez les piles de CDK AWS. | Pour répertorier toutes les piles à créer dans le cadre de ce projet, exécutez la commande suivante.<pre>cdk ls<br />cdk ls --profile <profile name></pre>Si vous avez créé un profil AWS pour les informations d'identification, utilisez la commande avec votre profil.<pre>cdk ls --profile <profile name></pre> | Administrateur AWS, AWS DevOps | 
| Vérifiez quelles ressources AWS seront créées. | Pour consulter toutes les ressources AWS qui seront créées dans le cadre de ce projet, exécutez la commande suivante.<pre>cdk diff</pre>Si vous avez créé un profil AWS pour les informations d'identification, utilisez la commande avec votre profil.<pre>cdk diff --profile <profile name></pre> | Administrateur AWS, AWS DevOps | 
| Déployez toutes les ressources AWS à l'aide d'AWS CDK. | Pour déployer toutes les ressources AWS, exécutez la commande suivante.<pre>cdk deploy --all --require-approval never</pre>Si vous avez créé un profil AWS pour les informations d'identification, utilisez la commande avec votre profil.<pre>cdk deploy --all --require-approval never --profile <profile name></pre>Une fois le déploiement terminé, copiez l'URL de l'API depuis la section des sorties de l'invite de commande, comme illustré dans l'exemple suivant.<pre>Outputs:<br />TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/</pre> | Administrateur AWS, AWS DevOps | 

### Vérifiez la fonctionnalité
<a name="verify-the-functionality"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un nouveau locataire. | Pour créer le nouveau locataire, envoyez la demande curl suivante.<pre>curl -X POST <TenantOnboardingAPIEndpoint* from CDK Output>tenant -d '{"Name":"Tenant123", "Description":"Stack for Tenant123"}'</pre>Remplacez l'espace `<TenantOnboardingAPIEndpoint* from CDK Output>` réservé par la valeur réelle d'AWS CDK, comme indiqué dans l'exemple suivant.<pre>curl -X POST https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant -d '{"Name":"Tenant123", "Description":"test12"}'</pre>L'exemple suivant montre le résultat.<pre>{"message": "A new tenant added - 5/4/2022 7:11:30 AM"}</pre> | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Vérifiez les informations du locataire nouvellement créé dans DynamoDB. | Pour vérifier les informations du locataire nouvellement créé dans DynamoDB, effectuez les étapes suivantes.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Vérifiez la création de la pile pour le nouveau locataire. | Vérifiez que la nouvelle pile a été créée avec succès et dotée d'une infrastructure pour le locataire nouvellement créé conformément au CloudFormation modèle.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Supprimez la pile de locataires. | Pour supprimer la pile de locataires, envoyez la demande curl suivante.<pre>curl -X DELETE <TenantOnboardingAPIEndpoint* from CDK Output>tenant/<Tenant Name from previous step></pre>Remplacez l'espace `<TenantOnboardingAPIEndpoint* from CDK Output>` réservé par la valeur réelle d'AWS CDK, puis par la valeur réelle de l'étape précédente de création du locataire, comme indiqué dans l'exemple suivant. `<Tenant Name from previous step>`<pre>curl -X DELETE https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant/Tenant123</pre>L'exemple suivant montre le résultat.<pre>{"message": "Tenant destroyed - 5/4/2022 7:14:48 AM"}</pre> | Développeur d'applications, AWS DevOps, administrateur AWS | 
| Vérifiez la suppression de la pile pour le locataire existant. | Pour vérifier que la pile de locataires existante a été supprimée, effectuez les étapes suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Détruisez l'environnement. | Avant le nettoyage de la pile, assurez-vous de ce qui suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html)Une fois les tests effectués, AWS CDK peut être utilisé pour détruire toutes les piles et les ressources associées en exécutant la commande suivante.<pre>cdk destroy --all;</pre>Si vous avez créé un profil AWS pour les informations d'identification, utilisez-le.Confirmez l'invite de suppression de la pile pour supprimer la pile. | Administrateur AWS, AWS DevOps | 
| Nettoyez Amazon CloudWatch Logs. | Le processus de suppression de la pile ne nettoie pas CloudWatch les journaux (groupes de journaux et journaux) générés par la pile. Nettoyez manuellement les CloudWatch ressources à l'aide de la CloudWatch console ou de l'API. | Développeur d'applications, AWS DevOps, administrateur AWS | 

## Ressources connexes
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-resources"></a>
+ [Atelier AWS CDK .NET](https://cdkworkshop.com/40-dotnet.html)
+ [Utilisation du kit AWS CDK en C\$1](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-csharp.html)
+ [Référence CDK .NET](https://docs.aws.amazon.com/cdk/api/v2/dotnet/api/index.html)

## Informations supplémentaires
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-additional"></a>

**Pile technologique de plan de contrôle**

Le code CDK écrit en .NET est utilisé pour approvisionner l'infrastructure du plan de contrôle, qui comprend les ressources suivantes :

1. **API Gateway**

   Sert de point d'entrée de l'API REST pour la pile du plan de contrôle.

1. **Intégration des locataires à la fonction Lambda**

   Cette fonction Lambda est initiée par API Gateway à l'aide de la méthode m.

   Une demande d'API de méthode POST entraîne l'insertion de (`tenant name`,`tenant description`) dans la table `Tenant Onboarding` DynamoDB.

   Dans cet exemple de code, le nom du tenant est également utilisé dans le cadre du nom de la pile de locataires et des noms des ressources de cette pile. Cela permet de faciliter l'identification de ces ressources. Ce nom de locataire doit être unique dans l'ensemble de la configuration pour éviter les conflits ou les erreurs. La configuration détaillée de la validation des entrées est expliquée dans la documentation [des rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) et dans la section *Limitations*.

   Le processus de persistance de la table DynamoDB n'aboutira que si le nom du locataire n'est utilisé dans aucun autre enregistrement de la table.

   Dans ce cas, le nom du locataire est la clé de partition de cette table, car seule la clé de partition peut être utilisée comme expression de `PutItem` condition.

   Si le nom du locataire n'a jamais été enregistré auparavant, l'enregistrement sera correctement enregistré dans la table.

   Toutefois, si le nom du locataire est déjà utilisé par un enregistrement existant dans la table, l'opération échouera et déclenchera une exception `ConditionalCheckFailedException` DynamoDB. L'exception sera utilisée pour renvoyer un message d'échec (`HTTP BadRequest`) indiquant que le nom du locataire existe déjà.

   Une demande d'API de `DELETE` méthode supprimera l'enregistrement d'un nom de locataire spécifique de la table `Tenant Onboardin` g.

   Dans cet exemple, la suppression de l'enregistrement DynamoDB réussira même si l'enregistrement n'existe pas.

   Si l'enregistrement cible existe et est supprimé, il créera un enregistrement de flux DynamoDB. Dans le cas contraire, aucun enregistrement en aval ne sera créé.

1. **Intégration du locataire à DynamoDB, avec Amazon DynamoDB Streams activé**

   Cela enregistre les informations de métadonnées du locataire, et toute sauvegarde ou suppression d'enregistrement enverra un flux en aval à la fonction `Tenant Infrastructure` Lambda. 

1. **Fonction Lambda de l'infrastructure locataire**

   Cette fonction Lambda est initiée par l'enregistrement de flux DynamoDB de l'étape précédente. Si l'enregistrement concerne un `INSERT` événement, il invoque AWS CloudFormation pour créer une nouvelle infrastructure locataire avec le CloudFormation modèle stocké dans un compartiment S3. Si l'enregistrement est pour`REMOVE`, il initie la suppression d'une pile existante en fonction du `Tenant Name` champ de l'enregistrement du flux.

1. **Compartiment S3**

   C'est pour stocker le CloudFormation modèle.

1. **Des rôles IAM pour chaque fonction Lambda et un rôle de service pour CloudFormation**

   Chaque fonction Lambda possède un rôle IAM unique avec des [autorisations de moindre privilège pour accomplir](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) sa tâche. Par exemple, la fonction `Tenant On-boarding` Lambda a read/write accès à DynamoDB, et la fonction `Tenant Infrastructure` Lambda ne peut lire que le flux DynamoDB.

   Un rôle CloudFormation de service personnalisé est créé pour le provisionnement de la pile des locataires. Ce rôle de service contient des autorisations supplémentaires pour le provisionnement des CloudFormation piles (par exemple, la clé AWS KMS). Cela permet de répartir les rôles entre Lambda et d' CloudFormation éviter toutes les autorisations sur un seul rôle (rôle Lambda d'infrastructure).

   Les autorisations qui autorisent des actions puissantes (telles que la création et la suppression de CloudFormation piles) sont verrouillées et autorisées uniquement sur les ressources commençant `tenantcluster-` par. L'exception est AWS KMS, en raison de sa convention de dénomination des ressources. Le nom du locataire ingéré provenant de l'API sera ajouté au début, `tenantcluster-` ainsi que d'autres contrôles de validation (alphanumérique avec tiret uniquement, et limité à moins de 30 caractères pour s'adapter à la plupart des noms de ressources AWS). Cela garantit que le nom du locataire n'entraînera pas accidentellement une perturbation des infrastructures ou des ressources de base.

**Pile technologique pour locataires**

Un CloudFormation modèle est stocké dans le compartiment S3. [Le modèle fournit la clé AWS KMS spécifique au locataire, une CloudWatch alarme, une rubrique SNS, une file d'attente SQS et une politique SQS.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-identity-based-policies.html)

La clé AWS KMS est utilisée pour le chiffrement des données par Amazon SNS et Amazon SQS pour leurs messages. Les pratiques de sécurité pour [AwsSolutions- SNS2 et AwsSolutions -](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md) vous SQS2 recommandent de configurer Amazon SNS et Amazon SQS avec le chiffrement. Toutefois, les CloudWatch alarmes ne fonctionnent pas avec Amazon SNS lorsque vous utilisez une clé gérée par AWS. Vous devez donc utiliser une clé gérée par le client dans ce cas. Pour plus d'informations, consultez le [centre de connaissances AWS](https://aws.amazon.com/premiumsupport/knowledge-center/cloudwatch-receive-sns-for-alarm-trigger/).

La politique SQS est utilisée dans la file d'attente Amazon SQS pour permettre à la rubrique SNS créée de transmettre le message à la file d'attente. Sans la politique SQS, l'accès sera refusé. Pour plus d'informations, consultez la [documentation Amazon SNS.](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html#SendMessageToSQS.sqs.permissions)