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).
Dans le compte source (compte A dans le schéma), la machine d'état Step Functions effectue les opérations suivantes :
Crée un instantané à partir de l'RDSinstance de base de données du compte A.
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.
Partage l'instantané de base de données avec le compte B en donnant au compte B l'accès à l'instantané.
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 :
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.
Lit le secret depuis Secrets Manager pour capturer le nom de l'instance de base de données actuelle.
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.
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.
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âche | Description | Compétences requises |
---|---|---|
Déployez la CloudFormation pile dans le compte source. |
| Administrateur cloud, architecte cloud |
Déployez la CloudFormation pile dans le compte de destination. |
| 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. |
| 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 :
Dans le compte B, exécutez la commande suivante :
Dans le compte B, exécutez la commande suivante :
| 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.
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. |
| Administrateur cloudDBA, DevOps ingénieur |
Ressources connexes
Répliques de lecture entre régions (Amazon RDS User Guide)
Déploiements bleu/vert (Guide de l'utilisateur AmazonRDS)
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": "*" } ] }