Di Cloud Run, Anda menulis fungsi CloudEvents (juga disebut fungsi berbasis peristiwa) saat ingin fungsi dipicu secara langsung sebagai respons terhadap peristiwa dalam project Google Cloud, seperti pesan di topik Pub/Sub atau perubahan dalam bucket Cloud Storage.
Menerapkan fungsi pengendali CloudEvents
Fungsi CloudEvent didasarkan pada CloudEvents, yaitu sebuah spesifikasi standar industri untuk mendeskripsikan data peristiwa dengan cara yang umum. Anda dapat mempelajari spesifikasi CloudEvents lebih lanjut di repositori GitHub CloudEvents. Project CloudEvents juga menyediakan sekumpulan CloudEvents SDK untuk membantu menangani objek CloudEvents dalam kode Anda.
Contoh berikut menunjukkan file sumber fungsi CloudEvent dasar untuk setiap runtime. Lihat Struktur direktori sumber untuk mengetahui informasi tentang lokasi kode sumber.
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 using cloudEvent.data
});
Di Node.js, Anda mendaftarkan fungsi pengendali CloudEvent dengan Functions Framework untuk Node.js.
Fungsi pengendali Anda harus menerima objek CloudEvent
sebagai argumen.
Titik entri fungsi adalah nama yang digunakan pengendali untuk mendaftar pada Functions Framework.
Dalam contoh ini, titik masuknya adalah 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
Dalam Python, Anda mendaftarkan fungsi pengendali CloudEvent dengan Functions Framework untuk Python.
Fungsi pengendali Anda harus menerima objek CloudEvent
sebagai argumen.
Titik entri fungsi adalah nama yang digunakan pengendali untuk mendaftar pada Functions Framework.
Dalam contoh ini, titik masuknya adalah 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 using 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
}
Di Go, Anda mendaftarkan fungsi pengendali CloudEvent dengan Functions Framework untuk Go. Fungsi pengendali Anda harus menerima CloudEvent event.Event
sebagai argumen.
Titik entri fungsi adalah nama yang digunakan pengendali untuk mendaftar pada Functions Framework.
Dalam contoh ini, titik masuknya adalah MyCloudEventFunction
.
Java
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 using event.getData()
// To get the data payload as a JSON string, use:
// new String(event.getData().toBytes())
}
}
Di Java, Anda menggunakan Functions Framework Java API untuk mengimplementasikan class pengendali CloudEvent dengan antarmuka CloudEventsFunction
. Metode accept()
harus menerima objek CloudEvent
sebagai argumen dan melakukan pemrosesan apa pun pada peristiwa.
Titik entri fungsi adalah nama yang sepenuhnya memenuhi syarat untuk class pengendali CloudEvent, termasuk nama paket. Dalam contoh ini, titik masuknya adalah
mycloudeventfunction.MyCloudEventFunction
.
.NET
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; } } }
Pada runtime .NET, Anda menggunakan classFramework Functions untuk .NET untuk menerapkan class pengendali CloudEvent dengan antarmuka ICloudEventFunction<T>
. Metode HandleAsync()
menerima objek CloudEvent
dan payload data CloudEvent terkait sebagai argumen.
Jenis argumen payload data CloudEvent, yang ditunjukkan dalam kode contoh sebagai CloudEventDataType
, harus sesuai dengan jenis peristiwa yang ditangani fungsi. Library .NET Google CloudEvents menyediakan jenis data untuk berbagai peristiwa yang didukung oleh Google.
Titik entri fungsi adalah nama yang sepenuhnya memenuhi syarat untuk class pengendali CloudEvent, termasuk namespace. Dalam contoh ini, titik masuknya adalah 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
Dalam Ruby, Anda mendaftarkan fungsi pengendali CloudEvent dengan Functions Framework untuk Ruby.
Fungsi pengendali Anda harus menerima objek Event
CloudEvent sebagai argumen.
Titik entri fungsi adalah nama yang digunakan pengendali untuk mendaftar pada Functions Framework.
Dalam contoh ini, titik masuknya adalah 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 using $event->getData()
}
Di PHP, Anda mendaftarkan fungsi pengendali CloudEvent dengan Functions Framework untuk PHP.
Fungsi pengendali Anda harus menerima argumen yang sesuai dengan antarmuka CloudEventInterface
.
Titik entri fungsi adalah nama yang digunakan pengendali untuk mendaftar pada Functions Framework.
Dalam contoh ini, titik masuknya adalah myCloudEventFunction
.
Untuk fungsi CloudEvent, data peristiwa diteruskan ke fungsi Anda dalam format CloudEvent, dengan payload data CloudEvent yang sesuai dengan jenis peristiwa yang memicu fungsi Anda. Lihat Pemicu fungsi untuk mengetahui informasi tentang pemicu yang didukung, jenis peristiwa, dan format data peristiwa terkait.
Repositori Google Events berisi resource untuk bekerja dengan CloudEvents yang dikeluarkan oleh Google.
Penghentian fungsi
Cloud Run menganggap eksekusi fungsi berbasis peristiwa selesai saat fungsi tersebut dikembalikan. Jika fungsi membuat tugas latar belakang (seperti dengan thread, future, objek Promise JavaScript, callback, atau proses sistem), Anda harus menghentikan atau menyelesaikan tugas ini sebelum kembali dari fungsi. Setiap tugas yang tidak dihentikan sebelum fungsi ditampilkan mungkin belum diselesaikan, dan dapat menyebabkan perilaku yang tidak ditentukan.
Percobaan ulang otomatis
Fungsi berbasis peristiwa dapat dikonfigurasi untuk mencoba kembali pemanggilan yang gagal secara otomatis. Lihat Mencoba ulang fungsi berbasis peristiwa untuk mengetahui informasi selengkapnya.