Automatisez le basculement et le retour en arrière entre régions à l'aide de DR Orchestrator Framework - 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 le basculement et le retour en arrière entre régions à l'aide de DR Orchestrator Framework

Créé par Jitendra Kumar (AWS), Oliver Francis (AWS) et Pavithra Balasubramanian () AWS

Référentiel de code : aws-cross-region-dr -databases

Environnement : Production

Technologies : bases de données ; infrastructure ; migration ; modernisation

AWSservices : Amazon Aurora ; Amazon AWS CloudFormation ; Amazon ElastiCache RDS ; AWS Step Functions

Récapitulatif

Ce modèle décrit comment utiliser DR Orchestrator Framework pour orchestrer et automatiser les étapes manuelles, sujettes aux erreurs, pour effectuer une reprise après sinistre dans les régions Amazon Web Services ().AWS Le modèle couvre les bases de données suivantes :

  • Amazon Relational Database Service (RDSAmazon) pour SQL My, Amazon pour SQL Postgre ou RDS Amazon RDS pour MariaDB

  • Amazon Aurora My SQL -Compatible Edition ou Amazon Aurora Postgre SQL -Compatible Edition (à l'aide d'un fichier centralisé)

  • Amazon ElastiCache (RedisOSS)

Pour démontrer les fonctionnalités de DR Orchestrator Framework, vous devez créer deux instances ou clusters de base de données. Le primaire est dans le Région AWS us-east-1, et le secondaire est dansus-west-2. Pour créer ces ressources, vous devez utiliser les AWS CloudFormation modèles contenus dans le App-Stack dossier du GitHub référentiel aws-cross-region-dr-databases.

Conditions préalables et limitations

Prérequis généraux

Prérequis spécifiques au moteur

  • Amazon Aurora — Au moins une base de données globale Aurora doit être disponible sur deux Régions AWS. Vous pouvez l'utiliser us-east-1 comme région principale et l'utiliser us-west-2 comme région secondaire.

  • Amazon ElastiCache (RedisOSS) — Une banque de données ElastiCache globale doit être disponible en deux. Régions AWS Vous pouvez le faire use us-east-1 comme région principale et l'utiliser us-west-2 comme région secondaire.

RDSLimitations d'Amazon

  • DR Orchestrator Framework ne vérifie pas le délai de réplication avant d'effectuer un basculement ou un retour en arrière. Le délai de réplication doit être vérifié manuellement.

  • Cette solution a été testée à l'aide d'une instance de base de données principale avec une réplique en lecture. Si vous souhaitez utiliser plusieurs répliques de lecture, testez soigneusement la solution avant de l'implémenter dans un environnement de production.

Limites d'Aurora

  • La disponibilité et le support des fonctionnalités varient en fonction des versions spécifiques de chaque moteur de base de données et d'une version à l'autre Régions AWS. Pour plus d'informations sur la disponibilité des fonctionnalités et des régions pour la réplication entre régions, voir Répliques de lecture entre régions.

  • Les bases de données globales Aurora ont des exigences de configuration spécifiques pour les classes d'instances de base de données Aurora prises en charge et le nombre maximum de Régions AWS. Pour plus d'informations, consultez la section Exigences de configuration d'une base de données globale Amazon Aurora.

  • Cette solution a été testée à l'aide d'une instance de base de données principale avec une réplique en lecture. Si vous souhaitez utiliser plusieurs répliques de lecture, testez soigneusement la solution avant de l'implémenter dans un environnement de production.

ElastiCache limites

  • Pour plus d'informations sur la disponibilité des régions pour Global Datastore et les exigences ElastiCache de configuration, consultez la section Conditions préalables et limites de la ElastiCache documentation.

RDSVersions des produits Amazon

Amazon RDS prend en charge les versions de moteur suivantes :

Versions des produits Aurora

ElastiCache Versions des produits (RedisOSS)

Amazon ElastiCache (RedisOSS) prend en charge les versions Redis suivantes :

  • Redis 7.1 (améliorée)

  • Redis 7.0 (améliorée)

  • Redis 6.2 (améliorée)

  • Redis 6.0 (améliorée)

  • Redis 5.0.6 (améliorée)

