Visão geral
Com a computação sem servidor no Google Cloud, você pode desenvolver e implantar aplicativos altamente escalonáveis em uma plataforma sem servidor e totalmente gerenciada. Os serviços são escalonados verticalmente e de maneira automática de acordo com o tráfego.
Com a integração de serviços, você pode integrar seus serviços de maneira assíncrona e com acoplamento flexível para promover uma rápida inovação. O Eventarc permite criar arquiteturas orientadas por eventos sem a necessidade de gerenciar a infraestrutura. O Workflows permite a criação fácil de aplicativos confiáveis com a orquestração de serviços e APIs. O Cloud Scheduler é um serviço de cron job totalmente gerenciado que permite programar cargas de trabalho. O Cloud Tasks é um serviço totalmente gerenciado para criar filas de tarefas distribuídas. Com o Eventarc, o Workflows, o Cloud Scheduler e o Cloud Tasks, você pode integrar serviços com observabilidade, confiabilidade e segurança.
Neste laboratório, você vai usar o Workflows para criar um fluxo de trabalho que gerencia o processo de criação de miniaturas e extração de metadados de imagens recebidas. O Eventarc detecta quando uma imagem é enviada a um bucket do Cloud Storage e inicia a execução do fluxo de trabalho.
O fluxo de trabalho chama a API Cloud Vision para analisar a foto enviada. O Cloud Vision determina se a imagem é segura, detecta textos que estejam nela e fornece rótulos para o conteúdo. Os dados do Vision são extraídos com uma função personalizada que é criada no Cloud Run functions. Esses dados extraídos são salvos no Firestore, o banco de dados de documentos sem servidor e totalmente gerenciado do Google Cloud. O fluxo de trabalho também usa o Cloud Tasks para colocar uma tarefa em fila e criar uma miniatura.
O Cloud Build é usado para criar três serviços que são implantados no Cloud Run, uma plataforma sem servidor para executar serviços conteinerizados. Um desses serviços cria uma miniatura em resposta à tarefa criada pelo fluxo de trabalho.
O segundo serviço cria uma colagem de fotos com as imagens mais recentes. O serviço de colagem é executado em uma programação criada no Cloud Scheduler.
O terceiro serviço é acionado pelo Eventarc quando uma imagem é excluída do bucket do Cloud Storage. Esse serviço remove os metadados e a miniatura da imagem excluída.

O que você vai aprender
Neste laboratório, você vai aprender o seguinte:
- Acionar serviços e fluxos de trabalho de maneira assíncrona usando o Eventarc.
- Orquestrar serviços e APIs usando o Workflows.
- Gerenciar uma fila de tarefas distribuída usando o Cloud Tasks.
- Executar serviços em uma programação usando o Cloud Scheduler.
Configuração e requisitos
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período sem custo financeiro.
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento.
No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
-
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}}
Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}}
Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud.
Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
-
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Observação: para acessar uma lista de produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo ou digite o nome do serviço ou produto no campo Pesquisar.
Ative o Google Cloud Shell
O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.
O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
-
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

