Automatisez la réplication des RDS instances Amazon sur Comptes AWS - Recommandations AWS

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.

Automatisez la réplication des RDS instances Amazon sur Comptes AWS

Créé par Parag Nagwekar (AWS) et Arun Chanapillai () AWS

Environnement : Production

Technologies : bases de données DevOps ; infrastructure ; sans serveur

Charge de travail : toutes les autres charges de travail

AWSservices : AWS Lambda RDS ; Amazon ; pour AWS SDK Python (Boto3) ; Amazon ; Step Functions SNS AWS

Récapitulatif

Ce modèle vous montre comment automatiser le processus de réplication, de suivi et de restauration de vos instances de base de données Amazon Relational Database Service (RDSAmazon) sur Comptes AWS différentes instances en AWS Step Functions utilisant et. AWS Lambda Vous pouvez utiliser cette automatisation pour effectuer une réplication à grande échelle d'RDSinstances de base de données sans impact sur les performances ni surcharge opérationnelle, quelle que soit la taille de votre organisation. Vous pouvez également utiliser ce modèle pour aider votre entreprise à se conformer aux stratégies obligatoires de gouvernance des données ou aux exigences de conformité qui exigent que vos données soient répliquées et redondantes entre différents Comptes AWS et. Régions AWS La réplication multicompte des RDS données Amazon à grande échelle est un processus manuel inefficace et sujet aux erreurs, qui peut être coûteux et chronophage, mais l'automatisation selon ce modèle peut vous aider à réaliser une réplication entre comptes de manière sûre, efficace et efficiente.

Conditions préalables et limitations

