Además de ejecutar comandos de la CLI de Google Cloud desde la línea de comandos, puedes hacerlo desde secuencias de comandos u otras automatizaciones. Por ejemplo, puedes usar Jenkins para automatizar tareas de Google Cloud .
El SDK de Google Cloud incluye varias herramientas, como el filtrado, el formato y la marca --quiet
, que te permiten gestionar la salida de forma eficaz y automatizar tareas.
Aspectos básicos de las secuencias de comandos con el SDK de Google Cloud
Para obtener una guía detallada sobre cómo crear secuencias de comandos básicas con la CLI de gcloud, consulta esta entrada de blog: Secuencias de comandos con gcloud: guía para principiantes sobre la automatización de tareas Google Cloud .
Autorización
Cuando escribas secuencias de comandos con el SDK de Google Cloud, tendrás que tener en cuenta los métodos de autorización. El SDK de Google Cloud ofrece dos opciones:
- Autorización de cuentas de usuario
- Service account authorization (Autorización de la cuenta de servicio)
Se recomienda la autorización de cuentas de usuario si ejecutas una secuencia de comandos u otra automatización en un solo equipo.
Para autorizar el acceso y realizar otros pasos de configuración comunes del SDK de Google Cloud, sigue estos pasos:
gcloud init
Se recomienda la autorización de cuentas de servicio si vas a implementar una secuencia de comandos u otra automatización en varias máquinas de un entorno de producción. También es el método de autorización recomendado si ejecutas comandos de la CLI de gcloud en una instancia de máquina virtual de Compute Engine en la que todos los usuarios tienen acceso a root
.
Para usar la autorización de cuentas de servicio, utiliza una cuenta de servicio que ya tengas o crea una en la página Cuentas de servicio:
Ir a la página Cuentas de servicio
Para crear y descargar la clave privada asociada como un archivo de claves con formato JSON, elige Gestionar claves en el menú de acciones de la cuenta de servicio.
Para ejecutar la autorización, ejecuta gcloud auth activate-service-account
:
gcloud auth activate-service-account --key-file [KEY_FILE]
Puedes conectarte a tu instancia de VM mediante SSH con
gcloud compute ssh
,
que se encarga de la autenticación. Los archivos de configuración de SSH se pueden configurar con gcloud compute config-ssh
.
Para obtener instrucciones detalladas sobre cómo autorizar las herramientas del SDK de Google Cloud, consulta Autorizar la CLI de gcloud.
Inhabilitar peticiones
Algunos comandos de la CLI de gcloud son interactivos y solicitan a los usuarios que confirmen una operación o que proporcionen información adicional para un comando introducido.
En la mayoría de los casos, no es recomendable cuando se ejecutan comandos en una secuencia de comandos u otra automatización. Puedes inhabilitar las peticiones de los comandos de la CLI de gcloud si estableces la propiedad disable_prompts
en True
en tu configuración o si usas la marca global --quiet
o -q
. La mayoría de los comandos interactivos tienen valores predeterminados cuando se requiere una confirmación o una entrada adicional. Si las peticiones están inhabilitadas, se usan estos valores predeterminados.
Por ejemplo:
gcloud debug targets list --quiet
Filtrar y dar formato a la salida
Para crear secuencias de comandos con la CLI de gcloud, es importante que la salida sea predecible. Para ello, se usan las marcas --filter
y --format
. De esta forma, cuando ejecutas un comando con la CLI de gcloud, se genera un resultado que se ajusta a las especificaciones de formato (como json, yaml, csv y texto) y de filtro (nombres de VMs que empiezan por "test", año de creación posterior al 2015, etc.).
En los siguientes ejemplos se muestran usos habituales del formato y el filtrado con comandos de la CLI de gcloud:
Lista de instancias creadas en la zona us-central1-a:
gcloud compute instances list --filter="zone:us-central1-a"
Enumera en formato JSON los proyectos en los que las etiquetas coincidan con valores específicos (por ejemplo, label.env es "test" y label.version es alpha):
gcloud projects list --format="json" \
--filter="labels.env=test AND labels.version=alpha"
Lista de proyectos con la fecha y la hora de creación especificadas en la zona horaria local:
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Lista los proyectos que se crearon después de una fecha concreta en formato de tabla:
gcloud projects list \
--format="table(projectNumber,projectId,createTime)" \
--filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"
Ten en cuenta que, en el último ejemplo, se ha usado una proyección en la clave. El filtro se aplica en la tecla createTime
después de definir el formato de fecha.
Lista una tabla anidada de las cuotas de una región:
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Imprime una lista combinada de cuotas globales en formato CSV:
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Lista los recursos de instancias de computación con decoraciones y títulos de recuadros, ordenados por nombre, en formato de tabla:
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Lista la dirección de correo del usuario autenticado del proyecto:
gcloud info --format='value(config.account)'
Para ver ejemplos más complejos de la configuración de salida de las funciones integradas en las marcas filters
, formats
y projections
de la CLI de gcloud, consulta esta entrada de blog sobre filtrado y formato.
Prácticas recomendadas
Si quieres que una secuencia de comandos u otra automatización realice acciones de forma condicional en función del resultado de un comando de la CLI de gcloud, ten en cuenta lo siguiente:
Depende del estado de salida del comando.
Si el estado de salida no es cero, se ha producido un error y la salida puede estar incompleta, a menos que se indique lo contrario en la documentación del comando. Por ejemplo, un comando que crea varios recursos solo puede crear algunos, mostrarlos en la salida estándar y, a continuación, salir con un estado distinto de cero. También puede usar la propiedad
show_structured_logs
para analizar los registros de errores. Ejecutagcloud config
para obtener más información.No dependas de los mensajes impresos en el error estándar.
El texto de estos mensajes puede cambiar en futuras versiones de la CLI de gcloud y provocar que tu automatización deje de funcionar.
No dependas de la salida sin procesar de los mensajes impresos en la salida estándar.
La salida predeterminada de cualquier comando puede cambiar en una versión futura. Puedes minimizar el impacto de esos cambios usando la marca
--format
para dar formato al resultado con uno de los siguientes valores:--format=json|yaml|csv|text|list
para especificar los valores que se van a devolver. Ejecutagcloud topic formats
para ver más opciones.Puedes modificar la salida predeterminada de
--format
conprojections
. Para aumentar la granularidad, usa la marca--filter
para devolver un subconjunto de los valores basados en una expresión. Después, puedes crear secuencias de comandos con esos valores devueltos.En la sección de abajo se muestran ejemplos de cómo dar formato y filtrar los resultados.
Ejemplos de secuencias de comandos
Con las funciones de formato y filtro, puedes combinar comandos de la CLI de gcloud en una secuencia de comandos para extraer fácilmente información insertada.
Mostrar las claves de todas las cuentas de servicio de tus proyectos
Las siguientes secuencias de comandos de ejemplo muestran las claves asociadas a las cuentas de servicio de todos tus proyectos por:
- Iterar en tus proyectos
- Obtener las cuentas de servicio asociadas a cada proyecto
Obtener las claves asociadas a cada cuenta de servicio
Bash
#!/bin/bash
for project in $(gcloud projects list --format="value(projectId)")
do
echo "ProjectId: $project"
for robot in $(gcloud iam service-accounts list --project $project --format="value(email)")
do
echo " -> Robot $robot"
for key in $(gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
do
echo " $key"
done
done
done
Windows PowerShell
O bien, con Windows PowerShell:
foreach ($project in gcloud projects list --format="value(projectId)")
{
Write-Host "ProjectId: $project"
foreach ($robot in gcloud iam service-accounts list --project $project --format="value(email)")
{
Write-Host " -> Robot $robot"
foreach ($key in gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
{
Write-Host " $key"
}
}
}
Analizar la salida para procesarla
En el siguiente ejemplo se muestra cómo analizar la salida para procesarla. En concreto, la secuencia de comandos de ejemplo escribe la información de la cuenta de servicio en una matriz y segrega los valores en el campo serviceAccounts.scope()
con formato CSV de varios valores:
#!/bin/bash
for scopesInfo in $(
gcloud compute instances list --filter=name:instance-1 \
--format="csv[no-heading](name,id,serviceAccounts[].email.list(),
serviceAccounts[].scopes[].map().list(separator=;))")
do
IFS=',' read -r -a scopesInfoArray<<< "$scopesInfo"
NAME="${scopesInfoArray[0]}"
ID="${scopesInfoArray[1]}"
EMAIL="${scopesInfoArray[2]}"
SCOPES_LIST="${scopesInfoArray[3]}"
echo "NAME: $NAME, ID: $ID, EMAIL: $EMAIL"
echo ""
IFS=';' read -r -a scopeListArray<<< "$SCOPES_LIST"
for SCOPE in "${scopeListArray[@]}"
do
echo " SCOPE: $SCOPE"
done
done