Por: @vitorp
Publicado em: 2021-07-08

Amazon RDS

Este laboratório tem como objetivo:

  • Apresentar conceitos e aspectos do AWS RDS, além de mostrar como realizar configurações e alterações.

Conceito

O Amazon RDS é capaz de criar instâncias de banco de dados abstraindo o sistema operacional e permitindo acesso dos demais recursos à somente o banco de dados.

Ao criar uma instância, podem ser escolhidos recursos igual à recursos computacionais como a classe da instância, espaço de alocação, VPC e security Groups.

Versão

É possível selecionar a versão do banco de dados que será utilizada. Esta configuração pode ser alterada posteriormente, mas somente para fazer o upgrade para versões mais novas.

Multi-AZ

Ao criar uma instância RDS poode ser ativada a opção de implantação Multi-AZ. Esta funcionalidade cria uma segunda instância RDS que ficará em espera a redundância é feita de forma automática através do nome DNS da instância.

As duas instâncias são alocadas em subnets diferentes de acordo com as subnets configuradas na opção “Grupo de sub-redes”

Grupo de sub-redes

Dentro das opções do Amazon RDS é necessário criar um grupo de sub-redes que é vinculado nas instâncias. Estes grupos precisam ter 2 ou mais subnets associadas que estejam em zonas de disponibilidades diferentes.

As subnets podem são utilizadas para alocar as instâncias e devemos garantir comunicação dos servidores com todas elas.

Credenciais

Ao criar o banco, é necessário informar o usuário e senha principal do banco. Posteriormente é possível alterar somente a senha de acesso ao banco através do console AWS.

Acesso à instância

Após a criação da instância RDS, o acesso ao banco é realizado através de outras instâncias dentro da AWS.

É necessário liberar os acessos nos security groups associados, garantir roteamento e acessar através das informações de Endpoint e porta informados na aba “Segurança e conexão” da instância.

O nome DNS da instância é resolvido pelas demais máquinas do VPC e irá direcionar para o IP da instância RDS.

Caso o Multi-AZ esteja ativado, o apontamento resolverá para a instância ativa de forma automática.

mysql -u admin -p -h db-teste01.cx7kqycmuqwd.us-east-1.rds.amazonaws.com

Banco homologação x produção

Instâncias separadas onde a de homologação será sob demanda.

Backup para S3

Snapshots das instâncias RDS podem ser enviadas diretamente para um bucket do S3 alocado na mesma região que as instâncias.

Restaurar backup do S3

A restauração de backups diretamente do S3 para uma instância RDS é limitada à instâncias MySQL.

Via: https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html

AWS Cli

Endereço de conexão da instância

aws rds describe-db-instances –db-instance-identifier db-teste01 –query ‘DBInstances[*].Endpoint.Address’ –output text

Porta de conexão da instância

aws rds describe-db-instances –db-instance-identifier db-teste01 –query ‘DBInstances[*].Endpoint.Port’ –output text

Exportar backup via AWS CLI

A exportação consiste em um backup do banco + exportação para um bucket do S3. Pode ser executada via AWS CLI, CI/CD ou VM com acesso aos recursos.

#!/bin/bash

BKP_PATH=$(mktemp -d -t backup-XXXXXXXXXX)
DATE=`date +%Y-%m-%d`
MYSQLPASS=semprelinux
S3_BUCKET=backup-teste01
INSTANCE_NAME=db-teste01
AWS=/usr/local/bin/aws

INSTANCE_ADDRESS=`$AWS rds describe-db-instances --db-instance-identifier $INSTANCE_NAME --query 'DBInstances[*].Endpoint.Address' --output text`
INSTANCE_PORT=`$AWS rds describe-db-instances --db-instance-identifier $INSTANCE_NAME --query 'DBInstances[*].Endpoint.Port' --output text`

DATABASES=`mysql -u admin -p$MYSQLPASS -h $INSTANCE_ADDRESS -e "SHOW DATABASES;" | tr -d "| " | grep -v "\(Database\|information_schema\|performance_schema\|mysql\|innodb\)"`

FILENAME=backup-$INSTANCE_NAME-$DATE.sql.gz
TMPFILE=$BKP_PATH/$FILENAME

mysqldump --column-statistics=0 --skip-lock-tables -u admin -p$MYSQLPASS -h $INSTANCE_ADDRESS --all-databases | gzip -c > $TMPFILE

$AWS s3 cp $TMPFILE s3://$S3_BUCKET/$DATE/$FILENAME

rm -rf $BKP_PATH

Copiar dados de uma instância para a outra via CLI

A cópia consiste em um backup do banco + importação em outra instância. Pode ser executada via AWS CLI, CI/CD ou VM com acesso aos recursos.

#!/bin/bash

BKP_PATH=$(mktemp -d -t backup-XXXXXXXXXX)
DATE=`date +%Y-%m-%d`
MYSQLPASS=semprelinux
S3_BUCKET=backup-teste01
INSTANCE_NAME=db-teste01
AWS=/usr/local/bin/aws

SOURCE_INSTANCE_NAME=db-teste01
DEST_INSTANCE_NAME=homolog-02

SOURCE_INSTANCE_ADDRESS=`$AWS rds describe-db-instances --db-instance-identifier $SOURCE_INSTANCE_NAME --query 'DBInstances[*].Endpoint.Address' --output text`
SOURCE_INSTANCE_PORT=`$AWS rds describe-db-instances --db-instance-identifier $SOURCE_INSTANCE_NAME --query 'DBInstances[*].Endpoint.Port' --output text`
DEST_INSTANCE_ADDRESS=`$AWS rds describe-db-instances --db-instance-identifier $DEST_INSTANCE_NAME --query 'DBInstances[*].Endpoint.Address' --output text`
DEST_INSTANCE_PORT=`$AWS rds describe-db-instances --db-instance-identifier $DEST_INSTANCE_NAME --query 'DBInstances[*].Endpoint.Port' --output text`

  FILENAME=backup-$INSTANCE_NAME-$DATE.sql
  TMPFILE=$BKP_PATH/$FILENAME

  mysqldump --column-statistics=0 --skip-lock-tables -u admin -p$MYSQLPASS -h $SOURCE_INSTANCE_ADDRESS --all-databases > $TMPFILE
  mysql -u admin -p$MYSQLPASS -h $DEST_INSTANCE_ADDRESS -e 'create database fwm_teste01'
  mysql -u admin -p$MYSQLPASS -h $DEST_INSTANCE_ADDRESS fwm_teste01 < $TMPFILE

rm -rf $BKP_PATH

https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html#USER_VPC.NotPublic https://aws.amazon.com/pt/premiumsupport/knowledge-center/rds-launch-in-vpc/