Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Automatice la replicación de las RDS instancias de Amazon en todas AWS las cuentas
Creado por Parag Nagwekar () y Arun Chandapillai () AWS AWS
Entorno: producción | Tecnologías: bases de datos; sin servidor; infraestructura DevOps | Carga de trabajo: todas las demás cargas de trabajo |
AWSservicios: AWS LambdaRDS; Amazon; para AWS SDK Python (Boto3); Step FunctionsAWS; Amazon SNS |
Resumen
Este patrón le muestra cómo automatizar el proceso de replicación, seguimiento y restauración de las instancias de base de datos de Amazon Relational Database Service (RDSAmazon) en AWS distintas cuentas mediante Step AWS Functions y AWS Lambda. Puede utilizar esta automatización para realizar una replicación a gran escala de RDS instancias de bases de datos sin que ello afecte al rendimiento ni genere gastos operativos adicionales, independientemente del tamaño de su organización. También puede usar este patrón para ayudar a su organización a cumplir con las estrategias de gobierno de datos obligatorias o los requisitos de conformidad que exigen que sus datos se repliquen y sean redundantes en diferentes cuentas y regiones. AWS AWS La replicación multicuenta de RDS los datos de Amazon a escala es un proceso manual ineficiente y propenso a errores que puede resultar costoso y llevar mucho tiempo, pero la automatización de este patrón puede ayudarle a lograr la replicación multicuenta de forma segura, eficaz y eficiente.
Requisitos previos y limitaciones
Requisitos previos
Dos cuentas AWS
Una RDS instancia de base de datos, activa y en ejecución en la AWS cuenta de origen
Un grupo de subredes para la RDS instancia de base de datos de la cuenta de destino AWS
Una AWS clave del Servicio de administración de claves (AWSKMS) creada en la AWS cuenta de origen y compartida con la cuenta de destino (para obtener más información sobre los detalles de la política, consulte la sección de información adicional de este patrón).
Una AWS KMS clave en la AWS cuenta de destino para cifrar la base de datos de la cuenta de destino
Versiones de producto
Python 3.9 (con AWS Lambda)
Postgre SQL 11.3, 13.x y 14.x
Arquitectura
Pila de tecnología
Amazon Relational Database Service (AmazonRDS)
Amazon Simple Notification Service (AmazonSNS)
AWSServicio de administración de claves (AWSKMS)
AWSLambda
AWS Secrets Manager
AWS Step Functions
Arquitectura de destino
El siguiente diagrama muestra una arquitectura para usar Step Functions para organizar la replicación programada y bajo demanda de RDS instancias de base de datos desde una cuenta de origen (cuenta A) a una cuenta de destino (cuenta B).
En la cuenta de origen (cuenta A en el diagrama), la máquina de estados Step Functions realiza lo siguiente:
Crea una instantánea de la RDS instancia de base de datos de la cuenta A.
Copia y cifra la instantánea con una AWS KMS clave de la cuenta A. Para garantizar el cifrado en tránsito, la instantánea se cifra independientemente de que la instancia de base de datos esté cifrada o no.
Comparte la instantánea de base de datos con la cuenta B al permitir que la cuenta B acceda a la instantánea.
Envía una notificación al SNS tema y, a continuación, el SNS tema invoca la función Lambda en la cuenta B.
En la cuenta de destino (cuenta B en el diagrama), la función de Lambda ejecuta la máquina de estados Step Functions para orquestar lo siguiente:
Copia la instantánea compartida de la cuenta A a la cuenta B y utiliza la AWS KMS clave de la cuenta A para descifrar primero los datos y, a continuación, los cifra con la clave de la cuenta B. AWS KMS
Leer el secreto de Secrets Manager para capturar el nombre de la instancia de base de datos actual.
Restaura la instancia de base de datos de la instantánea con un nombre y una AWS KMS clave predeterminados nuevos para AmazonRDS.
Leer el punto de conexión de la nueva base de datos y actualizar el secreto de Secrets Manager con el nuevo punto de conexión de la base de datos y, a continuación, etiquetar la instancia de base de datos anterior para poder eliminarla más adelante.
Conservar las N instancias más recientes de las bases de datos y eliminar todas las demás instancias.
Herramientas
AWSherramientas
Amazon Relational Database Service (RDSAmazon) le ayuda a configurar, operar y escalar una base de datos relacional en AWS la nube.
Amazon Simple Notification Service (AmazonSNS) le ayuda a coordinar y gestionar el intercambio de mensajes entre editores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las AWS cuentas y regiones.
AWSEl Servicio de administración de claves (AWSKMS) le ayuda a crear y controlar claves criptográficas para proteger sus datos.
AWSLambda es un servicio informático que le ayuda a ejecutar código sin necesidad de aprovisionar o administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
AWSSDKfor Python (Boto3)
es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con AWS los servicios. AWSSecrets Manager le ayuda a reemplazar las credenciales codificadas en su código, incluidas las contraseñas, con una API llamada a Secrets Manager para recuperar el secreto mediante programación.
AWSStep Functions es un servicio de organización sin servidor que le ayuda a combinar las funciones de Lambda y otros AWS servicios para crear aplicaciones críticas para la empresa.
Código
El código de este patrón está disponible en el repositorio de Crossaccount Replication. GitHub RDS
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Implemente la CloudFormation pila en la cuenta de origen. |
| Administrador de la nube, arquitecto de la nube |
Implemente la CloudFormation pila en la cuenta de destino. |
| Arquitecto de nube, DevOps ingeniero, administrador de nube |
Compruebe la creación de la RDS instancia de base de datos en la cuenta de destino. |
| Administrador de nube, arquitecto de nube, DevOps ingeniero |
Suscriba la función Lambda al SNS tema. | Debe ejecutar los siguientes AWS comandos de la interfaz de línea de comandos (AWSCLI) para suscribir la función Lambda de la cuenta de destino (cuenta B) al SNS tema de la cuenta de origen (cuenta A). En la cuenta A, ejecute el siguiente comando:
En la cuenta B, ejecute el siguiente comando:
En la cuenta B, ejecute el siguiente comando:
| Administrador de nube, arquitecto de nube, DBA |
Sincronice la RDS instancia de base de datos de la cuenta de origen con la cuenta de destino. | Inicie la replicación de la base de datos bajo demanda iniciando la máquina de estados Step Functions en la cuenta de origen.
Nota: Hay un programador para ayudarlo a ejecutar la replicación automáticamente según lo programado, pero el programador está desactivado de forma predeterminada. Puedes encontrar el nombre de la CloudWatch regla de Amazon para el programador en la pestaña Recursos de la CloudFormation pila de la cuenta de destino. Para obtener instrucciones sobre cómo modificar la regla de CloudWatch eventos, consulte Eliminar o deshabilitar una regla de CloudWatch eventos en la Guía del CloudWatch usuario. | Arquitecto de nube, DevOps ingeniero y administrador de nube |
Restaure su base de datos a cualquiera de las copias anteriores cuando sea necesario. |
| Administrador de la nubeDBA, DevOps ingeniero |
Recursos relacionados
Réplicas de lectura entre regiones (Guía del RDS usuario de Amazon)
Implementaciones azul/verdes (guía del usuario de AmazonRDS)
Información adicional
Puedes usar el siguiente ejemplo de política para compartir tu AWS KMS clave entre cuentas. 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": "*" } ] }