Exemplos da AWS CLI de endpoints personalizados para o Amazon Aurora - Amazon Aurora

Exemplos da AWS CLI de endpoints personalizados para o Amazon Aurora

O tutorial a seguir usa exemplos da AWS CLI com sintaxe do shell do Unix para mostrar como é possível definir um cluster com várias instâncias de banco de dados “pequenas” e algumas instâncias de banco de dados “grandes” e criar endpoints personalizados estabelecer conexão com cada conjunto de instâncias de banco de dados. Para executar comandos semelhantes no próprio sistema, você deve estar familiarizado com os conceitos básicos de trabalhar com clusters do Aurora e o uso da AWS CLI para fornecer os valores próprios de parâmetros, como região, grupo de sub-redes e grupo de segurança da VPC.

Este exemplo demonstra as etapas de configuração iniciais: criar um cluster do Aurora e adicionar instâncias de banco de dados a ele. Este é um cluster heterogêneo, o que significa que nem todas as instâncias de banco de dados têm a mesma capacidade. A maioria das instâncias usa a classe AWS da instância da db.r4.4xlarge, mas as últimas duas instâncias de banco de dados usam db.r4.16xlarge. Cada um desses comandos create-db-instance de exemplo imprime a saída na tela e salva uma cópia do JSON em um arquivo para inspeção posterior.

aws rds create-db-cluster --db-cluster-identifier custom-endpoint-demo --engine aurora-mysql \ --engine-version 8.0.mysql_aurora.3.02.0 --master-username $MASTER_USER --manage-master-user-password \ --db-subnet-group-name $SUBNET_GROUP --vpc-security-group-ids $VPC_SECURITY_GROUP \ --region $REGION for i in 01 02 03 04 05 06 07 08 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.4xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done for i in 09 10 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.16xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done

As instâncias maiores são reservadas para tipos especializados de consultas de relatórios. Para a impossibilidade de que elas sejam promovidas para a instância primária, o exemplo a seguir altera o nível de promoção para a menor prioridade. Este exemplo especifica a opção --manage-master-user-password para gerar a senha mestra do usuário e gerenciá-la no Secrets Manager. Para ter mais informações, consulte Gerenciamento de senhas com Amazon Aurora e AWS Secrets Manager. Como alternativa, você pode usar a opção --master-password para especificar e gerenciar a senha por conta própria.

for i in 09 10 do aws rds modify-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --region $REGION --promotion-tier 15 done

Vamos supor que você queira usar as duas instâncias “maiores” apenas para as consultas que exijam mais recursos. Para fazer isso, primeiro é possível criar um endpoint somente leitura personalizado. Depois disso, é possível adicionar uma lista estática de membros para que o endpoint se conecte somente a essas instâncias de banco de dados. Essas instâncias já estão no nível de promoção mais baixo, tornando improvável que elas sequer sejam promovidas para a instância primária. Se uma delas for promovida para a instância primária, não será alcançável por meio desse endpoint porque especificamos o tipo READER, em vez do tipo ANY.

O exemplo a seguir demonstra os comandos de criação e modificação do endpoint, além da saída JSON de exemplo, mostrando o estado inicial e modificado do endpoint personalizado.

$ aws rds create-db-cluster-endpoint --region $REGION \ --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier big-instances --endpoint-type reader { "EndpointType": "CUSTOM", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterEndpointIdentifier": "big-instances", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "ExcludedMembers": [], "CustomEndpointType": "READER", "Status": "creating", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances" } $ aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier big-instances \ --static-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION { "EndpointType": "CUSTOM", "ExcludedMembers": [], "DBClusterEndpointIdentifier": "big-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "Status": "modifying", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterIdentifier": "custom-endpoint-demo" }

O endpoint READER padrão do cluster pode se conectar a instâncias de banco de dados “pequenas” ou “grandes”, tornando impraticável prever a performance da consulta e a escalabilidade quando o cluster fica ocupado. Para dividir a workload claramente entre os conjuntos de instâncias de banco de dados, ignore o endpoint READER padrão e crie um segundo endpoint personalizado que se conecte a todas as outras instâncias de banco de dados. O exemplo a seguir faz isso criando um endpoint personalizado e adicionando uma lista de exclusões. Todas as outras instâncias de banco de dados adicionadas ao cluster depois serão adicionadas a esse endpoint automaticamente. O tipo ANY significa que esse endpoint está associado a oito instâncias no total: a instância primária e outras sete réplicas do Aurora. Se o exemplo tivesse usado o tipo READER, o endpoint personalizado só estaria associado às sete réplicas do Aurora.

$ aws rds create-db-cluster-endpoint --region $REGION --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier small-instances --endpoint-type any { "Status": "creating", "DBClusterEndpointIdentifier": "small-instances", "CustomEndpointType": "ANY", "EndpointType": "CUSTOM", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "StaticMembers": [], "ExcludedMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY" } $ aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier small-instances \ --excluded-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION { "DBClusterEndpointIdentifier": "small-instances", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:c7tj4example:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "CustomEndpointType": "ANY", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "EndpointType": "CUSTOM", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "StaticMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "modifying" }

O exemplo a seguir verifica o estado dos endpoints desse cluster. O cluster ainda tem o endpoint cluster original, com EndPointType de WRITER, que você continuaria usando nas operações de administração, ETL e outras de gravação. Ele ainda tem o endpoint READER original, que você não usaria porque cada conexão com ele pode ser direcionada para uma instância de banco de dados “pequena” ou “grande”. Os endpoints personalizados tornam esse comportamento previsível, com conexões garantidas para usar uma das instâncias de banco de dados “pequena” ou “grande” com base no endpoint especificado.

$ aws rds describe-db-cluster-endpoints --region $REGION { "DBClusterEndpoints": [ { "EndpointType": "WRITER", "Endpoint": "custom-endpoint-demo.cluster-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "EndpointType": "READER", "Endpoint": "custom-endpoint-demo.cluster-ro-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "ANY", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "small-instances", "Status": "modifying" }, { "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "ExcludedMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "big-instances", "Status": "available" } ] }

Os exemplos finais demonstram como conexões de banco de dados sucessivas com os endpoints personalizados se ligam às várias instâncias de banco de dados no cluster do Aurora. O endpoint small-instances sempre se conecta às instâncias de banco de dados db.r4.4xlarge, que são hosts de números mais baixos nesse cluster.

$ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-02 | +-------------------------+ $ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-07 | +-------------------------+ $ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-01 | +-------------------------+

O endpoint big-instances sempre se conecta às instâncias de banco de dados db.r4.16xlarge, que são os dois hosts de números mais altos nesse cluster.

$ mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-10 | +-------------------------+ $ mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-09 | +-------------------------+