Automatizza la replica delle RDS istanze Amazon tra gli account AWS - 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à.

Automatizza la replica delle RDS istanze Amazon tra gli account AWS

Creato da Parag Nagwekar () e Arun Chandapillai () AWS AWS

Ambiente: produzione

Tecnologie: database DevOps; senza server; infrastruttura

Carico di lavoro: tutti gli altri carichi di lavoro

AWSservizi: AWS LambdaRDS; Amazon; per AWS SDK Python (Boto3); Step Functions; Amazon AWS SNS

Riepilogo

Questo modello mostra come automatizzare il processo di replica, tracciamento e rollback delle istanze DB di Amazon Relational Database Service (AmazonRDS) su diversi account AWS utilizzando AWS Step Functions e Lambda. AWS Puoi utilizzare questa automazione per eseguire repliche su larga scala di istanze RDS DB senza alcun impatto sulle prestazioni o sovraccarico operativo, indipendentemente dalle dimensioni dell'organizzazione. È inoltre possibile utilizzare questo modello per aiutare l'organizzazione a rispettare le strategie obbligatorie di governance dei dati o i requisiti di conformità che richiedono la replica e la ridondanza dei dati su diversi account e regioni. AWS AWS La replica su più account RDS dei dati Amazon su larga scala è un processo manuale inefficiente e soggetto a errori che può essere costoso e dispendioso in termini di tempo, ma l'automazione in questo modello può aiutarti a ottenere la replica tra account in modo sicuro, efficace ed efficiente.

Prerequisiti e limitazioni

Prerequisiti

  • Due account AWS

  • Un'istanza RDS DB, attiva e funzionante nell'AWSaccount di origine

  • Un gruppo di sottoreti per l'istanza RDS DB nell'account di destinazione AWS

  • Una AWS chiave Key Management Service (AWSKMS) creata nell'AWSaccount di origine e condivisa con l'account di destinazione (per ulteriori informazioni sui dettagli delle politiche, consulta la sezione Informazioni aggiuntive di questo modello).

  • Una AWS KMS chiave nell'AWSaccount di destinazione per crittografare il database nell'account di destinazione

Versioni del prodotto

  • Python 3.9 (usando Lambda) AWS

  • Postgre SQL 11.3, 13.x e 14.x

Architettura

Stack tecnologico

  • Amazon Relational Database Service (AmazonRDS)

  • Servizio di notifica semplice Amazon (AmazonSNS)

  • AWSServizio di gestione delle chiavi (AWSKMS)

  • AWSLambda

  • AWS Secrets Manager

  • AWS Step Functions

Architettura Target

Il diagramma seguente mostra un'architettura per l'utilizzo di Step Functions per orchestrare la replica pianificata e su richiesta delle istanze RDS DB da un account di origine (account A) a un account di destinazione (account B).

Replica di istanze Amazon RDS DB tra account di origine e destinazione utilizzando Step Functions.

Nell'account di origine (account A nel diagramma), la macchina a stati Step Functions esegue le seguenti operazioni:

  1. Crea un'istantanea dall'istanza RDS DB nell'account A.

  2. Copia e crittografa lo snapshot con una AWS KMS chiave dell'account A. Per garantire la crittografia in transito, lo snapshot viene crittografato indipendentemente dal fatto che l'istanza DB sia crittografata o meno.

  3. Condivide lo snapshot DB con l'account B dando all'account B l'accesso allo snapshot.

  4. Invia una notifica all'SNSargomento, quindi l'SNSargomento richiama la funzione Lambda nell'account B.

Nell'account di destinazione (account B nel diagramma), la funzione Lambda esegue la macchina a stati Step Functions per orchestrare quanto segue:

  1. Copia l'istantanea condivisa dall'account A all'account B, utilizzando prima la AWS KMS chiave dell'account A per decrittografare i dati e poi crittografare i dati utilizzando la chiave nell'account B. AWS KMS

  2. Legge il segreto da Secrets Manager per acquisire il nome dell'istanza DB corrente.

  3. Ripristina l'istanza DB dallo snapshot con un nuovo nome e una AWS KMS chiave predefinita per Amazon. RDS

  4. Legge l'endpoint del nuovo database e aggiorna il segreto in Secrets Manager con il nuovo endpoint del database, quindi contrassegna l'istanza DB precedente in modo che possa essere eliminata in un secondo momento.

  5. Mantiene le ultime N istanze dei database ed elimina tutte le altre istanze.

