Automatisez la réplication des RDS instances Amazon entre les AWS comptes - 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 entre les AWS comptes

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

Environnement : Production

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

Charge de travail : toutes les autres charges de travail

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

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 AWS différents comptes à l'aide de Step AWS Functions 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 sur différents AWS comptes et AWS régions. 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 AWS comptes

  • Une RDS instance de base de données, opérationnelle dans le AWS compte source

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

  • Une AWS clé du service de gestion des clés (AWSKMS) créée dans le AWS compte source 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.)

  • Une AWS KMS clé dans le AWS compte de destination pour chiffrer la base de données dans le compte de destination

Versions du produit

  • Python 3.9 (avec AWS Lambda)

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

Architecture

Pile technologique

  • Amazon Relational Database Service (AmazonRDS)

  • Service de notification simple d'Amazon (AmazonSNS)

  • AWSService de gestion des clés (AWSKMS)

  • AWSLambda

  • 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 snapshot à l'aide d'une AWS KMS clé du compte A. Pour garantir le chiffrement en transit, le snapshot 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 la AWS KMS clé du compte A pour déchiffrer d'abord les données, puis crypter les données à l'aide de la AWS KMS clé du compte B.

  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 une nouvelle AWS KMS clé par défaut 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

AWSoutils

  • Amazon Relational Database Service (RDSAmazon) vous aide à configurer, exploiter et dimensionner une base de données relationnelle dans AWS le 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, quels que soient les AWS comptes et les régions.

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

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

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

  • AWSStep Functions est un service d'orchestration sans serveur qui vous permet de combiner les fonctions Lambda et d'autres AWS services pour créer des applications critiques pour l'entreprise.

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 à la console AWS de gestion du 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 clé.

    • 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. Passez en revue 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 à la console AWS de gestion du compte 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 le guide de RDS l'utilisateur Amazon.

    • 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. Passez en revue 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 console AWS de gestion et ouvrez la RDSconsole Amazon.

  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 de l'interface de ligne de AWS commande (AWSCLI) suivantes 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, voir Supprimer ou désactiver une règle CloudWatch des événements dans le guide de l' CloudWatch utilisateur.

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 votre AWS KMS clé entre différents AWS comptes.

{ "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": "*" } ] }