Crie tarefas do App Engine

Esta página demonstra como criar tarefas do App Engine por programação e colocá-las em filas do Cloud Tasks. Através deste processo, pode especificar explicitamente o serviço e o controlador que devem processar a tarefa e, opcionalmente, transmitir dados específicos da tarefa ao controlador. O serviço Cloud Tasks encaminha o pedido de tarefa para o controlador, mas este trabalhador está localizado no App Engine. Assim, todas as filas que segmentam processadores do App Engine têm de ter uma app do App Engine. Os processadores têm de ser executados na região onde a app do App Engine é executada. Esta região também serve como o parâmetro LOCATION_ID para os seus pedidos do Cloud Tasks. Para mais informações, consulte o artigo Filas do Cloud Tasks com destinos do App Engine.

Também pode ajustar a configuração da tarefa, como agendar uma hora no futuro em que deve ser executada ou limitar o número de vezes que quer que a tarefa seja repetida se falhar. Se optar por especificar um nome para a tarefa, o Cloud Tasks pode usar esse nome para garantir a desduplicação de tarefas, embora o processamento necessário possa adicionar uma latência aumentada.

Regras de firewall do App Engine

No ambiente padrão do App Engine, a firewall do App Engine pode permitir que determinado tráfego interno contorne a firewall. Isto significa que, se definir a regra default como deny, os pedidos de determinados serviços destinados ao ambiente padrão do App Engine não são bloqueados. Estes são todos os tipos de tráfego pedidos na própria configuração da app ou enviados a partir da mesma app. Os pedidos que ignoram as regras da firewall desta forma também incluem tarefas do App Engine nas tarefas do Google Cloud (incluindo filas de tarefas do App Engine).

Para permitir pedidos recebidos, seguem-se os intervalos de IP para tarefas do App Engine no Cloud Tasks (incluindo filas de tarefas do App Engine):

  • Intervalo de IP para pedidos enviados para o ambiente padrão do App Engine: 0.1.0.2/32 (ignora a regra de firewall predefinida se estiver definida como recusar)

  • Intervalo de IP para pedidos enviados para o ambiente flexível do App Engine: 0.1.0.2/32

Crie tarefas através das bibliotecas de cliente

Cria tarefas sob a forma de um pedido HTTP, que pode construir como quiser. No entanto, a utilização das bibliotecas de cliente, como fazem os seguintes exemplos, pode ajudar a gerir os detalhes da comunicação de baixo nível com o servidor, incluindo a autenticação com a Google. Para adicionar uma tarefa a uma fila, consulte o artigo Adicione uma tarefa a uma fila do Cloud Tasks

C#


using Google.Cloud.Tasks.V2;
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using System;

class CreateAppEngineTask
{
    public string CreateTask(
        // TODO<developer>: call this method by passing correct values for
        // the following parameters or change the parameters' default values.
        string projectId = "YOUR-PROJECT-ID",
        string location = "us-central1",
        string queue = "my-queue",
        string payload = "Hello World!",
        int inSeconds = 0)
    {
        CloudTasksClient client = CloudTasksClient.Create();
        QueueName parent = new QueueName(projectId, location, queue);

        var response = client.CreateTask(new CreateTaskRequest
        {
            Parent = parent.ToString(),
            Task = new Task
            {
                AppEngineHttpRequest = new AppEngineHttpRequest
                {
                    HttpMethod = HttpMethod.Post,
                    RelativeUri = "/log_payload",
                    Body = ByteString.CopyFromUtf8(payload)
                },
                ScheduleTime = Timestamp.FromDateTime(
                    DateTime.UtcNow.AddSeconds(inSeconds))
            }
        });

        Console.WriteLine($"Created Task {response.Name}");
        return response.Name;
    }
}

Ir


// Command create_task constructs and adds a task to an App Engine Queue.
package main

import (
	"context"
	"fmt"

	cloudtasks "cloud.google.com/go/cloudtasks/apiv2"
	taskspb "cloud.google.com/go/cloudtasks/apiv2/cloudtaskspb"
)

// createTask creates a new task in your App Engine queue.
func createTask(projectID, locationID, queueID, message string) (*taskspb.Task, error) {
	// Create a new Cloud Tasks client instance.
	// See https://godoc.org/cloud.google.com/go/cloudtasks/apiv2
	ctx := context.Background()
	client, err := cloudtasks.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	// Build the Task queue path.
	queuePath := fmt.Sprintf("projects/%s/locations/%s/queues/%s", projectID, locationID, queueID)

	// Build the Task payload.
	// https://godoc.org/google.golang.org/genproto/googleapis/cloud/tasks/v2#CreateTaskRequest
	req := &taskspb.CreateTaskRequest{
		Parent: queuePath,
		Task: &taskspb.Task{
			// https://godoc.org/google.golang.org/genproto/googleapis/cloud/tasks/v2#AppEngineHttpRequest
			MessageType: &taskspb.Task_AppEngineHttpRequest{
				AppEngineHttpRequest: &taskspb.AppEngineHttpRequest{
					HttpMethod:  taskspb.HttpMethod_POST,
					RelativeUri: "/task_handler",
				},
			},
		},
	}

	// Add a payload message if one is present.
	req.Task.GetAppEngineHttpRequest().Body = []byte(message)

	createdTask, err := client.CreateTask(ctx, req)
	if err