Strumenti

AWSstrumenti

  • Amazon Relational Database Service (RDSAmazon) ti aiuta a configurare, gestire e scalare un database relazionale nel AWS cloud.

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

  • AWS CloudFormationti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su AWS più account e regioni.

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

  • AWSSDKfor Python (Boto3) è un kit di sviluppo software che consente di integrare l'applicazione, la libreria o lo script Python con i servizi. AWS

  • AWSSecrets Manager consente di sostituire le credenziali codificate nel codice, comprese le password, con una chiamata a API Secrets Manager per recuperare il segreto a livello di codice.

  • AWSStep Functions è un servizio di orchestrazione serverless che consente di combinare funzioni Lambda e altri AWS servizi per creare applicazioni aziendali critiche.

Codice

Il codice per questo pattern è disponibile nel repository Crossaccount Replication. GitHub RDS

Epiche

AttivitàDescrizioneCompetenze richieste

Implementa lo CloudFormation stack nell'account di origine.

  1. Accedi alla console di AWS gestione per l'account di origine (account A) e apri la CloudFormation console.

  2. Nel riquadro di navigazione selezionare Stacks (Stack).

  3. Scegli Crea stack, quindi scegli Con risorse esistenti (importa risorse).

  4. Nella pagina Identifica risorse, scegli Avanti.

  5. Nella pagina Specificare il modello, seleziona Carica un modello.

  6. Scegli file, seleziona il Cloudformation-SourceAccountRDS.yaml file dal repository GitHub Crossaccount RDS Replication, quindi scegli Avanti.

  7. Per il nome dello stack, inserisci un nome per lo stack.

  8. Nella sezione Parametri, specificate i parametri definiti nel modello dello stack:

    • Per DestinationAccountNumber, inserisci il numero di account per l'istanza RDS DB di destinazione.

    • Per KeyName, inserisci la tua AWS KMS chiave.

    • Per ScheduleExpression, inserisci un'espressione cron (l'impostazione predefinita è ogni giorno alle 12:00).

    • Per S ourceDBIdentifier, inserisci il nome del database di origine.

    • Per S ourceDBSnapshot Name, inserisci il nome dell'istantanea o accetta quello predefinito.

  9. Scegli Next (Successivo).

  10. Nella pagina Configura le opzioni dello stack, lascia i valori predefiniti, quindi scegli Avanti.

  11. Controlla la configurazione dello stack, quindi scegli Invia.

  12. Scegli la scheda Risorse per il tuo stack, quindi annota l'Amazon Resource Name (ARN) dell'SNSargomento.

Amministratore del cloud, architetto del cloud

Implementa lo CloudFormation stack nell'account di destinazione.

  1. Accedi alla console di AWS gestione per l'account di destinazione (account B) e apri la CloudFormation console.

  2. Nel riquadro di navigazione selezionare Stacks (Stack).

  3. Scegli Crea stack, quindi scegli Con risorse esistenti (importa risorse).

  4. Nella pagina Identifica risorse, scegli Avanti.

  5. Nella pagina Specificare il modello, seleziona Carica un modello.

  6. Scegli il file, seleziona il Cloudformation-DestinationAccountRDS.yaml file dal repository GitHub Crossaccount RDS Replication, quindi scegli Avanti.

  7. Per il nome dello stack, inserisci un nome per lo stack.

  8. Nella sezione Parametri, specificate i parametri definiti nel modello dello stack:

    • Per DatabaseName, inserisci un nome per il tuo database.

    • Per Engine, inserisci il tipo di motore di database che corrisponde al database di origine.

    • Per DBInstanceClass, inserisci il tipo di istanza di database preferito o accetta quello predefinito.

    • Per i sottoreti, inserisci il gruppo di VPC sottoreti esistente. Per istruzioni sulla creazione di un gruppo di sottoreti, consulta la Fase 2: Creare un gruppo di sottoreti DB nella Amazon RDS User Guide.

    • Per SecretName, inserisci il percorso e il nome segreto o accetta quello predefinito.

    • Per SGID, inserisci l'ID del gruppo di sicurezza del cluster di destinazione.

    • Per KMSKey, inserisci ARN la KMS chiave nel tuo account di destinazione.

    • Ad esempio NoOfOlderInstances, inserisci il numero di vecchie copie delle istanze RDS DB che desideri conservare per il rollback.

  9. Scegli Next (Successivo).

  10. Nella pagina Configura le opzioni dello stack, lascia i valori predefiniti, quindi scegli Avanti.

  11. Controlla la configurazione dello stack, quindi scegli Invia.

  12. Scegli la scheda Risorse per il tuo stack, quindi annota l'ID fisico e ARN di. InvokeStepFunction

