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


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

目標

  • Cloud Shell を使用して、Hello World サンプルアプリをダウンロードしてデプロイします。
  • Cloud Build を使用して 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 and Cloud Build API を有効にします。

    API を有効にする

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

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

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

  7. Compute Engine and Cloud Build 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 でアプリを実行する

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

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

    ウェブブラウザに「Hello, World!」と表示されます。

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

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

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

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

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

Cloud Build を使用してアプリをビルドする

Cloud Build を使用すると、アプリをビルドして tar ファイルに圧縮し、Cloud Storage バケットにこのファイルをアップロードできます。バケットは、Cloud Storage でデータを格納する基本的なコンテナです。

  1. ターミナル ウィンドウで Cloud Storage バケットを作成します。ここで、YOUR_BUCKET_NAME はバケットの名前を表します。

    gsutil mb gs://YOUR_BUCKET_NAME
    

    注: Cloud Storage バケットには任意の名前を付けることができます。プロジェクト ID と同じ名前をバケットに付けることをおすすめします。ただし、バケット名は Google Cloud 全体で一意でなければならないため、プロジェクト ID をバケット名として使用できないことがあります。

  2. Cloud Build プロセスを開始します。

    gcloud builds submit --substitutions=_DEPLOY_DIR=gs://YOUR_BUCKET_NAME,_DEPLOY_FILENAME=app.tar.gz
    

    gcloud builds submit コマンドは、--substitutions を使用して、作成された tar ファイルのアップロード先を構成します。その後、tar ファイルが Compute Engine インスタンスにダウンロードされます。

    Cloud Build は、YAML 構成ファイルを使用して、ビルドに必要な手順を定義します。

    steps:
      # Print the Go version being used.
      - name: 'mirror.gcr.io/library/golang'
        args: ['go', 'version']
      # Make a deploy directory we'll tar after building the app.
      - name: 'debian'
        args: ['mkdir', '-p', 'deploy/etc/systemd/system/', 'deploy/usr/bin']
      # Build the app.
      - name: 'mirror.gcr.io/library/golang'
        env: [
          'GO111MODULE=on',
          'GOPROXY=https://proxy.golang.org,direct',
          'GOOS=linux',
          'GOARCH=amd64'
        ]
        args: ['go', 'build', '-o', 'deploy/usr/bin/app', '.']
      # Copy the systemd service file into the deploy directory.
      - name: 'debian'
        args: ['cp', 'my-app.service', 'deploy/etc/systemd/system/']
      # Compress the deploy directory.
      - name: 'debian'
        args: ['tar', '-czf', '${_DEPLOY_FILENAME}', '-C', './deploy', '.']
    # Upload the tarball to Cloud Storage.
    artifacts:
      objects:
        location: '${_DEPLOY_DIR}'
        paths: ['${_DEPLOY_FILENAME}']

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

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

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

set -ex

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" --output google-fluentd-install.sh
checksum=$(sha256sum google-fluentd-install.sh | awk '{print $1;}')
if [ "$checksum" != "ec78e9067f45f6653a6749cf922dbc9d79f80027d098c90da02f71532b5cc967" ]; then
    echo "Checksum does not match"
    exit 1
fi
chmod +x google-fluentd-install.sh && ./google-fluentd-install.sh
service google-fluentd restart &

APP_LOCATION=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/app-location" -H "Metadata-Flavor: Google")
gsutil cp "$APP_LOCATION" app.tar.gz
tar -xzf app.tar.gz

# Start the service included in app.tar.gz.
service my-app start

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

  • Cloud Logging エージェントをインストールして、アプリログをモニタリングするように構成します。

  • デプロイ用の tar ファイルをダウンロードして抽出します。

  • systemd サービスを起動して、アプリを実行します。

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

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

    Linux / macOS

    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=startup-script.sh \
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" \
    --zone YOUR_ZONE \
    --tags http-server
    

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

    --metadata app-location フラグは、アプリがどこに tar ファイルをダウンロードするかを起動スクリプトに知らせます。

    Windows

    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=startup-script.sh ^
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" ^
    --zone YOUR_ZONE ^
    --tags http-server
    

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

    --metadata app-location フラグは、アプリがどこに tar ファイルをダウンロードするかを起動スクリプトに知らせます。

    これにより、新しいインスタンスの作成と、Google Cloud サービスへのアクセスの許可が行われ、起動スクリプトが実行されます。インスタンス名は 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 アドレスに置き換えます。

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

インスタンスのモニタリングと管理には、Google Cloud コンソールを使用できます。

  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-80

次のステップ