Neste tutorial, demonstramos como gravar, implantar e acionar uma função do Cloud Run baseada em eventos com um gatilho de registros de auditoria do Cloud.
Funções do Cloud Run permitem que suas funções sejam acionadas por entradas de registros de auditoria do Cloud. Muitos produtos do Google Cloud gravam registros de auditoria do Cloud quando ocorrem ações importantes no produto. Essas entradas de registro podem acionar a execução de funções do Cloud Run em tempo real, o que permite que os usuários processem e/ou realizem ações automaticamente nelas.
Esses registros são gerados por muitos eventos diferentes no Google Cloud e abrangem a maioria dos produtos do Google Cloud. Assim, os acionadores de Registros de auditoria do Cloud permitem criar funções que reagem à maioria das mudanças de estado no Google Cloud.
Neste tutorial, mostraremos como usar os acionadores de registros de auditoria do Cloud para rotular instâncias do Compute Engine recém-criadas com o nome da entidade (conta de serviço ou pessoa) que as criou.
Se você não conhece os registros de auditoria do Cloud e quer saber mais, consulte a documentação deles.
Objetivos
- Grave uma função do Cloud orientada a eventos que recebe um evento de registros de auditoria do Cloud quando uma instância de VM do Compute Engine é criada.
- Acione a função criando uma instância de VM do Compute Engine. Ela será rotulada com o nome da entidade (pessoa ou conta de serviço) que a criou.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
- Compute Engine
For details, see Cloud Run functions pricing.
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.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
-
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 Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
- Instale e inicie o SDK do Cloud.
- Atualize os componentes
gcloud
: - Prepare seu ambiente de desenvolvimento.
gcloud components update
Precisa de um prompt de comando? Use o Google Cloud Shell. O Google Cloud Shell é um ambiente de linha de comando que já inclui o SDK do Google Cloud. Dessa maneira, você não precisa instalá-lo. O SDK Google Cloud também vem pré-instalado em máquinas virtuais do Google Compute Engine.
Pré-requisitos
Abra a página IAM e administrador > Registros de auditoria no Console do Google Cloud:
Acessar a página IAM e administrador > Registros de auditoria
Ative os tipos de registro de leitura do administrador, de leitura de dados e de gravação de dados do Cloud Audit Logging para a API Compute Engine:
Verifique se a conta de serviço do Compute Engine tem o papel
Editor
. Essa conta de serviço será usada como a identidade do serviço para funções do Cloud Run.Acesse IAM e Admin > Página IAM
Encontre a entrada
PROJECT_NUMBER-compute@developer.gserviceaccount.com
na tabela e observe a colunaRoles
. Se a coluna contiverEditor
, será possível pular as etapas a seguir. Caso contrário, vá para as próximas etapas e atribua os papéis necessários à conta de serviço.Conceda o papel
eventarc.eventReceiver
à conta de serviço do Compute Engine do projeto:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver
Conceda o papel
run.invoker
à conta de serviço do Compute Engine do projeto para que o gatilho do Pub/Sub possa executar a função:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/run.invoker
Conceda o papel
compute.instanceAdmin
à conta de serviço do Compute Engine do projeto para que o código da função tenha as permissões necessárias para receber instâncias de VM e definir rótulos nelas:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/compute.instanceAdmin
Como preparar o aplicativo
Clone o repositório do app de amostra na máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Altere para o diretório que contém o exemplo de código de funções do Cloud Run para acessar os registros de auditoria do Cloud:
Node.js
cd nodejs-docs-samples/functions/v2/autoLabelInstance/
Python
cd python-docs-samples/functions/v2/label_gce_instance/
Go
cd golang-samples/functions/functionsv2/label_gce_instance/
Java
cd java-docs-samples/functions/v2/label-compute-instance/
Confira o código de amostra:
Node.js
Python
Go
Java
Como implantar a função
Para implantar a função com um acionador do Pub/Sub, execute o seguinte comando no diretório que contém o código de amostra (ou, no caso de Java, o arquivo pom.xml
):
Node.js
gcloud functions deploy nodejs-cal-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=autoLabelInstance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão do Node.js compatível a fim de executar a função.
Python
gcloud functions deploy python-cal-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=label_gce_instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão compatível do Python a fim de executar a função.
Go
gcloud functions deploy go-cal-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=label-gce-instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão do Go compatível a fim de executar a função.
Java
gcloud functions deploy java-cal-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.AutoLabelInstance \ --memory=512MB \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Use a flag --runtime
para especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.
O comando de implantação acima especifica os seguintes parâmetros de filtro de eventos que correspondem à criação da VM:
type
: o tipo de evento dos Registros de auditoria do Cloud (google.cloud.audit.log.v1.written
).serviceName
: o nome do serviço do Google Cloud que gerou a entrada de registro, neste casocompute.googleapis.com
.methodName
: o nome do método da API que gerou a entrada de registro, neste casov1.compute.instances.insert
.
Como acionar a função
Depois que a função for implantada, será possível confirmar se ela está funcionando:
Crie uma instância de VM no Compute Engine.
gcloud compute instances create
YOUR_INSTANCE_NAME
--zoneYOUR_ZONE
Se preferir, acesse o console do Google Cloud e clique em Criar uma VM.
Execute o seguinte comando para verificar se a instância foi marcada corretamente:
gcloud compute instances describe
YOUR_INSTANCE_NAME
\ --zoneYOUR_ZONE \ --format 'value(labels)'
Você verá um rótulo com o formato
creator=YOURNAMEYOUR_DOMAIN
.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
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 a função
A exclusão de funções do Cloud Run não remove nenhum recurso armazenado no Cloud Storage.
Para excluir a função do Cloud Run criada neste tutorial, execute o seguinte comando:
Node.js
gcloud functions delete nodejs-cal-function --gen2 --region REGION
Python
gcloud functions delete python-cal-function --gen2 --region REGION
Go
gcloud functions delete go-cal-function --gen2 --region REGION
Java
gcloud functions delete java-cal-function --gen2 --region REGION
Também é possível excluir funções do Cloud Run pelo Console do Google Cloud.
Como excluir a instância de VM do Compute Engine
Para excluir a instância de VM do Compute Engine criada neste tutorial, execute o comando a seguir:
gcloud compute instances deleteYOUR_INSTANCE_NAME
--zoneYOUR_ZONE