Tulis fungsi

Halaman ini memberikan pengantar untuk menulis fungsi dengan Framework Functions.

Saat menulis kode sumber fungsi untuk Cloud Run, Anda harus menggunakan Framework Functions, library open source untuk menulis fungsi Cloud Run. Dengan Functions Framework, Anda dapat menulis fungsi ringan yang berjalan di Cloud Run dan di lingkungan lain, termasuk mesin pengembangan lokal dan lingkungan berbasis Knative.

Dengan Functions Framework, Anda dapat:

  • Memanggil fungsi sebagai respons terhadap permintaan.
  • Secara otomatis membatalkan marshal peristiwa yang sesuai dengan spesifikasi CloudEvents, yaitu spesifikasi standar industri untuk mendeskripsikan data peristiwa dengan cara yang umum.
  • Mulai server pengembangan lokal untuk pengujian cepat.

Menulis fungsi dengan Framework Functions

Framework Functions menyediakan antarmuka untuk membuat layanan modular. Untuk menggunakan Framework Fungsi dalam kode sumber Anda, tentukan hal berikut:

Titik entri fungsi

Kode sumber Anda harus menentukan titik entri untuk fungsi Anda, yaitu kode tertentu yang dijalankan saat fungsi Cloud Run dipanggil. Anda menentukan titik entri ini saat men-deploy fungsi.

Cara Anda menentukan titik entri bergantung pada runtime bahasa yang Anda gunakan. Untuk beberapa bahasa, titik masuknya adalah fungsi, sedangkan untuk bahasa lain titik masuknya adalah class.

Jenis Tanda Tangan

Saat menulis kode sumber fungsi dengan Framework Fungsi, Anda harus menentukan salah satu dari dua jenis tanda tangan:

  • Fungsi HTTP: Fungsi yang mendaftarkan fungsi pengendali HTTP. Lihat artikel Menulis fungsi HTTP untuk mengetahui informasi selengkapnya.
  • Fungsi CloudEvents (juga disebut fungsi berbasis peristiwa): Fungsi yang mendaftarkan fungsi pengendali CloudEvents. Lihat artikel Menulis fungsi CloudEvents untuk mengetahui informasi selengkapnya.

Gunakan fungsi HTTP jika Anda ingin fungsi memiliki endpoint URL dan merespons permintaan HTTP, seperti untuk webhook. Gunakan fungsi CloudEvents jika fungsi Anda harus dipicu secara langsung sebagai respons terhadap peristiwa dalam projectGoogle Cloud , seperti pesan pada topik Pub/Sub atau perubahan dalam bucket Cloud Storage.

Struktur direktori sumber

Framework Fungsi didukung dalam sejumlah bahasa pemrograman. Runtime bahasa yang Anda pilih dan jenis fungsi yang ingin ditulis menentukan cara menyusun kode dan mengimplementasikan fungsi Anda.

Agar Cloud Run dapat menemukan definisi fungsi Anda, setiap runtime bahasa memiliki persyaratan untuk menyusun kode sumber.

Node.js

Struktur direktori dasar untuk fungsi Node.js adalah sebagai berikut:

.
├── index.js
└── package.json

Secara default, Cloud Run akan mencoba memuat kode sumber dari file bernama index.js di root direktori fungsi Anda. Untuk menentukan file sumber utama yang berbeda, gunakan kolom main di file package.json Anda.

File package.json Anda juga harus menyertakan Functions Framework for Node.js sebagai dependensi:

{
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0"
  }
}

Kode dalam file utama harus menentukan titik entri fungsi dan dapat mengimpor kode lain dan modul Node.js. File utama juga dapat menentukan beberapa titik entri fungsi yang dapat di-deploy secara terpisah.

Lihat Ringkasan runtime Node.js dan Functions Framework for Node.js untuk mengetahui detail selengkapnya.

Python

Struktur direktori dasar untuk fungsi Python adalah sebagai berikut:

.
├── main.py
└── requirements.txt

Cloud Run memuat kode sumber dari file bernama main.py di root direktori fungsi Anda. Anda harus memberi nama file utama main.py.

File requirements.txt Anda harus menyertakan Framework Fungsi untuk Python sebagai dependensi:

functions-framework==3.*

Kode dalam file main.py harus menentukan titik entri fungsi dan dapat mengimpor kode lain serta dependensi eksternal seperti biasa. File main.py juga dapat menentukan beberapa titik masuk fungsi yang dapat di-deploy secara terpisah.

Lihat ringkasan runtime Python dan Functions Framework untuk Python untuk mengetahui detail selengkapnya.

Go

Struktur direktori dasar untuk fungsi Go adalah sebagai berikut:

.
├── myfunction.go
└── go.mod

Fungsi Anda harus berada dalam paket Go di root project Anda. Paket dan file sumbernya dapat memiliki nama apa pun, kecuali fungsi Anda tidak boleh berada dalam package main. Jika memerlukan paket main, misalnya untuk pengujian lokal, Anda dapat membuatnya di subdirektori:

.
├── myfunction.go
├── go.mod
└── cmd/
  └── main.go

File go.mod Anda harus menyertakan Functions Framework for Go sebagai dependensi:

module example.com/my-module

require (
  github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)

Kode dalam paket root harus menentukan titik entri fungsi dan dapat mengimpor kode lain dari subpaket dan dependensi seperti biasa. Paket Anda juga dapat menentukan beberapa titik masuk fungsi yang dapat di-deploy secara terpisah.

Lihat ringkasan runtime Go dan Functions Framework untuk Go untuk mengetahui detail selengkapnya.

Java

Struktur direktori dasar untuk fungsi Java adalah sebagai berikut:

.
├── pom.xml
└── src/
  └── main/
      └── java/
          └── MyFunction.java

File sumber Java Anda harus berada di bawah direktori src/main/java/ dan dapat memiliki nama apa pun. Jika file sumber Anda mendeklarasikan suatu paket, tambahkan direktori tambahan pada src/main/java dengan nama paket tersebut:

.
├── pom.xml
└── src/
  └── main/
      └── java/
          └── mypackage/
              └── MyFunction.java

Sebaiknya tempatkan pengujian terkait di bawah subdirektori src/test/java/.

File pom.xml Anda harus menyertakan Functions Framework for Java sebagai dependensi:

...
    <dependency>
      <groupId>com.google.cloud.functions</groupId>
      <artifactId>functions-framework-api</artifactId>
      <version>1.0.4</version>
    </dependency>
...

Kode dalam file sumber harus menentukan titik entri fungsi dan dapat mengimpor kode lain serta dependensi eksternal seperti biasa. File sumber Anda juga dapat menentukan beberapa titik masuk fungsi yang dapat di-deploy secara terpisah.

Lihat ringkasan runtime Java dan Functions Framework untuk Java untuk mengetahui detail selengkapnya.

.NET

Struktur direktori dasar untuk fungsi .NET adalah sebagai berikut:

.
├── MyFunction.cs
└── MyProject.csproj

Anda dapat menyusun project seperti yang Anda lakukan pada kode sumber .NET lainnya. File sumber Anda dapat memiliki nama apa pun.

File project Anda harus menyertakan Functions Framework untuk .NET sebagai dependensi:

...
    <PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...

Kode dalam file sumber harus menentukan titik entri fungsi dan dapat mengimpor kode lain serta dependensi eksternal seperti biasa. File sumber Anda juga dapat menentukan beberapa titik masuk fungsi yang dapat di-deploy secara terpisah.

Lihat ringkasan runtime.NET dan Functions Framework untuk .NET untuk mengetahui detail selengkapnya.

Ruby

Struktur direktori dasar untuk fungsi Ruby adalah sebagai berikut:

.
├── app.rb
├── Gemfile
└── Gemfile.lock

Cloud Run memuat kode sumber dari file bernama app.rb di root direktori fungsi Anda. File utama Anda harus diberi nama app.rb.

File Gemfile Anda harus menyertakan Functions Framework for Ruby sebagai dependensi:

source "https://rubygems.org"
gem "functions_framework", "~> 1.0"

Kode dalam file app.rb harus menentukan titik entri fungsi dan dapat mengimpor kode lain serta dependensi eksternal seperti biasa. File app.rb juga dapat menentukan beberapa titik masuk fungsi yang dapat di-deploy secara terpisah.

Lihat ringkasan runtime Ruby dan Functions Framework untuk Ruby untuk mengetahui detail selengkapnya.

PHP

Struktur direktori dasar untuk fungsi PHP adalah sebagai berikut:

.
├── index.php
└── composer.json

Cloud Run memuat kode sumber dari file bernama index.php di root direktori fungsi Anda. Anda harus memberi nama file utama index.php.

File composer.json Anda harus menyertakan Framework Functions untuk Python sebagai dependensi:

{
  "require": {
    "google/cloud-functions-framework": "^1.1"
  }
}

Kode dalam file index.php harus menentukan titik entri fungsi dan dapat mengimpor kode lain serta dependensi eksternal seperti biasa. File index.php juga dapat menentukan beberapa titik entri fungsi yang dapat di-deploy secara terpisah.

Lihat ringkasan runtime PHP dan Functions Framework untuk PHP untuk mengetahui detail selengkapnya.

Jika Anda mengelompokkan beberapa fungsi ke dalam satu project, ketahuilah bahwa setiap fungsi mungkin akan memiliki kumpulan dependensi yang sama. Namun, beberapa fungsi mungkin tidak memerlukan semua dependensi.

Jika memungkinkan, sebaiknya bagi codebase multifungsi yang berukuran besar dan masukkan setiap fungsi dalam direktori level teratasnya sendiri seperti yang ditunjukkan dalam contoh sebelumnya, dengan file konfigurasi sumber dan project-nya sendiri. Pendekatan ini meminimalkan jumlah dependensi yang diperlukan untuk fungsi tertentu, sehingga mengurangi jumlah memori yang dibutuhkan fungsi Anda.

Langkah selanjutnya