Pour plus d'informations, consultez la section Versions prises en charge ElastiCache (RedisOSS).

Architecture

RDSArchitecture d'Amazon

L'RDSarchitecture Amazon inclut les ressources suivantes :

  • L'instance Amazon RDS DB principale créée dans la région principale (us-east-1) avec un accès en lecture/écriture pour les clients

  • Une réplique Amazon RDS Read créée dans la région secondaire (us-west-2) avec un accès en lecture seule pour les clients

  • Framework DR Orchestrator déployé dans les régions principale et secondaire

Schéma de l'RDSarchitecture à deux régions dans un seul AWS compte.

Le diagramme décrit les éléments suivants :

  1. Réplication asynchrone entre l'instance principale et l'instance secondaire

  2. Accès en lecture/écriture pour les clients de la région principale

  3. Accès en lecture seule pour les clients de la région secondaire

Architecture Aurora

L'architecture Amazon Aurora inclut les ressources suivantes :

  • Le cluster de base de données Aurora principal créé dans la région principale (us-east-1) avec un point de terminaison d'écriture active

  • Un cluster de base de données Aurora créé dans la région secondaire (us-west-2) avec un point de terminaison d'écriture inactif

  • Framework DR Orchestrator déployé dans les régions principale et secondaire

Schéma du déploiement d'Aurora dans deux régions dans un seul AWS compte.

Le diagramme décrit les éléments suivants :

  1. Réplication asynchrone entre le cluster principal et le cluster secondaire

  2. Le cluster de base de données principal avec un point de terminaison d'écriture active

  3. Le cluster de base de données secondaire avec un point de terminaison d'écriture inactif

ElastiCache architecture (RedisOSS)

L'architecture Amazon ElastiCache (RedisOSS) inclut les ressources suivantes :

  • Une banque de données globale ElastiCache (RedisOSS) créée avec deux clusters :

    1. Le cluster principal de la région principale (us-east-1)

    2. Le cluster secondaire de la région secondaire (us-west-2)

  • Un lien interrégional Amazon avec chiffrement TLS 1.2 entre les deux clusters

  • Framework DR Orchestrator déployé dans les régions principale et secondaire

Schéma d'un ElastiCache déploiement dans deux régions avec un lien entre les régions d'Amazon.

Automatisation et mise à l'échelle

DR Orchestrator Framework est évolutif et prend en charge le basculement ou le repli de plusieurs bases de données AWS en parallèle.

Vous pouvez utiliser le code de charge utile suivant pour basculer entre plusieurs AWS bases de données de votre compte. Dans cet exemple, trois AWS bases de données (deux bases de données globales telles qu'Aurora My SQL -Compatible ou Aurora Postgre SQL -Compatible, et une SQL instance Amazon RDS for My) basculent vers la région DR :

{ "StatePayload": [ { "layer": 1, "resources": [ { "resourceType": "PlannedFailoverAurora", "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (MySQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-mysql-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-cluster-identifier" } }, { "resourceType": "PlannedFailoverAurora", "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (PostgreSQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-postgres-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-postgres-cluster-identifier" } }, { "resourceType": "PromoteRDSReadReplica", "resourceName": "Promote RDS for MySQL Read Replica", "parameters": { "RDSInstanceIdentifier": "!Import rds-mysql-instance-identifier", "TargetClusterIdentifier": "!Import rds-mysql-instance-global-arn" } } ] } ] }

Outils

