Compute Engine での Java スタートガイド

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

目標

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

費用

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

始める前に

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. コンソールで、Cloud Shellでアプリを開きます。 Cloud de Confiance

    Cloud Shell に移動

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

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

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

Cloud Shell でアプリを実行する

  1. Cloud Shell でローカル ウェブサーバーを起動します。

    mvn -Plocal clean jetty:run-exploded -DprojectID=YOUR-PROJECT-ID
    
  2. Cloud Shell で、[ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。新しいウィンドウが開き、実行中のアプリが表示されます。

    Web ブラウザーに、ローカル PC から送られる Hello World テキストが表示されます。

  3. 次に進む準備ができたら、Cloud Shell で Control + C キーを押してローカル ウェブサーバーを停止します。

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

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

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

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

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

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

インスタンスの最初の起動時には、起動スクリプトが実行されます。

set -e
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")

echo "Project ID: ${PROJECTID}"

# Install dependencies from apt
apt-get install -yq openjdk-11-jdk git maven

mvn --version

# Jetty Setup
mkdir -p /opt/jetty/temp
mkdir -p /var/log/jetty

# Get Jetty
curl -L https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.13.v20181111/jetty-distribution-9.4.13.v20181111.tar.gz -o jetty9.tgz
tar xf jetty9.tgz  --strip-components=1 -C /opt/jetty

# Add a Jetty User
useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

cd /opt/jetty
# Add running as "jetty"
java -jar /opt/jetty/start.jar --add-to-startd=setuid
cd /

# Clone the source repository.
git clone https://github.com/GoogleCloudPlatform/getting-started-java
cd getting-started-java/gce

# Build the .war file and rename.
# very important - by renaming the war to root.war, it will run as the root servlet.
mvn clean package -q
mv target/getting-started-gce-1.0-SNAPSHOT.war /opt/jetty/webapps/root.war

# Make sure "jetty" owns everything.
chown --recursive jetty /opt/jetty

# Configure the default paths for the Jetty service
cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
echo "JETTY_HOME=/opt/jetty" > /etc/default/jetty
{
  echo "JETTY_BASE=/opt/jetty"
  echo "TMPDIR=/opt/jetty/temp"
  echo "JAVA_OPTIONS=-Djetty.http.port=80"
  echo "JETTY_LOGS=/var/log/jetty"
} >> /etc/default/jetty

# Reload daemon to pick up new service
systemctl daemon-reload

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh --also-install

service google-fluentd restart &

service jetty start
service jetty check

echo "Startup Complete"

起動スクリプトは次のタスクを実行します。

  • Java 11 をインストールし、それをデフォルトのバージョンにします。

  • Jetty をインストールし、設定します。

  • Java WAR ファイルを Cloud Storage バケットから Jetty の webapps にコピーし、名前を root.war に変更します。こうしてルート サーブレットにすることにより、URL で指定する必要がなくなります。

  • Cloud Logging エージェントをインストールして、アプリログをモニタリングするように構成します。つまり、このチュートリアルの前のステップで構成したロギングは、App Engine フレキシブル環境を使用している場合とまったく同じようにアップロードされます。

Compute Engine インスタンスの作成と構成

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

    gcloud compute instances create my-app-instance 
    --image-family=debian-10
    --image-project=debian-cloud
    --machine-type=g1-small
    --scopes userinfo-email,cloud-platform
    --metadata-from-file startup-script=gce/startup-script.sh
    --zone YOUR_ZONE
    --tags http-server
    YOUR_ZONEus-central1-a などの開発ゾーンに置き換えます。リージョンとゾーンの詳細については、 地域とリージョンをご覧ください。

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

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

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

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

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

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

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

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

    http://YOUR_INSTANCE_IP
    

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

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

コンソールを使用して、インスタンスのモニタリングと管理を行うことができます。 Cloud de Confiance

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

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

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

    [ログ エクスプローラ] に移動

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

クリーンアップ

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

プロジェクトを削除する

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

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

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

個々のリソースの削除

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

次のステップ