Menulis fungsi Cloud Run

Fungsi Cloud Run mendukung penulisan kode sumber dalam beberapa bahasa pemrograman. Runtime bahasa yang Anda pilih dan jenis fungsi yang ingin ditulis menentukan cara menyusun kode dan mengimplementasikan fungsi Anda. Halaman ini menyajikan ringkasan jenis-jenis fungsi Cloud Run dan ekspektasi untuk kode sumber.

Jenis fungsi Cloud Run

Ada dua jenis fungsi Cloud Run:

  • Fungsi HTTP, yang menangani permintaan HTTP dan menggunakan pemicu HTTP. Baca artikel Menulis fungsi HTTP untuk mengetahui informasi tentang cara mengimplementasikan fungsi HTTP.

  • Fungsi berbasis peristiwa, yang menangani peristiwa dari lingkungan cloud Anda dan menggunakan pemicu peristiwa seperti yang dijelaskan dalam Pemicu fungsi Cloud Run. Baca artikel Menulis fungsi berbasis peristiwa untuk mengetahui informasi tentang cara mengimplementasikan fungsi berdasarkan peristiwa.

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

Struktur direktori sumber

Agar fungsi Cloud Run dapat menemukan definisi fungsi Anda, setiap runtime bahasa memiliki persyaratan untuk menyusun kode sumber. Struktur direktori dasar untuk fungsi di setiap runtime ditampilkan di bawah ini.

Node.js

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

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

Secara default, fungsi 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 seperti biasa. File utama juga dapat menentukan beberapa titik entri fungsi yang dapat di-deploy secara terpisah.

Python

Struktur direktori dasar untuk fungsi Python adalah sebagai berikut:

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

Fungsi Cloud Run memuat kode sumber dari file bernama main.py di root direktori fungsi Anda. File utama Anda harus diberi nama 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.

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.

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.

C#

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.

Anda juga dapat menggunakan paket template fungsi Cloud Run untuk .NET guna menghasilkan file yang diperlukan.

Ruby

Struktur direktori dasar untuk fungsi Ruby adalah sebagai berikut:

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

Fungsi 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.

PHP

Struktur direktori dasar untuk fungsi PHP adalah sebagai berikut:

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

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

File composer.json Anda harus menyertakan Framework Fungsi untuk PHP 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 masuk fungsi yang dapat di-deploy secara terpisah.

Jika Anda ingin 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 di atas, 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.

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. Untuk mempelajari lebih lanjut cara menentukan titik entri dan menerapkan fungsi Cloud Run dalam berbagai bahasa, lihat Menulis fungsi HTTP dan Menulis fungsi berbasis peristiwa.

Dependensi

Anda dapat mengelola dependensi menggunakan fitur standar untuk setiap runtime. Untuk informasi selengkapnya, lihat halaman yang sesuai:

Langkah berikutnya