Functions エミュレータを使用して関数を実行する

Google Cloud CLI の Functions エミュレータを使用すると、gcloud alpha functions local コマンドで Cloud Run functions のローカル インスタンスを管理できます。これにより、関数を Google Cloud 環境にデプロイする前に、ローカル システム上にデプロイしてテストできます。

Functions エミュレータは、Google Cloud の buildpack を使用して、関数コードをローカルで実行可能なコンテナ イメージにパッケージ化します。その後、Docker を使用してこれらのイメージをローカルで実行します。

インストールの前提条件

続行する前に、以下がインストールされていることを確認してください。

関数をローカルにデプロイする

Functions エミュレータを使用して関数をローカルでデプロイするには、gcloud functions コマンドを使用します。

Node.js

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --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 \
    --runtime=go121

Java

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

C#

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

Ruby

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

PHP

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

次のように置き換えます。

  • LOCAL_DEPLOYMENT_NAME: 関数をローカルにデプロイする際の名前。
  • ENTRY_POINT: 関数のエントリ ポイント。

デプロイ コマンドは、次のオプション フラグを使用してさらに細かく構成できます。

フラグ 説明
--port リクエストをリッスンするポート(デフォルト: 8080)。
--builder 使用する Buildpack ビルダーの名前。

--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 は、関数をローカルにデプロイする際の名前に置き換えます。

このコマンドは関数のデプロイを解除しますが、関数コードは削除しません。

次のステップ