Menjalankan fungsi dengan Framework Functions
Fungsi Cloud Run menggunakan open source Functions Framework untuk menggabungkan fungsi yang telah di-deploy dalam aplikasi HTTP persisten.
Framework Functions juga dapat berjalan pada platform lain yang mendukung bahasa itu sendiri, termasuk mesin lokal Anda, server lokal, Compute Engine, dan Cloud Run.
Menginstal dependensi
Di direktori fungsi, instal library Framework Functions untuk bahasa Anda:
Lihat library Framework Functions Java untuk mengetahui informasi selengkapnya.
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Go
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
Java
Maven
Jika Anda menggunakan Maven, tambahkan
kode berikut ke file pom.xml
:
Gradle
Jika Anda menggunakan Gradle, tambahkan kode berikut ke
file build.gradle
:
C#
Perintah di bawah menggunakan Template .NET untuk membuat fungsi .NET Cloud Run baru dengan kode Library.NET Functions Framework sebagai dependensi:
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
Di Ruby, Framework Functions harus ditambahkan ke antarmuka dependensi untuk men-deploy-nya ke fungsi Cloud Run:
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Mengonfigurasi Framework Functions
Sebelum menjalankan fungsi menggunakan Framework Functions, pertama-tama Anda harus menentukan jenis dan nama fungsi yang ingin dijalankan. Atribut ini dapat ditentukan sebagai flag antarmuka command line (CLI) atau sebagai variabel lingkungan.
Jenis fungsi yang didukung
Framework Functions mendukung ketiga jenis fungsi
didukung oleh fungsi Cloud Run generasi ke-1. Semua runtime bahasa
mendukung http
dan salah satu dari event
atau cloudevent
.
Jenis fungsi | Jenis tanda tangan | Deskripsi | Mendukung Runtime |
---|---|---|---|
Fungsi yang dipicu HTTP |
http
|
Fungsi yang menerima dan merespons permintaan HTTP. | Semua runtime |
Fungsi latar belakang |
event
|
Format peristiwa khusus fungsi Cloud Run | Node.js, Python, Buka, Java |
Fungsi CloudEvent |
cloudevent
|
Format acara standar industri | .NET, Ruby, PHP |
Menentukan fungsi yang akan dijalankan
Sebelum menjalankan fungsi dengan Framework Functions, Anda harus terlebih dahulu menentukan fungsi mana dalam kode Anda yang harus dijalankan. Untuk sebagian besar bahasa, Anda dapat melakukannya dengan menentukan nama metode fungsi target seperti yang ditunjukkan pada tabel di bawah ini. (Pengecualian untuk aturan ini seperti Java dan .NET juga ditampilkan di bawah.)
Petunjuk per bahasa
Lihat tabel di bawah ini untuk daftar opsi konfigurasi yang didukung oleh setiap bahasa.
Node.js
Argumen CLI | Variabel Lingkungan | Deskripsi |
---|---|---|
--port
|
PORT
|
Port untuk memproses permintaan. (Default: 8080 )
|
--target
|
FUNCTION_TARGET
|
Nama fungsi export yang akan dipanggil. (Default:
function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Jenis tanda tangan yang digunakan oleh fungsi Anda. Dapat berupa salah satu dari http (default), event , atau cloudevent .
|
Python
Argumen CLI | Variabel Lingkungan | Deskripsi |
---|---|---|
--port
|
PORT
|
Port untuk memproses permintaan. (Default: 8080 )
|
--target
|
FUNCTION_TARGET
|
Nama fungsi export yang akan dipanggil. (Default:
function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Jenis tanda tangan yang digunakan oleh fungsi Anda. Dapat berupa salah satu dari http (default), event , atau cloudevent .
|
Go
Variabel Lingkungan | Deskripsi |
---|---|
PORT
|
Port untuk memproses permintaan. (Default: 8080 )
|
Java
Nama Argumen | Variabel Lingkungan | Deskripsi |
---|---|---|
run.port
|
PORT
|
Port untuk memproses permintaan. (Default: 8080 )
|
run.functionTarget
|
FUNCTION_TARGET
|
Nama fungsi export yang akan dipanggil. (Default:
function )
|
C#
Argumen CLI | Variabel Lingkungan | Deskripsi |
---|---|---|
--port
|
PORT
|
Port untuk memproses permintaan. (Default: 8080 )
|
--target (atau hanya argumen)
|
FUNCTION_TARGET
|
classname fungsi yang akan dipanggil. (Default:
function )
|
Ruby
Argumen CLI | Variabel Lingkungan | Deskripsi |
---|---|---|
--port
|
PORT
|
Port untuk memproses permintaan. (Default: 8080 )
|
--target
|
FUNCTION_TARGET
|
Nama fungsi export yang akan dipanggil. (Default:
function )
|
PHP
Variabel Lingkungan | Deskripsi |
---|---|
FUNCTION_TARGET
|
Nama fungsi yang akan dipanggil. (Default:
function )
|
FUNCTION_SIGNATURE_TYPE
|
Jenis tanda tangan yang digunakan oleh fungsi Anda. Dapat berupa salah satu dari http (default), event , atau cloudevent .
|
Ikuti petunjuk di bawah untuk mengonfigurasi dan menjalankan Framework Functions:
Node.js
Dengan Framework Functions Node.js, Anda dapat menentukan nama fungsi dan jenis tanda tangan sebagai argumen command line atau variabel lingkungan.
Anda juga dapat menentukan nilai ini dalam buildfile package.json
dengan menambahkan skrip start
dengan argumen CLI yang diperlukan seperti yang ditunjukkan pada contoh di bawah.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
Hal yang sama dapat dilakukan dengan menggunakan variabel lingkungan:
"scripts": { "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework" }
Ganti YOUR_FUNCTION_NAME dengan nama metode fungsi Anda, dan YOUR_SIGNATURE_TYPE (jika ada) dengan jenis tanda tangan fungsi Anda seperti yang ditunjukkan dalam tabel di atas.
Python
Dengan Framework Functions Python, Anda dapat menentukan nama dan jenis tanda tangan fungsi sebagai argumen command line atau variabel lingkungan. Argumen command line harus ditentukan saat Anda menjalankan framework.
Go
Framework Functions Go menggunakan funcframework.RegisterHTTPFunctionContext
untuk menentukan target fungsi dan jenis tanda tangan.
Java
Framework Functions Java menerima data konfigurasi dari tiga sumber yang berbeda, dalam urutan prioritas berikut (paling spesifik ke paling tidak spesifik):
- Argumen command line
- File Build
- Variabel lingkungan
Argumen command line
Maven
Anda dapat menentukan fungsi yang ingin dijalankan dengan menambahkan tanda antarmuka command line (CLI) berikut ke perintah mvn
:
-Drun.functionTarget=YOUR_FUNCTION_NAME
Anda juga dapat menentukan port target dengan menambahkan flag CLI berikut dengan cara yang sama:
-Drun.port=12345
Gradle
Flag CLI Gradle hampir identik dengan Maven. Satu-satunya perubahan yang dilakukan Gradle
adalah menukar -D
utama di setiap flag dengan -P
seperti yang ditunjukkan dalam contoh
di bawah:
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
File Build
Anda juga bisa menetapkan fungsi yang ingin dijalankan di file build project Anda. Meskipun Maven dan Gradle memiliki flag CLI yang serupa, klausa file build-nya memiliki perbedaan yang signifikan.
Maven
File build Maven diberi nama pom.xml
. Tambahkan klausa berikut ke file ini untuk menentukan fungsi target:
Ganti <functionTarget>
dengan nama class fungsi
Anda. (Misalnya, fungsi dalam paket functions
dengan nama class
HelloCloudFunctions
akan memiliki nama class
functions.HelloCloudFunctions
. Ini berhubungan dengan file build induk
- pom.xml
atau build.gradle
).
Gradle
File build Gradle diberi nama build.gradle
. Tambahkan klausa berikut ke file ini untuk menentukan fungsi target:
C#
Jika Anda membuat project menggunakan dotnet new
dan salah satu template yang ditentukan di atas, Framework Functions .NET akan otomatis mendeteksi fungsi Anda.
Jika project Anda berisi beberapa fungsi, lihat bagian Menjalankan Framework untuk mengetahui informasi tentang cara menjalankan fungsi tertentu.
Ruby
Dengan Framework Functions Ruby, Anda dapat menentukan nama fungsi dan jenis tanda tangan sebagai argumen command line atau variabel lingkungan. Argumen command line harus ditentukan saat Anda menjalankan framework.
PHP
Dengan Framework Functions PHP, Anda dapat menentukan variabel lingkungan sebagai argumen command line.
Anda juga dapat menentukan nilai ini dalam file build composer.json
dengan menambahkan skrip start
seperti yang ditunjukkan pada contoh di bawah.
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
Ganti YOUR_FUNCTION_NAME dengan nama fungsi Anda, dan YOUR_SIGNATURE_TYPE (jika ada) dengan jenis tanda tangan fungsi Anda seperti yang ditunjukkan dalam tabel di atas.
Menjalankan Framework Functions
Gunakan perintah berikut untuk menjalankan fungsi Anda dengan Framework Functions.
Secara default, fungsi dapat diakses di localhost:8080
kecuali jika Anda menentukan nilai PORT
.
Node.js
npm start
Python
Menggunakan argumen command line:
functions-framework --target=YOUR_FUNCTION_NAME
Menggunakan variabel lingkungan:
FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework
Ganti YOUR_FUNCTION_NAME dengan nama metode fungsi Anda.
Go
cd cmd go build ./cmd
Menggunakan variabel lingkungan:
cd cmd go build PORT=8080 ./cmd
Java
Maven
Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan di pom.xml
:
mvn function:run
Gunakan perintah berikut untuk menjalankan fungsi yang ditetapkan dalam argumen command line:
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan sebagai variabel lingkungan:
FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run
Ganti YOUR_FUNCTION_NAME dengan nama class fungsi Anda.
Gradle
Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan di build.gradle
:
./gradlew runFunction
Gunakan perintah berikut untuk menjalankan fungsi yang ditetapkan dalam argumen command line:
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
Gunakan perintah berikut untuk menjalankan fungsi yang ditentukan sebagai variabel lingkungan:
FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction
Ganti YOUR_FUNCTION_NAME dengan nama class fungsi Anda.
C#
Gunakan perintah berikut untuk menjalankan fungsi saat hanya ada satu fungsi dalam project .NET saat ini. (Ini adalah struktur default untuk project yang dibuat dengan template.)
dotnet run
Jika project .NET Anda berisi beberapa fungsi, gunakan perintah berikut untuk menjalankan fungsi tertentu. Ganti YOUR_FUNCTION_CLASSNAME dengan nama class fungsi Anda, termasuk namespace.
dotnet run YOUR_FUNCTION_CLASSNAME
Jika ingin menjalankan beberapa fungsi secara bersamaan, Anda harus menjalankan beberapa instance Framework Functions. Untuk menghindari konflik antara menjalankan instance framework, setiap instance harus menggunakan nilai PORT
yang berbeda. Perintah berikut menunjukkan cara menjalankan fungsi dengan nilai PORT
8080
.
Menggunakan argumen command line:
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
Menggunakan variabel lingkungan:
FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run
Ruby
Menggunakan argumen command line:
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
Menggunakan variabel lingkungan:
FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby
Ganti YOUR_FUNCTION_NAME dengan nama metode fungsi Anda.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
Ganti YOUR_FUNCTION_NAME dengan nama fungsi Anda.
Memanggil fungsi Anda
Lihat halaman memanggil fungsi lokal untuk mendapatkan petunjuk tentang cara berinteraksi dengan fungsi yang berjalan secara lokal.
Pembersihan
Setelah selesai menjalankan fungsi, hentikan instance framework yang sedang berjalan dengan menekan Control+C.