Onboarding dei tenant nell'architettura SaaS per il modello silo utilizzando C# e AWS CDK - Prontuario AWS

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: Tennat Onboarding Silo

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

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 funzione InfrastructureProvision 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 immagini linux/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

Flusso di creazione dello stack dei tenant

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

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

  3. Dopo che DynamoDB ha archiviato il record, un flusso DynamoDB avvia la funzione downstream Lambda Tenant Infrastructure.

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

  5. AWS CloudFormation crea l'infrastruttura del tenant in base al CloudFormation modello e ai parametri di input.

  6. Ogni configurazione dell'infrastruttura tenant presenta un CloudWatch allarme, un allarme di fatturazione e un evento di allarme.

  7. L'evento di allarme diventa un messaggio indirizzato a un SNS argomento, che viene crittografato dalla chiave del tenant. AWS KMS

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

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

  2. La funzione Tenant Onboarding verificherà la richiesta e quindi tenterà di eliminare il record del tenant (nome del tenant) dalla tabella Tenant Onboarding. 

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

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

  5. 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 Model Example. APG

Epiche

AttivitàDescrizioneCompetenze richieste

Verifica l'installazione di Node.js.

Per verificare che Node.js sia installato sul computer locale, esegui il comando seguente.

node --version
AWSamministratore, AWS DevOps

Installa AWS CDK Toolkit.

Per installare AWS CDK Toolkit sul computer locale, esegui il seguente comando.

npm install -g aws-cdk

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.  

cdk --version
AWSamministratore, AWS DevOps
AttivitàDescrizioneCompetenze richieste

Clonare il repository.

Clona il repository e accedi alla \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example cartella.

In Visual Studio 2022, apri la \src\TenantOnboardingInfra.sln soluzione. Apri il TenantOnboardingInfraStack.cs file e rivedi il codice.

Le seguenti risorse vengono create come parte di questo stack:

  • DynamoDB tabella

  • Bucket S3 (carica il CloudFormation modello nel bucket S3).

  • Ruolo di esecuzione Lambda

  • Funzione Lambda

  • APIGateway API

  • Sorgente evento per la funzione Lambda

AWSamministratore, AWS DevOps

Rivedi il CloudFormation modello.

