Automatice la replicación de las RDS instancias de Amazon en todas AWS las cuentas - Recomendaciones de AWS

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

Replicación de instancias de Amazon RDS DB en cuentas de origen y destino mediante Step Functions.

En la cuenta de origen (cuenta A en el diagrama), la máquina de estados Step Functions realiza lo siguiente:

  1. Crea una instantánea de la RDS instancia de base de datos de la cuenta A.

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

  3. Comparte la instantánea de base de datos con la cuenta B al permitir que la cuenta B acceda a la instantánea.

  4. 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:

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

  2. Leer el secreto de Secrets Manager para capturar el nombre de la instancia de base de datos actual.

  3. Restaura la instancia de base de datos de la instantánea con un nombre y una AWS KMS clave predeterminados nuevos para AmazonRDS.

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

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

TareaDescripciónHabilidades requeridas

Implemente la CloudFormation pila en la cuenta de origen.

  1. Inicie sesión en la consola AWS de administración de la cuenta de origen (cuenta A) y abra la CloudFormation consola.

  2. En el panel de navegación, seleccione Stacks (Pilas).

  3. Elija Create stack (Crear pila) y, a continuación, seleccione With existing resources (import resources) (Con recursos existentes (importar recursos)).

  4. En la página Identificar recursos, seleccione Siguiente.

  5. En la página Specify Template (Especificar plantilla), seleccione Upload a template (Subir una plantilla).

  6. Seleccione Elegir archivo, seleccione el Cloudformation-SourceAccountRDS.yaml archivo del repositorio de GitHub Crossaccount RDS Replication y, a continuación, elija Siguiente.

  7. En Stack name (Nombre de pila), escriba un nombre para su pila.

  8. En la sección Parameters (Parámetros), especifique los parámetros que se definen en la plantilla de la pila:

    • Para DestinationAccountNumber, introduzca el número de cuenta de la RDS instancia de base de datos de destino.

    • Para KeyName, introduzca su AWS KMS clave.

    • Para ScheduleExpression, introduzca una expresión cron (el valor predeterminado es a las 12:00 de la mañana todos los días).

    • Para S ourceDBIdentifier, introduzca el nombre de la base de datos de origen.

    • En S ourceDBSnapshot Name, introduzca el nombre de la instantánea o acepte el nombre predeterminado.

  9. Elija Next (Siguiente).

  10. En la página Configure stack options (Configurar opciones de la pila), mantenga las opciones predeterminadas y elija Next (Siguiente).

  11. Revise la configuración de la pila y seleccione Submit (Enviar).

  12. Selecciona la pestaña Recursos de tu pila y, a continuación, anota el nombre del recurso de Amazon (ARN) del SNS tema.

Administrador de la nube, arquitecto de la nube

Implemente la CloudFormation pila en la cuenta de destino.

  1. Inicie sesión en la consola AWS de administración de la cuenta de destino (cuenta B) y abra la CloudFormation consola.

  2. En el panel de navegación, seleccione Stacks (Pilas).

  3. Elija Create stack (Crear pila) y, a continuación, seleccione With existing resources (import resources) (Con recursos existentes (importar recursos)).

  4. En la página Identificar recursos, seleccione Siguiente.

  5. En la página Specify Template (Especificar plantilla), seleccione Upload a template (Subir una plantilla).

  6. Elija un archivo, seleccione el Cloudformation-DestinationAccountRDS.yaml archivo del repositorio de GitHub Crossaccount RDS Replication y, a continuación, elija Siguiente.

  7. En Stack name (Nombre de pila), escriba un nombre para su pila.

  8. En la sección Parameters (Parámetros), especifique los parámetros que se definen en la plantilla de la pila:

    • Para DatabaseName, introduzca un nombre para la base de datos.

    • En Engine (Motor), introduzca el tipo de motor de base de datos que coincida con la base de datos fuente.

    • Para DBInstanceClass, introduzca el tipo de instancia de base de datos preferido o acepte el predeterminado.

    • Para los grupos de subredes, introduzca el grupo de VPC subredes existente. Para obtener instrucciones sobre cómo crear un grupo de subredes, consulte el paso 2: Crear un grupo de subredes de base de datos en la Guía del RDS usuario de Amazon.

    • Para ello SecretName, introduzca la ruta y el nombre secreto, o acepte los valores predeterminados.

    • Para SGID, introduzca el ID del grupo de seguridad del clúster de destino.

    • Para KMSKeyello, introduzca ARN la KMS clave de la cuenta de destino.

    • Para NoOfOlderInstancesello, introduzca el número de copias antiguas de las RDS instancias de base de datos que desea conservar para la reversión.

  9. Elija Next (Siguiente).

  10. En la página Configure stack options (Configurar opciones de la pila), mantenga las opciones predeterminadas y elija Next (Siguiente).

  11. Revise la configuración de la pila y seleccione Submit (Enviar).

  12. Elija la pestaña Recursos de su pila y, a continuación, anote el ID físico y el ARN deInvokeStepFunction.

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.

  1. Inicie sesión en la consola AWS de administración y abra la RDSconsola de Amazon.

  2. En el panel de navegación, elija Bases de datos y, a continuación, compruebe que la nueva RDS instancia de base de datos aparece en el nuevo clúster.

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:

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

En la cuenta B, ejecute el siguiente comando:

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

En la cuenta B, ejecute el siguiente comando:

aws sns subscribe \ --protocol "lambda" \ --topic-arn <Arn of SNSTopic> \ --notification-endpoint <Arn of InvokeStepFunction>
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.

  1. Abra la consola Step Functions.

  2. En el panel de navegación, elija State machines (Máquinas de estado).

  3. Elija su máquina de estado.

  4. En la pestaña Executions (Ejecuciones), seleccione la función y, a continuación, elija Start execution (Iniciar ejecución) para iniciar el flujo de trabajo.

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.

  1. Abra la consola de Secrets Manager.

  2. De la lista de secretos, elige el secreto que creaste con la CloudFormation plantilla anterior. Su aplicación usa el secreto para acceder a la base de datos del clúster de destino.

  3. Para actualizar el valor secreto desde la página de detalles, en la sección Secret value (Valor del secreto), elija Retrieve secret value (Recuperar valor del secreto) y, a continuación, Edit (Editar).

  4. Introduzca los detalles del punto de conexión de la base de datos.

Administrador de la nubeDBA, DevOps ingeniero

Recursos relacionados

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