Compute Engine での Node.js のスタートガイド


このチュートリアルでは、Compute Engine を始める方法を説明します。チュートリアルに沿って、Node.js ウェブアプリの Hello World を Compute Engine にデプロイします。App Engine を初めて使用する場合は、App Engine スタンダード環境をご覧ください。

目標

  • Cloud Shell を使用して、Hello World サンプルアプリをダウンロードしてデプロイします。
  • Hello World サンプルアプリを単一の Compute Engine インスタンスにデプロイします。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

準備

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

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

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

  4. Compute Engine API を有効にします。

    API を有効にする

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

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

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

  7. Compute Engine API を有効にします。

    API を有効にする

  8. Google Cloud Console から、Cloud Shell でアプリを開きます。

    Cloud Shell に移動

    Cloud Shell を使用すると、ブラウザからコマンドラインで直接クラウド リソースにアクセスできます。

  9. リポジトリのクローン作成に同意する場合は、[Confirm] をクリックしてサンプルコードをダウンロードし、アプリ ディレクトリに変更します。

  10. Cloud Shell で、gcloud CLI を構成して新しい Google Cloud プロジェクトを使用します。
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID
    

Cloud Shell でアプリを実行する

前のセクションで [Cloud Shell に移動] をクリックした場合、Cloud Shell によって nodejs-getting-started リポジトリのクローンがインスタンスに作成されました。インスタンスが起動されると、作業ディレクトリは ~/cloudshell_open/nodejs-getting-started/gce になります。このディレクトリにない場合は、始める前にの手順をご覧ください。

  1. 依存関係をインストールします。

    npm install
    
  2. アプリを実行します。

    npm start
    
  3. Cloud Shell で、[ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。新しいウィンドウが開き、実行中のアプリが表示されます。

ローカル ウェブサーバーを停止するには、Ctrl+C キーを押します。

Cloud Source Repositories の設定

  1. Cloud Source Repositories API を有効にします。

    Cloud Source Repositories API を有効にします

  2. Google Cloud Console で、[Cloud Source Repositories] に移動します。

    Cloud Source Repositories に移動

  3. [リポジトリを追加] を選択します。

    [リポジトリを追加] を選択します。

  4. [新しいリポジトリを作成] を選択し、[続行] をクリックします。

  5. [リポジトリ名] フィールドに「new-repo」と入力します。

  6. [Project] フィールドに、このチュートリアルで作成または選択したプロジェクトのプロジェクト ID を入力し、[続行] をクリックします。

  7. [ローカル Git リポジトリにリポジトリのクローンを作成]を選択します。

  8. Cloud Shell でルートに戻り、[Google Cloud SDK] タブの手順に沿ってリポジトリのクローンを作成し、このタブを開いたままにします。

    指示に従って、ローカル Git リポジトリにリポジトリのクローンを作成します

  9. 以下の指示の最後の手順を完了する前に、Cloud Shell で新しいリポジトリにアプリをコピーします。

    cd new-repo
    cp ../cloudshell_open/nodejs-getting-started/gce/app.js app.js
    cp ../cloudshell_open/nodejs-getting-started/gce/package.json package.json
    
  10. [Google Cloud SDK] タブの残りの手順に従って、リポジトリの変更を commit します。ブラウザを更新してコードがリポジトリに追加されたことを確かめ、リポジトリ new-repo にコードが追加されていることを確認します。

単一インスタンスへのデプロイ

このセクションでは、Compute Engine 上でアプリの単一インスタンスを実行する手順を順を追って説明します。

単一インスタンスのデプロイメント。

Cloud Shell から、アプリを実行する単一の Compute Engine インスタンス仮想マシン(VM)にアプリをデプロイできます。

起動スクリプトを使用してインスタンスを初期化する

インスタンスにコードのダウンロードと実行を指示するための手段が必要です。インスタンスの起動時または再起動時に常に実行される起動スクリプトをインスタンスに設定できます。

Hello World サンプルアプリに含まれる起動スクリプトは次のとおりです。

set -v

# Talk to the metadata server to get the project id
PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")
REPOSITORY="new-repo"

# Install logging monitor. The monitor will automatically pick up logs sent to
# syslog.
curl -s "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" | bash
service google-fluentd restart &

# Install dependencies from apt
apt-get update
apt-get install -yq ca-certificates git build-essential supervisor

# Install nodejs
mkdir /opt/nodejs
curl https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.gz | tar xvzf - -C /opt/nodejs --strip-components=1
ln -s /opt/nodejs/bin/node /usr/bin/node
ln -s /opt/nodejs/bin/npm /usr/bin/npm

# Get the application source code from the Google Cloud Repository.
# git requires $HOME and it's not set during the startup script.
export HOME=/root
git config --global credential.helper gcloud.sh
git clone https://source.developers.google.com/p/${PROJECTID}/r/${REPOSITORY} /opt/app/new-repo

# Install app dependencies
cd /opt/app/new-repo
npm install

# Create a nodeapp user. The application will run as this user.
useradd -m -d /home/nodeapp nodeapp
chown -R nodeapp:nodeapp /opt/app

# Configure supervisor to run the node app.
cat >/etc/supervisor/conf.d/node-app.conf << EOF
[program:nodeapp]
directory=/opt/app/new-repo
command=npm start
autostart=true
autorestart=true
user=nodeapp
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production"
stdout_logfile=syslog
stderr_logfile=syslog
EOF

supervisorctl reread
supervisorctl update

# Application should now be running under supervisor

起動スクリプトによって次のタスクが実行されます。

  • Cloud Logging エージェントがインストールされます。このエージェントは syslog から自動的にログを収集します。

  • Supervisor をインストールして、アプリをデーモンとして実行します。

  • Cloud Source Repositories 内にあるアプリのソースコードのクローンを作成し、依存関係をインストールします。

  • アプリを実行するように Supervisor を構成します。アプリが予期せずに終了した場合や、管理者や他のプロセスにより強制終了された場合、Supervisor によりアプリを確実に再起動できます。また、Supervisor によりアプリの stdoutstderr が syslog に送信され、Logging エージェントによって収集されます。

Compute Engine インスタンスを作成して構成する

  1. Compute Engine インスタンスを作成します。

    Linux / macOS

    gcloud compute instances create my-app-instance \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --machine-type=g1-small \
        --scopes userinfo-email,cloud-platform \
        --metadata app-location=us-central1-f \
        --metadata-from-file startup-script=gce/startup-script.sh \
        --zone us-central1-f \
        --tags http-server
    

    Windows

    gcloud compute instances create my-app-instance ^
        --image-family=debian-9 ^
        --image-project=debian-cloud ^
        --machine-type=g1-small ^
        --scopes userinfo-email,cloud-platform ^
        --metadata-from-file startup-script=gce/startup-script.sh ^
        --zone us-central1-f ^
        --tags http-server
    

    ゾーンを開発用のゾーン(us-central1-a など)に置き換えます。リージョンとゾーンの詳細については、地域とリージョンをご覧ください。

    これにより、新しいインスタンスの作成と、Google Cloud サービスへのアクセスの許可が行われ、起動スクリプトが実行されます。インスタンス名は my-app-instance です。

  2. インスタンス作成の進行状況を確認します。

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    YOUR_ZONE をインスタンスをデプロイしたゾーンに置き換えます。

    起動スクリプトが完了すると、次のメッセージが表示されます。

    startup-script: INFO Finished running startup scripts.
    
  3. インスタンスへのトラフィックを許可するファイアウォール ルールを作成します。

    gcloud compute firewall-rules create default-allow-http-8080 \
        --allow tcp:8080 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 8080 access to http-server"
    

  4. インスタンスの外部 IP アドレスを取得します。

    gcloud compute instances list
    
  5. アプリが実行されていることを確認するには、ブラウザで次の URL を入力します。

    http://YOUR_INSTANCE_IP:8080
    

    YOUR_INSTANCE_IP をインスタンスの外部 IP アドレスに置き換えます。

インスタンスの管理とモニタリング

GCP Console を使用して、インスタンスのモニタリングと管理を行うことができます。

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 仮想マシン インスタンスのリストで、接続するインスタンスの行にある [SSH] をクリックします。
  3. Compute Engine リソースによって生成されたすべてのログを表示するには、[ログビューア] ページに移動します。[ログ エクスプローラ] に移動

    Cloud Logging は、各種の一般的なサービス(syslog など)からログを収集するように自動的に構成されます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

個々のリソースの削除

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-8080

次のステップ