Automatize a replicação de RDS instâncias da Amazon em todas as contas AWS - Recomendações da AWS

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

Replicação de instâncias de RDS banco de dados da Amazon em contas de origem e destino usando Step Functions.

Na conta de origem (conta A no diagrama), a máquina de estado Step Functions executa o seguinte:

  1. Cria um snapshot da instância de RDS banco de dados na conta A.

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

  3. Compartilha o snapshot do banco de dados com a conta B dando à conta B acesso ao snapshot.

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

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

  2. Lê o segredo do Secrets Manager para capturar o nome da instância de banco de dados atual.

  3. Restaura a instância de banco de dados do snapshot com um novo nome e AWS KMS chave padrão para a Amazon. RDS

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

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

TarefaDescriçãoHabilidades necessárias

Implante a CloudFormation pilha na conta de origem.

  1. Faça login no AWS Management Console da conta de origem (conta A) e abra o CloudFormation console.

  2. No painel de navegação, escolha Pilhas.

  3. escolha Criar pilha e, em seguida, escolha Com recursos existentes (importar recursos).

  4. Na página Identificar recursos, escolha Próximo.

  5. Na página Especificar modelo, selecione Fazer upload de um modelo.

  6. Escolha Escolher arquivo, selecione o Cloudformation-SourceAccountRDS.yaml arquivo no repositório de RDSreplicação entre GitHub contas e escolha Avançar.

  7. Em Nome da pilha, insira o nome da sua pilha.

  8. Na seção Parâmetros, especifique os parâmetros que são definidos no modelo da pilha:

    • Para DestinationAccountNumber, insira o número da conta da sua instância de RDS banco de dados de destino.

    • Para KeyName, insira sua AWS KMS chave.

    • Para ScheduleExpression, insira uma expressão cron (o padrão é 12:00 da manhã diariamente).

    • ourceDBIdentifierEm S, insira o nome do banco de dados de origem.

    • Em ourceDBSnapshotNome S, insira o nome do instantâneo ou aceite o padrão.

  9. Escolha Próximo.

  10. Na página Configurar as opções da pilha, mantenha os padrões e selecione Avançar.

  11. Revise sua configuração de pilha e escolha Enviar.

  12. Escolha a guia Recursos para sua pilha e, em seguida, anote o nome do recurso da Amazon (ARN) do SNS tópico.

Administrador de nuvem, arquiteto de nuvem

Implante a CloudFormation pilha na conta de destino.

  1. Faça login no AWS Management Console da conta de destino (conta B) e abra o CloudFormation console.

  2. No painel de navegação, escolha Pilhas.

  3. escolha Criar pilha e, em seguida, escolha Com recursos existentes (importar recursos).

  4. Na página Identificar recursos, escolha Próximo.

  5. Na página Especificar modelo, selecione Fazer upload de um modelo.

  6. Escolha o arquivo, selecione o Cloudformation-DestinationAccountRDS.yaml arquivo no repositório de RDSreplicação entre GitHub contas e, em seguida, escolha Avançar.

  7. Em Nome da pilha, insira o nome da sua pilha.

  8. Na seção Parâmetros, especifique os parâmetros que são definidos no modelo da pilha:

    • Para DatabaseName, insira um nome para seu banco de dados.

    • Em Mecanismo, insira o tipo de mecanismo de banco de dados que corresponde ao banco de dados de origem.

    • Para DBInstanceClass, insira o tipo de instância de banco de dados preferencial ou aceite o padrão.

    • Em Grupos de sub-redes, insira o grupo de VPC sub-rede existente. Para obter instruções sobre como criar um grupo de sub-redes, consulte Etapa 2: Criar um grupo de sub-redes de banco de dados no Amazon RDS User Guide.

    • Para SecretName, insira o caminho e o nome secreto ou aceite o padrão.

    • Para SGID, insira o ID do grupo de segurança do seu cluster de destino.

    • Para KMSKey, insira ARN a KMS chave na sua conta de destino.

    • Para NoOfOlderInstances, insira o número de cópias antigas das instâncias de RDS banco de dados que você deseja manter para a reversão.

  9. Escolha Próximo.

  10. Na página Configurar as opções da pilha, mantenha os padrões e selecione Avançar.

  11. Revise sua configuração de pilha e escolha Enviar.

  12. Escolha a guia Recursos para sua pilha e, em seguida, anote a ID física e ARN deInvokeStepFunction.

Arquiteto de nuvem, DevOps engenheiro, administrador de nuvem

Verifique a criação da instância de RDS banco de dados na conta de destino.

  1. Faça login no AWS Management Console e abra o RDSconsole da Amazon.

  2. No painel de navegação, escolha Bancos de dados e, em seguida, verifique se a nova RDS instância de banco de dados aparece no novo cluster.

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:

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

Na conta B, execute o comando a seguir:

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

Na conta B, execute o comando a seguir:

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

  1. Abrir o console Step Functions.

  2. No painel de navegação, escolha Máquinas de estado.

  3. Escolha sua máquina de estado.

  4. Na guia Execuções, selecione sua função e escolha Iniciar execução para iniciar o fluxo de trabalho.

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.

  1. Abra o console do Secrets Manager.

  2. Na lista de segredos, escolha o segredo que você criou usando o CloudFormation modelo anterior. Seu aplicativo usa o segredo para acessar o banco de dados no cluster de destino.

  3. Para atualizar o valor do segredo na página de detalhes, na seção Valor do segredo, escolha Recuperar o valor do segredo e depois escolha Editar.

  4. Inserir os detalhes do endpoint do banco de dados.

Administrador de nuvemDBA, DevOps engenheiro

Recursos relacionados

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