Além de executar comandos da CLI Google Cloud a partir da linha de comandos, pode executá-los a partir de scripts ou outras automatizações, por exemplo, quando usa o Jenkins para acionar a automatização de Google Cloud tarefas.
O Google Cloud SDK inclui várias ferramentas, como a filtragem, a formatação e a flag --quiet
, que lhe permitem processar eficazmente a saída e automatizar tarefas.
Noções básicas de criação de scripts com o SDK Cloud da Google
Para um guia passo a passo sobre a criação de scripts básicos com a CLI gcloud, consulte esta publicação no blogue: Criação de scripts com a gcloud: um guia para principiantes sobre a automatização de tarefas Google Cloud .
Autorização
Quando cria scripts com o Google Cloud SDK, tem de considerar os métodos de autorização. O SDK Google Cloud oferece duas opções:
- Autorização da conta de utilizador
- Autorização da conta de serviço
A autorização da conta de utilizador é recomendada se estiver a executar um script ou outra automatização numa única máquina.
Para autorizar o acesso e realizar outros passos comuns de configuração do SDK Cloud da Google:
gcloud init
A autorização da conta de serviço é recomendada se estiver a implementar um script ou outra automatização em várias máquinas num ambiente de produção. Também é o método de autorização recomendado se estiver a executar comandos da CLI gcloud numa instância de máquina virtual do Compute Engine em que todos os utilizadores têm acesso a root
.
Para usar a autorização da conta de serviço, use uma conta de serviço existente ou crie uma nova na página Contas de serviço:
Aceda à página Contas de serviço
Para criar e transferir a chave privada associada como um ficheiro de chave formatado em JSON, escolha Gerir chaves no menu de ações da conta de serviço.
Para executar a autorização, execute o comando
gcloud auth activate-service-account
:
gcloud auth activate-service-account --key-file [KEY_FILE]
Pode entrar na sua instância de VM através de SSH com o comando
gcloud compute ssh
,
que se encarrega da autenticação. Pode configurar os ficheiros de configuração SSH
com gcloud compute config-ssh
.
Para ver instruções detalhadas sobre a autorização de ferramentas do Google Cloud SDK, consulte o artigo Autorizar a CLI gcloud.
Desativar comandos
Alguns comandos da CLI gcloud são interativos, pedindo aos utilizadores a confirmação de uma operação ou solicitando informações adicionais para um comando introduzido.
Na maioria dos casos, isto não é desejável quando executa comandos num script ou noutra automatização. Pode desativar os comandos da CLI gcloud que pedem autorização definindo a propriedade disable_prompts
na sua configuração como True
ou usando a flag global --quiet
ou -q
. A maioria dos comandos interativos tem valores predefinidos quando é necessária uma confirmação ou uma entrada adicional. Se as mensagens estiverem desativadas, são usados estes valores predefinidos.
Por exemplo:
gcloud debug targets list --quiet
Filtrar e formatar a saída
Para criar scripts com a CLI gcloud, é importante ter um resultado previsível. É aqui que as flags --filter
e --format
ajudam. Garantem que, quando executa um comando através da CLI gcloud, este produz resultados que cumprem as suas especificações de formato (como json, yaml, csv e texto) e de filtro (nomes de VMs com o prefixo "test", ano de criação posterior a 2015, etc.).
Os exemplos seguintes mostram utilizações comuns da formatação e filtragem com comandos da CLI gcloud:
Liste as instâncias criadas na zona us-central1-a:
gcloud compute instances list --filter="zone:us-central1-a"
Apresente numa lista em formato JSON os projetos em que as etiquetas correspondem a valores específicos (por exemplo, label.env é "test" e label.version é alfa):
gcloud projects list --format="json" \
--filter="labels.env=test AND labels.version=alpha"
Liste os projetos com a respetiva data e hora de criação especificadas no fuso horário local:
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Apresentar projetos criados após uma data específica no formato de tabela:
gcloud projects list \
--format="table(projectNumber,projectId,createTime)" \
--filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"
Tenha em atenção que, no último exemplo, foi usada uma projeção na chave. O filtro é aplicado na chave createTime
após a definição da formatação de data.
Apresentar uma tabela aninhada das quotas de uma região:
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Imprima uma lista simples de quotas globais no formato CSV:
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Apresenta os recursos de instâncias de computação com decorações de caixas e títulos, ordenados por nome, no formato de tabela:
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Indique o endereço de email do utilizador autenticado do projeto:
gcloud info --format='value(config.account)'
Para ver exemplos mais complexos das capacidades de configuração de saída incorporadas nas flags filters
, formats
e projections
da CLI gcloud, consulte esta publicação no blogue acerca da filtragem e formatação.
Práticas recomendadas
Se quiser que um script ou outra automatização execute ações condicionalmente com base no resultado de um comando da CLI gcloud, tenha em atenção o seguinte:
Dependa do estado de saída do comando.
Se o estado de saída não for zero, ocorreu um erro e a saída pode estar incompleta, a menos que a documentação do comando indique o contrário. Por exemplo, um comando que cria vários recursos pode criar apenas alguns, listá-los na saída padrão e, em seguida, sair com um estado diferente de zero. Em alternativa, pode usar a propriedade
show_structured_logs
para analisar registos de erros. Executegcloud config
para ver mais detalhes.Não dependa de mensagens impressas no erro padrão.
A redação destas mensagens pode mudar em versões futuras da CLI gcloud e interromper a sua automatização.
Não dependa do resultado não processado das mensagens impressas no resultado padrão.
A saída predefinida de qualquer comando pode mudar numa versão futura. Pode minimizar o impacto dessas alterações usando a flag
--format
para formatar o resultado com uma das seguintes opções:--format=json|yaml|csv|text|list
para especificar os valores a devolver. Executegcloud topic formats
para ver mais opções.Pode modificar a saída predefinida de
--format
através deprojections
. Para aumentar a granularidade, use a flag--filter
para devolver um subconjunto dos valores com base numa expressão. Em seguida, pode criar scripts com base nesses valores devolvidos.Pode encontrar exemplos de formatação e filtragem da saída na secção abaixo.
Exemplos de guiões
Usando a funcionalidade de formatação e filtragem, pode combinar comandos da CLI gcloud num script para extrair facilmente informações incorporadas.
Apresente uma lista das chaves de contas de serviço de todos os seus projetos
Os seguintes scripts de exemplo listam as chaves associadas a todas as contas de serviço dos seus projetos através do seguinte:
- Iterar os seus projetos
- Para cada projeto, obter as contas de serviço associadas
Para cada conta de serviço, obter as chaves associadas
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
Ou 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"
}
}
}
Analise o resultado para processamento
O exemplo seguinte demonstra a análise da saída para processamento. Em particular, o script de exemplo escreve as informações da conta de serviço numa matriz e segrega os valores no campo serviceAccounts.scope()
com formato CSV de vários 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