AWS services

  • Amazon Aurora est un moteur de base de données relationnelle entièrement géré conçu pour le cloud et compatible avec My SQL et SQL Postgre.

  • Amazon vous ElastiCache aide à configurer, à gérer et à faire évoluer des environnements de cache en mémoire distribués dans le AWS Cloud. Ce modèle utilise Amazon ElastiCache (RedisOSS).

  • 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. Dans ce modèle, les fonctions Lambda sont utilisées pour AWS Step Functions effectuer les étapes.

  • Amazon Relational Database Service (RDSAmazon) vous aide à configurer, exploiter et dimensionner une base de données relationnelle dans le. AWS Cloud Ce modèle est compatible avec Amazon RDS for MySQL, Amazon RDS pour Postgre SQL et Amazon RDS pour MariaDB.

  • AWS SDK for Python (Boto3)vous permet d'intégrer votre application, bibliothèque ou script Python à Services AWS. Dans ce modèle, les Boto3 APIs sont utilisés pour communiquer avec les instances de base de données ou les bases de données globales.

  • AWS Step Functionsest un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et d'autres fonctions Services AWS pour créer des applications critiques pour l'entreprise. Dans ce modèle, les machines d'état Step Functions sont utilisées pour orchestrer et exécuter le basculement et le retour en arrière entre régions des instances de base de données ou des bases de données globales.

Référentiel de code

Le code de ce modèle est disponible dans le référentiel aws-cross-region-dr-databases sur GitHub.

Épopées

TâcheDescriptionCompétences requises

Clonez le GitHub dépôt.

Pour cloner le dépôt, exécutez la commande suivante :

git clone https://github.com/aws-samples/aws-cross-region-dr-databases.git
AWS DevOps, AWS administrateur

Package Lambda utilise le code des fonctions dans une archive de fichier .zip.

Créez les fichiers d'archive pour les fonctions Lambda afin d'inclure les dépendances du DR Orchestrator Framework :

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts bash scripts/deploy-orchestrator-sh.sh
AWSadministrateur

Créez des compartiments S3.

Les compartiments S3 sont nécessaires pour stocker le framework DR Orchestrator ainsi que votre dernière configuration. Créez deux compartiments S3, l'un dans la région principale (us-east-1) et l'autre dans la région secondaire (us-west-2) :

  • dr-orchestrator-xxxxxx-us-east-1

  • dr-orchestrator-xxxxxx-us-west-2

xxxxxxRemplacez-le par une valeur aléatoire pour que les noms des compartiments soient uniques.

AWSadministrateur

Créez des sous-réseaux et des groupes de sécurité.

Dans la région principale (us-east-1) et la région secondaire (us-west-2), créez deux sous-réseaux et un groupe de sécurité pour le déploiement de la fonction Lambda dans votre : VPC

  • subnet-XXXXXXX

  • subnet-YYYYYYY

  • sg-XXXXXXXXXXXX

AWSadministrateur

Mettez à jour les fichiers de paramètres de DR Orchestrator.

Dans le <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation dossier, mettez à jour les fichiers de paramètres DR Orchestrator suivants :

  • Orchestrator-Deployer-parameters-us-east-1.json

  • Orchestrator-Deployer-parameters-us-west-2.json

Utilisez les valeurs de paramètres suivantes, en y remplaçant x et par les noms de vos ressources :

[ { "ParameterKey": "TemplateStoreS3BucketName", "ParameterValue": "dr-orchestrator-xxxxxx-us-east-1" }, { "ParameterKey": "TemplateVPCId", "ParameterValue": "vpc-xxxxxx" }, { "ParameterKey": "TemplateLambdaSubnetID1", "ParameterValue": "subnet-xxxxxx" }, { "ParameterKey": "TemplateLambdaSubnetID2", "ParameterValue": "subnet-yyyyyy" }, { "ParameterKey": "TemplateLambdaSecurityGroupID", "ParameterValue": "sg-xxxxxxxxxx" } ]
AWSadministrateur

Téléchargez le code DR Orchestrator Framework dans le compartiment S3.

Le code sera plus sûr dans un compartiment S3 que dans le répertoire local. Téléchargez le DR-Orchestration-artifacts répertoire, y compris tous les fichiers et sous-dossiers, dans les compartiments S3.

