Neste tutorial, demonstramos como usar o Cloud Run, a API Cloud Vision e o ImageMagick para detectar e desfocar imagens ofensivas enviadas para um bucket do Cloud Storage. Este documento se baseia no tutorial Usar o Pub/Sub com o Cloud Run.
Neste tutorial, explicamos como modificar um aplicativo de amostra atual. Também é possível fazer o download da amostra concluída.
Objetivos
- Grave, crie e implante um serviço de processamento de dados assíncrono no Cloud Run.
- Invocar o serviço fazendo upload de um arquivo para o Cloud Storage, criando uma mensagem do Pub/Sub.
- Usar a API Cloud Vision para detectar conteúdo violento ou adulto.
- Usar o ImageMagick para desfocar imagens ofensivas.
- Testar o serviço fazendo upload de uma imagem de um zumbi comedor de carne.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na sua projeção de uso, utilize 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Pub/Sub, Cloud Run, Cloud Storage and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Instale e inicialize a gcloud CLI.
- Atualize os componentes:
gcloud components update
- Configure um tópico do Pub/Sub, uma assinatura de push segura e um serviço inicial do Cloud Run para lidar com mensagens seguindo o tutorial Usar o Pub/Sub
-
Editor do Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador do Cloud Run (
roles/run.admin
) -
Acessador de exibição de registros (
roles/logging.viewAccessor
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) -
Administrador do Pub/Sub (
roles/pubsub.admin
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Administrador do Storage (
roles/storage.admin
)
Funções exigidas
Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os papéis do IAM a seguir no seu projeto:
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.
Como configurar padrões do 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 Google Cloud
produtos 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 CO2
europe-north2
(Estocolmo)Baixo CO2
europe-southwest1
(Madri)Baixo CO2
europe-west1
(Bélgica)Baixo CO2
europe-west4
(Países Baixos)Baixo CO2
europe-west8
(Milão)europe-west9
(Paris)Baixo CO2
me-west1
(Tel Aviv)northamerica-south1
(México)us-central1
(Iowa)Baixo CO2
us-east1
(Carolina do Sul)us-east4
(Norte da Virgínia)us-east5
(Columbus)us-south1
(Dallas)Baixo CO2
us-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)europe-west12
(Turim)europe-west2
(Londres, Reino Unido)Baixo CO2
europe-west3
(Frankfurt, Alemanha)europe-west6
(Zurique, Suíça)Baixo CO2
me-central1
(Doha)me-central2
(Damã)northamerica-northeast1
(Montreal)Baixo CO2
northamerica-northeast2
(Toronto)Baixo CO2
southamerica-east1
(São Paulo, Brasil)Baixo CO2
southamerica-west1
(Santiago, Chile)Baixo CO2
us-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 doGoogle Cloud .
Como entender a sequência de operações
O fluxo de dados neste tutorial segue estas etapas:
- Um usuário faz o upload de uma imagem para um bucket do Cloud Storage.
- O Cloud Storage publica uma mensagem sobre o novo arquivo no Pub/Sub.
- O Pub/Sub envia a mensagem ao serviço do Cloud Run.
- O serviço do Cloud Run recupera o arquivo de imagem mencionado na mensagem do Pub/Sub.
- O serviço do Cloud Run usa a API Cloud Vision para analisar a imagem.
- Se for detectado conteúdo violento ou adulto, o serviço do Cloud Run usará o ImageMagick para desfocar a imagem.
- O serviço do Cloud Run faz upload da imagem desfocada em outro bucket do Cloud Storage para uso.
O próximo uso da imagem desfocada é deixado como um exercício para o leitor.
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 com a Google Cloud região a ser usada para o repositório do Artifact Registry.
Configurar buckets do Cloud Storage
gcloud
Crie um bucket do Cloud Storage para fazer upload de imagens, em que INPUT_BUCKET_NAME é um nome de bucket globalmente exclusivo:
gcloud storage buckets create gs://INPUT_BUCKET_NAME
O serviço do Cloud Run só lê a partir desse bucket.
Crie um segundo bucket do Cloud Storage para receber imagens desfocadas, em que BLURRED_BUCKET_NAME é um nome de bucket globalmente exclusivo:
gcloud storage buckets create gs://BLURRED_BUCKET_NAME
O serviço do Cloud Run faz upload de imagens desfocadas para esse bucket. Usar um bucket separado evita que imagens processadas acionem novamente o serviço.
Por padrão, as revisões do Cloud Run são executadas como a conta de serviço padrão do Compute Engine.
Se, em vez disso, você estiver usando umaconta de serviço gerenciada pelo usuário, verifique se você atribuiu os Papéis do IAM necessários, de modo a ter a permissão
storage.objects.get
para leitura de INPUT_BUCKET_NAME e a permissãostorage.objects.create
para fazer upload para BLURRED_BUCKET_NAME.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Crie dois buckets do Cloud Storage: um para fazer upload de imagens originais e outro para o serviço do Cloud Run fazer upload de imagens desfocadas.
Para criar buckets do Cloud Storage com nomes globalmente exclusivos, adicione
o seguinte ao seu arquivo main.tf
atual:
Por padrão, as revisões do Cloud Run são executadas como a conta de serviço padrão do Compute Engine.
Se, em vez disso, você estiver usando umaconta de serviço gerenciada pelo usuário, verifique se você atribuiu os
Papéis do IAM necessários, de modo a ter a permissão storage.objects.get
para leitura de
google_storage_bucket.imageproc_input
e a permissão storage.objects.create
para
fazer upload para google_storage_bucket.imageproc_output
.
Nas etapas a seguir, você cria e implanta um serviço que processa notificações de uploads de arquivos para o INPUT_BUCKET_NAME. Você ativa a entrega de notificações depois de implantar e testar o serviço, para evitar a invocação prematura do novo serviço.
Modificar o código de amostra do tutorial do Pub/Sub
Este documento se baseia no código criado no tutorial Usar o Pub/Sub. Se você ainda não concluiu esse tutorial, faça isso agora, ignore as etapas de limpeza e retorne a este documento para adicionar um comportamento de processamento de imagem.
Adicionar código de processamento de imagem
O código de processamento de imagem é separado da manipulação da solicitação para facilitar a leitura e o teste. Para adicionar código de processamento de imagem, siga estas etapas:
Mude para o diretório do código de amostra do tutorial do Pub/Sub.
Adicione o código para importar as dependências de processamento de imagem, incluindo as bibliotecas a serem integradas aos serviços do Google Cloud , ao ImageMagick e ao sistema de arquivos.
Node.js
Abra um novo arquivoimage.js
no seu editor e copie o seguinte:Python
Abra um novo arquivoimage.py
no seu editor e copie o seguinte:Go
Abra um novo arquivoimagemagick/imagemagick.go
no seu editor e copie o seguinte:Java
Abra um novo arquivosrc/main/java/com/example/cloudrun/ImageMagick.java
no seu editor e copie o seguinte: