이벤트 기반 함수 작성

Cloud Run Functions에서는 클라우드 환경에서 발생하는 이벤트에 대한 응답으로 함수가 자동으로 호출되기를 원할 때 이벤트 기반 함수를 사용합니다.

CloudEvent 함수

CloudEvent 함수를 사용하여 함수를 호출합니다.

CloudEvent 함수는 일반적인 방식으로 이벤트 데이터를 설명하기 위한 업계 표준 사양인 CloudEvents를 기반으로 합니다. CloudEvents 사양에 대한 자세한 내용은 CloudEvents GitHub 저장소를 참조하세요. CloudEvents 프로젝트는 코드에서 CloudEvents 객체를 사용하는 데 도움이 되는 CloudEvents SDK 모음도 제공합니다.

다음 예시에서는 각 런타임의 기본 CloudEvent 함수 소스 파일을 보여줍니다. 소스 코드를 찾을 위치에 대한 자세한 내용은 소스 디렉터리 구조를 참조하세요.

Node.js

const functions = require('@google-cloud/functions-framework');

// Register a CloudEvent function with the Functions Framework
functions.cloudEvent('myCloudEventFunction', cloudEvent => {
  // Your code here
  // Access the CloudEvent data payload via cloudEvent.data
});

Node.js에서는 Node.js용 함수 프레임워크에 CloudEvent 핸들러 함수를 등록합니다. 핸들러 함수는 CloudEvent 객체를 인수로 수락해야 합니다.

함수 진입점은 함수 프레임워크에 핸들러가 등록된 이름입니다. 이 예시에서 진입점은 myCloudEventFunction입니다.

Python

import functions_framework

# Register a CloudEvent function with the Functions Framework
@functions_framework.cloud_event
def my_cloudevent_function(cloud_event):
  # Your code here
  # Access the CloudEvent data payload via cloud_event.data

Python에서는 Python용 함수 프레임워크에 CloudEvent 핸들러 함수를 등록합니다. 핸들러 함수는 CloudEvent 객체를 인수로 수락해야 합니다.

함수 진입점은 함수 프레임워크에 등록된 핸들러 함수 이름입니다. 이 예시에서 진입점은 my_cloudevent_function입니다.

Go

package mycloudeventfunction

import (
    "context"

    "github.com/GoogleCloudPlatform/functions-framework-go/functions"
    "github.com/cloudevents/sdk-go/v2/event"
)

func init() {
    // Register a CloudEvent function with the Functions Framework
    functions.CloudEvent("MyCloudEventFunction", myCloudEventFunction)
}

// Function myCloudEventFunction accepts and handles a CloudEvent object
func myCloudEventFunction(ctx context.Context, e event.Event) error {
    // Your code here
    // Access the CloudEvent data payload via e.Data() or e.DataAs(...)

    // Returning an error causes its message to be logged.
    // Example:
    err := myInternalFunction() // may return an error
    if err != nil {
        // Append error message to log
        return err
    }

    // Return nil if no error occurred
    return nil
}

Go에서는 Go용 함수 프레임워크에 CloudEvent 핸들러 함수를 등록합니다. 핸들러 함수는 CloudEvents event.Event 객체를 인수로 허용해야 합니다.

함수 진입점은 함수 프레임워크에 핸들러가 등록된 이름입니다. 이 예시에서 진입점은 MyCloudEventFunction입니다.

자바

package mycloudeventfunction;

import com.google.cloud.functions.CloudEventsFunction;
import io.cloudevents.CloudEvent;

// Define a class that implements the CloudEventsFunction interface
public class MyCloudEventFunction implements CloudEventsFunction {
  // Implement the accept() method to handle CloudEvents
  @Override
  public void accept(CloudEvent event) {
    // Your code here
    // Access the CloudEvent data payload via event.getData()
    // To get the data payload as a JSON string, use:
    // new String(event.getData().toBytes())
  }
}

Java에서는 Java API용 함수 프레임워크를 사용하여 CloudEventsFunction 인터페이스로 CloudEvent 핸들러 클래스를 구현합니다. accept() 메서드는 CloudEvent 객체를 인수로 수락하고 이벤트에 대한 처리를 실행해야 합니다.

함수 진입점은 패키지 이름을 포함한 CloudEvent 핸들러 클래스의 정규화된 이름입니다. 이 예시에서 진입점은 mycloudeventfunction.MyCloudEventFunction입니다.

