Neste tutorial, você vai criar um inventário de serviços do Cloud Run usando a CLI do Google Cloud dentro de um serviço do Cloud Run. Você pode aplicar o que aprendeu neste tutorial nos scripts de operações do Cloud ou criar uma prova de conceito antes de usar bibliotecas de cliente para criar um serviço mais robusto.
Use a gcloud CLI como qualquer script de shell dentro de um serviço da Web. Por exemplo, como mostrado no guia de início rápido do Shell. No Cloud Run, as duas ferramentas trabalham com os serviços do Google Cloud fazendo a autenticação automática com a identidade do serviço do Cloud Run. Todas as permissões concedidas à identidade do serviço estão disponíveis para a CLI gcloud.
A CLI gcloud tem capacidades muito abrangentes de coleta de informações e gerenciamento de recursos no Google Cloud. Portanto, usá-la em um serviço da Web minimiza o risco de um autor de chamada fazer mau uso dessas capacidades. Sem controles de segurança, é possível haver riscos para outros serviços ou recursos em execução no mesmo projeto, possibilitando atividades prejudiciais acidentais ou intencionais. Veja alguns exemplos desses riscos:
- Ativar a descoberta de endereços IP de máquinas virtuais particulares
- Ativar acesso a dados particulares de um banco de dados no mesmo projeto
- Ativar a exclusão de outros serviços em execução
Várias etapas neste tutorial mostram como impor controles para minimizar riscos,
como, por exemplo, especificar o comando gcloud
a ser executado no código, em vez de deixá-lo
aberto como uma entrada do usuário.
O processo de script com a ferramenta de linha de comando em um serviço do Cloud Run é semelhante ao uso local. A principal diferença são as restrições extras que precisam ser adicionadas em torno da lógica principal do script.
Objetivos
- Gravar e criar um contêiner personalizado com um Dockerfile (links em inglês)
- Gravar, criar e implantar um serviço do Cloud Run
- Usar a CLI gcloud com segurança em um serviço da Web
- Gerar um relatório dos serviços do Cloud Run e salvá-lo no Cloud Storage
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Instale e inicialize a CLI gcloud.
Funções exigidas
Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:
-
Editor do Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador do Cloud Run (
roles/run.admin
) -
Criar contas de serviço (
roles/iam.serviceAccountCreator
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Administrador de armazenamento (
roles/storage.admin
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Configurar os padrões da gcloud
Para configurar a gcloud com os padrões do serviço do Cloud Run, realize as etapas a seguir:
Defina seu projeto padrão:
gcloud config set project PROJECT_ID
Substitua PROJECT_ID pelo nome do projeto que você criou para este tutorial.
Configure a gcloud para a região escolhida:
gcloud config set run/region REGION
Substitua REGION pela região compatível do Cloud Run.
Locais do Cloud Run
O Cloud Run é regional, o que significa que a infraestrutura que executa seus serviços do Cloud Run está localizada em uma região específica e é gerenciada pelo Google para estar disponível de maneira redundante em todas as zonas da região.
Atender aos seus requisitos de latência, disponibilidade ou durabilidade são os principais fatores para selecionar a região em que seus serviços do Cloud Run são executados.
Geralmente, é possível selecionar a região mais próxima de seus usuários, mas considere a localização dos outros produtos do Google Cloud usados pelo serviço do Cloud Run.
O uso de produtos do Google Cloud em vários locais pode afetar a latência e o custo do serviço.
O Cloud Run está disponível nas regiões a seguir:
Sujeitas aos preços do nível 1
asia-east1
(Taiwan)asia-northeast1
(Tóquio)asia-northeast2
(Osaka)asia-south1
(Mumbai, Índia)europe-north1
(Finlândia) Baixo CO2europe-southwest1
(Madri) Baixo CO2europe-west1
(Bélgica) Baixo CO2europe-west4
(Países Baixos) Baixo CO2europe-west8
(Milão)europe-west9
(Paris) Baixo CO2me-west1
(Tel Aviv)us-central1
(Iowa) Baixo CO2us-east1
(Carolina do Sul)us-east4
(Norte da Virgínia)us-east5
(Columbus)us-south1
(Dallas) Baixo CO2us-west1
(Oregon) Baixo CO2
Sujeitas aos preços do nível 2
africa-south1
(Johannesburgo)asia-east2
(Hong Kong)asia-northeast3
(Seul, Coreia do Sul)asia-southeast1
(Singapura)asia-southeast2
(Jacarta)asia-south2
(Déli, Índia)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Varsóvia, Polônia)europe-west10
(Berlim) Baixo CO2europe-west12
(Turim)europe-west2
(Londres, Reino Unido) Baixo CO2europe-west3
(Frankfurt, Alemanha) Baixo CO2europe-west6
(Zurique, Suíça) Baixo CO2me-central1
(Doha)me-central2
(Damã)northamerica-northeast1
(Montreal) Baixo CO2northamerica-northeast2
(Toronto) Baixo CO2southamerica-east1
(São Paulo, Brasil) Baixo CO2southamerica-west1
(Santiago, Chile) Baixo CO2us-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Se você já criou um serviço do Cloud Run, é possível visualizar a região no painel do Cloud Run no console do Google Cloud.
Como recuperar o exemplo de código
Para recuperar o exemplo de código para uso, siga estas etapas:
Clone o repositório do aplicativo de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Mude para o diretório que contém o código de amostra do Cloud Run:
cd cloud-run-samples/gcloud-report/
Revisar o código
Esta seção inclui informações sobre o exemplo de código que você recuperou.
Gerar um relatório e fazer upload dele no Cloud Storage
Esse script de shell gera um relatório dos serviços do Cloud Run no projeto e na região atuais e faz upload do resultado para o Cloud Storage. Ele lista
os serviços cujo nome contém o argumento search
de string fornecido.
O script usa o comando gcloud run services list
,
opções de formato avançado da gcloud
e
o modo de cópia da transferência por streaming da gcloud
.
Esse script é seguro para ser executado como um serviço, porque invocações repetidas dele atualizam o relatório sem que haja mais desligamentos de usuários. Outros scripts que usam a CLI gcloud podem ser mais caros quando invocados repetidamente, como criar novos recursos do Cloud ou realizar tarefas caras. Scripts idempotentes, que geram o mesmo resultado em invocações repetidas, são mais seguros para executar como um serviço.
Invocar o script na solicitação HTTP
Este código em Go configura um serviço da Web que executa um script de shell para gerar um relatório. Como a consulta de pesquisa é uma entrada do usuário, o código a valida para garantir que ela contenha apenas letras, números ou hífens para impedir comandos maliciosos como entrada. Esse conjunto de caracteres é restrito o suficiente para evitar ataques de injeção de comandos.
O serviço da Web passa o parâmetro de pesquisa como um argumento para o script de shell.
Um arquivo go.mod
declara as dependências do aplicativo em um
módulo go:
Definir o ambiente do contêiner
O Dockerfile define como o ambiente é agrupado para o serviço.
Ele é semelhante ao Dockerfile do guia de início rápido "helloworld-shell", exceto que a imagem do contêiner final é baseada na imagem da CLI do Google Cloud gcloud
. Isso
permite que seu serviço use o gcloud
sem precisar de instalação personalizada e
e as etapas de configuração
da CLI do Google Cloud.
Criar um repositório padrão do Artifact Registry
Crie um repositório padrão do Artifact Registry para armazenar a imagem do contêiner:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=REGION
Substitua:
- REPOSITORY por um nome exclusivo para o repositório.
- REGION pela região do Google Cloud do Artifact Registry.
Configurar o bucket do Cloud Storage
Crie um bucket do Cloud Storage para fazer upload de relatórios:
gcloud storage buckets create gs://REPORT_ARCHIVE_BUCKET
Substitua REPORT_ARCHIVE_BUCKET por um nome de bucket globalmente exclusivo.
Configurar a identidade do serviço
Para limitar os privilégios que o serviço tem a outra infraestrutura, crie uma identidade de serviço e personalize as permissões específicas do IAM necessárias para fazer o trabalho.
Nesse caso, os privilégios necessários são permissão para ler serviços do Cloud Run e permissão para ler e gravar no bucket do Cloud Storage.
Crie uma conta de serviço:
gcloud iam service-accounts create gcloud-report-identity
Conceder permissão à conta de serviço para ler os serviços do Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:gcloud-report-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/run.viewer
Conceder permissão à conta de serviço para ler e gravar no bucket do Cloud Storage:
gcloud storage buckets add-iam-policy-binding gs://REPORT_ARCHIVE_BUCKET \ --member=serviceAccount:gcloud-report-identity@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectUser
O acesso limitado dessa identidade de serviço personalizada impede que o serviço acesse outros recursos do Google Cloud.
Enviar o serviço
O código de envio é composto de três etapas:
- Criar uma imagem de contêiner com o Cloud Build
- Enviar a imagem do contêiner para o Artifact Registry
- Implantar a imagem de contêiner no Cloud Run.
Para enviar o código, siga estas etapas:
Compile seu contêiner e publique no Artifact Registry:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/gcloud-report
Substitua:
- PROJECT_ID pelo ID do projeto do Google Cloud
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região do Google Cloud do Artifact Registry.
gcloud-report
é o nome do serviço.Após a conclusão, uma mensagem de sucesso exibe o ID, a hora da criação e o nome da imagem. A imagem é armazenada no Artifact Registry e poderá ser reutilizada se necessário.
Execute o comando a seguir para implantar o serviço:
gcloud run deploy gcloud-report \ --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/gcloud-report \ --update-env-vars GCLOUD_REPORT_BUCKET=REPORT_ARCHIVE_BUCKET \ --service-account gcloud-report-identity \ --no-allow-unauthenticated
Substitua:
- PROJECT_ID pelo ID de projeto do Google Cloud;
- REPOSITORY pelo nome do repositório do Artifact Registry.
- REGION pela região do Google Cloud do serviço.
gcloud-report
faz parte do nome do contêiner e do serviço. A imagem de contêiner é implantada no serviço e na região (Cloud Run) que você configurou anteriormente em Como configurar a gcloud.A sinalização
--no-allow-unauthenticated
restringe o acesso não autenticado ao serviço. Mantendo o serviço particular, a autenticação integrada do Cloud Run bloqueia solicitações não autorizadas. Para mais detalhes sobre autenticação baseada no Identity and Access Management (IAM), consulte Como gerenciar o acesso usando o IAM.Aguarde a conclusão da implantação. Isso pode levar cerca de meio minuto. Em caso de sucesso, a linha de comando exibe o URL de serviço.
Se você quer implantar uma atualização de código no serviço, repita as etapas anteriores. Cada implantação em um serviço cria uma nova revisão e inicia automaticamente o tráfego de serviço quando estiver pronto.
Consulte Como gerenciar o acesso usando o IAM para saber como conceder acesso aos usuários do Google Cloud para invocar esse serviço. Os editores e proprietários do projeto têm esse acesso automaticamente.
Gerar um relatório
Para gerar um relatório dos serviços do Cloud Run:
Use curl para enviar uma solicitação autenticada:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Substitua SERVICE_URL pelo URL fornecido pelo Cloud Run após concluir a implantação.
Se você criou um novo projeto e seguiu este tutorial, a saída será semelhante a:
Wrote report to gs://REPORT_ARCHIVE_BUCKET/report-.-DATE.txt
O
.
no nome do arquivo é o argumento de pesquisa padrão, conforme mencionado no código-fonte.Para usar o recurso de pesquisa, adicione um argumento
search
à solicitação:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL?search=gcloud
Esta consulta retornará uma resposta como esta:
Wrote report to gs://REPORT_ARCHIVE_BUCKET/report-gcloud-DATE.txt
Extraia o arquivo usando a CLI gcloud localmente:
gcloud storage cp gs://REPORT_FILE_NAME .
O
.
no comando significa o diretório de trabalho atual.Substitua REPORT_FILE_NAME pela saída do nome do objeto do Cloud Storage na etapa anterior.
Abra o arquivo para ver o relatório. Você verá o seguinte:
Melhorar a robustez para o futuro
Se você pretende desenvolver mais esse serviço, considere reescrever em uma linguagem de programação mais robusta, usando a API Cloud Run e a biblioteca de cliente do Cloud Storage.
É possível examinar as chamadas de API que estão sendo feitas (e conferir alguns detalhes da autenticação)
adicionando --log-http
aos comandos da CLI da gcloud.
Automatizar esta operação
Agora que o relatório de serviços do Cloud Run pode ser acionado por uma solicitação HTTP, use automação para gerar relatórios quando você precisar deles:
- Execute este serviço em uma programação com o Cloud Scheduler
- Crie o relatório como uma tarefa na fila ou programação no futuro com o Google Tarefas.
Liberar memória
Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.
Como excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Como excluir recursos do tutorial
Exclua o serviço do Cloud Run que você implantou neste tutorial:
gcloud run services delete SERVICE-NAME
SERVICE-NAME é o nome escolhido do serviço.
Também é possível excluir os serviços do Cloud Run no Console do Google Cloud.
Remova a configuração da região padrão da gcloud que você adicionou durante a configuração do tutorial:
gcloud config unset run/region
Remova a configuração do projeto:
gcloud config unset project
Exclua outros recursos do Google Cloud criados neste tutorial:
A seguir
- Reduza as dependências do serviço substituindo o comando da CLI gcloud por chamadas de API: Como fazer upload de objetos, Referência da API Cloud Run Admin.
- Aumente ainda mais a segurança usando controles de entrada de rede para limitar o acesso ao serviço.
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.