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 utilisant C# et AWS CDK
Créé par Tabby Ward (AWS), Susmitha Reddy Gankidi () et Vijai Anand AWS Ramalingam () AWS
Dépôt de code : Tennat Onboarding Silo | Environnement : PoC ou pilote | Technologies : modernisation ; DevOps |
Charge de travail : Open source | AWSservices : Amazon DynamoDB AWS CloudFormation ; Amazon DynamoDB Streams ; Lambda ; Amazon Gateway AWS API |
Récapitulatif
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 C# et le AWS Cloud Development Kit (AWSCDK).
Étant donné que ce modèle crée une alarme de facturation, nous vous recommandons de déployer la pile dans la région USA Est (Virginie du Nord), ou us-east-1. AWS Pour plus d'informations, consultez la AWSdocumentation.
Conditions préalables et limitations
Prérequis
Un AWScompte
actif. Un directeur AWS d'Identity and Access Management (IAM) disposant d'un IAM accès suffisant pour créer AWS des ressources pour ce modèle. Pour plus d'informations, consultez la section IAMRôles.
Installez l'interface de ligne de commande Amazon (AWSCLI) et AWSCLIconfigurez-la pour effectuer AWS CDK le déploiement.
Visual Studio 2022
a été téléchargé et installé ou Visual Studio Code a été téléchargé et installé. . NETCore 3.1 ou version ultérieure
(requis pour les AWS CDK applications C#)
Limites
AWSCDKutilisations AWS CloudFormation
, de sorte que AWS CDK les applications sont soumises à des quotas CloudFormation de service. Pour plus d'informations, consultez la section AWS CloudFormation Quotas. 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
* etsqs*
) mais avec des ressources limitées autenant-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 fonctionInfrastructureProvision
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 imageslinux/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 Dockerfiles et les codes. AWS CDK Pour plus d'informations, consultez le billet de blog Migration des fonctions AWS Lambda vers les processeurs Graviton2 basés sur AWS ARM. 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 AWS de gestion Amazon CloudWatch ou via leAPI.
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 AWSSimple Storage Service (Amazon S3)
n'est pas activée pour des raisons de simplicité. Évaluez et mettez à jour la configuration selon les besoins. Cet exemple configure les REST API points de terminaison Amazon 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 (AmazonSNS)
et Amazon Simple Queue Service (AmazonSQS) n'ont que des configurations minimales. Le service de gestion des AWS clés (AWSKMS) de chaque locataire est ouvert à Amazon CloudWatch et SNS aux services Amazon du compte à utiliser conformément à la politique AWS KMS clé. 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, mais sans s'y limiter, le API provisionnement et la suppression des locataires du backend par l'utilisateur 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
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 AWS CDK 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 AWSCDKdocumentation. Ajustez cela en fonction des besoins de votre entreprise.
Cet exemple de packages de code. NETLambda intègre des artefacts dans des images basées sur Docker et s'exécute avec le moteur d'exécution d'images Container fourni par Lambda. 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 changer de projet pour utiliser Lambda fourni. NETdes environnements d'exécution pour réduire le temps de création 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
AWSCDKversion 2.45.0 ou ultérieure
Visual Studio 2022
Architecture
Pile technologique
APIPasserelle Amazon
AWS CloudFormation
Amazon CloudWatch
Amazon DynamoDB
AWSIdentity and Access Management (IAM)
AWS KMS
AWSLambda
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 locataireAWS.](images/pattern-img/5baef800-fe39-4eb8-b11d-2c23eb3175fc/images/0b579484-b87c-4acb-8c60-8c33c18370e3.png)
Flux de création d'une pile de locataires
L'utilisateur envoie une POST API demande avec la nouvelle charge utile du locataire (nom du locataire, description du locataire) JSON à un REST API hébergeur Amazon API Gateway. La API passerelle traite la demande et la transmet à la fonction Lambda Tenant Onboarding du backend. Dans cet exemple, il n'y a aucune autorisation ni authentification. Dans une configuration de production, cela API doit être intégré au système de sécurité de l'infrastructure SaaS.
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 du locataire généré (UUID) et la description du locataire, dans la table d'intégration des locataires Amazon DynamoDB.
Une fois que DynamoDB a enregistré l'enregistrement, un flux DynamoDB lance la fonction Lambda Tenant Infrastructure en aval.
La fonction Lambda de l'infrastructure Tenant agit en fonction du flux DynamoDB reçu. Si le flux est destiné à l'INSERTévénement, la fonction utilise la NewImage section du flux (dernier enregistrement de mise à jour, champ Nom du locataire) pour appeler CloudFormation afin de 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.
AWS CloudFormation crée l'infrastructure du locataire en fonction du CloudFormation modèle et des paramètres d'entrée.
Chaque configuration de l'infrastructure du locataire comporte une CloudWatch alarme, une alarme de facturation et un événement d'alarme.
L'événement d'alarme devient un message envoyé à un SNS sujet, qui est crypté par la AWS KMS clé du locataire.
Le SNS sujet transmet le message d'alarme reçu à la SQS file d'attente, qui est cryptée par la clé AWS KMS de chiffrement du locataire.
D'autres systèmes peuvent être intégrés SQS à Amazon 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
L'utilisateur envoie une DELETE API demande contenant la nouvelle charge utile du locataire (nom du locataire, description du locataire) JSON à l'RESTAPIhébergeur 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, cela API sera intégré au système de sécurité de l'infrastructure SaaS.
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.
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.
La fonction Lambda de l'infrastructure Tenant agit en fonction de l'enregistrement de flux DynamoDB reçu. Si le flux est destiné à l'REMOVEévénement, 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.
AWS CloudFormation supprime la pile de locataires cible en fonction de l'entrée.
Outils
AWSservices
Amazon API Gateway vous aide à créer, publier, gérer, surveiller et sécuriser, et REST ceHTTP, WebSocket APIs à n'importe quelle échelle.
AWSCloud Development Kit (AWSCDK) est un framework de développement logiciel qui vous aide à définir et à provisionner une infrastructure AWS cloud sous forme de code.
AWSCDKToolkit est un kit de développement cloud en ligne de commande qui vous permet d'interagir avec votre application AWS Cloud Development Kit (AWSCDK).
AWSL'interface de ligne de commande (AWSCLI) est un outil open source qui vous permet d'interagir avec les AWS services par le biais de commandes dans votre interface de ligne de commande.
AWS CloudFormationvous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie, quels que soient les AWS comptes et les régions.
Amazon DynamoDB est un service SQL sans base de données entièrement géré qui fournit des performances rapides, prévisibles et évolutives.
AWSIdentity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
AWSLe service de gestion des clés (AWSKMS) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
AWSLambda 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) 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 (AmazonSNS) 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 (AmazonSQS) fournit une file d'attente hébergée sécurisée, durable et disponible qui vous aide à intégrer et à dissocier les systèmes et composants logiciels distribués.
AWSToolkit for Visual Studio est un plugin pour l'environnement de développement intégré Visual Studio (IDE). Le Toolkit for Visual Studio prend en charge le développement, le débogage et le déploiement. NETapplications qui utilisent AWS des services.
Autres outils
Visual Studio
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. IDE
Code
Le code de ce modèle se trouve dans le référentiel Tenant onboarding in SaaS Architecture for Silo Model APG Example
Épopées
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.
| AWSadministrateur, AWS DevOps |
Installez le AWS CDK kit d'outils. | Pour installer AWS CDK Toolkit sur votre machine locale, exécutez la commande suivante.
Si npm n'est pas installé, vous pouvez l'installer depuis le site Node.js | AWSadministrateur, AWS DevOps |
Vérifiez la version du AWS CDK Toolkit. | Pour vérifier que la version du AWS CDK Toolkit est correctement installée sur votre machine, exécutez la commande suivante.
| AWSadministrateur, AWS DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Pour cloner le référentiel. | Clonez le référentiel Dans Visual Studio 2022, ouvrez la Les ressources suivantes sont créées dans le cadre de cette pile :
| AWSadministrateur, AWS DevOps |
Passez en revue le CloudFormation modèle. | Dans le Le modèle fournit l'infrastructure spécifique au locataire. Dans cet exemple, il fournit la AWS KMS clé, Amazon SNSSQS, Amazon et l' CloudWatch alarme. | Développeur d'applications, AWS DevOps |
Passez en revue la fonction d'intégration des locataires. | Ouvrez Ouvrez le Notez que les NuGet packages suivants sont ajoutés en tant que dépendances au
| Développeur d'applications, AWS DevOps |
Passez en revue la InfraProvisioning fonction Tenant. | Accédez à Ouvrez Ouvrez le Notez que les NuGet packages suivants sont ajoutés en tant que dépendances au
| Développeur d'applications, AWS DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Créez la solution. | Pour créer la solution, effectuez les opérations suivantes :
Remarque : Assurez-vous de mettre à jour le | Développeur d'applications |
Démarrez l'AWSCDKenvironnement. | Ouvrez l'invite de commande Windows et accédez au dossier racine de AWS CDK l'application dans lequel le
Si vous avez créé un AWS profil pour les informations d'identification, utilisez la commande avec votre profil.
| AWSadministrateur, AWS DevOps |
Listez les AWS CDK piles. | Pour répertorier toutes les piles à créer dans le cadre de ce projet, exécutez la commande suivante.
Si vous avez créé un AWS profil pour les informations d'identification, utilisez la commande avec votre profil.
| AWSadministrateur, AWS DevOps |
Vérifiez quelles AWS ressources seront créées. | Pour passer en revue toutes les AWS ressources qui seront créées dans le cadre de ce projet, exécutez la commande suivante.
Si vous avez créé un AWS profil pour les informations d'identification, utilisez la commande avec votre profil.
| AWSadministrateur, AWS DevOps |
Déployez toutes les AWS ressources en utilisant AWSCDK. | Pour déployer toutes les AWS ressources, exécutez la commande suivante.
Si vous avez créé un AWS profil pour les informations d'identification, utilisez la commande avec votre profil.
Une fois le déploiement terminé, copiez la section API URL depuis les sorties dans l'invite de commande, comme illustré dans l'exemple suivant.
| AWSadministrateur, AWS DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Créez un nouveau locataire. | Pour créer le nouveau locataire, envoyez la demande curl suivante.
Remplacez le paramètre
L'exemple suivant montre le résultat.
| Développeur d'applications, AWS administrateur, 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.
| Développeur d'applications, AWS administrateur, 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.
| Développeur d'applications, AWS administrateur, AWS DevOps |
Supprimez la pile de locataires. | Pour supprimer la pile de locataires, envoyez la demande curl suivante.
Remplacez l'espace
L'exemple suivant montre le résultat.
| Développeur d'applications AWS DevOps, AWS administrateur |
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 :
| Développeur d'applications, AWS administrateur, AWS DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Détruisez l'environnement. | Avant le nettoyage de la pile, assurez-vous de ce qui suit :
Une fois le test terminé, AWS CDK vous pouvez l'utiliser pour détruire toutes les piles et les ressources associées en exécutant la commande suivante.
Si vous avez créé un AWS profil pour les informations d'identification, utilisez-le. Confirmez l'invite de suppression de la pile pour supprimer la pile. | AWSadministrateur, 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 duAPI. | Développeur d'applications AWS DevOps, AWS administrateur |
Ressources connexes
AWSCDK. NET
Atelier CDK. NETRéférence
Informations supplémentaires
Pile technologique de plan de contrôle
Le CDK code écrit dedans. NETest utilisé pour fournir l'infrastructure du plan de contrôle, qui comprend les ressources suivantes :
APIPasserelle
Sert de point REST API d'entrée pour la pile de plans de contrôle.
Intégration des locataires à la fonction Lambda
Cette fonction Lambda est initiée par API Gateway à l'aide de la méthode m.
Une API demande de POST méthode entraîne l'insertion de (
tenant name
,tenant description
) dans la tableTenant 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 IAMdes rôles 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 API demande de
DELETE
méthode supprimera l'enregistrement d'un nom de locataire spécifique de la tableTenant 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éé.
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.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 invite AWS CloudFormation à créer une nouvelle infrastructure locataire avec le CloudFormation modèle stocké dans un compartiment S3. Si l'enregistrement est pourREMOVE
, il initie la suppression d'une pile existante en fonction duTenant Name
champ de l'enregistrement du flux.Compartiment S3
C'est pour stocker le CloudFormation modèle.
IAMdes rôles pour chaque fonction Lambda et un rôle de service pour CloudFormation
Chaque fonction Lambda a un IAM rôle unique avec des autorisations de moindre privilège pour accomplir sa tâche. Par exemple, la fonction
Tenant On-boarding
Lambda dispose d'un accès en lecture/écriture à DynamoDB, et la fonctionTenant 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 AWS KMS clé). 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 due à sa convention de dénomination des ressources. Le nom du locataire ingéré à partir du 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 AWS des noms de ressources). 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 AWS KMS clé spécifique au locataire, une CloudWatch alarme, un SNS sujet, une SQS file d'attente et une SQS politique.
La AWS KMS clé est utilisée pour le chiffrement des données par Amazon SNS et Amazon SQS pour leurs messages. Les pratiques de sécurité pour AwsSolutionsSNS2et AwsSolutions
La SQS politique est utilisée dans la SQS file d'attente Amazon pour permettre au SNS sujet créé de transmettre le message à la file d'attente. Sans cette SQS politique, l'accès sera refusé. Pour plus d'informations, consultez la SNSdocumentation Amazon.