C#

using CloudNative.CloudEvents;
using Google.Cloud.Functions.Framework;
using System.Threading;
using System.Threading.Tasks;

namespace MyProject
{
    // Define a class that implements the ICloudEventFunction<T> interface
    public class MyCloudEventFunction : ICloudEventFunction<CloudEventDataType>
    {
        // Implement the HandleAsync() method to handle CloudEvents
        public Task HandleAsync(CloudEvent cloudEvent, CloudEventDataType data, CancellationToken cancellationToken)
        {
            // Your code here
            // The data argument represents the CloudEvent data payload

            // Signal function completion
            return Task.CompletedTask;
        }
    }
}

.NET 런타임에서는 .NET용 함수 프레임워크 사용하여 ICloudEventFunction<T> 인터페이스로 CloudEvent 핸들러 클래스를 구현합니다. HandleAsync() 메서드는 CloudEvent 객체 및 연결된 CloudEvent 데이터 페이로드를 인수로 수락합니다.

위 예시에서 CloudEventDataType으로 표시된 CloudEvent 데이터 페이로드 인수 유형은 함수가 처리하는 이벤트 유형과 일치해야 합니다. Google CloudEvents .NET 라이브러리는 Google에서 지원하는 다양한 이벤트의 데이터 유형을 제공합니다.

함수 진입점은 네임스페이스를 포함한 CloudEvent 핸들러 클래스의 정규화된 이름입니다. 이 예시에서 진입점은 MyProject.MyCloudEventFunction입니다.

Ruby

require "functions_framework"

# Register a CloudEvent function with the Functions Framework
FunctionsFramework.cloud_event "my_cloudevent_function" do |cloud_event|
  # Your code here
  # Access the CloudEvent data payload via cloud_event.data
end

Ruby에서는 Ruby용 함수 프레임워크에 CloudEvent 핸들러 함수를 등록합니다. 핸들러 함수는 CloudEvents Event 객체를 인수로 허용해야 합니다.

함수 진입점은 함수 프레임워크에 핸들러가 등록된 이름입니다. 이 예시에서 진입점은 my_cloudevent_function입니다.

PHP

<?php

use CloudEvents\V1\CloudEventInterface;
use Google\CloudFunctions\FunctionsFramework;

// Register a CloudEvent function with the Functions Framework
FunctionsFramework::cloudEvent('myCloudEventFunction', 'myCloudEventHandler');

// Define your CloudEvent handler
function myCloudEventHandler(CloudEventInterface $event): void
{
    // Your code here
    // Access the CloudEvent data payload via $event->getData()
}

PHP에서는 PHP용 함수 프레임워크에 CloudEvent 핸들러 함수를 등록합니다. 핸들러 함수는 CloudEventInterface 인터페이스를 준수하는 인수를 수락해야 합니다.

함수 진입점은 함수 프레임워크에 핸들러가 등록된 이름입니다. 이 예시에서 진입점은 myCloudEventFunction입니다.

CloudEvent 함수의 경우 이벤트 데이터는 함수를 트리거하는 이벤트 유형에 해당하는 CloudEvent 데이터 페이로드와 함께 CloudEvents 형식의 함수로 전달됩니다. 지원되는 트리거, 이벤트 유형, 관련 이벤트 데이터 형식에 대한 자세한 내용은 Cloud Run Functions 트리거를 참조하세요.

Google 이벤트 저장소에는 Google에서 발급한 CloudEvents를 사용하는 리소스가 포함되어 있습니다.

함수 종료

Cloud Run Functions는 함수가 반환되면 이벤트 기반 함수 실행이 완료된 것으로 간주합니다. 함수가 백그라운드 태스크(예: 스레드, 기능, JavaScript Promise 객체, 콜백 또는 시스템 프로세스)를 만드는 경우 이를 종료하거나 함수에서 반환하기 전 태스크를 해결해야 합니다. 함수가 반환되기 전에 종료되지 않은 작업은 완료되지 않을 수 있으며 정의되지 않은 동작이 발생할 수 있습니다.

자동 재시도

실패한 호출을 자동으로 다시 시도하도록 이벤트 기반 함수를 구성할 수 있습니다. 자세한 내용은 이벤트 기반 함수 재시도를 참조하세요.

다음 단계