Tutorial: Uso de etiquetas para especificar qué clústeres de base de datos de Aurora se deben detener
Supongamos que crea una serie de clústeres de Aurora base de datos en un entorno de desarrollo o prueba. Necesita conservar todos estos clústeres durante varios días. Algunos de los clústeres ejecutan pruebas durante la noche. Otros clústeres se pueden detener durante la noche y comenzar de nuevo al día siguiente. En el ejemplo siguiente se muestra cómo asignar una etiqueta a los clústeres adecuados para detenerse durante la noche. A continuación, el ejemplo muestra cómo un script puede detectar qué clústeres tienen esa etiqueta y, entonces, detenerlos. En este ejemplo, la parte del valor del par clave-valor no importa. La presencia de la stoppable
etiqueta significa que el clúster tiene esta propiedad definida por el usuario.
Para especificar qué clústeres de base de datos de Aurora se deben detener
-
Determine el ARN de un clúster que queremos designar como detenible.
Los comandos y las API para etiquetar funcionan con los ARN. De esta forma, pueden 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 clúster en los comandos CLI que operan en clústeres. Sustituya el nombre de su propio clúster por
dev-test-clúster
. En comandos posteriores que utilicen parámetros ARN, sustituya el ARN de su propio clúster. El ARN incluye el propio ID de cuenta de AWS y el nombre de la región de AWS donde se encuentra el clúster.$
aws rds describe-db-clusters --db-cluster-identifierdev-test-cluster
\ --query "*[].{DBClusterArn:DBClusterArn}" --output textarn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
-
Agregue la etiqueta
stoppable
a este clúster.Usted elige el nombre de esta etiqueta. 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. Dado que en este ejemplo se trata la etiqueta como un atributo presente o ausente, se omite la
Value=
parte del--tags
parámetro.$
aws rds add-tags-to-resource \ --resource-namearn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
\ --tags Key=stoppable -
Confirme que la etiqueta está presente en el clúster.
Estos comandos recuperan la información de etiqueta para el clúster en formato JSON y en texto plano separado por tabulaciones.
$
aws rds list-tags-for-resource \ --resource-namearn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
{ "TagList": [ { "Key": "stoppable", "Value": "" } ] }
$
aws rds list-tags-for-resource \ --resource-namearn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
--output textTAGLIST stoppable
-
Para detener todos los clústeres designados como
stoppable
, prepare una lista de todos los clústeres. Recorra la lista y compruebe si cada clúster está etiquetado con el atributo correspondiente.Este ejemplo de Linux utiliza scripts shell a fin de guardar la lista de las ARN de clúster en un archivo temporal y, a continuación, ejecutar comandos de CLI para cada clúster.
$
aws rds describe-db-clusters --query "*[].[DBClusterArn]" --output text >/tmp/cluster_arns.lst$
for arn in $(cat /tmp/cluster_arns.lst) do match="$(aws rds list-tags-for-resource --resource-name $arn --output text | grep 'TAGLIST\tstoppable')" if [[ ! -z "$match" ]] then echo "Cluster $arn is tagged as stoppable. Stopping it now." # Note that you can specify the full ARN value as the parameter instead of the short ID 'dev-test-cluster'. aws rds stop-db-cluster --db-cluster-identifier $arn fi doneCluster arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster is tagged as stoppable. Stopping it now. { "DBCluster": { "AllocatedStorage": 1, "AvailabilityZones": [ "us-east-1e", "us-east-1c", "us-east-1d" ], "BackupRetentionPeriod": 1, "DBClusterIdentifier": "dev-test-cluster", ...
Puede ejecutar un script como este al final de cada día para asegurarse de que los clústeres no esenciales se detienen. 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 algunos clústeres de base de datos siguieran ejecutándose por error. Aquí, puede ajustar el comando que prepara la lista de clústeres para comprobar.
El siguiente comando produce una lista de los clústeres, pero sólo los que están en available
estado. El script puede ignorar los clústeres que ya están detenidos, porque tendrán valores de estado diferentes, como stopped
o stopping
.
$
aws rds describe-db-clusters \ --query '*[].{DBClusterArn:DBClusterArn,Status:Status}|[?Status == `available`]|[].{DBClusterArn:DBClusterArn}' \ --output textarn:aws:rds:us-east-1:123456789:cluster:cluster-2447 arn:aws:rds:us-east-1:123456789:cluster:cluster-3395 arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster arn:aws:rds:us-east-1:123456789:cluster:pg2-cluster
sugerencia
Puede utilizar la asignación de etiquetas y la búsqueda de clústeres con esas etiquetas para reducir costos de otras maneras. Por ejemplo, veamos este escenario con clústeres de base de datos de Aurora utilizadas para el desarrollo y las pruebas. En este caso puede designar algunos clústeres para que se eliminen al final de cada día o que solo se eliminen las instancias de base de datos de lector. O puede designar algunos 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.