Node.js で HTTP Cloud Functions を作成してデプロイする

Node.js で HTTP Cloud Functions を作成してデプロイする

このドキュメントでは、シンプルな Cloud Functions HTTP 関数を作成するプロセスについて説明します。これは次の 2 種類の Cloud Functions の 1 つになります。

  • HTTP 関数。標準的な HTTP リクエストから呼び出します。
  • イベント ドリブン関数。Pub/Sub トピック上のメッセージや Cloud Storage バケット内の変更など、Cloud インフラストラクチャのイベントによってトリガーされます。

詳細については、HTTP 関数の作成イベント ドリブン関数の作成をご覧ください。

準備

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud Functions、Cloud Build、Artifact Registry、Cloud Run、and Cloud Logging API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Cloud Functions、Cloud Build、Artifact Registry、Cloud Run、and Cloud Logging API を有効にします。

    API を有効にする

  8. gcloud CLI をインストールして初期化します
  9. gcloud コンポーネントを更新してインストールします。
    gcloud components update
  10. 開発環境を準備します。

    Node.js 設定ガイドに移動

関数を作成する

  1. 関数コードで使用するため、ローカル システムにディレクトリを作成します。

    Linux / Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    
  2. helloworld ディレクトリに、次の内容の index.js ファイルを作成します。

    const functions = require('@google-cloud/functions-framework');
    
    // Register an HTTP function with the Functions Framework that will be executed
    // when you make an HTTP request to the deployed function's endpoint.
    functions.http('helloGET', (req, res) => {
      res.send('Hello World!');
    });

    このサンプル関数は、すべてのリクエストに「Hello World!」という挨拶を返します。

依存関係を指定する

Node.js における依存関係は、npm で管理され、package.json というメタデータ ファイルで表現されます。 このファイルは、手動または npm コマンドを使用して作成できます。

  • npm コマンドを使用して package.json ファイルを作成するには:

    1. helloworld ディレクトリから npm init コマンドを実行します。Enter を押して質問の回答のデフォルトを受け入れます。

      npm init
      
    2. package.json ファイルを編集して、functions-framework 依存関係を追加します。

      "dependencies": {
        "@google-cloud/functions-framework": "^3.1.0"
      }
      
  • package.json ファイルを手動で作成する場合は、次の内容をコピーします。

{
  "name": "nodejs-docs-samples-functions-hello-world-get",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git"
  },
  "engines": {
    "node": ">=16.0.0"
  },
  "scripts": {
    "test": "c8 mocha -p -j 2 test/*.test.js --timeout=6000 --exit"
  },
  "dependencies": {
    "@google-cloud/functions-framework": "^3.1.0"
  },
  "devDependencies": {
    "c8": "^8.0.0",
    "gaxios": "^6.0.0",
    "mocha": "^10.0.0",
    "wait-port": "^1.0.4"
  }
}

多くの Node.js クライアント ライブラリは、Google Cloud プロダクトで使用でき、依存関係としてインストールできます。

をご覧ください。

関数をローカルでビルドしてテストする

関数をデプロイする前にローカルでテストするには、Functions Framework をローカルにインストールしてから、関数を実行する必要があります。

  1. helloworld ディレクトリから次のコマンドを実行して、ローカルマシンに Functions Framework をインストールします。

    npm install @google-cloud/functions-framework
    
  2. 関数をローカルで実行するには、helloworld ディレクトリから次のコマンドを実行します。

    npx @google-cloud/functions-framework --target=helloGET
    
  3. ブラウザで http://localhost:8080 にアクセスするか、別のウィンドウから curl localhost:8080 を実行して、関数をテストします。

    詳細については、ローカル関数にリクエストを送信するをご覧ください。

関数から「Hello World!」というメッセージが返されます。

関数をデプロイする

関数をデプロイするには、helloworld ディレクトリにある gcloud functions deploy コマンドを実行します。

gcloud functions deploy hello-node-function \
  --gen2 \
  --runtime=nodejs20 \
  --region=REGION \
  --source=. \
  --entry-point=helloGET \
  --trigger-http \
  --allow-unauthenticated

REGION は、関数をデプロイする Google Cloud リージョンの名前(例: us-west1)に置き換えます。

これにより、選択したリージョンの nodejs20 ランタイムでサンプル関数がデプロイされます。

オプションの --allow-unauthenticated フラグを使用すると、認証なしで関数にアクセスできます。

デプロイした関数をテストする

  1. 関数がデプロイされたら、gcloud functions deploy コマンドの出力の uri プロパティをメモするか、次のコマンドを使用して取得します。

      gcloud functions describe hello-node-function \
        --region=REGION
    

    REGION は、関数をデプロイした Google Cloud リージョンの名前(例: us-west1)に置き換えます。

  2. ブラウザまたは次の curl コマンドを使用して、この URL にアクセスします。

    curl FUNCTION_URL
    

    FUNCTION_URL は、先ほど取得した uri プロパティに置き換えます。

    この関数は、「Hello World!」メッセージを返します。

関数のログを表示する

コマンドライン ツールを使用してログを表示する

関数のログは、Cloud Logging UI または Google Cloud CLI で確認できます。

gcloud CLI を使用して関数のログを表示するには、gcloud functions logs read コマンドを使用します。

    gcloud functions logs read \
      --gen2 \
      --region=REGION \
      --limit=10 \
      hello-node-function

REGION は、関数をデプロイした Google Cloud リージョンの名前(例: us-west1)に置き換えます。

出力は次のようになります。

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:42:24.956
LOG:

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:42:01.692
LOG:

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:31:47.711
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello--node--function-1" on port 8080.

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:31:46.542
LOG:

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:31:27.390
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello--node--function-1" on port 8080.

ロギング ダッシュボードを使用してログを表示する

ロギング ダッシュボードで関数のログを表示するには、Cloud Functions の概要ページを開き、リストから関数の名前をクリックして、ログタブをクリックします。