Además de ejecutar comandos de Google Cloud CLI desde la línea de comandos, puedes ejecutarlas desde secuencias de comandos o en otras automatizaciones, por ejemplo, cuando usas Jenkins para impulsar la automatización de las tareas de Google Cloud.
gcloud CLI incluye una variedad de herramientas como el filtrado,
formato y la marca --quiet
, lo que te permite manejar los datos de salida
y automatizar tareas.
Conceptos básicos de las secuencias de comandos con gcloud CLI
Si deseas consultar una guía paso a paso para crear secuencias de comandos básicas con el gcloud CLI, consulta esta entrada de blog: Scripting with gcloud: a principiantes guía sobre la automatización de tareas de Google Cloud.
Autorización
Cuando crees secuencias de comandos con gcloud CLI, deberás considerar autorización. gcloud CLI proporciona dos opciones:
- Autorización de cuenta de usuario
- Autorización de cuenta de servicio
Se recomienda la autorización de la cuenta de usuario si estás ejecutando una secuencia de comandos o cualquier otra automatización en una sola máquina.
Para autorizar el acceso y realizar otros pasos comunes de configuración de gcloud CLI, haz lo siguiente:
gcloud init
Se recomienda la autorización de la cuenta de servicio si estás implementando
una secuencia de comandos o cualquier otra automatización en distintas máquinas en 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 la cuenta de servicio, usa una cuenta de servicio existente o crea una nueva 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 Manage Keys 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 establecer una conexión SSH a tu instancia de VM con
gcloud compute ssh
,
que se encarga de la autenticación. Los archivos de configuración SSH se pueden configurar con gcloud compute config-ssh
.
Para obtener instrucciones detalladas sobre la autorización de herramientas de gcloud CLI, consulta Autoriza la CLI de gcloud.
Inhabilita mensajes
Algunos comandos de la CLI de gcloud son interactivos y les piden a los usuarios que confirmen una operación o les solicitan una entrada adicional para un comando ingresado.
En la mayoría de los casos, esto no es conveniente cuando se ejecutan comandos en una secuencia de comandos o cualquier otra automatización. Puedes inhabilitar instrucciones de los comandos de gcloud CLI:
Configura la propiedad disable_prompts
en tu
configuración como True
con la marca global --quiet
o -q
. La mayoría de los comandos interactivos tienen valores predeterminados cuando se requiere una entrada o una confirmación adicional. Si se inhabilitan los mensajes, se usan estos valores predeterminados.
Por ejemplo:
gcloud debug targets list --quiet
Formato de salida y filtrado
Para crear secuencias de comandos con gcloud CLI, es importante
resultado predecible. aquí es donde
--filter
y
Ayuda con las marcas --format
. Se aseguran de que cuando ejecutas un comando con la CLI de gcloud, se produzcan resultados que correspondan a las especificaciones de formato (como JSON, YAML, CSV y texto) y filtro (nombres de VM con el prefijo "prueba", año de creación posterior a 2015, etcétera).
Si quieres ver un instructivo interactivo sobre el uso del filtro y las marcas de formato, inícialo con el siguiente botón:
Los siguientes ejemplos muestran usos comunes del formato y el filtrado con los comandos de la CLI de gcloud:
Enumera instancias creadas en la zona us-central1-a:
gcloud compute instances list --filter="zone:us-central1-a"
Enumera en formato JSON aquellos proyectos en los que las etiquetas coinciden con valores específicos (p. ej., label.env es 'prueba' y label.version es alfa):
gcloud projects list --format="json" \
--filter="labels.env=test AND labels.version=alpha"
Enumera proyectos con su fecha y hora de creación especificadas en la zona horaria local:
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Enumera proyectos que se crearon luego de una fecha específica 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 usó una proyección en la clave. El filtro es
se aplica en la clave createTime
después de que se establece el formato de fecha.
Muestra una tabla anidada de las cuotas de la región:
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Imprime una lista plana de cuotas globales en formato CSV:
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Enumera los recursos de las instancias de procesamiento con títulos y decoraciones de cuadro, ordenados por nombre, en formato de tabla:
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Enumera la dirección de correo electrónico del usuario autenticado del proyecto:
gcloud info --format='value(config.account)'
Para ver más ejemplos sobre las capacidades de configuración de salidas compiladas
en el filters
de gcloud CLI,
formats
y
projections
marcas, consulta esto
entrada de blog sobre
filtrado y formato.
Prácticas recomendadas
Si deseas que una secuencia de comandos o alguna automatización ejecute acciones condicionalmente en función del resultado de un comando de la CLI de gcloud, observa lo siguiente:
Depende del estado de salida del comando.
Si el estado de salida no es cero, hubo un problema, y el resultado puede estar incompleto salvo que la documentación del comando señale lo contrario. Por ejemplo, un comando que crea múltiples recursos solo podría crear algunos, enumerarlos en el resultado estándar y luego salir con un estado que no es cero. De forma alternativa, puedes usar la propiedad
show_structured_logs
para analizar los registros de errores. Ejecutagcloud config
para obtener más detalles.No dependas de los mensajes impresos para los errores estándar.
La redacción de estos mensajes puede cambiar en futuras versiones de la gcloud CLI y interrumpir la automatización.
No dependas de los resultados sin procesar de los mensajes impresos para las salidas estándar.
El resultado predeterminado de cualquier comando puede cambiar en actualizaciones futuras. Puedes minimizar el impacto de esos cambios mediante la marca
--format
para dar formato al resultado de la salida con una de las siguientes opciones a fin de especificar los valores que se mostrarán:--format=json|yaml|csv|text|list
. Ejecutagcloud topic formats
para ver más opciones.Puedes modificar el resultado predeterminado
--format
medianteprojections
Para niveles nivel de detalle, usa la marca--filter
para mostrar un subconjunto de valores basado en una expresión. Luego, puedes ejecutar la secuencia de comandos contra esos valores mostrados.Puedes encontrar ejemplos de resultados de formato y filtro en la sección a continuación.
Ejemplos de secuencias de comandos
Con la funcionalidad de formato y filtro, puedes combinar de gcloud CLI en una secuencia de comandos para extraer información.
Enumera las claves de todos tus proyectos cuentas de servicio
En las siguientes secuencias de comandos de ejemplo, se enumeran las claves asociadas a todas las claves asociadas cuentas de servicio de la siguiente manera:
- Cómo iterar en tus proyectos
- Para cada proyecto, obtener las cuentas de servicio asociadas
Obtener las claves asociadas para 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
WindowsPowerShell
O como 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"
}
}
}
Cómo analizar el resultado para su procesamiento
En el siguiente ejemplo, se muestra el resultado del análisis para el procesamiento. En particular,
la secuencia de comandos de ejemplo escribe
la información de la cuenta de servicio
segrega los valores en serviceAccounts.scope()
con formato CSV de valores múltiples.
:
#!/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