Este tutorial simples demonstra como escrever, implementar e acionar uma função do Cloud Run baseada em eventos com um acionador do Cloud Storage para responder a eventos do Cloud Storage.
Se procura exemplos de código para usar o Cloud Storage, aceda ao navegador de exemplos do Google Cloud.
A preparar a aplicação
Crie um contentor do Cloud Storage para carregar um ficheiro de teste, onde
YOUR_TRIGGER_BUCKET_NAME
é um nome de contentor exclusivo a nível global:gcloud storage buckets create gs://YOUR_TRIGGER_BUCKET_NAME
Clone o repositório da app de exemplo para a sua máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ir
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Altere para o diretório que contém o código de exemplo das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/helloworld/
Python
cd python-docs-samples/functions/helloworld/
Ir
cd golang-samples/functions/helloworld/
Java
cd java-docs-samples/functions/helloworld/hello-gcs/
Ruby
cd ruby-docs-samples/functions/helloworld/storage/
Implementar e acionar a função
As funções do Cloud Storage baseiam-se em notificações do Pub/Sub do Cloud Storage e suportam tipos de eventos semelhantes:
As secções seguintes descrevem como implementar e acionar uma função para cada um destes tipos de eventos.
Objeto finalizado
Os eventos de finalização de objetos são acionados quando uma "escrita" de um objeto do Cloud Storage é finalizada com êxito. Em particular, isto significa que a criação de um novo objeto ou a substituição de um objeto existente aciona este evento. As operações de arquivo e atualização de metadados são ignoradas por este acionador.
Finalização do objeto: implementação da função
Veja a função de exemplo, que processa eventos do Cloud Storage:
Node.js
Python
Ir
Java
Ruby
Para implementar a função, execute o seguinte comando no diretório onde o código de exemplo está localizado:
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs22 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão suportada do Node.js para executar
a sua função.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Python suportada para executar
a sua função.
Ir
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Go suportada para executar
a sua função.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão Java suportada para executar
a sua função.
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Ruby suportada para executar
a sua função.
em que YOUR_TRIGGER_BUCKET_NAME
é o nome do contentor do Cloud Storage que aciona a função.
Object Finalize: acionar a função
Para acionar a função:
Crie um ficheiro
gcf-test.txt
vazio no diretório onde se encontra o código de exemplo.Carregue o ficheiro para o Cloud Storage para acionar a função:
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
onde
YOUR_TRIGGER_BUCKET_NAME
é o nome do seu contentor do Cloud Storage onde vai carregar um ficheiro de teste.Verifique os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 50
Eliminação de objeto
Os eventos de eliminação de objetos são acionados quando um objeto é eliminado temporariamente. Isto acontece quando um objeto é substituído ou eliminado num contentor sem a versão de objetos ativada. A eliminação de um objeto especificando o respetivo número de geração também resulta na eliminação temporária do objeto.
Eliminação de objetos: implementação da função
Usando o mesmo exemplo de código que no exemplo de finalização, implemente a função com a eliminação de objetos como evento acionador. Execute o seguinte comando no diretório onde o exemplo de código está localizado:
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs22 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão suportada do Node.js para executar
a sua função.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Python suportada para executar
a sua função.
Ir
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Go suportada para executar
a sua função.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão Java suportada para executar
a sua função.
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Ruby suportada para executar
a sua função.
em que YOUR_TRIGGER_BUCKET_NAME
é o nome do contentor do Cloud Storage que aciona a função.
Eliminação de objetos: acionamento da função
Para acionar a função:
Crie um ficheiro
gcf-test.txt
vazio no diretório onde se encontra o código de exemplo.Certifique-se de que o seu contentor não tem controlo de versões:
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --no-versioning
Carregue o ficheiro para o Cloud Storage:
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
onde
YOUR_TRIGGER_BUCKET_NAME
é o nome do seu contentor do Cloud Storage onde vai carregar um ficheiro de teste. Neste ponto, a função ainda não deve ser executada.Elimine o ficheiro para acionar a função:
gcloud storage rm gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt
Verifique os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 50
Tenha em atenção que a função pode demorar algum tempo a terminar a execução.
Arquivo de objetos
Os eventos de arquivo de objetos são acionados quando uma versão ativa de um objeto se torna uma versão não atual. Isto acontece quando um objeto é substituído ou eliminado num contentor com a versão de objetos ativada.
Arquivo de objetos: implementar a função
Usando o mesmo exemplo de código que no exemplo de finalização, implemente a função com o arquivo de objetos como o evento de acionador. Execute o seguinte comando no diretório onde o exemplo de código está localizado:
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs22 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão suportada do Node.js para executar
a sua função.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Python suportada para executar
a sua função.
Ir
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Go suportada para executar
a sua função.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão Java suportada para executar
a sua função.
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Ruby suportada para executar
a sua função.
em que YOUR_TRIGGER_BUCKET_NAME
é o nome do contentor do Cloud Storage que aciona a função.
Arquivo de objetos: acionar a função
Para acionar a função:
Crie um ficheiro
gcf-test.txt
vazio no diretório onde se encontra o código de exemplo.Certifique-se de que o seu contentor tem a gestão de versões ativada:
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --versioning
Carregue o ficheiro para o Cloud Storage:
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
onde
YOUR_TRIGGER_BUCKET_NAME
é o nome do seu contentor do Cloud Storage onde vai carregar um ficheiro de teste. Neste ponto, a função ainda não deve ser executada.Arquive o ficheiro para acionar a função:
gcloud storage rm gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt
Monitorize os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 50
Atualização dos metadados do objeto
Os eventos de atualização de metadados são acionados quando os metadados de um objeto existente são atualizados.
Atualização dos metadados do objeto: implementação da função
Usando o mesmo exemplo de código que no exemplo de finalização, implemente a função com a atualização de metadados como o evento de acionamento. Execute o seguinte comando no diretório onde o exemplo de código está localizado:
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs22 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão suportada do Node.js para executar
a sua função.
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Python suportada para executar
a sua função.
Ir
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Go suportada para executar
a sua função.
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão Java suportada para executar
a sua função.
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Ruby suportada para executar
a sua função.
em que YOUR_TRIGGER_BUCKET_NAME
é o nome do contentor do Cloud Storage que aciona a função.
Atualização de metadados de objetos: acionar a função
Para acionar a função:
Crie um ficheiro
gcf-test.txt
vazio no diretório onde se encontra o código de exemplo.Certifique-se de que o seu contentor não tem controlo de versões:
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --no-versioning
Carregue o ficheiro para o Cloud Storage:
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
onde
YOUR_TRIGGER_BUCKET_NAME
é o nome do seu contentor do Cloud Storage onde vai carregar um ficheiro de teste. Neste ponto, a função ainda não deve ser executada.Atualize os metadados do ficheiro:
gcloud storage objects update gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt --content-type=text/plain
Monitorize os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 50