Pour télécharger le code, procédez comme suit :

  1. Connectez-vous au AWS Management Console.

  2. Accédez à la console Amazon S3.

  3. Sélectionnez la dr-orchestrator-xxxxxx-us-east-1 bucket.

  4. Choisissez Télécharger, puis Ajouter un dossier.

  5. Sélectionnez le DR-Orchestration-artifacts dossier.

  6. Sélectionnez Charger.

  7. Sélectionnez le dr-orchestrator-xxxxxx-us-west-2 compartiment.

  8. Répétez les étapes 4 à 7.

AWSadministrateur

Déployez DR Orchestrator Framework dans la région principale.

Pour déployer DR Orchestrator Framework dans la région principale (us-east-1), exécutez les commandes suivantes :

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation aws cloudformation deploy \ --region us-east-1 \ --stack-name dr-orchestrator \ --template-file Orchestrator-Deployer.yaml \ --parameter-overrides file://Orchestrator-Deployer-parameters-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback
AWSadministrateur

Déployez DR Orchestrator Framework dans la région secondaire.

Dans la région secondaire (us-west-2), exécutez les commandes suivantes :

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation aws cloudformation deploy \ --region us-west-2 \ --stack-name dr-orchestrator \ --template-file Orchestrator-Deployer.yaml \ --parameter-overrides file://Orchestrator-Deployer-parameters-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback
AWSadministrateur

Vérifier le déploiement.

Si la AWS CloudFormation commande s'exécute correctement, elle renvoie le résultat suivant :

Successfully created/updated stack - dr-orchestrator

Vous pouvez également accéder à la AWS CloudFormation console et vérifier l'état de la dr-orchestrator pile.

AWSadministrateur
TâcheDescriptionCompétences requises

Créez les sous-réseaux et les groupes de sécurité de la base de données.

Dans votreVPC, créez deux sous-réseaux et un groupe de sécurité pour l'instance de base de données ou la base de données globale dans les régions principale (us-east-1) et secondaire (us-west-2) :

  • subnet-XXXXXX

  • subnet-XXXXXX

  • sg-XXXXXXXXXX

AWSadministrateur

Mettez à jour le fichier de paramètres pour l'instance ou le cluster de base de données principal.

Dans le <YOUR LOCAL GIT FOLDER>/App-Stack dossier, mettez à jour le fichier de paramètres de la région principale.

Amazon RDS

Dans le RDS-MySQL-parameter-us-east-1.json fichier, mettez à jour SubnetIds et DBSecurityGroup avec les noms des ressources que vous avez créées :

