Tutorial: especificar quais instâncias de banco de dados devem ser interrompidas usando tags
Este tutorial pressupõe que você tenha várias instâncias de banco de dados em um ambiente de desenvolvimento ou teste. Você precisa manter essas instâncias de banco de dados por vários dias. Algumas instâncias de banco de dados executam testes noturnos, enquanto outras podem ser interrompidas durante a noite e iniciadas novamente no dia seguinte.
O tutorial a seguir mostra como atribuir uma tag às instâncias de banco de dados que são adequadas para interrupção durante a noite. O tutorial mostra como um script pode detectar quais instâncias de banco de dados têm a tag e, então, interromper as instâncias marcadas. Neste exemplo, a parte de valor do par chave-valor não importa. A presença da tag stoppable
significa que a instância de banco de dados tem essa propriedade definida pelo usuário.
No tutorial a seguir, os comandos e APIs de marcação funcionam com ARNs, o que permite que o RDS funcione perfeitamente em regiões da AWS, contas da AWS e diferentes tipos de recurso que possam ter nomes curtos idênticos. Você pode especificar o ARN em vez do ID da instância de banco de dados em comandos CLI que operam em instâncias de banco de dados.
Para especificar quais instâncias de banco de dados devem ser interrompidas
-
Primeiro, determine o ARN de uma instância de banco de dados que você queira designar como passível de ser interrompida.
No exemplo a seguir, substitua o nome de suas próprias instâncias de banco de dados por
dev-test-db-instance
. Em comandos subsequentes que usam parâmetros ARN, substitua o ARN de sua própria instância de banco de dados. O ARN inclui seu próprio ID de conta daAWS e o nome da região daAWS onde sua instância de Bancos de Dados está localizada.$
aws rds describe-db-instances --db-instance-identifierdev-test-db-instance
\ --query "*[].{DBInstance:DBInstanceArn}" --output textarn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
-
Adicione a tag
stoppable
a essa instância de banco de dados.Selecione o nome dessa tag. Como esse exemplo trata a tag como um atributo presente ou ausente, ele omite a parte
Value=
do parâmetro--tags
. Essa abordagem significa que você pode evitar a criação de uma convenção de nomenclatura que codifique todas as informações relevantes nos nomes. Nessa convenção, você pode codificar informações no nome da instância de banco de dados ou nos nomes de outros recursos.$
aws rds add-tags-to-resource \ --resource-namearn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
\ --tags Key=stoppable -
Confirme se a tag está presente na instância de banco de dados.
Os comandos a seguir recuperam as informações de tag para a instância de banco de dados no formato JSON e em texto separado por tabulação simples.
$
aws rds list-tags-for-resource \ --resource-namearn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
{ "TagList": [ { "Key": "stoppable", "Value": "" } ] }
aws rds list-tags-for-resource \ --resource-namearn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
--output textTAGLIST stoppable
-
Interrompa todas as instâncias de banco de dados designadas como
stoppable
.O exemplo a seguir cria um arquivo de texto que lista todas as instâncias de banco de dados. O comando shell percorre a lista, verifica se cada instância de banco de dados está marcada com o atributo relevante e executa o comando
aws rds stop-db-instance
para cada instância de banco de dados.$
aws rds describe-db-instances --query "*[].[DBInstanceArn]" --output text >/tmp/db_instance_arns.lst$
for arn in $(cat /tmp/db_instance_arns.lst) do match="$(aws rds list-tags-for-resource --resource-name $arn --output text | grep stoppable)" if [[ ! -z "$match" ]] then echo "DB instance $arn is tagged as stoppable. Stopping it now." # Note that you need to get the DB instance identifier from the ARN. dbid=$(echo $arn | sed -e 's/.*://') aws rds stop-db-instance --db-instance-identifier $dbid fi doneDB instance arn:arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance is tagged as stoppable. Stopping it now. { "DBInstance": { "DBInstanceIdentifier": "dev-test-db-instance", "DBInstanceClass": "db.t3.medium", ...
Você pode executar um script como o anterior no final de todos os dias para garantir que as instâncias de banco de dados não essenciais sejam interrompidas. Você também pode agendar um trabalho com um utilitário, como cron
, para realizar essa verificação todas as noites. Por exemplo, você pode fazer isso caso algumas instâncias de banco de dados sejam deixadas em execução por engano. Nesse caso, você pode ajustar o comando que prepara a lista de instâncias de banco de dados para conferir.
O comando a seguir produz uma lista de suas instâncias de banco de dados, mas apenas as que estão no estado available
. O script pode ignorar as instâncias de banco de dados que já estão paradas, pois elas terão valores de status diferentes, como stopped
ou stopping
.
$
aws rds describe-db-instances \ --query '*[].{DBInstanceArn:DBInstanceArn,DBInstanceStatus:DBInstanceStatus}|[?DBInstanceStatus == `available`]|[].{DBInstanceArn:DBInstanceArn}' \ --output textarn:aws:rds:us-east-1:123456789102:db:db-instance-2447 arn:aws:rds:us-east-1:123456789102:db:db-instance-3395 arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance arn:aws:rds:us-east-1:123456789102:db:pg2-db-instance
dica
Você pode usar a atribuição de tags e encontrar instâncias de banco de dados com essas tags a fim de reduzir custos de outras maneiras. Por exemplo, considere esse cenário com instâncias de banco de dados utilizadas para desenvolvimento e testes. Nesse caso, você pode designar que algumas instâncias de banco de dados sejam excluídas no final de cada dia. Ou você pode designar que suas instâncias de banco de dados sejam alteradas para classes de instância de banco de dados pequenas durante os períodos de baixa utilização esperada.