Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Onboarding dei tenant nell'architettura SaaS per il modello silo utilizzando C# e AWS CDK
Creato da Tabby Ward (AWS), Susmitha Reddy Gankidi () e Vijai Anand Ramalingam () AWS AWS
Archivio del codice | Ambiente: PoC o pilota | Tecnologie: modernizzazione; DevOps |
Carico di lavoro: open source | AWSservizi: AWS CloudFormation; Amazon DynamoDB; Amazon DynamoDB Streams; Lambda; Amazon Gateway AWS API |
Riepilogo
Le applicazioni Software as a Service (SaaS) possono essere create con una varietà di modelli architettonici diversi. Il modello a silo si riferisce a un'architettura in cui ai tenant vengono fornite risorse dedicate.
Le applicazioni SaaS si basano su un modello semplice per introdurre nuovi inquilini nel loro ambiente. Ciò richiede spesso l'orchestrazione di una serie di componenti per fornire e configurare correttamente tutti gli elementi necessari per creare un nuovo tenant. Questo processo, nell'architettura SaaS, viene chiamato onboarding dei tenant. L'onboarding dovrebbe essere completamente automatizzato per ogni ambiente SaaS utilizzando l'infrastruttura come codice nel processo di onboarding.
Questo modello ti guida attraverso un esempio di creazione di un tenant e fornitura di un'infrastruttura di base per il tenant su Amazon Web Services (). AWS Il pattern utilizza C# e il AWS Cloud Development Kit (AWSCDK).
Poiché questo schema crea un allarme di fatturazione, consigliamo di implementare lo stack nella regione Stati Uniti orientali (Virginia settentrionale) o us-east-1. AWS Per ulteriori informazioni, consulta la documentazione. AWS
Prerequisiti e limitazioni
Prerequisiti
Un principale di AWS Identity and Access Management (IAM) con IAM accesso sufficiente per creare AWS risorse per questo modello. Per ulteriori informazioni, vedete IAMruoli.
Installa Amazon Command Line Interface (AWSCLI) e configura AWS CLI per eseguire AWS CDK la distribuzione.
Visual Studio 2022
scaricato e installato o Visual Studio Code scaricato e installato. AWSConfigurazione del Toolkit for Visual Studio.
. NETCore 3.1 o successivo
(richiesto per le AWS CDK applicazioni C#) Amazon.Lambda.Tools
installato.
Limitazioni
AWSCDKutilizzi AWS CloudFormation
, pertanto AWS CDK le applicazioni sono soggette a quote CloudFormation di servizio. Per ulteriori informazioni, vedere AWS CloudFormation quote. Lo CloudFormation stack tenant viene creato con un ruolo di CloudFormation servizio
infra-cloudformation-role
con caratteri jolly sulle azioni (sns
* esqs*
) ma con risorse limitate al prefisso.tenant-cluster
Per un caso d'uso di produzione, valuta questa impostazione e fornisci solo l'accesso richiesto a questo ruolo di servizio. La funzioneInfrastructureProvision
Lambda utilizza anche un carattere jolly (cloudformation*
) per effettuare il provisioning dello CloudFormation stack, ma con risorse limitate al prefisso.tenant-cluster
La build docker di questo codice di esempio utilizza
--platform=linux/amd64
per forzare le immaginilinux/amd64
basate. Questo per garantire che gli artefatti dell'immagine finale siano adatti a Lambda, che per impostazione predefinita utilizza l'architettura x86-64. Se devi modificare l'architettura Lambda di destinazione, assicurati di modificare sia i Dockerfile che i codici. AWS CDK Per ulteriori informazioni, consulta il post sul blog Migrazione delle funzioni AWS Lambda ai processori Graviton2 basati su AWS ARM. Il processo di eliminazione dello stack non pulirà i log (gruppi di CloudWatch log e log) generati dallo stack. È necessario pulire manualmente i log tramite la console di AWS gestione Amazon CloudWatch o tramite. API
Questo modello è impostato come esempio. Per l'uso in produzione, valuta le seguenti configurazioni e apporta le modifiche in base ai requisiti aziendali:
Il bucket AWSSimple Storage Service (Amazon S3
) in questo esempio non ha il controllo delle versioni abilitato per motivi di semplicità. Valuta e aggiorna la configurazione secondo necessità. Per semplicità, questo esempio configura gli REST API endpoint Amazon API Gateway
senza autenticazione, autorizzazione o limitazione. Per l'uso in produzione, consigliamo di integrare il sistema con l'infrastruttura di sicurezza aziendale. Valuta questa impostazione e aggiungi le impostazioni di sicurezza richieste, se necessario. Per questo esempio di infrastruttura tenant, Amazon Simple Notification Service (AmazonSNS)
e Amazon Simple Queue Service (AmazonSQS) hanno solo configurazioni minime. Il servizio di gestione delle AWS chiavi (AWSKMS) per ogni tenant apre i SNS servizi Amazon CloudWatch e Amazon presenti nell'account da utilizzare in base alla politica AWS KMS chiave. La configurazione è solo un segnaposto di esempio. Modifica le configurazioni secondo necessità in base al tuo caso d'uso aziendale. L'intera configurazione, che include, a titolo esemplificativo ma non esaustivo, il provisioning e l'eliminazione degli API endpoint e dei tenant di backend mediante utilizzo AWS CloudFormation, copre solo il caso base di happy path. Valuta e aggiorna la configurazione con la logica di riprova necessaria, la logica aggiuntiva di gestione degli errori e la logica di sicurezza in base alle esigenze aziendali.
Il codice di esempio viene testato con up-to-date cdk-nag
per verificare le politiche al momento della stesura di questo documento. In futuro potrebbero essere applicate nuove politiche. Queste nuove politiche potrebbero richiedere la modifica manuale dello stack in base ai consigli prima di poter implementare lo stack. Esamina il codice esistente per assicurarti che sia in linea con i requisiti aziendali. Il codice si basa sulla generazione di un suffisso casuale invece di affidarsi AWS CDK a nomi fisici assegnati statici per la maggior parte delle risorse create. Questa configurazione serve a garantire che queste risorse siano uniche e non entrino in conflitto con altri stack. Per ulteriori informazioni, consulta la AWSCDKdocumentazione. Adattalo in base alle tue esigenze aziendali.
Questo esempio di pacchetti di codice. NETLambda crea artefatti in immagini basate su Docker e viene eseguito con il runtime dell'immagine Container fornito da Lambda. Il runtime dell'immagine del contenitore presenta vantaggi per i meccanismi standard di trasferimento e archiviazione (registri dei contenitori) e per ambienti di test locali più accurati (tramite l'immagine del contenitore). È possibile cambiare il progetto in modo che utilizzi Lambda fornito. NETtempi di esecuzione per ridurre il tempo di creazione delle immagini Docker, ma sarà quindi necessario configurare meccanismi di trasferimento e archiviazione e assicurarsi che la configurazione locale corrisponda alla configurazione Lambda. Modifica il codice per allinearlo ai requisiti aziendali degli utenti.
Versioni del prodotto
AWSCDKversione 2.45.0 o successiva
Visual Studio 2022
Architettura
Stack tecnologico
Amazon API Gateway
AWS CloudFormation
Amazon CloudWatch
Amazon DynamoDB
AWSIdentity and Access Management (IAM)
AWS KMS
AWSLambda
Amazon S3
Amazon SNS
Amazon SQS
Architettura
Il diagramma seguente mostra il flusso di creazione dello stack dei tenant. Per ulteriori informazioni sugli stack tecnologici control-plane e tenant, consultate la sezione Informazioni aggiuntive.
![Flusso di lavoro per creare un tenant e fornire un'infrastruttura di base per il tenant su. AWS](images/pattern-img/5baef800-fe39-4eb8-b11d-2c23eb3175fc/images/0b579484-b87c-4acb-8c60-8c33c18370e3.png)
Flusso di creazione dello stack dei tenant
L'utente invia una POST API richiesta con un nuovo payload del tenant (nome del tenant, descrizione del tenant) JSON a un host ospitato REST API da Amazon Gateway. API Il API Gateway elabora la richiesta e la inoltra alla funzione di backend Lambda Tenant Onboarding. In questo esempio, non esiste alcuna autorizzazione o autenticazione. In una configurazione di produzione, questo API dovrebbe essere integrato con il sistema di sicurezza dell'infrastruttura SaaS.
La funzione Tenant Onboarding verifica la richiesta. Quindi tenta di archiviare il record del tenant, che include il nome del tenant, l'identificatore univoco universale del tenant generato (UUID) e la descrizione del tenant, nella tabella di onboarding del tenant di Amazon DynamoDB.
Dopo che DynamoDB ha archiviato il record, un flusso DynamoDB avvia la funzione downstream Lambda Tenant Infrastructure.
La funzione Tenant Infrastructure Lambda agisce in base al flusso DynamoDB ricevuto. Se lo stream è relativo all'INSERTevento, la funzione utilizza la NewImage sezione dello stream (ultimo record di aggiornamento, campo Tenant Name) per richiamare CloudFormation la creazione di una nuova infrastruttura tenant utilizzando il modello archiviato nel bucket S3. Il CloudFormation modello richiede il parametro Tenant Name.
AWS CloudFormation crea l'infrastruttura del tenant in base al CloudFormation modello e ai parametri di input.
Ogni configurazione dell'infrastruttura tenant presenta un CloudWatch allarme, un allarme di fatturazione e un evento di allarme.
L'evento di allarme diventa un messaggio indirizzato a un SNS argomento, che viene crittografato dalla chiave del tenant. AWS KMS
L'SNSargomento inoltra il messaggio di allarme ricevuto alla SQS coda, che viene crittografata dalla chiave di crittografia for del tenant. AWS KMS
Altri sistemi possono essere integrati con Amazon SQS per eseguire azioni basate sui messaggi in coda. In questo esempio, per mantenere il codice generico, i messaggi in arrivo rimangono in coda e richiedono l'eliminazione manuale.
Flusso di eliminazione dello stack dei tenant
L'utente invia una DELETE API richiesta con un nuovo payload del tenant (nome del tenant, descrizione del tenant) JSON all'hosting REST API di Amazon API Gateway, che elaborerà la richiesta e la inoltrerà alla funzione Tenant Onboarding. In questo esempio, non esiste alcuna autorizzazione o autenticazione. In una configurazione di produzione, questo API sarà integrato con il sistema di sicurezza dell'infrastruttura SaaS.
La funzione Tenant Onboarding verificherà la richiesta e quindi tenterà di eliminare il record del tenant (nome del tenant) dalla tabella Tenant Onboarding.
Dopo che DynamoDB ha eliminato correttamente il record (il record esiste nella tabella e viene eliminato), un flusso DynamoDB avvia la funzione downstream Lambda Tenant Infrastructure.
La funzione Tenant Infrastructure Lambda agisce in base al record di flusso DynamoDB ricevuto. Se lo stream è relativo all'REMOVEevento, la funzione utilizza la OldImage sezione del record (informazioni sul record e campo Tenant Name, prima dell'ultima modifica, ovvero delete) per avviare l'eliminazione di uno stack esistente in base alle informazioni di quel record.
AWS CloudFormation elimina lo stack tenant di destinazione in base all'input.
Strumenti
AWSservizi
Amazon API Gateway ti aiuta a creare, pubblicare, gestire RESTHTTP, monitorare e proteggere WebSocket APIs su qualsiasi scala.
AWSCloud Development Kit (AWSCDK) è un framework di sviluppo software che consente di definire e fornire l'infrastruttura AWS Cloud in codice.
AWSCDKToolkit è un kit di sviluppo cloud a riga di comando che ti aiuta a interagire con la tua app AWS Cloud Development Kit (AWSCDK).
AWSCommand Line Interface (AWSCLI) è uno strumento open source che consente di interagire con i AWS servizi tramite comandi nella shell della riga di comando.
AWS CloudFormationti aiuta a configurare AWS le risorse, a fornirle in modo rapido e coerente e a gestirle durante tutto il loro ciclo di vita tra account e regioni. AWS
Amazon DynamoDB è un servizio di database SQL No completamente gestito che offre prestazioni veloci, prevedibili e scalabili.
AWSIdentity and Access Management (IAM) consente di gestire in modo sicuro l'accesso alle AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
AWSKey Management Service (AWSKMS) consente di creare e controllare chiavi crittografiche per proteggere i dati.
AWSLambda è un servizio di elaborazione che ti aiuta a eseguire il codice senza dover effettuare il provisioning o gestire i server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
Amazon Simple Notification Service (AmazonSNS) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail.
Amazon Simple Queue Service (AmazonSQS) fornisce una coda ospitata sicura, durevole e disponibile che ti aiuta a integrare e disaccoppiare sistemi e componenti software distribuiti.
AWSToolkit for Visual Studio è un plug-in per l'ambiente di sviluppo integrato di Visual Studio IDE (). Il Toolkit for Visual Studio supporta lo sviluppo, il debug e la distribuzione. NETapplicazioni che utilizzano servizi. AWS
Altri strumenti
Visual Studio
include compilatori, strumenti di completamento del codice, progettisti grafici e altre funzionalità che supportano lo sviluppo del software. IDE
Codice
Il codice per questo pattern si trova nel repository Tenant onboarding in SaaS Architecture for Silo
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Verifica l'installazione di Node.js. | Per verificare che Node.js sia installato sul computer locale, esegui il comando seguente.
| AWSamministratore, AWS DevOps |
Installa AWS CDK Toolkit. | Per installare AWS CDK Toolkit sul computer locale, esegui il seguente comando.
Se npm non è installato, è possibile installarlo dal sito Node.js | AWSamministratore, AWS DevOps |
Verifica la versione del AWS CDK Toolkit. | Per verificare che la versione di AWS CDK Toolkit sia installata correttamente sul computer, esegui il comando seguente.
| AWSamministratore, AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Clonare il repository. | Clona il repository In Visual Studio 2022, apri la Le seguenti risorse vengono create come parte di questo stack:
| AWSamministratore, AWS DevOps |
Rivedi il CloudFormation modello. | Nella Il modello fornisce l'infrastruttura specifica del tenant. In questo esempio, fornisce la AWS KMS chiave, Amazon SNSSQS, Amazon e l' CloudWatch allarme. | Sviluppatore di app, AWS DevOps |
Esamina la funzione di onboarding degli inquilini. | Apri Apri e rivedi il codice. Nota che i seguenti NuGet pacchetti vengono aggiunti come dipendenze al
| Sviluppatore di app, AWS DevOps |
Esamina la InfraProvisioning funzione Tenant. | Accedi a Aprire Apri e rivedi il codice. Nota che i seguenti NuGet pacchetti vengono aggiunti come dipendenze al
| Sviluppatore di app, AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea la soluzione. | Per creare la soluzione, effettuate le seguenti operazioni:
Nota: assicurati di aggiornare il | Sviluppatore di app |
Avvia l'AWSCDKambiente. | Apri il prompt dei comandi di Windows e vai alla cartella principale dell'AWSCDKapp in cui è disponibile il
Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.
| AWSamministratore, AWS DevOps |
Elenca le AWS CDK pile. | Per elencare tutti gli stack da creare come parte di questo progetto, esegui il seguente comando.
Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.
| AWSamministratore, AWS DevOps |
Verifica quali AWS risorse verranno create. | Per esaminare tutte le AWS risorse che verranno create come parte di questo progetto, esegui il comando seguente.
Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.
| AWSamministratore, AWS DevOps |
Distribuisci tutte le AWS risorse utilizzando AWSCDK. | Per distribuire tutte le AWS risorse esegui il comando seguente.
Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.
Una volta completata la distribuzione, copiate la sezione API URL from the outputs nel prompt dei comandi, come illustrato nell'esempio seguente.
| AWSamministratore, AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un nuovo inquilino. | Per creare il nuovo tenant, invia la seguente richiesta curl.
Cambia il
L'esempio seguente mostra l'output.
| Sviluppatore di app, AWS amministratore, AWS DevOps |
Verifica i dettagli del tenant appena creato in DynamoDB. | Per verificare i dettagli del tenant appena creato in DynamoDB, procedi nel seguente modo.
| Sviluppatore di app, AWS amministratore, AWS DevOps |
Verifica la creazione dello stack per il nuovo tenant. | Verifica che il nuovo stack sia stato creato correttamente e dotato dell'infrastruttura per il tenant appena creato in base al modello. CloudFormation
| Sviluppatore di app, AWS amministratore, AWS DevOps |
Elimina lo stack degli inquilini. | Per eliminare lo stack dei tenant, invia la seguente richiesta curl.
Cambia il
L'esempio seguente mostra l'output.
| Sviluppatore di app AWS DevOps, AWS amministratore |
Verifica l'eliminazione dello stack per il tenant esistente. | Per verificare che lo stack di tenant esistente sia stato eliminato, effettuate le seguenti operazioni:
| Sviluppatore di app, amministratore, AWS AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Distruggi l'ambiente. | Prima di ripulire lo stack, accertati di quanto segue:
Al termine del test, AWS CDK può essere utilizzato per distruggere tutti gli stack e le relative risorse eseguendo il comando seguente.
Se hai creato un AWS profilo per le credenziali, usa il profilo. Conferma la richiesta di eliminazione dello stack per eliminare lo stack. | AWSamministratore, AWS DevOps |
Pulisci Amazon CloudWatch Logs. | Il processo di eliminazione dello stack non eliminerà CloudWatch i log (gruppi di log e log) generati dallo stack. Pulisci manualmente CloudWatch le risorse utilizzando la console o il CloudWatch . API | Sviluppatore di app AWS DevOps, AWS amministratore |
Risorse correlate
Informazioni aggiuntive
Stack tecnologico Control-Plane
Il CDK codice scritto in. NETviene utilizzato per fornire l'infrastruttura del piano di controllo, che comprende le seguenti risorse:
APIGateway
Funge da punto di REST API ingresso per lo stack del piano di controllo.
Funzione Lambda di onboarding dei tenant
Questa funzione Lambda viene avviata da API Gateway utilizzando il metodo m.
Una API richiesta di POST metodo comporta l'inserimento di (
tenant name
,tenant description
) nella tabellaTenant Onboarding
DynamoDB.In questo esempio di codice, il nome del tenant viene utilizzato anche come parte del nome dello stack del tenant e dei nomi delle risorse all'interno di tale stack. Questo serve a facilitare l'identificazione di queste risorse. Il nome del tenant deve essere univoco in tutta la configurazione per evitare conflitti o errori. La configurazione dettagliata della convalida dell'input è spiegata nella documentazione sui IAMruoli e nella sezione Limitazioni.
Il processo di persistenza nella tabella DynamoDB avrà esito positivo solo se il nome del tenant non viene utilizzato in nessun altro record della tabella.
Il nome del tenant in questo caso è la chiave di partizione per questa tabella, poiché solo la chiave di partizione può essere utilizzata come espressione di condizione.
PutItem
Se il nome del tenant non è mai stato registrato prima, il record verrà salvato correttamente nella tabella.
Tuttavia, se il nome del tenant è già utilizzato da un record esistente nella tabella, l'operazione avrà esito negativo e avvierà un'eccezione DynamoDB.
ConditionalCheckFailedException
L'eccezione verrà utilizzata per restituire un messaggio di errore (HTTP BadRequest
) che indica che il nome del tenant esiste già.Una API richiesta di
DELETE
metodo rimuoverà il record per un nome di tenant specifico dalla tabellaTenant Onboardin
g.L'eliminazione del record DynamoDB in questo esempio avrà esito positivo anche se il record non esiste.
Se il record di destinazione esiste e viene eliminato, creerà un record di flusso DynamoDB. Altrimenti, non verrà creato alcun record downstream.
Onboarding di DynamoDB da parte dei tenant, con Amazon DynamoDB Streams abilitato
Questo registra le informazioni sui metadati del tenant e qualsiasi salvataggio o eliminazione di record invierà un flusso a valle alla funzione
Tenant Infrastructure
Lambda.Funzione Lambda dell'infrastruttura tenant
Questa funzione Lambda viene avviata dal record di flusso DynamoDB del passaggio precedente. Se il record è relativo a un
INSERT
evento, richiama AWS CloudFormation la creazione di una nuova infrastruttura tenant con il CloudFormation modello archiviato in un bucket S3. Se il record è forREMOVE
, avvia l'eliminazione di uno stack esistente in base al campo del record dello stream.Tenant Name
Bucket S3
Serve per memorizzare il modello. CloudFormation
IAMruoli per ogni funzione Lambda e un ruolo di servizio per CloudFormation
Ogni funzione Lambda ha il suo IAM ruolo unico con autorizzazioni con privilegi minimi per svolgere il proprio compito. Ad esempio, la funzione
Tenant On-boarding
Lambda ha accesso in lettura/scrittura a DynamoDB e la funzioneTenant Infrastructure
Lambda può leggere solo il flusso DynamoDB.Viene creato un ruolo di CloudFormation servizio personalizzato per il provisioning dello stack dei tenant. Questo ruolo di servizio contiene autorizzazioni aggiuntive per il provisioning CloudFormation dello stack (ad esempio, la chiave). AWS KMS Questo divide i ruoli tra Lambda CloudFormation ed evita tutte le autorizzazioni su un singolo ruolo (ruolo Infrastructure Lambda).
Le autorizzazioni che consentono azioni potenti (come la creazione e l'eliminazione di CloudFormation pile) sono bloccate e consentite solo per le risorse che iniziano con.
tenantcluster-
L'eccezione è data dalla AWS KMS convenzione di denominazione delle risorse. Il nome del tenant importato da API verrà aggiuntotenantcluster-
insieme ad altri controlli di convalida (alfanumerico con solo trattino e limitato a meno di 30 caratteri per adattarsi alla maggior parte dei nomi delle risorse). AWS Ciò garantisce che il nome del tenant non comporti accidentalmente l'interruzione degli stack o delle risorse dell'infrastruttura di base.
Stack tecnologico Tenant
Un CloudFormation modello è archiviato nel bucket S3. Il modello fornisce la AWS KMS chiave specifica del tenant, un CloudWatch allarme, un SNS argomento, una SQS coda e una politica. SQS
La AWS KMS chiave viene utilizzata per la crittografia dei dati da Amazon SNS e Amazon SQS per i loro messaggi. Le pratiche di sicurezza per AwsSolutions- SNS2 e AwsSolutions - SQS2
La SQS policy viene utilizzata nella SQS coda di Amazon per consentire all'SNSargomento creato di recapitare il messaggio alla coda. Senza la SQS politica, l'accesso verrà negato. Per ulteriori informazioni, consulta la SNSdocumentazione di Amazon.