-
Clique em Continuar.
O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- Para listar o nome da conta ativa, use este comando:
gcloud auth list
Saída:
Credentialed accounts:
- @.com (active)
Exemplo de saída:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Para listar o ID do projeto, use este comando:
gcloud config list project
Saída:
[core]
project =
Exemplo de saída:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Observação:
a documentação completa da gcloud está disponível no
guia com informações gerais sobre a gcloud CLI
.
Tarefa 1: ativar APIs e criar buckets do Cloud Storage
Nesta tarefa, você vai ativar as APIs necessárias. Você também vai criar dois buckets no Cloud Storage: um para o upload de imagens e outro para o armazenamento das imagens geradas pelo aplicativo.
Ativar APIs
-
Para ativar as APIs necessárias, execute este comando:
gcloud services enable \
workflows.googleapis.com \
workflowexecutions.googleapis.com \
eventarc.googleapis.com \
tasks.googleapis.com \
cloudscheduler.googleapis.com \
storage.googleapis.com \
vision.googleapis.com \
run.googleapis.com \
cloudfunctions.googleapis.com \
firestore.googleapis.com \
appengine.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com
Esse aplicativo usa vários serviços do Google Cloud, e você precisa ativar cada uma das APIs desses serviços.
As APIs que serão ativadas:
- A API Workflows gerencia as definições dos fluxos de trabalho. Um fluxo de trabalho executa o processo principal quando uma nova imagem é enviada.
- A API Workflows Executions gerencia as execuções de fluxos de trabalho.
- A API Eventarc gerencia a configuração do Eventarc. O Eventarc será usado para detectar imagens adicionadas e excluídas de um bucket do Cloud Storage.
- A API Cloud Tasks cria e gerencia tarefas distribuídas. O fluxo de trabalho vai criar uma tarefa para gerar uma miniatura.
- A API Cloud Scheduler cria e gerencia os cron jobs programados. Um job programado é usado para criar uma colagem das imagens mais recentes.
- A API Cloud Storage cria e gerencia objetos e buckets do Cloud Storage.
- A API Cloud Vision permite acessar os recursos de visão de machine learning do Google.
- A API Cloud Run cria e gerencia serviços do Cloud Run. Os serviços do Cloud Run são fornecidos para criar uma miniatura, excluir uma imagem e criar uma colagem.
- A API Cloud Functions cria e gerencia funções. Uma função é usada para extrair informações da resposta do Cloud Vision.
- A API Firestore cria e gerencia bancos de dados do Firestore.
- A API App Engine cria e gerencia aplicativos do App Engine. A API App Engine é necessária para ativar o Firestore.
- A API Cloud Build gerencia builds de aplicativos.
- A API Artifact Registry gerencia registros e artefatos de builds.
Criar buckets do Cloud Storage
-
No Cloud Shell, crie um bucket do Cloud Storage para o upload de imagens:
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
gcloud storage buckets create \
--location={{{project_0.default_region|set at lab start}}} gs://${UPLOAD_BUCKET}
gcloud storage buckets update \
gs://${UPLOAD_BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding \
gs://${UPLOAD_BUCKET} \
--member=allUsers --role=roles/storage.objectViewer
Esses comandos criam um bucket regional público com acesso uniforme. Toda vez que uma imagem é copiada para o bucket, um fluxo de trabalho é iniciado para analisar a foto e armazenar os metadados e uma miniatura dela.
-
Crie um segundo bucket do Cloud Storage para as imagens geradas pelos aplicativos de imagem:
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
gcloud storage buckets create \
--location={{{project_0.default_region|set at lab start}}} gs://${GENERATED_BUCKET}
gcloud storage buckets update \
gs://${GENERATED_BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding \
gs://${GENERATED_BUCKET} \
--member=allUsers --role=roles/storage.objectViewer
-
No menu de navegação do console do Google Cloud (
), acesse Cloud Storage > Buckets.
Os dois buckets criados serão mostrados.
Clique em Verificar meu progresso para conferir o objetivo.
Criar buckets do Cloud Storage
Tarefa 2: criar o banco de dados do Firestore
Nesta tarefa, você vai criar o banco de dados do Firestore que armazena os metadados das imagens.
Criar o banco de dados
-
Para criar o banco de dados do Firestore, execute este comando no Cloud Shell:
export FIRESTORE_LOCATION={{{project_0.default_region|set at lab start}}}
gcloud firestore databases create \
--location=${FIRESTORE_LOCATION} \
--type=firestore-native
Uma coleção do Firestore chamada images será usada para armazenar os metadados das imagens. O serviço de colagem vai pesquisar o banco de dados para encontrar as imagens mais recentes com miniaturas e criar a colagem.
Depois da criação do banco de dados, você precisa criar um índice para dar suporte à pesquisa.
Criar o índice composto do Firestore
Um índice composto do Firestore é usado quando você precisa de uma única consulta para fazer referência a vários campos.
-
Para criar o índice composto, execute este comando:
gcloud firestore indexes composite create \
--collection-group=images \
--field-config field-path=thumbnail,order=descending \
--field-config field-path=created,order=descending \
--async
Esse índice permite que o serviço de colagem encontre as imagens mais recentes com miniaturas.
O parâmetro --async indica que você não quer esperar a conclusão da operação.
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Firestore, clique em Pesquisar e selecione Firestore.
-
Clique no ID do banco de dados (padrão)
e, no painel à esquerda, clique em Índices.
O índice vai ser criado na coleção images.
Observação: a criação do índice de pesquisa pode levar vários minutos. Durante a criação do índice, você pode continuar seguindo o laboratório.
Clique em Verificar meu progresso para conferir o objetivo.
Criar o banco de dados e o índice composto do Firestore
Tarefa 3: criar a fila de tarefas de miniaturas
Nesta tarefa, você vai criar uma fila do Cloud Tasks para solicitar a criação de miniaturas pelo serviço create-thumbnail.
-
Para criar a fila de tarefas, digite este comando no Cloud Shell:
export QUEUE_REGION={{{project_0.default_region|set at lab start}}}
gcloud tasks queues create thumbnail-task-queue \
--location=${QUEUE_REGION}
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Cloud Tasks, clique em Pesquisar e selecione Cloud Tasks.
A fila chamada thumbnail-task-queue foi criada.
Clique em Verificar meu progresso para conferir o objetivo.
Criar a fila do Cloud Tasks
Tarefa 4: implantar os serviços do Cloud Run
Nesta tarefa, você vai criar e implantar os serviços do Cloud Run que serão usados pelo aplicativo de imagem.
Clonar o repositório de código-fonte
-
No Cloud Shell, clone o repositório do Git:
git clone --depth=1 https://github.com/GoogleCloudPlatform/training-data-analyst
-
Crie um atalho de link flexível para o diretório raiz deste laboratório:
ln -s ~/training-data-analyst/courses/orchestration-and-choreography/lab1 ~/code
Criar um repositório no Artifact Registry
O Artifact Registry é a nova geração do Container Registry. É possível armazenar artefatos de builds em um repositório do Artifact Registry.
-
Para criar um repositório do Artifact Registry para imagens do Docker, execute este comando no Cloud Shell:
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
gcloud artifacts repositories create ${REPO_NAME} \
--location=${REPO_REGION} --repository-format=docker
Criar e implantar o serviço create-thumbnail
O serviço de miniaturas cria uma miniatura para uma imagem enviada e a armazena no bucket generated-images.
-
No Cloud Shell, clique em Abrir editor.
-
No editor do Cloud Shell, acesse ~/code/cloud-run/create-thumbnail
e analise os arquivos do serviço create-thumbnail.
O diretório contém três arquivos:
- O arquivo package.json contém metadados relevantes para a criação do aplicativo Node.js. Ele define o comando que inicia o aplicativo (node index.js) e especifica as versões dos pacotes usados pelo código.
- O Dockerfile especifica a imagem inicial (node:16-slim) e contém a lista de comandos executados para criar a imagem de contêiner que vai hospedar o serviço. A instalação inclui o ImageMagick, que é usado para criar miniaturas com base nas imagens enviadas.
- O index.js contém o código do serviço.
-
Clique em Abrir terminal.
-
Para criar a imagem Docker do serviço create-thumbnail usando o Cloud Build, execute estes comandos no Cloud Shell:
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
export THUMBNAIL_SERVICE_NAME=create-thumbnail
cd ~/code/cloud-run/create-thumbnail
gcloud builds submit \
. \
--tag ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${THUMBNAIL_SERVICE_NAME}
O serviço é criado e armazenado no repositório do Artifact Registry.
-
Para implantar o serviço usando o Cloud Run, execute estes comandos no Cloud Shell:
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
export THUMBNAIL_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export THUMBNAIL_SERVICE_NAME=create-thumbnail
export GENERATED_IMAGES_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
cd ~/code/cloud-run/create-thumbnail
gcloud config set run/region ${THUMBNAIL_SERVICE_REGION}
gcloud config set run/platform managed
gcloud run deploy ${THUMBNAIL_SERVICE_NAME} \
--image ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${THUMBNAIL_SERVICE_NAME} \
--no-allow-unauthenticated \
--memory=1Gi \
--max-instances=1 \
--update-env-vars GENERATED_IMAGES_BUCKET=${GENERATED_IMAGES_BUCKET}
Uma variável de ambiente transmite ao aplicativo o nome do bucket generated-images.
Criar e implantar o serviço de colagem
O serviço de colagem combina as imagens enviadas mais recentemente em uma colagem e armazena essa colagem no bucket generated-images.
-
No Cloud Shell, clique em Abrir editor.
-
No editor do Cloud Shell, acesse ~/code/cloud-run/create-collage
e analise os arquivos do serviço create-collage.
Esse diretório contém três arquivos: package.json, index.js e Dockerfile.
-
Clique em Abrir terminal.
-
Para criar e implantar a imagem Docker do serviço create-collage, execute estes comandos no Cloud Shell:
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
export COLLAGE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export COLLAGE_SERVICE_NAME=create-collage
export GENERATED_IMAGES_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
cd ~/code/cloud-run/create-collage
gcloud builds submit \
. \
--tag ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${COLLAGE_SERVICE_NAME}
gcloud config set run/region ${COLLAGE_SERVICE_REGION}
gcloud config set run/platform managed
gcloud run deploy ${COLLAGE_SERVICE_NAME} \
--image ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${COLLAGE_SERVICE_NAME} \
--no-allow-unauthenticated \
--memory=1Gi \
--max-instances=1 \
--update-env-vars GENERATED_IMAGES_BUCKET=${GENERATED_IMAGES_BUCKET}
Criar e implantar o serviço de exclusão de imagens
O serviço de exclusão de imagens remove a miniatura do bucket generated-images e exclui os metadados da imagem do banco de dados.
-
No Cloud Shell, clique em Abrir editor.
-
No editor do Cloud Shell, acesse ~/code/cloud-run/delete-image
e analise os arquivos do serviço delete-image.
Esse diretório contém apenas dois arquivos: package.json e index.js. Não há um Dockerfile.
Em vez de criar e publicar o contêiner manualmente, este laboratório usa os buildpacks do Google Cloud para fazer a criação automática dele.
O serviço analisa a solicitação como um CloudEvent. O Eventarc envia eventos usando o formato padrão do CloudEvent.
-
Clique em Abrir terminal.
-
Para criar e implantar o serviço delete-image no Cloud Run usando os buildpacks do Google Cloud, execute estes comandos no Cloud Shell:
export DELETE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export DELETE_SERVICE_NAME=delete-image
export GENERATED_IMAGES_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
cd ~/code/cloud-run/delete-image
npm install
gcloud config set run/region ${DELETE_SERVICE_REGION}
gcloud config set run/platform managed
gcloud run deploy ${DELETE_SERVICE_NAME} \
--source . \
--no-allow-unauthenticated \
--max-instances=1 \
--update-env-vars GENERATED_IMAGES_BUCKET=${GENERATED_IMAGES_BUCKET}
O gcloud run deploy avisa que um repositório do Docker do Artifact Registry precisa ser criado para as imagens criadas pelos buildpacks do Google Cloud.
-
Quando aparecer uma mensagem perguntando se você quer continuar, digite Y
.
Analisar os repositórios de artefatos e os serviços do Cloud Run
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Artifact Registry, clique em Pesquisar e selecione Artifact Registry.
O repositório que você criou (image-app-repo) e o repositório criado pelos buildpacks do Google Cloud (cloud-run-source-deploy) estão no Artifact Registry.
-
Clique em image-app-repo.
As imagens do Docker que você acabou de criar para os serviços create-collage e create-thumbnail estão armazenadas em image-app-repo.
-
Volte para Artifact Registry > Repositórios e clique em cloud-run-source-deploy.
O repositório contém a imagem Docker delete-image, que foi criada automaticamente pelos buildpacks do Google Cloud.
-
No console do Google Cloud, acesse o menu de navegação (
) e selecione Cloud Run > Serviços.
Os três serviços foram implantados.
Clique em Verificar meu progresso para conferir o objetivo.
Criar o repositório e implantar os serviços do Cloud Run
Tarefa 5: criar uma função para analisar a resposta do Cloud Vision
Nesta tarefa, você vai criar uma função do Cloud Run para analisar os dados de imagem retornados pela API Cloud Vision.
-
No Cloud Shell, clique em Abrir editor.
-
No Cloud Editor, acesse ~/code/cloud-functions/extract-image-metadata
e analise os arquivos da função extract-image-metadata.
O serviço do Node.js contém os arquivos index.js e package.json. Como o Cloud Run functions usa automaticamente os buildpacks para criar o contêiner, um Dockerfile não é necessário.
-
Clique em Abrir terminal.
-
Para implantar a função, execute este comando no Cloud Shell:
export EXTRACT_FUNCTION_REGION={{{project_0.default_region|set at lab start}}}
export EXTRACT_FUNCTION_NAME=extract-image-metadata
cd ~/code/cloud-functions/${EXTRACT_FUNCTION_NAME}
gcloud config set functions/region ${EXTRACT_FUNCTION_REGION}
gcloud functions deploy ${EXTRACT_FUNCTION_NAME} \
--gen2 \
--source . \
--runtime=nodejs20 \
--entry-point=extract_image_metadata \
--trigger-http \
--no-allow-unauthenticated
Observação: se a implantação indicar que não foi possível recuperar os metadados do repositório, tente mais algumas vezes até que o processo seja realizado.
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Cloud Run functions, clique em Pesquisar e selecione Cloud Run functions.
A função extract-image-metadata foi implantada.
Clique em Verificar meu progresso para conferir o objetivo.
Criar a função para analisar a resposta do Cloud Vision
Tarefa 6: criar o fluxo de trabalho
Nesta tarefa, você vai criar um fluxo de trabalho para orquestrar o serviço e as chamadas de API.
-
No Cloud Shell, clique em Abrir editor.
-
No editor do Cloud Shell, acesse ~/code/workflows
e analise o arquivo YAML image-add-workflow.yaml.
O fluxo de trabalho especifica uma série de etapas a serem realizadas quando ele é iniciado. Estas são as etapas que não geram registros:
-
init atribui variáveis que serão usadas no fluxo de trabalho. bucket e filename são preenchidos com valores transmitidos pelo Eventarc quando o fluxo de trabalho é chamado. projectId recebe o valor do ID do projeto de uma variável de ambiente que é preenchida automaticamente para um fluxo de trabalho.
-
imageAnalysisCall faz uma chamada à API Cloud Vision para analisar a imagem enviada.
-
extractImageMetadata chama uma função do Cloud Run para extrair as informações importantes da resposta da chamada à API Cloud Vision.
-
checkSafety encerra o fluxo de trabalho quando a API Cloud Vision determina que a imagem não é segura.
-
storeMetadata chama a API Firestore para armazenar os metadados da imagem.
-
getThumbnailService chama um conector do Cloud Run para encontrar o URL do serviço do Cloud Run create-thumbnail.
-
queueThumbnail usa um conector do Cloud Tasks para criar uma tarefa que chama o serviço de miniaturas de maneira assíncrona.
-
completed encerra o fluxo de trabalho, retornando o identificador da execução dele.
-
Clique em Abrir terminal.
-
Para criar uma conta de serviço para a identidade do fluxo de trabalho e adicionar algumas permissões básicas, execute estes comandos:
export WORKFLOWS_SA=workflows-sa
gcloud iam service-accounts create ${WORKFLOWS_SA}
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/datastore.user"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/cloudtasks.enqueuer"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/logging.logWriter"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
Os papéis concedem permissão para as seguintes funcionalidades:
-
roles/datastore.user permite que o fluxo de trabalho grave documentos no Firestore.
-
roles/cloudtasks.enqueuer permite que o fluxo de trabalho crie uma tarefa do Cloud Tasks.
-
roles/logging.logWriter permite que o fluxo de trabalho registre variáveis no Cloud Logging.
-
roles/iam.serviceAccountUser permite que a conta de serviço represente outra conta de serviço. Assim, o Cloud Tasks pode enviar a solicitação usando a identidade da conta de serviço do fluxo de trabalho.
-
Para adicionar permissões e chamar a função e o serviço do Cloud Run, execute estes comandos:
export WORKFLOWS_SA=workflows-sa
export THUMBNAIL_SERVICE_NAME=create-thumbnail
export THUMBNAIL_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export EXTRACT_FUNCTION_NAME=extract-image-metadata
gcloud functions add-iam-policy-binding ${EXTRACT_FUNCTION_NAME} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/cloudfunctions.invoker"
gcloud run services add-iam-policy-binding ${THUMBNAIL_SERVICE_NAME} \
--region=${THUMBNAIL_SERVICE_REGION} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.viewer"
gcloud run services add-iam-policy-binding ${THUMBNAIL_SERVICE_NAME} \
--region=${THUMBNAIL_SERVICE_REGION} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Se aparecer a pergunta Você quer executar o comando e conceder permissão para invocar a função [extract-image-metadata] (Y/N)?, responda Y
.
Esses papéis adicionais concedem permissão para as seguintes funcionalidades:
-
roles/cloudfunctions.invoker permite que o fluxo de trabalho chame a função que extrai os metadados da resposta do Cloud Vision.
-
roles/run.viewer permite que o fluxo de trabalho consulte os detalhes do serviço de miniaturas.
-
roles/run.invoker permite que a conta de serviço do fluxo de trabalho chame o serviço de miniaturas. A conta de serviço será usada pelo Cloud Tasks ao chamar o serviço.
-
Para implantar o fluxo de trabalho, execute este comando:
export WORKFLOW_NAME=image-add-workflow
export WORKFLOW_REGION={{{project_0.default_region|set at lab start}}}
export WORKFLOWS_SA=workflows-sa
cd ~/code/workflows
gcloud workflows deploy ${WORKFLOW_NAME} \
--source=${WORKFLOW_NAME}.yaml \
--location=${WORKFLOW_REGION} \
--service-account="${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com"
Observação: se o comando falhar com a mensagem O agente de serviço do Workflows não existe, reimplante o fluxo de trabalho.
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Workflows, clique em Pesquisar e selecione Workflows.
-
Clique no ícone Fixar ao lado de Workflows.
-
Clique em image-add-workflow e selecione a guia Fonte.
O painel esquerdo mostra o código do fluxo de trabalho e o painel direito mostra uma visualização para as etapas do fluxo.
Clique em Verificar meu progresso para conferir o objetivo.
Criar o fluxo de trabalho
Tarefa 7: criar um gatilho do Eventarc para iniciar o fluxo de trabalho
Nesta tarefa, você vai criar um gatilho do Eventarc que executa o fluxo de trabalho quando um arquivo é adicionado ao bucket uploaded-images.
-
Para criar uma conta de serviço para o gatilho do fluxo de trabalho e conceder a ela as permissões necessárias, execute este comando no Cloud Shell:
export WORKFLOW_TRIGGER_SA=workflow-trigger-sa
gcloud iam service-accounts create ${WORKFLOW_TRIGGER_SA}
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOW_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/workflows.invoker"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member "serviceAccount:${WORKFLOW_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/eventarc.eventReceiver"
Esses comandos criam uma conta de serviço chamada workflow-trigger-sa e adicionam papéis para receber eventos e invocar fluxos de trabalho.
-
Para conceder à conta de serviço do Cloud Storage a permissão para criar eventos, execute este comando:
export CLOUD_STORAGE_SA="$(gcloud storage service-agent)"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${CLOUD_STORAGE_SA}" \
--role="roles/pubsub.publisher"
Esses comandos recuperam a conta de serviço do Cloud Storage e adicionam a permissão para publicar eventos do Pub/Sub.
-
Para criar o gatilho, execute este comando:
export WORKFLOW_TRIGGER_REGION={{{project_0.default_region|set at lab start}}}
export WORKFLOW_NAME=image-add-workflow
export WORKFLOW_REGION={{{project_0.default_region|set at lab start}}}
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export WORKFLOW_TRIGGER_SA=workflow-trigger-sa
gcloud eventarc triggers create image-add-trigger \
--location=${WORKFLOW_TRIGGER_REGION} \
--destination-workflow=${WORKFLOW_NAME} \
--destination-workflow-location=${WORKFLOW_REGION} \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=${UPLOAD_BUCKET}" \
--service-account="${WORKFLOW_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com"
Esse gatilho vai chamar o fluxo de trabalho sempre que ocorrer uma gravação de arquivo no bucket uploaded-images.
Observação: caso você receba um erro de propagação de permissões ao criar o gatilho, é possível que uma permissão ainda não tenha sido propagada para o Eventarc. Tente criar o gatilho mais uma ou duas vezes e o processo deve funcionar.
Clique em Verificar meu progresso para conferir o objetivo.
Criar o gatilho do Eventarc para iniciar o fluxo de trabalho
Tarefa 8: testar o fluxo de trabalho de adição de imagens
Nesta tarefa, você vai testar as etapas que são realizadas quando uma imagem é adicionada ao bucket uploaded-images.
-
Para fazer upload de uma imagem no bucket uploaded-images, execute estes comandos:
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=neon.jpg
gcloud storage cp ~/code/images/${IMAGE_NAME} gs://${UPLOAD_BUCKET}
Ao final do upload, o Eventarc faz a detecção dele e inicia o fluxo de trabalho.
-
No menu de navegação do console do Google Cloud (
), acesse Workflows > Workflows.
-
Clique em image-add-workflow e selecione a guia Execuções.
Em breve, uma execução de fluxo de trabalho será exibida.
Observação: pode levar um ou dois minutos para a execução começar.
-
Clique no ID da execução para abrir a página Detalhes da execução.
Essa página mostra os detalhes da execução do fluxo de trabalho.
O painel Entrada mostra o conteúdo do evento do Cloud Storage que foi enviado pelo gatilho do Eventarc.
O painel Saída mostra os valores que foram retornados no final do fluxo de trabalho.
O painel Registros mostra as entradas de registro criadas pelo fluxo de trabalho.
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Cloud Run functions, clique em Pesquisar e selecione Cloud Run functions.
-
Clique em extract-image-metadata.
Esse painel mostra detalhes sobre a função usada para extrair as informações da resposta do Cloud Vision.
-
Clique na guia Registros.
Os dados registrados para a execução da função são exibidos aqui. Os rótulos e textos da imagem foram registrados.
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Firestore, clique em Pesquisar e selecione Firestore.
-
Clique em (padrão).
A coleção images deve mostrar um documento chamado neon.jpg que foi gravado pelo fluxo de trabalho. Os rótulos anexados à imagem e os textos encontrados nela são mostrados.
-
No menu de navegação do console do Google Cloud (
), acesse Cloud Run > Serviços e clique em create-thumbnail.
Esse painel mostra informações sobre o serviço create-thumbnail.
-
Clique na guia Registros.
Os dados registrados para a execução do serviço são exibidos aqui.
-
No Cloud Shell, execute estes comandos:
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=neon.jpg
echo "uploaded image: https://storage.googleapis.com/${UPLOAD_BUCKET}/${IMAGE_NAME}"
echo "generated image: https://storage.googleapis.com/${GENERATED_BUCKET}/${IMAGE_NAME}"
echo "Listing of generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}
O bucket generated-images deve ter uma miniatura criada pelo serviço create-thumbnail. Clique nos links no Cloud Shell para abrir uma nova guia e conferir as imagens enviadas e geradas.
Observação: pode demorar um pouco até que a imagem gerada apareça no bucket e na lista.
Clique em Verificar meu progresso para conferir o objetivo.
Testar o fluxo de trabalho de adição de imagens
Tarefa 9: adicionar um job programado para criar uma colagem
Nesta tarefa, você vai criar um job do Cloud Scheduler para gerar periodicamente uma colagem das fotos enviadas mais recentemente.
Fazer upload de imagens
-
Para fazer upload de mais imagens no bucket uploaded-images, execute estes comandos:
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
gcloud storage cp ~/code/images/alley.jpg \
gs://${UPLOAD_BUCKET}
gcloud storage cp ~/code/images/desktop.jpg \
gs://${UPLOAD_BUCKET}
gcloud storage cp ~/code/images/rainbow.jpg \
gs://${UPLOAD_BUCKET}
gcloud storage cp ~/code/images/vegas.jpg \
gs://${UPLOAD_BUCKET}
O fluxo de trabalho será executado para cada imagem e criará uma miniatura para cada uma delas.
-
Para criar uma conta de serviço para chamar o serviço create-collage, execute estes comandos:
export COLLAGE_SCHED_SA=collage-schedule-sa
export COLLAGE_SERVICE=create-collage
export COLLAGE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
gcloud iam service-accounts create ${COLLAGE_SCHED_SA}
gcloud run services add-iam-policy-binding ${COLLAGE_SERVICE} \
--region=${COLLAGE_SERVICE_REGION} \
--member="serviceAccount:${COLLAGE_SCHED_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
-
Para recuperar o URL do serviço create-collage, execute este comando no Cloud Shell:
export SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export SERVICE_NAME=create-collage
gcloud run services describe ${SERVICE_NAME} \
--platform managed \
--region ${SERVICE_REGION} \
--format 'value(status.url)'
Copie o URL para a área de transferência. Você vai precisar dele ao criar o job programado.
-
No campo Pesquisar da barra de título do console do Google Cloud, digite Cloud Scheduler, clique em Pesquisar e selecione Cloud Scheduler.
-
Clique em + Criar job.
-
Especifique as seguintes configurações de programação:
Propriedade |
Valor |
Nome |
collage-schedule |
Região |
selecione
|
Frequência |
* * * * * |
Fuso horário |
pesquise UTC e selecione Tempo Universal Coordenado (UTC)
|
A frequência especifica a programação no formato unix-cron. * * * * * especifica que o job será executado uma vez por minuto.
A frequência de uma vez por minuto é escolhida para facilitar o teste.
-
Clique em Continuar e selecione HTTP como Tipo de destino.
-
Especifique as seguintes configurações de execução:
Propriedade |
Valor |
URL |
cole o URL do serviço create-collage |
Método HTTP |
selecione POST. |
Cabeçalho de autenticação |
selecione Adicionar token OIDC
|
Conta de serviço |
selecione collage-schedule-sa
|
Público |
cole o URL do serviço create-collage |
-
Clique em Continuar e selecione Criar.
O job collage-schedule é exibido na página Jobs do Cloud Scheduler.
O job deve ser executado em um minuto.
-
Clique em Atualizar até que o job collage-schedule mostre uma marca de seleção indicando que a operação foi realizada.
Clique em Verificar meu progresso para conferir o objetivo.
Adicionar um job programado para criar a colagem
-
No Cloud Shell, execute estes comandos:
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=collage.png
echo "generated collage: https://storage.googleapis.com/${GENERATED_BUCKET}/${IMAGE_NAME}"
echo "Listing of generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}
O bucket generated-images agora deve incluir o arquivo collage.png. Clique no link "generated collage" no Cloud Shell para abrir uma nova guia e conferir a colagem.
Um arquivo copiado para o Cloud Storage fica disponível imediatamente após a conclusão do processo de upload. Isso significa que o link deve funcionar imediatamente após a conclusão do job programado. Quando você lista o conteúdo do bucket, o arquivo pode demorar um pouco para aparecer.
Tarefa 10: acionar um serviço para excluir arquivos de imagem e metadados
Nesta tarefa, você vai criar um gatilho do Eventarc para remover a miniatura associada e o documento do Firestore quando uma imagem for excluída do bucket uploaded-images.
Criar uma conta de serviço e gerenciar papéis
-
Para criar uma conta de serviço para o gatilho delete-image e conceder as permissões necessárias, execute este comando no Cloud Shell:
export DELETE_TRIGGER_SA=delete-image-trigger-sa
export DELETE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export DELETE_SERVICE=delete-image
gcloud iam service-accounts create ${DELETE_TRIGGER_SA}
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member "serviceAccount:${DELETE_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/eventarc.eventReceiver"
gcloud run services add-iam-policy-binding ${DELETE_SERVICE} \
--region=${DELETE_SERVICE_REGION} \
--member="serviceAccount:${DELETE_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Esses comandos criam uma conta de serviço chamada delete-image-trigger-sa e adicionam permissões para receber eventos e invocar o serviço delete-image.
-
No menu de navegação do console do Google Cloud (
), acesse Cloud Run e clique em delete-image.
-
Na página Detalhes do serviço, clique na guia Gatilhos.
-
Clique em + Adicionar gatilho e selecione Gatilho do Cloud Storage.
-
Especifique as seguintes configurações para o gatilho:
Propriedade |
Valor |
Nome do gatilho |
image-delete-trigger |
Tipo de evento |
selecione google.cloud.storage.object.v1.deleted
|
Bucket |
clique em Procurar, selecione o bucket uploaded-images e clique em Selecionar
|
Conta de serviço |
selecione a conta de serviço delete-image-trigger-sa
|
Caminho do URL do serviço |
/ |
-
Se for informado que o Pub/Sub precisa de um papel, clique em Conceder.
-
Clique em Salvar gatilho.
Esse gatilho vai chamar o serviço delete-image sempre que um arquivo for excluído do bucket uploaded-images.
Observação: caso você receba uma mensagem de erro indicando que uma região viola uma restrição no recurso de gatilho, é possível que o bucket incorreto do Cloud Storage tenha sido selecionado. Tente realizar novamente o processo de criação e confirme a seleção do bucket uploaded-images.
Clique em Verificar meu progresso para conferir o objetivo.
Acionar um serviço para excluir arquivos de imagem e metadados
Testar a exclusão de imagens
-
Para listar uma imagem nos buckets do Cloud Storage e o documento correspondente no Firestore, execute estes comandos:
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=vegas.jpg
echo "Listing of image in uploaded-images bucket:"
gcloud storage ls gs://${UPLOAD_BUCKET}/${IMAGE_NAME}
echo "Listing of image in generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}/${IMAGE_NAME}
echo "Image document in Firestore:"
curl -q -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-X GET "https://firestore.googleapis.com/v1/projects/${GOOGLE_CLOUD_PROJECT}/databases/(default)/documents/images/${IMAGE_NAME}"
Esses comandos mostram os detalhes do Cloud Storage e do Firestore para uma única imagem. Em seguida, vamos remover essa imagem.
-
Para excluir uma imagem no bucket uploaded-images, execute este comando:
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=vegas.jpg
gcloud storage rm gs://${UPLOAD_BUCKET}/${IMAGE_NAME}
O Eventarc vai detectar o arquivo removido e chamar o serviço image-delete, que remove a miniatura e o documento do Firestore.
-
Para verificar se a miniatura e o documento do Firestore foram removidos, execute os mesmos comandos que você executou antes:
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=vegas.jpg
echo "Listing of image in uploaded-images bucket:"
gcloud storage ls gs://${UPLOAD_BUCKET}/${IMAGE_NAME}
echo "Listing of image in generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}/${IMAGE_NAME}
echo "Image document in Firestore:"
curl -q -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://firestore.googleapis.com/v1/projects/${GOOGLE_CLOUD_PROJECT}/databases/(default)/documents/images/${IMAGE_NAME}"
Os itens foram removidos.
-
No menu de navegação do console do Google Cloud (
), acesse Cloud Run > Serviços e clique em delete-image.
-
Clique em Registros.
Os registros do serviço delete-image mostram que a miniatura foi excluída do bucket generated-images e o documento do Firestore foi excluído do banco de dados.
Parabéns!
Você usou o Eventarc para acionar serviços e fluxos de trabalho. Você orquestrou serviços e APIs usando o Workflows. Você criou e usou uma fila de tarefas distribuída usando o Cloud Tasks. Por fim, você criou um job para executar um serviço usando o Cloud Scheduler.
Próximas etapas/Saiba mais
Finalize o laboratório
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
- 1 estrela = muito insatisfeito
- 2 estrelas = insatisfeito
- 3 estrelas = neutro
- 4 estrelas = satisfeito
- 5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2024 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.