As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Automatize a replicação de RDS instâncias da Amazon em todas as contas AWS
Criado por Parag Nagwekar (AWS) e Arun Chandapillai () AWS
Ambiente: produção | Tecnologias: bancos de dados DevOps; sem servidor; infraestrutura | Workload: todas as outras workloads |
AWSserviços: AWS LambdaRDS; Amazon; para AWS SDK Python (Boto3); Step Functions; Amazon AWS SNS |
Resumo
Esse padrão mostra como automatizar o processo de replicação, rastreamento e reversão de suas instâncias de banco de dados do Amazon Relational Database Service (AmazonRDS) em diferentes AWS contas usando Step AWS Functions e Lambda. AWS Você pode usar essa automação para realizar a replicação em grande escala de instâncias de RDS banco de dados sem nenhum impacto no desempenho ou sobrecarga operacional, independentemente do tamanho da sua organização. Você também pode usar esse padrão para ajudar sua organização a cumprir as estratégias obrigatórias de governança de dados ou os requisitos de conformidade que exigem que seus dados sejam replicados e redundantes em diferentes AWS contas e regiões. AWS A replicação entre contas de RDS dados da Amazon em grande escala é um processo manual ineficiente e propenso a erros que pode ser caro e demorado, mas a automação nesse padrão pode ajudá-lo a obter a replicação entre contas com segurança, eficácia e eficiência.
Pré-requisitos e limitações
Pré-requisitos
Duas AWS contas
Uma RDS instância de banco de dados, ativa e em execução na AWS conta de origem
Um grupo de sub-redes para a instância de RDS banco de dados na conta de destino AWS
Uma AWS chave do Key Management Service (AWSKMS) criada na AWS conta de origem e compartilhada com a conta de destino (para obter mais informações sobre os detalhes da política, consulte a seção Informações adicionais desse padrão).
Uma AWS KMS chave na AWS conta de destino para criptografar o banco de dados na conta de destino
Versões do produto
Python 3.9 (usando Lambda) AWS
Postgre SQL 11.3, 13.x e 14.x
Arquitetura
Pilha de tecnologia
Amazon Relational Database Service (AmazonRDS)
Serviço de notificação simples da Amazon (AmazonSNS)
AWSServiço de gerenciamento de chaves (AWSKMS)
AWSLambda
AWS Secrets Manager
AWS Step Functions
Arquitetura de destino
O diagrama a seguir mostra uma arquitetura para usar o Step Functions para orquestrar a replicação programada e sob demanda de instâncias de RDS banco de dados de uma conta de origem (conta A) para uma conta de destino (conta B).
Na conta de origem (conta A no diagrama), a máquina de estado Step Functions executa o seguinte:
Cria um snapshot da instância de RDS banco de dados na conta A.
Copia e criptografa o snapshot com uma AWS KMS chave da conta A. Para garantir a criptografia em trânsito, o snapshot é criptografado, independentemente de a instância de banco de dados estar criptografada ou não.
Compartilha o snapshot do banco de dados com a conta B dando à conta B acesso ao snapshot.
Envia uma notificação para o SNS tópico e, em seguida, o SNS tópico invoca a função Lambda na conta B.
Na conta de destino (conta B no diagrama), a função do Lambda executa a máquina de estado Step Functions para orquestrar o seguinte:
Copia o instantâneo compartilhado da conta A para a conta B, enquanto usa a AWS KMS chave da conta A para descriptografar os dados primeiro e depois criptografar os dados usando a chave na conta B. AWS KMS
Lê o segredo do Secrets Manager para capturar o nome da instância de banco de dados atual.
Restaura a instância de banco de dados do snapshot com um novo nome e AWS KMS chave padrão para a Amazon. RDS
Lê o endpoint do novo banco de dados e atualiza o segredo no Secrets Manager com o novo endpoint do banco de dados e, em seguida, marca a instância de banco de dados anterior para que ela possa ser excluída posteriormente.
Mantém as N instâncias mais recentes dos bancos de dados e exclui todas as outras instâncias.
Ferramentas
AWSferramentas
O Amazon Relational Database Service (RDSAmazon) ajuda você a configurar, operar e escalar um banco de dados relacional na AWS nuvem.
O Amazon Simple Notification Service (AmazonSNS) ajuda você a coordenar e gerenciar a troca de mensagens entre editores e clientes, incluindo servidores web e endereços de e-mail.
AWS CloudFormationajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas AWS as contas e regiões.
AWSO Key Management Service (AWSKMS) ajuda você a criar e controlar chaves criptográficas para ajudar a proteger seus dados.
AWSO Lambda é um serviço de computação que ajuda você a executar código sem precisar provisionar ou gerenciar servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
AWSSDKfor Python (Boto3)
é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com serviços. AWS AWSO Secrets Manager ajuda você a substituir as credenciais codificadas em seu código, incluindo senhas, por uma API chamada para o Secrets Manager para recuperar o segredo programaticamente.
AWSO Step Functions é um serviço de orquestração sem servidor que ajuda você a combinar funções Lambda e outros AWS serviços para criar aplicativos essenciais para os negócios.
Código
O código desse padrão está disponível no repositório GitHub Crossaccount RDS Replication.
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Implante a CloudFormation pilha na conta de origem. |
| Administrador de nuvem, arquiteto de nuvem |
Implante a CloudFormation pilha na conta de destino. |
| Arquiteto de nuvem, DevOps engenheiro, administrador de nuvem |
Verifique a criação da instância de RDS banco de dados na conta de destino. |
| Administrador de nuvem, arquiteto de nuvem, DevOps engenheiro |
Inscreva a função Lambda no SNS tópico. | Você deve executar os seguintes comandos da interface de linha de AWS comando (AWSCLI) para inscrever a função Lambda na conta de destino (conta B) no SNS tópico na conta de origem (conta A). Na conta A, execute o comando a seguir:
Na conta B, execute o comando a seguir:
Na conta B, execute o comando a seguir:
| Administrador de nuvem, arquiteto de nuvem, DBA |
Sincronize a RDS instância de banco de dados da conta de origem com a conta de destino. | Iniciar a replicação do banco de dados sob demanda iniciando a máquina de estado Step Functions na conta de origem.
Observação: existe um planejador para ajudar você a executar a replicação automaticamente dentro da agenda, mas o planejador está desativado por padrão. Você pode encontrar o nome da CloudWatch regra da Amazon para o agendador na guia Recursos da CloudFormation pilha na conta de destino. Para obter instruções sobre como modificar a regra de CloudWatch eventos, consulte Excluindo ou desativando uma regra de CloudWatch eventos no Guia do CloudWatch usuário. | Arquiteto de nuvem, DevOps engenheiro, administrador de nuvem |
Reverter seu banco de dados para qualquer uma das cópias anteriores quando necessário. |
| Administrador de nuvemDBA, DevOps engenheiro |
Recursos relacionados
Réplicas de leitura entre regiões (Guia RDS do usuário da Amazon)
Implantações em azul/verde (Guia do usuário da AmazonRDS)
Mais informações
Você pode usar o exemplo de política a seguir para compartilhar sua AWS KMS chave entre AWS contas.
{ "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": "*" } ] }