Nella \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\template cartellainfra.yaml, apri e rivedi il CloudFormation modello. Questo modello verrà idratato con il nome del tenant recuperato dalla tabella DynamoDB di onboarding del tenant.

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 Function.cs e rivedi il codice per la funzione di onboarding dei tenant, creata con il progetto Visual Studio Lambda AWS (. NETModello Core- C#) con. NETProgetto 6 (Container Image).

Apri e rivedi il codice. Dockerfile DockerfileÈ un file di testo che contiene istruzioni per creare l'immagine del contenitore Lambda.

Nota che i seguenti NuGet pacchetti vengono aggiunti come dipendenze al TenantOnboardingFunction progetto:

  • Amazon.Lambda.APIGatewayEvents

  • AWSSDK.DynamoDBv2

  • Newtonsoft.Json

Sviluppatore di app, AWS DevOps

Esamina la InfraProvisioning funzione Tenant.

Accedi a \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\InfraProvisioningFunction.

Aprire Function.cs ed esaminare il codice per la funzione di provisioning dell'infrastruttura tenant, creata con Visual Studio AWS Lambda Project (. NETModello Core- C#) con. NETProgetto 6 (Container Image).

Apri e rivedi il codice. Dockerfile

Nota che i seguenti NuGet pacchetti vengono aggiunti come dipendenze al InfraProvisioningFunction progetto:

  • Amazon.Lambda.DynamoDBEvents

  • AWSSDK.DynamoDBv2

  • AWSSDK.Cloudformation

Sviluppatore di app, AWS DevOps
AttivitàDescrizioneCompetenze richieste

Crea la soluzione.

Per creare la soluzione, effettuate le seguenti operazioni:

  1. In Visual Studio 2022, apri la \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra.sln soluzione. 

  2. Apri il menu contestuale (fai clic con il pulsante destro del mouse) per la soluzione e scegli Crea soluzione.

Nota: assicurati di aggiornare il Amazon.CDK.Lib NuGet pacchetto alla versione più recente del \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra progetto prima di creare la soluzione.

Sviluppatore di app

Avvia l'AWSCDKambiente.

Apri il prompt dei comandi di Windows e vai alla cartella principale dell'AWSCDKapp in cui è disponibile il cdk.json file ()\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example. Eseguite il seguente comando per il bootstrap.

cdk bootstrap

Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.

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

Elenca le AWS CDK pile.

Per elencare tutti gli stack da creare come parte di questo progetto, esegui il seguente comando.

cdk ls cdk ls --profile <profile name>

Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.

cdk ls --profile <profile name>
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.

cdk diff

Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.

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

Distribuisci tutte le AWS risorse utilizzando AWSCDK.

Per distribuire tutte le AWS risorse esegui il comando seguente.

cdk deploy --all --require-approval never

Se hai creato un AWS profilo per le credenziali, usa il comando con il tuo profilo.

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

Una volta completata la distribuzione, copiate la sezione API URL from the outputs nel prompt dei comandi, come illustrato nell'esempio seguente.

Outputs: TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/
AWSamministratore, AWS DevOps
AttivitàDescrizioneCompetenze richieste

Crea un nuovo inquilino.

Per creare il nuovo tenant, invia la seguente richiesta curl.

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

Cambia il <TenantOnboardingAPIEndpoint* from CDK Output> segnaposto con il valore effettivo di AWSCDK, come mostrato nell'esempio seguente.

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

L'esempio seguente mostra l'output.

{"message": "A new tenant added - 5/4/2022 7:11:30 AM"}
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.

  1. Apri AWS la console di gestione e accedi al servizio Amazon DynamoDB.

  2. Nella barra di navigazione a sinistra, scegli Esplora elementi e scegli la TenantOnboarding tabella.

    Nota: il nome dell'inquilino verrà preceduto da. tenantcluster- Per ulteriori informazioni, consulta la sezione Informazioni aggiuntive.

  3. Verifica che venga creato un nuovo elemento con i dettagli del tenant.

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

  1. Apri la console. CloudFormation

  2. Nella barra di navigazione a sinistra, scegli Stacks e verifica che uno stack con il nome del tenant sia stato creato correttamente.

  3. Scegli lo stack di tenant appena creato, quindi scegli la scheda Risorse. Nota la risorsa di allarme e la SQS risorsa Amazon.

  4. Apri un nuovo terminale con AWS le credenziali configurate e punta alla regione corretta. Per generare un allarme di prova, inserisci il seguente codice, sostituendolo <alarm resource name> con il nome della risorsa di allarme indicato nel passaggio 3.

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

    L'esempio seguente mostra il codice con il nome di una risorsa di allarme.

    aws cloudwatch set-alarm-state --alarm-name tenantcluster-tenant123-alarm --state-value ALARM --state-reason 'Test setup'
  5. Apri la console e accedi alla SQS console Amazon. Scegli il nome della SQS risorsa Amazon identificato nel passaggio 3. Segui le istruzioni della AWS documentazione per ricevere ed eliminare il messaggio di prova dall'allarme generato nel passaggio 4.

Sviluppatore di app, AWS amministratore, AWS DevOps

Elimina lo stack degli inquilini.

Per eliminare lo stack dei tenant, invia la seguente richiesta curl.

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

Cambia il <TenantOnboardingAPIEndpoint* from CDK Output> segnaposto con il valore effettivo e passa <Tenant Name from previous step> al valore effettivo della precedente fase di creazione del tenant, come mostrato nell'esempio seguente. AWS CDK

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

L'esempio seguente mostra l'output.

{"message": "Tenant destroyed - 5/4/2022 7:14:48 AM"}
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:

  1. Apri la console e accedi alla CloudFormation console.

  2. Nella barra di navigazione a sinistra, verifica che lo stack esistente con il nome del tenant non sia più nella console (se la CloudFormation console è configurata per mostrare solo gli stack attivi) o che sia in fase di eliminazione. Se lo stack non è più presente nella CloudFormation console, utilizza l'elenco a discesa per modificare l'impostazione della console da Attivo a Eliminato per visualizzare lo stack eliminato e verificare che lo stack sia stato eliminato correttamente.

Sviluppatore di app, amministratore, AWS AWS DevOps
AttivitàDescrizioneCompetenze richieste

Distruggi l'ambiente.

Prima di ripulire lo stack, accertati di quanto segue:

  • Tutti i record in DynamoDB vengono rimossi tramite la precedente operazione di eliminazione del tenant o tramite la console DynamoDB o. API L'eliminazione di ogni record del tenant avvierà la pulizia della sua controparte. AWS CloudFormation  

  • Tutti gli AWS CloudFormation stack basati sui tenant vengono ripuliti (nel caso in cui la logica di pulizia dei trigger di DynamoDB fallisca) sulla console. AWS CloudFormation

Al termine del test, AWS CDK può essere utilizzato per distruggere tutti gli stack e le relative risorse eseguendo il comando seguente.

cdk destroy --all;

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:

  1. APIGateway

    Funge da punto di REST API ingresso per lo stack del piano di controllo.

  2. 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 tabella Tenant 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 tabella Tenant 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.

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

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

  5. Bucket S3

    Serve per memorizzare il modello. CloudFormation

  6. 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 funzione Tenant 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à aggiunto tenantcluster- 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 consigliano di configurare Amazon SNS e Amazon SQS con la crittografia. Tuttavia, gli CloudWatch allarmi non funzionano con Amazon SNS quando si utilizza una chiave AWS gestita, quindi in questo caso è necessario utilizzare una chiave gestita dal cliente. Per ulteriori informazioni, consulta il AWSKnowledge Center.

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.