Tutorial: especificar qué instancias de base de datos se deben detener mediante etiquetas
Este tutorial supone que tiene varias instancias de base de datos en un entorno de desarrollo o prueba. Debe mantener todas estas instancias de base de datos durante varios días. Algunas instancias de base de datos puede ejecutar pruebas por la noche, mientras que otras se pueden detener durante la noche y volver a iniciarse al día siguiente.
El siguiente tutorial muestra cómo asignar una etiqueta a instancias de base de datos que son adecuadas para detenerse durante la noche. El tutorial muestra cómo un script puede detectar qué instancias de base de datos tienen esa etiqueta y, a continuación, detener esas instancias de base de datos. En este ejemplo, la parte del valor del par clave-valor no importa. La presencia de la stoppable
etiqueta significa que la instancia de base de datos tiene esta propiedad definida por el usuario.
En el siguiente tutorial, los comandos y las API de etiquetado funcionan con ARN, lo que permite a RDS funcionar sin problemas en regiones de AWS, cuentas de AWS y diferentes tipos de recursos que pueden tener nombres cortos idénticos. Puede especificar el ARN en lugar del ID de instancia de base de datos en los comandos CLI que operan en instancias de base de datos.
Para especificar qué instancias de base de datos se deben detener
-
Determine el ARN de una instancia de base de datos que queremos designar como detenible.
En el siguiente ejemplo, sustituya el nombre de las propias instancias de base de datos por
dev-test-db-instance
. En comandos posteriores que utilicen parámetros ARN, sustituya el ARN de la propia instancia de base de datos. El ARN incluye el propio ID de cuenta de AWS y el nombre de la región de AWS donde se encuentra la instancia de base de datos.$
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
-
Agregue la etiqueta
stoppable
a esta instancia de base de datos.Usted elige el nombre de esta etiqueta. Dado que en este ejemplo se trata la etiqueta como un atributo presente o ausente, se omite la
Value=
parte del--tags
parámetro. Este enfoque significa que puede evitar diseñar una convención de nomenclatura que codifique toda la información relevante en los nombres. En una convención de este tipo, puede codificar la información en el nombre de la instancia de base de datos o en los nombres de otros recursos.$
aws rds add-tags-to-resource \ --resource-namearn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
\ --tags Key=stoppable -
Confirme que la etiqueta está presente en la instancia de base de datos.
Los siguientes comandos recuperan la información de etiqueta para la instancia de base de datos en formato JSON y en texto sin formato separado por tabulaciones.
$
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
-
Detenga todas las instancias de base de datos designadas como
stoppable
.En el siguiente ejemplo, se crea un archivo de texto que enumera todas las instancias de base de datos. El comando de intérprete de comandos recorre la lista y comprueba si cada instancia de base de datos está etiquetada con el atributo correspondiente y ejecuta el comando
aws rds stop-db-instance
para cada instancia de base de datos.$
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", ...
Puede ejecutar un script como el anterior al final de cada día para asegurarse de que se detienen las instancias de base de datos no esenciales. También puede programar un trabajo al usar una utilidad como cron
para realizar dicha comprobación cada noche. Por ejemplo, puede hacer esto en caso de que algunas instancias de base de datos siguieran ejecutándose por error. Aquí, puede ajustar el comando que prepara la lista de instancias de base de datos para comprobar.
El siguiente comando produce una lista de las instancias de base de datos, pero sólo las que están en available
estado. El script puede ignorar las instancias de base de datos que ya están detenidas, porque tendrán valores de estado diferentes, como stopped
o 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
sugerencia
Puede utilizar la asignación de etiquetas y la búsqueda de instancias de base de datos con esas etiquetas para reducir costos de otras maneras. Por ejemplo, veamos este escenario con instancias de base de datos utilizadas para el desarrollo y las pruebas. En este caso, puede designar algunas instancias de base de datos para que se eliminen al final de cada día. O puede designarlos para que sus instancias de base de datos se cambien a clases de instancias de base de datos pequeñas durante los períodos de uso escaso previsto.