Architetto cloud, DevOps ingegnere, amministratore del cloud

Verifica la creazione dell'istanza RDS DB nell'account di destinazione.

  1. Accedi alla console di AWS gestione e apri la RDSconsole Amazon.

  2. Nel riquadro di navigazione, scegli Database, quindi verifica che la nuova istanza RDS DB compaia nel nuovo cluster.

Amministratore cloud, architetto cloud, DevOps ingegnere

Sottoscrivi la funzione Lambda all'SNSargomento.

È necessario eseguire i seguenti AWS comandi Command Line Interface (AWSCLI) per sottoscrivere la funzione Lambda nell'account di destinazione (account B) all'SNSargomento nell'account di origine (account A).

Nell'account A, esegui il seguente comando:

aws sns add-permission \ --label lambda-access --aws-account-id <DestinationAccount> \ --topic-arn <Arn of SNSTopic > \ --action-name Subscribe ListSubscriptionsByTopic

Nell'account B, esegui il seguente comando:

aws lambda add-permission \ --function-name <Name of InvokeStepFunction> \ --source-arn <Arn of SNSTopic > \ --statement-id function-with-sns \ --action lambda:InvokeFunction \ --principal sns.amazonaws.com

Nell'account B, esegui il seguente comando:

aws sns subscribe \ --protocol "lambda" \ --topic-arn <Arn of SNSTopic> \ --notification-endpoint <Arn of InvokeStepFunction>
Amministratore cloud, architetto cloud, DBA

Sincronizza l'istanza RDS DB dall'account di origine con l'account di destinazione.

Avvia la replica del database su richiesta avviando la macchina a stati Step Functions nell'account di origine.

  1. Apri la console Step Functions.

  2. Nel riquadro di navigazione, scegli Macchine a stati.

  3. Scegli la tua macchina a stati.

  4. Nella scheda Esecuzioni, seleziona la funzione, quindi scegli Avvia esecuzione per avviare il flusso di lavoro.

Nota: è disponibile uno scheduler che consente di eseguire la replica automaticamente nei tempi previsti, ma per impostazione predefinita è disattivato. Puoi trovare il nome della CloudWatch regola Amazon per lo scheduler nella scheda Risorse dello CloudFormation stack nell'account di destinazione. Per istruzioni su come modificare la regola CloudWatch Events, consulta Eliminazione o disabilitazione di una regola relativa CloudWatch agli eventi nella Guida per l'utente. CloudWatch

Architetto cloud, DevOps ingegnere, amministratore del cloud

Ripristina il database su una delle copie precedenti quando necessario.

  1. Apri la console Secrets Manager.

  2. Dall'elenco dei segreti, scegli il segreto che hai creato utilizzando il CloudFormation modello precedente. L'applicazione utilizza il segreto per accedere al database nel cluster di destinazione.

  3. Per aggiornare il valore segreto dalla pagina dei dettagli, nella sezione Valore segreto, scegli Recupera valore segreto, quindi scegli Modifica.

  4. Inserisci i dettagli dell'endpoint del database.

Amministratore del cloudDBA, DevOps ingegnere

Risorse correlate

Informazioni aggiuntive

Puoi utilizzare la seguente politica di esempio per condividere la tua AWS KMS chiave tra più account. AWS

{ "Version": "2012-10-17", "Id": "cross-account-rds-kms-key", "Statement": [ { "Sid": "Enable user permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<SourceAccount>:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<DestinationAccount>:root" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<DestinationAccount>:root", "arn:aws:iam::<SourceAccount>:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*" } ] }