Prérequis

  • Deux Comptes AWS

  • Une RDS instance de base de données, opérationnelle dans la source Compte AWS

  • Un groupe de sous-réseaux pour l'RDSinstance de base de données dans la destination Compte AWS

  • Une clé AWS Key Management Service (AWS KMS) créée dans la source Compte AWS et partagée avec le compte de destination (pour plus d'informations sur les détails de la politique, consultez la section Informations supplémentaires de ce modèle.)

  • Un AWS KMS key dans la destination Compte AWS pour chiffrer la base de données dans le compte de destination

Limites

Versions du produit

  • Python 3.9 (en utilisant AWS Lambda)

  • SQLPostgre11.3, 13.x et 14.x

Architecture

Pile technologique

  • Amazon Relational Database Service (AmazonRDS)

  • Service de notification simple d'Amazon (AmazonSNS)

  • AWS Key Management Service (AWS KMS)

  • AWS Lambda

  • AWS Secrets Manager

  • AWS Step Functions

Architecture cible

Le schéma suivant montre une architecture permettant d'utiliser Step Functions pour orchestrer la réplication planifiée et à la demande d'RDSinstances de base de données d'un compte source (compte A) vers un compte de destination (compte B).

Réplication d'instances Amazon RDS DB sur des comptes source et de destination à l'aide de Step Functions.

Dans le compte source (compte A dans le schéma), la machine d'état Step Functions effectue les opérations suivantes :

  1. Crée un instantané à partir de l'RDSinstance de base de données du compte A.

  2. Copie et chiffre le cliché avec un compte AWS KMS key de provenance A. Pour garantir le chiffrement pendant le transfert, le cliché est chiffré, que l'instance de base de données soit chiffrée ou non.

  3. Partage l'instantané de base de données avec le compte B en donnant au compte B l'accès à l'instantané.

  4. Envoie une notification au SNS sujet, puis le SNS sujet invoque la fonction Lambda dans le compte B.

Dans le compte de destination (compte B dans le schéma), la fonction Lambda exécute la machine d'état Step Functions pour orchestrer les opérations suivantes :

  1. Copie l'instantané partagé du compte A vers le compte B, tout en utilisant le AWS KMS key compte A pour déchiffrer les données, puis les chiffrer AWS KMS key à l'aide du compte B intégré.

  2. Lit le secret depuis Secrets Manager pour capturer le nom de l'instance de base de données actuelle.

  3. Restaure l'instance de base de données à partir du snapshot avec un nouveau nom et un nouveau nom par défaut AWS KMS key pour AmazonRDS.

  4. Lit le point de terminaison de la nouvelle base de données et met à jour le secret dans Secrets Manager avec le nouveau point de terminaison de base de données, puis étiquette l'instance de base de données précédente afin qu'elle puisse être supprimée ultérieurement.

  5. Conserve les N dernières instances des bases de données et supprime toutes les autres instances.

Outils

Services AWS

  • Amazon Relational Database Service (RDSAmazon) vous aide à configurer, exploiter et dimensionner une base de données relationnelle dans le. AWS Cloud

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

  • 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 à travers Comptes AWS et Régions AWS.

  • AWS Key Management Service (AWS KMS) vous aide à créer et à contrôler des clés cryptographiques pour protéger vos données.

  • AWS Lambda est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à 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.

  • AWS SDK for Python (Boto3)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à Services AWS.

  • AWS Secrets Managervous permet de remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, en API appelant Secrets Manager pour récupérer le secret par programmation.

  • AWS Step Functionsest un service d'orchestration sans serveur qui vous aide à combiner des fonctions Lambda et d'autres fonctions pour créer des applications critiques Services AWS pour l'entreprise.

Référentiel de code

Le code de ce modèle est disponible dans le référentiel GitHub Crossaccount RDS Replication.

Épopées

TâcheDescriptionCompétences requises

Déployez la CloudFormation pile dans le compte source.

  1. Connectez-vous au AWS Management Console compte source (compte A) et ouvrez la CloudFormation console.

  2. Dans le volet de navigation, choisissez Stack (Piles).

  3. Choisissez Créer une pile, puis sélectionnez Avec les ressources existantes (ressources d'importation).

  4. Sur la page Identifier les ressources, choisissez Next.

  5. Sur la page Spécifier un modèle, sélectionnez Télécharger un modèle.

  6. Choisissez Choisir un fichier, sélectionnez le Cloudformation-SourceAccountRDS.yaml fichier dans le référentiel de RDSréplication GitHub entre comptes, puis cliquez sur Suivant.

  7. Dans Nom de la pile, entrez le nom de votre pile.

  8. Dans la section Paramètres, spécifiez les paramètres définis dans le modèle de pile :

    • Pour DestinationAccountNumber, entrez le numéro de compte de votre RDS instance de base de données de destination.

    • Pour KeyName, entrez votre AWS KMS key.

    • Pour ScheduleExpression, entrez une expression cron (la valeur par défaut est minuit tous les jours).

    • Pour S ourceDBIdentifier, entrez le nom de la base de données source.

    • Pour S ourceDBSnapshot Name, entrez le nom du cliché ou acceptez le nom par défaut.

  9. Choisissez Suivant.

  10. Sur la page Configurer les options de pile, conservez les valeurs par défaut, puis choisissez Next.

  11. Vérifiez la configuration de votre pile, puis choisissez Soumettre.

  12. Choisissez l'onglet Ressources pour votre pile, puis notez le nom de la ressource Amazon (ARN) du SNS sujet.

Administrateur cloud, architecte cloud

Déployez la CloudFormation pile dans le compte de destination.

  1. Connectez-vous au compte AWS Management Console de destination (compte B) et ouvrez la CloudFormation console.

  2. Dans le volet de navigation, choisissez Stack (Piles).

  3. Choisissez Créer une pile, puis sélectionnez Avec les ressources existantes (ressources d'importation).

  4. Sur la page Identifier les ressources, choisissez Next.

  5. Sur la page Spécifier un modèle, sélectionnez Télécharger un modèle.

  6. Choisissez un fichier, sélectionnez le Cloudformation-DestinationAccountRDS.yaml fichier dans le référentiel de RDSréplication GitHub entre comptes, puis cliquez sur Suivant.

  7. Dans Nom de la pile, entrez le nom de votre pile.

  8. Dans la section Paramètres, spécifiez les paramètres définis dans le modèle de pile :

    • Pour DatabaseName, entrez un nom pour votre base de données.

    • Pour Engine, entrez le type de moteur de base de données correspondant à la base de données source.

    • Pour DBInstanceClass, entrez le type d'instance de base de données préféré ou acceptez le type par défaut.

    • Pour les groupes de sous-réseaux, entrez le groupe de VPC sous-réseaux existant. Pour obtenir des instructions sur la création d'un groupe de sous-réseaux, consultez Étape 2 : Création d'un groupe de sous-réseaux de base de données dans la documentation AmazonRDS.

    • Pour SecretName, entrez le chemin et le nom du secret, ou acceptez le nom par défaut.

    • Pour SGID, entrez l'ID du groupe de sécurité de votre cluster de destination.

    • Pour KMSKey, entrez ARN la KMS clé dans votre compte de destination.

    • Pour NoOfOlderInstances, entrez le nombre d'anciennes copies des RDS instances de base de données que vous souhaitez conserver pour la restauration.

  9. Choisissez Suivant.

  10. Sur la page Configurer les options de pile, conservez les valeurs par défaut, puis choisissez Next.

  11. Vérifiez la configuration de votre pile, puis choisissez Soumettre.

  12. Choisissez l'onglet Ressources pour votre pile, puis notez l'identifiant physique et le ARN deInvokeStepFunction.

Architecte cloud, DevOps ingénieur, administrateur cloud

Vérifiez la création de l'RDSinstance de base de données dans le compte de destination.

  1. Connectez-vous à la RDSconsole Amazon AWS Management Console et ouvrez-la.

  2. Dans le volet de navigation, choisissez Databases, puis vérifiez que la nouvelle RDS instance de base de données apparaît sous le nouveau cluster.

Administrateur cloud, architecte cloud, DevOps ingénieur

Abonnez la fonction Lambda à la SNS rubrique.

Vous devez exécuter les commandes suivantes AWS Command Line Interface (AWS CLI) pour abonner la fonction Lambda du compte de destination (compte B) à la SNS rubrique du compte source (compte A).

Dans le compte A, exécutez la commande suivante :

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

Dans le compte B, exécutez la commande suivante :

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

Dans le compte B, exécutez la commande suivante :

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

Synchronisez l'RDSinstance de base de données du compte source avec le compte de destination.

Lancez la réplication de base de données à la demande en démarrant la machine d'état Step Functions dans le compte source.

  1. Ouvrez la console Step Functions.

  2. Dans le volet de navigation, sélectionnez State machines.

  3. Choisissez votre machine à états.

  4. Dans l'onglet Exécutions, sélectionnez votre fonction, puis choisissez Démarrer l'exécution pour démarrer le flux de travail.

Remarque : un planificateur est en place pour vous aider à exécuter la réplication automatiquement comme prévu, mais il est désactivé par défaut. Vous trouverez le nom de la CloudWatch règle Amazon pour le planificateur dans l'onglet Ressources de la CloudFormation pile du compte de destination. Pour savoir comment modifier la règle CloudWatch des événements, consultez la section Supprimer ou désactiver une règle d' CloudWatch événements dans la CloudWatch documentation.

Architecte cloud, DevOps ingénieur, administrateur cloud

Restaurez votre base de données à l'une des copies précédentes si nécessaire.

  1. Ouvrez la console Secrets Manager.

  2. Dans la liste des secrets, choisissez le secret que vous avez créé à l'aide du CloudFormation modèle précédent. Votre application utilise le secret pour accéder à la base de données du cluster de destination.

  3. Pour mettre à jour la valeur secrète depuis la page de détails, dans la section Valeur secrète, choisissez Récupérer la valeur secrète, puis Modifier.

  4. Entrez les détails du point de terminaison de la base de données.

Administrateur cloudDBA, DevOps ingénieur

Ressources connexes

Informations supplémentaires

Vous pouvez utiliser l'exemple de politique suivant pour partager AWS KMS key le vôtre Comptes 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": "*" } ] }