使用 Functions Emulator 執行函式

您可以使用 Google Cloud CLI Functions Emulator,透過 gcloud alpha functions local 指令管理 Cloud Run 函式的本機執行個體。這樣您就能在本機系統上部署及測試函式,然後再部署至Google Cloud 環境。

Functions Emulator 會使用 Google Cloud 的 Buildpacks,將函式程式碼封裝為可在本機執行的容器映像檔。然後使用 Docker 在本機執行這些映像檔。

安裝的必要條件

請先確認已安裝下列項目,再繼續操作:

在本機部署函式

如要使用 Functions Emulator 在本機部署函式,請使用 gcloud functions 指令:

Node.js

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --no-gen2 \
    --runtime=nodejs20

Python

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=python312

Go

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --no-gen2 \
    --runtime=go121

Java

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --no-gen2 \
    --runtime=java17 

Ruby

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=ruby33

取代:

  • LOCAL_DEPLOYMENT_NAME:您在本地部署函式時使用的名稱。
  • ENTRY_POINT:函式的進入點。

您可以使用下列選用標記,進一步設定部署指令:

旗標 說明
--port 監聽要求的通訊埠 (預設:8080)。
--builder 要使用的建構包建構工具名稱。

--builder 值預設為函式語言的 App Engine 建構工具。舉例來說,Python 的預設值為 gcr.io/serverless-runtimes/google-22-full/builder/python

首次使用 gcloud alpha 指令時,gcloud 指令會提示您安裝 gcloud alpha 指令集。

呼叫本機函式

如要呼叫本機函式,但不傳送資料,請使用下列指令:

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME

LOCAL_DEPLOYMENT_NAME 替換為您要在本機部署函式的名稱。

如要在呼叫本機函式時加入資料,請選擇與函式類型相符的分頁:

HTTP 函式

呼叫本機 HTTP 函式,如下所示:

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
    --data='{"message": "MESSAGE"}'

取代:

  • LOCAL_DEPLOYMENT_NAME:要在本機部署函式的名稱。
  • ENTRY_POINT:函式的進入點。
  • MESSAGE:要以 HTTP 要求主體形式傳遞的文字字串。

CloudEvent 函式

如要呼叫本機 CloudEvent 函式,您必須提供 CloudEvent JSON 物件,說明觸發事件:

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
    --cloud-event="CLOUD_EVENT_JSON"

取代:

  • LOCAL_DEPLOYMENT_NAME:要在本機部署函式的名稱。
  • ENTRY_POINT:函式的進入點。
  • CLOUD_EVENT_JSON:結構化內容模式中的 JSON 編碼字串,說明觸發事件。如需更多詳細資料和範例,請參閱 CloudEvents - JSON 事件格式

以下是指令列範例:

gcloud alpha functions local call my-function --cloud-event='{
 "specversion" : "1.0",
  "type" : "com.github.pull.create",
  "source" : "https://github.com/cloudevents/spec/pull",
  "subject" : "123",
  "id" : "ce",
  "time" : "2021-01-27T18:30:00Z", "data" : "{\n \"subscription\": \"projects\/test-project\/subscriptions\/my-subscription\",\n \"message\": {\n \"attributes\": {\n \"attr1\":\"attr1-value\"\n },\n \"data\": \"d29ybGQ=\",\n \"messageId\": \"message-id\",\n \"publishTime\":\"2021-02-05T04:06:14.109Z\",\n \"orderingKey\": \"ordering-key\"\n }\n}"
  }'

如要進一步瞭解如何為 CloudEvents 定義 JSON 格式,請參閱 CloudEvent 規格

刪除本機函式部署作業

使用下列指令刪除本機函式部署作業:

gcloud alpha functions local delete LOCAL_DEPLOYMENT_NAME

LOCAL_DEPLOYMENT_NAME 替換成要在本機部署函式的名稱。

這項指令會取消部署函式,但不會刪除函式程式碼。

後續步驟