{ "Parameters": { "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx", "DBSecurityGroup": "sg-xxxxxxxxxx", "MySqlGlobalIdentifier":"rds-mysql-instance", "InitialDatabaseName": "mysqldb", "DBPortNumber": "3789", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId" } }

Amazon Aurora

Dans le Aurora-MySQL-parameter-us-east-1.json fichier, mettez à jour SubnetIds et DBSecurityGroup avec les noms des ressources que vous avez créées :

{ "Parameters": { "SubnetIds": "subnet1-xxxxxx,subnet2-xxxxxx", "DBSecurityGroup": "sg-xxxxxxxxxx", "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql", "DBClusterName":"dbcluster-01", "SourceDBClusterName":"dbcluster-02", "DBPortNumber": "3787", "DBInstanceClass":"db.r5.large", "InitialDatabaseName": "sampledb", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId" } }

Amazon ElastiCache (RedisOSS)

Dans le ElastiCache-parameter-us-east-1.json fichier, mettez à jour SubnetIds et DBSecurityGroup avec les noms des ressources que vous avez créées.

{ "Parameters": { "CacheNodeType": "cache.m5.large", "DBSecurityGroup": "sg-xxxxxxxxxx", "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx", "EngineVersion": "5.0.6", "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore", "NumReplicas": "1", "NumShards": "1", "ReplicationGroupId": "demo-redis-cluster", "DBPortNumber": "3788", "TransitEncryption": "true", "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2" } }
AWSadministrateur

Déployez votre instance ou cluster de base de données dans la région principale.

Pour déployer votre instance ou votre cluster dans la région principale (us-east-1), exécutez les commandes suivantes en fonction de votre moteur de base de données.

Amazon RDS

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 \ --stack-name rds-mysql-app-stack \ --template-file RDS-MySQL-Primary.yaml \ --parameter-overrides file://RDS-MySQL-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon Aurora

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 \ --stack-name aurora-mysql-app-stack \ --template-file Aurora-MySQL-Primary.yaml \ --parameter-overrides file://Aurora-MySQL-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon ElastiCache (RedisOSS)

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 --stack-name elasticache-ds-app-stack \ --template-file ElastiCache-Primary.yaml \ --parameter-overrides file://ElastiCache-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Vérifiez que les AWS CloudFormation ressources ont été déployées avec succès.

AWSadministrateur

Mettez à jour le fichier de paramètres pour l'instance ou le cluster de base de données secondaire.

Dans le <YOUR LOCAL GIT FOLDER>/App-Stack dossier, mettez à jour le fichier de paramètres de la région secondaire.

Amazon RDS

Dans le RDS-MySQL-parameter-us-west-2.json fichier, mettez à jour SubnetIDs et DBSecurityGroup avec les noms des ressources que vous avez créées. Mettez à jour le PrimaryRegionKMSKeyArn avec la valeur MySQLKmsKeyId extraite de la section Outputs de la AWS CloudFormation pile pour l'instance de base de données principale :

{ "Parameters": { "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb", "DBSecurityGroup": "sg-cccccccccc", "MySqlGlobalIdentifier":"rds-mysql-instance", "InitialDatabaseName": "mysqldb", "DBPortNumber": "3789", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId", "PrimaryRegionKMSKeyArn":"arn:aws:kms:us-east-1:xxxxxxxxx:key/mrk-xxxxxxxxxxxxxxxxxxxxx" } }

Amazon Aurora

Dans le Aurora-MySQL-parameter-us-west-2.json fichier, mettez à jour SubnetIDs et DBSecurityGroup avec les noms des ressources que vous avez créées. Mettez à jour le PrimaryRegionKMSKeyArn avec la valeur AuroraKmsKeyId extraite de la section Outputs de la AWS CloudFormation pile pour l'instance de base de données principale :

{ "Parameters": { "SubnetIds": "subnet1-aaaaaaaaa,subnet2-bbbbbbbbb", "DBSecurityGroup": "sg-cccccccccc", "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql", "DBClusterName":"dbcluster-01", "SourceDBClusterName":"dbcluster-02", "DBPortNumber": "3787", "DBInstanceClass":"db.r5.large", "InitialDatabaseName": "sampledb", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId" } }

Amazon ElastiCache (RedisOSS)

Dans le ElastiCache-parameter-us-west-2.json fichier, mettez à jour SubnetIDs et DBSecurityGroup avec les noms des ressources que vous avez créées. Mettez à jour le PrimaryRegionKMSKeyArn avec la valeur ElastiCacheKmsKeyId extraite de la section Outputs de la AWS CloudFormation pile pour l'instance de base de données principale :

{ "Parameters": { "CacheNodeType": "cache.m5.large", "DBSecurityGroup": "sg-cccccccccc", "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb", "EngineVersion": "5.0.6", "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore", "NumReplicas": "1", "NumShards": "1", "ReplicationGroupId": "demo-redis-cluster", "DBPortNumber": "3788", "TransitEncryption": "true", "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2" } }
AWSadministrateur

Déployez votre instance ou cluster de base de données dans la région secondaire.

Exécutez les commandes suivantes, en fonction de votre moteur de base de données.

Amazon RDS

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name rds-mysql-app-stack \ --template-file RDS-MySQL-DR.yaml \ --parameter-overrides file://RDS-MySQL-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon Aurora

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name aurora-mysql-app-stack \ --template-file Aurora-MySQL-DR.yaml \ --parameter-overrides file://Aurora-MySQL-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon ElastiCache (RedisOSS)

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name elasticache-ds-app-stack \ --template-file ElastiCache-DR.yaml \ --parameter-overrides file://ElastiCache-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Vérifiez que les AWS CloudFormation ressources ont été déployées avec succès.

AWSadministrateur

Ressources connexes