部署 Cloud Run 函式 (第 1 代)
本指南說明如何從原始碼部署舊版第 1 代 Cloud Run 函式。如要建立新函式,請參閱 Cloud Run 的控制台快速入門導覽課程。
部署程序會使用您的原始碼和配置設定建構可執行的映像檔,Cloud Run functions 會自動管理該映像檔,用於處理函式收到的要求。
部署作業基本設定
部署 Cloud Run 函式的使用者必須具備「Cloud Run 函式開發人員」IAM 角色,或包含相同權限的角色。另請參閱部署作業的其他設定。
使用 gcloud CLI 部署函式,如下所示:
使用
gcloud functions deploy
指令部署函式:gcloud functions deploy YOUR_FUNCTION_NAME \ [--gen2] \ --region=YOUR_REGION \ --runtime=YOUR_RUNTIME \ --source=YOUR_SOURCE_LOCATION \ --entry-point=YOUR_CODE_ENTRYPOINT \ TRIGGER_FLAGS
第一個引數
YOUR_FUNCTION_NAME
是已部署函式的名稱。函式名稱開頭必須為英文字母,後面最多可接 62 個英文字母、數字、連字號或底線,且結尾必須為字母或數字。--gen2
旗標會指定您要部署至 Cloud Run 函式。自 2024 年 9 月起,這將成為預設值。如要部署至第 1 代,請使用--no-gen2
。--runtime
標記會指定函式使用的語言執行階段。Cloud Run functions 支援多種執行階段,詳情請參閱「執行階段」。--source
旗標會指定函式原始碼的位置。詳情請參閱下列章節:--entry-point
標記會指定原始碼中函式的進入點。這是函式執行時執行的程式碼。這個旗標的值必須是來源程式碼中存在的函式名稱或完整類別名稱。詳情請參閱「函式進入點」。如要為函式指定觸發條件,請視要使用的觸發條件,加入其他標記 (以上方
TRIGGER_FLAGS
代表)。觸發旗標 觸發條件說明 --trigger-http
使用 HTTP(S) 要求觸發函式。詳情請參閱 HTTP 觸發條件。 --trigger-topic=YOUR_PUBSUB_TOPIC
當訊息發布至指定的 Pub/Sub 主題時,觸發函式。詳情請參閱 Pub/Sub 觸發條件。 --trigger-bucket=YOUR_STORAGE_BUCKET
在指定的 Cloud Storage bucket 中建立或覆寫物件時,觸發函式。詳情請參閱「 Cloud Storage 觸發條件」。 --trigger-event=EVENT_TYPE
[--trigger-resource=RESOURCE]在發生指定事件時觸發函式。 部分事件類型必須指定資源。詳情請參閱 Cloud Run 函式 (第 1 代) 支援的觸發條件。 如需部署指令及其旗標的完整參考資料,請參閱
gcloud functions deploy
說明文件。如需部署指令範例,請參閱「指令列範例」。
從本機部署
本節說明如何使用 gcloud CLI,從本機電腦上的原始碼部署函式。
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
使用
gcloud functions deploy
指令,按照上述部署說明操作。針對
--source
旗標,請指定函式原始碼根目錄的本機檔案系統路徑,請參閱「來源目錄結構」。如果省略這個旗標,系統會使用目前的工作目錄。您也可以選擇使用
--stage-bucket
旗標,指定要將原始碼上傳至哪個 Cloud Storage bucket,做為部署作業的一部分。上傳原始碼時,Cloud Run functions 會透過
.gcloudignore
檔案排除不必要的檔案。-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
使用
gcloud functions deploy
指令,按照上述部署說明操作。針對
--source
旗標,請指定以gs://
開頭的 Cloud Storage 路徑。路徑中的物件必須是包含函式原始碼的 ZIP 檔案。函式來源檔案必須位於 ZIP 檔案的根目錄中,請參閱「來源目錄結構」。- 這個函式使用 Node.js 20。
- 原始碼位於目前工作目錄 (
.
)。 - 程式碼中的進入點名為
myHttpFunction
。 - 函式會處理 Pub/Sub 訊息發布事件。
- 該函式使用 Python 3.12。
- 原始碼位於 Cloud Storage 的
gs://my-bucket/my_function_source.zip
路徑。 - 程式碼中的進入點名為
pubsub_handler
。 - 函式會處理 Cloud Storage 物件刪除事件。
- 這個函式使用 Java 17。
- 原始碼位於本機路徑
./functions/storage-function
。 - 程式碼中的進入點名為
myproject.StorageFunction
。 - 請參閱 Cloud Run 函式觸發條件的詳細資料。
- 瞭解 Cloud Run 函式建構程序。
- 探索其他 Cloud Run 函式設定選項。
- 瞭解如何保護 Cloud Run 函式。
從 Cloud Storage 部署
本節說明如何使用 gcloud CLI,從 Cloud Storage 值區中的原始碼部署函式。來源程式碼必須封裝為 ZIP 檔案。
如要讓 Cloud Run 函式從 Cloud Storage 值區讀取資料,您必須授予執行部署作業的帳戶 storage.objects.get
權限。
如要瞭解如何控管值區存取權,請參閱 Cloud Storage 說明文件中的「使用 IAM 權限」。
有了這項權限,您現在可以從 Cloud Storage 部署函式:
指令列範例
本節會針對幾個部署情境提供部署指令範例。
如要進一步瞭解 Cloud Run 函式支援的不同觸發條件,請參閱 Cloud Run 函式觸發條件。
透過本機原始碼建立 HTTP 函式
假設您有下列 HTTP 函式:
如要將函式部署至 Cloud Run 函式,並在 us-central1
區域中命名為 my-http-function
,請使用下列指令:
gcloud functions deploy my-http-function \
--no-gen2 \
--region=us-central1 \
--runtime=nodejs20 \
--source=. \
--entry-point=myHttpFunction \
--trigger-http
從 Cloud Storage 中的原始碼建立 Pub/Sub 函式
假設您有下列事件導向的函式:
如要將函式部署至 europe-west1
區域中名為 my-pubsub-function
的 Cloud Run 函式,並讓函式由 Pub/Sub 主題 my-topic
上的訊息觸發,請使用下列指令:
gcloud functions deploy my-pubsub-function \
--no-gen2 \
--region=europe-west1 \
--runtime=python312 \
--source=gs://my-bucket/my_function_source.zip \
--entry-point=pubsub_handler \
--trigger-topic=my-topic
透過本機原始碼建立 Cloud Storage 函式
假設您有下列事件導向的函式:
如要將函式部署至 Cloud Run 函式,並在 asia-northeast1
區域中命名為 my-storage-function
,且讓函式由 Cloud Storage bucket my-bucket
中的事件觸發,請使用下列指令:
gcloud functions deploy my-storage-function \
--no-gen2 \
--region=asia-northeast1 \
--runtime=java17 \
--source=./functions/storage-function \
--entry-point=myproject.StorageFunction \
--trigger-resource=gs://my-bucket \
--trigger-event=google.storage.object.delete