Node.js クライアント ライブラリの使用

このドキュメントでは、Compute Engine の Google Cloud Platform Node.js クライアント ライブラリを使用して、リクエストを承認する方法と Compute Engine 仮想マシン インスタンスの一覧を取得する方法について説明します。また、gcloud-node と google-api-nodejs-client の各ライブラリを使用して、仮想マシン インスタンスの内部と外部の両方から Compute Engine リソースにアクセスするサンプルも示します。このドキュメントでは、仮想マシン インスタンスの内部でアプリケーションを作成、実行する方法については説明していません。

他の Google クライアント ライブラリやサードパーティのオープンソース ライブラリを含む使用可能なすべてのクライアント ライブラリについては、クライアント ライブラリのページをご覧ください。

前提条件

最初に Node.js 開発用に環境を準備します。

Node.js 設定ガイドに移動

Cloud プロジェクト

Google Cloud Console でプロジェクトを作成し、課金を有効化します。このプロジェクトには、すべてのリソースが単一の名前空間に基づいて含まれます。また、課金は、プロジェクトでインスタンスを作成するために必要となります。

Cloud SDK

Cloud SDK には、Google Cloud Platform でのリソースの作成や管理を容易にするツールとライブラリが含まれています。お使いのプラットフォーム用の SDK を入手する方法については、Cloud SDK のインストール手順をご覧ください。

SDK のインストール後、デフォルト プロジェクトを認証して設定します。

    $ gcloud init
    

Node.js 用の Google Cloud クライアント ライブラリを使う

@google-cloud/compute ライブラリは、Google Cloud サービスにアクセスして操作するための、推奨される慣用的な方法です。可能な限り、Google API クライアント ライブラリではなく、Google Cloud クライアント ライブラリを使用してください。Compute Engine API の Google Cloud クライアント ライブラリをインストールするには、次のコマンドを実行します。

    $ npm install --save @google-cloud/compute
    

この演習の目的は、リクエストを承認する方法、および Google Cloud Node.js クライアント ライブラリで基本的な操作タスクを実行する方法を説明することです。

リクエストの承認

このサンプルでは、OAuth 2.0 認証を使用します。OAuth 2.0 を使用してリクエストを承認する方法は多数ありますが、この例では、アプリケーションのデフォルト認証情報を使用します。この方法では、gcloud ツールから認証情報を再利用できます。前提条件セクションで、このツールをインストールして承認しておく必要があります。

// By default, the client will authenticate using the service account file
    // specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use
    // the project specified by the GCLOUD_PROJECT environment variable. See
    // https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application
    const Compute = require('@google-cloud/compute');

API を初期化する

リクエストを行う前に、まず Compute Engine サービスのインスタンスを初期化する必要があります。

// Creates a client
    const compute = new Compute();

インスタンスの一覧取得

承認されたインスタンスがあるので、クライアントを使用して Compute Engine API を呼び出すことが可能です。

プロジェクト内のインスタンスの一覧を取得するには、compute.getVMs() を呼び出します。


    async function getVmsExample() {
      // In this example we only want one VM per page
      const options = {
        maxResults: 1,
      };
      const vms = await compute.getVMs(options);
      return vms;
    }

サンプル全体を次に示します。

'use strict';

    // By default, the client will authenticate using the service account file
    // specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use
    // the project specified by the GCLOUD_PROJECT environment variable. See
    // https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application
    const Compute = require('@google-cloud/compute');

    // Creates a client
    const compute = new Compute();

    async function getVmsExample() {
      // In this example we only want one VM per page
      const options = {
        maxResults: 1,
      };
      const vms = await compute.getVMs(options);
      return vms;
    }

Node.js 用の Google API クライアント ライブラリを使う

google-api-python-client ライブラリには、Google API にアクセスするためのコア Node.js ライブラリが含まれており、OAuth 2.0 クライアント ライブラリも含まれています。このライブラリは Google REST API の低レベルラッパーであり、より慣用的な方法で Google Cloud Platform API にアクセスするには gcloud-node ライブラリを使用します。一般的なインストールは、次のように簡単なコマンドです。

    $ npm install --save googleapis
    

ここでは、Google API Node.js クライアント ライブラリの使用方法として、リクエストを承認する方法と基本的な運用タスクを実行する方法を示します。

リクエストの承認

このサンプルでは、OAuth 2.0 認証を使用します。OAuth 2.0 を使用してリクエストを承認する方法は多数ありますが、この例では、アプリケーションのデフォルト認証情報を使用します。この方法では、gcloud ツールから認証情報を再利用できます。前提条件セクションで、このツールをインストールして承認しておく必要があります。

const authClient = await google.auth.getClient({
      scopes: [
        'https://www.googleapis.com/auth/cloud-platform',
        'https://www.googleapis.com/auth/compute',
        'https://www.googleapis.com/auth/compute.readonly',
      ],
    });

API を初期化する

リクエストを行う前に、まず Compute Engine サービスのインスタンスを初期化する必要があります。

const {google} = require('googleapis');
    const compute = google.compute('v1');

インスタンスの一覧取得

承認されたインスタンスがあるので、クライアントを使用して Compute Engine API を呼び出すことが可能です。

プロジェクト内のインスタンスの一覧を取得するには、compute.getVMs() を呼び出します。

const projectId = await google.auth.getProjectId();
    const result = await compute.instances.aggregatedList({
      auth: authClient,
      project: projectId,
    });
    const vms = result.data;
    console.log('VMs:', vms);

サンプル全体を次に示します。

const {google} = require('googleapis');
    const compute = google.compute('v1');

    async function listVMs() {
      const authClient = await google.auth.getClient({
        scopes: [
          'https://www.googleapis.com/auth/cloud-platform',
          'https://www.googleapis.com/auth/compute',
          'https://www.googleapis.com/auth/compute.readonly',
        ],
      });

      const projectId = await google.auth.getProjectId();
      const result = await compute.instances.aggregatedList({
        auth: authClient,
        project: projectId,
      });
      const vms = result.data;
      console.log('VMs:', vms);
    }