Acionadores diretos

Para oferecer suporte a iteração e depuração rápidas, o Cloud Functions fornece um comando call na interface da linha de comando e funcionalidade de teste na interface de usuário do Console do Cloud. Isso permite invocar diretamente uma função para garantir que ela esteja se comportando conforme o esperado. Isso faz a função ser executada imediatamente, mesmo que possa ter sido implantada para responder a um evento específico.

Usar a interface de linha de comando gcloud

Para invocar diretamente uma função usando a ferramenta gcloud, use o comando gcloud functions call e forneça os dados que sua função espera como JSON no argumento --data. Por exemplo:

gcloud functions call YOUR_FUNCTION_NAME --data '{"name":"Keyboard Cat"}'

em que YOUR_FUNCTION_NAME é o nome da função que você quer executar. O argumento --data é enviado para a função da seguinte maneira:

  • Para funções HTTP, os dados fornecidos são enviados como o corpo de uma solicitação POST.
  • Para funções em segundo plano, os dados são passados diretamente como os dados do evento para a função. Para mais informações sobre como acessar dados do evento nas funções em segundo plano, consulte Parâmetros da função em segundo plano.

Como usar o Console do GCP

Para invocar diretamente uma função do Console do Cloud, siga estes passos:

  1. Acesse a página Visão geral do Cloud Functions.

  2. Na lista, clique no nome da função que você quer invocar.

    Isso leva você à página Detalhes da função.

  3. Clique na guia Testes.

  4. No campo Evento acionador, insira todos os dados esperados pela função como JSON.

  5. Clique em Testar a função.

A resposta da função é exibida no campo Saída, e os registros da execução individual aparecem no campo Registros.

Exemplo de função de segundo plano do Cloud Pub/Sub

Este exemplo mostra como invocar diretamente uma função em segundo plano acionada pelos eventos do Cloud Pub/Sub:

Node.js 8+

/**
 * Background Cloud Function to be triggered by Pub/Sub.
 * This function is exported by index.js, and executed when
 * the trigger topic receives a message.
 *
 * @param {object} pubSubEvent The event payload.
 * @param {object} context The event metadata.
 */
exports.helloPubSub = (pubSubEvent, context) => {
  const name = pubSubEvent.data
    ? Buffer.from(pubSubEvent.data, 'base64').toString()
    : 'World';

  console.log(`Hello, ${name}!`);
};

Node.js 6 (obsoleto)

/**
 * Background Cloud Function to be triggered by Pub/Sub.
 * This function is exported by index.js, and executed when
 * the trigger topic receives a message.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.helloPubSub = (event, callback) => {
  const pubsubMessage = event.data;
  const name = pubsubMessage.data
    ? Buffer.from(pubsubMessage.data, 'base64').toString()
    : 'World';

  console.log(`Hello, ${name}!`);

  callback();
};

Python

def hello_pubsub(event, context):
    """Background Cloud Function to be triggered by Pub/Sub.
    Args:
         event (dict):  The dictionary with data specific to this type of
         event. The `data` field contains the PubsubMessage message. The
         `attributes` field will contain custom attributes if there are any.
         context (google.cloud.functions.Context): The Cloud Functions event
         metadata. The `event_id` field contains the Pub/Sub message ID. The
         `timestamp` field contains the publish time.
    """
    import base64

    print("""This Function was triggered by messageId {} published at {}
    """.format(context.event_id, context.timestamp))

    if 'data' in event:
        name = base64.b64decode(event['data']).decode('utf-8')
    else:
        name = 'World'
    print('Hello {}!'.format(name))

Go


// Package helloworld provides a set of Cloud Functions samples.
package helloworld

import (
	"context"
	"log"
)

// PubSubMessage is the payload of a Pub/Sub event.
type PubSubMessage struct {
	Data []byte `json:"data"`
}

// HelloPubSub consumes a Pub/Sub message.
func HelloPubSub(ctx context.Context, m PubSubMessage) error {
	name := string(m.Data)
	if name == "" {
		name = "World"
	}
	log.Printf("Hello, %s!", name)
	return nil
}

Para invocar diretamente a função, você precisa enviar um PubsubMessage, que espera dados codificados em base 64, como os dados do evento:

Node.js

DATA=$(printf 'Hello!'|base64) && gcloud functions call helloPubSub --data '{"data":"'$DATA'"}'

Python

DATA=$(printf 'Hello!'|base64) && gcloud functions call hello_pubsub --data '{"data":"'$DATA'"}'

Go

DATA=$(printf 'Hello!'|base64) && gcloud functions call HelloPubSub --data '{"data":"'$DATA'"}'

Também é possível invocar a função a partir da interface do usuário do Console do Cloud: basta usar os mesmos dados de evento no campo Evento acionador.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Functions