編寫 Cloud Run 函式
Cloud Run 函式支援多種程式設計語言編寫的原始碼。您選擇的語言執行階段和要撰寫的函式類型,會決定程式碼的結構和函式的實作方式。本頁面提供 Cloud Run 函式類型的總覽,以及對原始碼的期望。
Cloud Run 函式類型
Cloud Run 函式分為兩種類型:
HTTP 函式:處理 HTTP 要求並使用 HTTP 觸發條件。如要瞭解如何實作 HTTP 函式,請參閱「編寫 HTTP 函式」。
事件導向函式:處理雲端環境中的事件,並使用事件觸發條件,如「Cloud Run 函式觸發條件」一文所述。如要瞭解如何實作事件導向函式,請參閱「編寫事件導向函式」。
如果函式需要網址端點並回應 HTTP 要求 (例如 Webhook),請使用 HTTP 函式。如果函式應直接回應 Google Cloud 專案中的事件 (例如 Pub/Sub 主題上的訊息或 Cloud Storage bucket 中的變更),請使用事件驅動函式。
來源目錄結構
為使 Cloud Run 函式能夠找到函式定義,每個語言執行階段都對原始碼結構有所要求。下圖顯示各個執行階段的函式基本目錄結構。
Node.js
Node.js 函式的基本目錄結構如下:
. ├── index.js └── package.json
根據預設,Cloud Run 函式會嘗試從函式目錄根層級中名為 index.js 的檔案載入原始碼。如要指定其他主要來源檔案,請使用 package.json 檔案中的 main 欄位。
package.json 檔案也必須將 Node.js 適用的 Functions Framework 做為依附元件:
{
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
主要檔案中的程式碼必須定義函式進入點,並可照常匯入其他程式碼和 Node.js 模組。主要檔案也可以定義多個函式進入點,以便分別部署。
Python
Python 函式的基本目錄結構如下:
. ├── main.py └── requirements.txt
Cloud Run 函式會從函式目錄根層級的 main.py 檔案載入原始碼。主要檔案必須命名為 main.py。
requirements.txt 檔案必須包含 Python 適用的 Functions Framework 做為依附元件:
functions-framework==3.*
main.py 檔案中的程式碼必須定義函式進入點,並可照常匯入其他程式碼和外部依附元件。main.py 檔案也可以定義多個函式進入點,以便分別部署。
Go
Go 函式的基本目錄結構如下:
. ├── myfunction.go └── go.mod
函式必須位於專案根層級的 Go 封裝中。套件及其來源檔案可以有任何名稱,但函式不得位於 package main 中。如果您需要 main 套件 (例如用於本機測試),可以在子目錄中建立:
.
├── myfunction.go
├── go.mod
└── cmd/
└── main.go
go.mod 檔案必須包含 Go 適用的 Functions Framework 做為依附元件:
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
根層級套件中的程式碼必須定義函式進入點,並可照常從子套件和依附元件匯入其他程式碼。您的套件也可以定義多個函式進入點,以便分別部署。
Java
Java 函式的基本目錄結構如下:
.
├── pom.xml
└── src/
└── main/
└── java/
└── MyFunction.java
Java 來源檔案必須位於 src/main/java/ 目錄下,且可使用任何名稱。如果來源檔案有宣告套件,請在 src/main/java 下方新增一個目錄,並以套件名稱命名:
.
├── pom.xml
└── src/
└── main/
└── java/
└── mypackage/
└── MyFunction.java
建議您將相關聯的測試放在 src/test/java/ 子目錄下。
pom.xml 檔案必須包含 Java 適用的 Functions Framework 做為依附元件:
...
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.0.4</version>
</dependency>
...
原始碼檔案中的程式碼必須定義函式進入點,並可照常匯入其他程式碼和外部依附元件。來源檔案也可以定義多個函式進入點,這些進入點可以個別部署。
C#
.NET 函式的基本目錄結構如下:
. ├── MyFunction.cs └── MyProject.csproj
您可以像處理其他 .NET 原始碼一樣建構專案。來源檔案的名稱不限。
專案檔案必須將 .NET 適用的 Functions Framework 做為依附元件:
...
<PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...
原始碼檔案中的程式碼必須定義函式進入點,並可照常匯入其他程式碼和外部依附元件。來源檔案也可以定義多個函式進入點,這些進入點可以個別部署。
您也可以使用 .NET 適用的 Cloud Run 函式範本套件,產生必要檔案。
Ruby
Ruby 函式的基本目錄結構如下:
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run 函式會從函式目錄根層級的 app.rb 檔案載入原始碼。主要檔案必須命名為 app.rb。
您的 Gemfile 檔案必須包含 Ruby 適用的 Functions Framework 做為依附元件:
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
app.rb 檔案中的程式碼必須定義函式進入點,並可照常匯入其他程式碼和外部依附元件。app.rb 檔案也可以定義多個函式進入點,以便分別部署。
PHP
PHP 函式的基本目錄結構如下:
. ├── index.php └── composer.json
Cloud Run 函式會從函式目錄根層級中名為 index.php 的檔案載入原始碼。主要檔案必須命名為 index.php。
composer.json 檔案必須包含 PHP 適用的 Functions Framework 做為依附元件:
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
index.php 檔案中的程式碼必須定義函式進入點,並可照常匯入其他程式碼和外部依附元件。index.php 檔案也可以定義多個函式進入點,以便分別部署。
如果您打算將多個函式分組到單一專案中,請注意每個函式最後可能會共用同一組依附元件。不過,部分函式可能不需要所有依附元件。
如果可以,建議您將大型多函式程式碼集分割開來,並將每個函式放在各自的頂層目錄中 (如上所示),且各自擁有來源和專案設定檔。這種方法可盡量減少特定函式所需的依附元件數量,進而減少函式所需的記憶體量。
函式進入點
原始碼必須定義函式的進入點,也就是在叫用 Cloud Run 函式時執行的特定程式碼。部署函式時,您會指定這個進入點。
定義進入點的方式取決於您使用的語言執行階段。在某些語言中,進入點是函式,而在其他語言中,進入點則是類別。如要進一步瞭解如何定義進入點,以及使用不同語言實作 Cloud Run 函式,請參閱「編寫 HTTP 函式」和「編寫事件驅動函式」。
依附元件
您可以使用各個執行階段的標準工具管理依附元件。詳情請參閱下列頁面:
- 在 Node.js 中指定依附元件
- 在 Python 中指定依附元件
- 在 Go 中指定依附元件
- 在 Java 中指定依附元件
- 在 .NET 中指定依附元件
- 在 Ruby 中指定依附元件
- 在 PHP 中指定依附元件
後續步驟
- 瞭解如何編寫 HTTP 函式。
- 瞭解如何編寫事件導向函式。
- 瞭解 Cloud Run 函式觸發條件。