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
- Mengimplementasikan Fungsi HTTP
- Mengimplementasikan fungsi CloudEvents
- Pelajari Kontrak Functions Framework