Skip to content

Latest commit

 

History

History
376 lines (267 loc) · 18 KB

1-vm.md

File metadata and controls

376 lines (267 loc) · 18 KB

1. 仮想マシン(VM)ベースアーキテクチャによるREST API実行環境の構築

前半パートは,以下の流れで進行します.

  1. Google Skills Boostを用いたGoogle Cloud環境のセットアップ
  2. サンプルプログラムの実行
  3. より実践的なプログラムの実行
  4. Next to do...

Google Skills Boostを用いたGoogle Cloud環境のセットアップ

まずは,Google Cloud環境を準備します.
今回はGoogle Cloud Skills Boostというオンラインラーニングシステムを利用して進行します.

ChromeのインストールとSkills Boostへのログイン

  1. Google Cloud Skills Boost の受講には Chrome を使用することが推奨されています.
    こちら からダウンロードし,インストールしてください.

  2. ChromeでGoogle Cloud Skills Boost にアクセスし,右上のログインをクリックします.

    login account2

  3. 続いてGoogle アカウントでログインをクリックすると,Google Cloud Skills Boostにログインすることができました.

    login account3

Skills Boost ラボの開始

Google Cloud Skills Boostの利用にあたって,いくつか注意が必要な箇所があります.

  • Creditを求められる(=有料の)ラボもあります.(今回は無料のラボを使用します.)
  • 初回はNo Costのラボでも,2回目以降にはCreditが必要になります.
  • ラボには制限時間が設けられています.制限時間内に終了できるようにしましょう.

それでは,ラボを開始しましょう.
今回は以下のコースをベースとしつつ,いくつかの細かな変更点を加えました.
Skills Boostの画面にもガイドがありますが,そちらではなく本資料を見ながら進行してくださいね.

  1. Compute Engine を使用した Google Cloud でのウェブアプリのホスティング にアクセスします.

Caution

No Costと表示されていることを確認してください.

check no cost

  1. ラボを開始をクリックします.

    ラボを開始すると,ラボの終了まで使用できる一時的なGoogleアカウントが発行されます.
    以後ログインを求められた場合は,すべてこのGoogleアカウントでログインしてください.
    個人のGoogleアカウントでログインしてしまうと,意図せず課金されてしまうことがあります.

    Start Lab

  2. Open Google Cloud console右クリックし,シークレット ウィンドウで開くを選択します.

Note

普段使用しているGoogleアカウントへの意図しない課金が発生することを防ぐために,
シークレットウィンドウの利用が推奨されています.

  1. ログイン画面が表示されたら,先ほど発行されたUsernameをコピー&ペーストして次へをクリックします.

    Username

  2. 同様にPasswordをコピー&ペーストして次へをクリックします.

    Password

  3. 確認画面が表示されます.内容を確認して理解しましたをクリックします.

    I understand

  4. 利用規約が表示されます.内容を確認して1つ目のチェックボックスにチェックをつけてAGREE AND CONTINUEをクリックします.

    I understand

  5. Google Cloud コンソールのダッシュボードにアクセスすることができました.

    Cloud overview

Tip

言語は右上の三点メニューのPreferencesまたは設定から変更することができます. Preferences

Cloud Shell の有効化

Google Cloud Platformの各機能は,今見えているWeb上のコンソール画面(GUI)とCloud Shellを用いたCUIの両方で扱うことができます.
今日は,適宜コンソールでのGUI操作とCloud ShellによるCUI操作を使い分けながら進行します.

  1. コンソール画面上部にあるCloud Shell をアクティブにするアイコンをクリックします.

  2. 画面下部にCloud Shellが現れ,ポップアップが表示されるので続行をクリックします.

    Preferences01

    接続が完了した時点で,プロジェクトに各自のPROJECT_IDが設定されます.黄色の文字列で出力されているのがPROJECT_IDです.

    Project ID

    PROJECT_IDは後ほど使用しますので,メモ帳などに保存しておいてください.

Cloud Shell の使用

次のコマンドを使用すると,有効なアカウント名を一覧で表示します.

gcloud auth list

ポップアップが表示されるので承認をクリックします.

Preferences02

次のコマンドを使用すると,プロジェクトIDを一覧で表示します.

gcloud config list project

gcloudはGoogle Cloudのコマンドラインツールです.

サンプルプログラムの実行

ここからは,VM上で動作させるアプリケーションを作成します.
ベースとなるプログラムファイルを提供しますので,指示のとおりに改変していきましょう.

なお,本コースはGoogle Cloudが提供する Compute Engine での Go のスタートガイド をベースに作成しています.

準備

  1. これから扱うCompute Engine APIとCloud Build APIを有効化します.

    1. こちら のリンクを右クリックし,シークレットウィンドウで開きます.

    2. プロジェクト名が先ほどメモしたPROJECT_IDと同じであることを確認して次へをクリックします.

      API02

    3. 有効にするをクリックします.

      API02

  2. Gitリポジトリで提供されるサンプルファイルを取得します.

    1. こちら のリンクを右クリックし,シークレットウィンドウで開きます.

    2. 確認をクリックします.

      Git Clone

  3. 次のコマンドをCloud Shellで実行し,新しいGoogle Cloudプロジェクトを設定します.

    gcloud config set project PROJECT_ID

Important

PROJECT_IDは,ご自身のPROJECT_IDに置き換えてください.

  1. 提供されているファイルには不具合があるため,これを修正します.
    まずはLogging機能をバイパスするため,startup-script.shファイルを編集します.

    1. Cloud Shell Editorの画面でEXPLORERを開きます.

    2. cloudshell_open/golang-samples/getting-started/gce/startup-script.shにアクセスします.

      Edit startup-script.sh

    3. Ctrl+Aキーを同時に押してテキストを全選択し,Deleteキーで全削除します.

    4. こちら にアクセスし,コードをコピーして先ほど内容を全削除したstartup-script.shに貼り付けます.

    5. 変更内容は自動的に保存されます.

  2. 続いてビルド環境と実行環境のバージョンを合わせるため,cloudbuild.yamlファイルを編集します.

    1. 先ほどと同様にCloud Shell Editorの画面でEXPLORERを開きます.

    2. cloudshell_open/golang-samples/getting-started/gce/cloudbuild.yamlにアクセスします.

      Edit cloudbuild.yaml

    3. Ctrl+Aキーを同時に押してテキストを全選択し,Deleteキーで全削除します.

    4. こちら にアクセスし,コードをコピーして先ほど内容を全削除したcloudbuild.yamlに貼り付けます.

    5. 変更内容は自動的に保存されます.

ここまでで,サンプルプログラムをビルドするための準備が完了しました.

ビルド

アプリケーションを動作させるために,Cloud Buildを用いてビルド(≒コンパイル)を行います.

  1. Cloud Shellで次のコマンドを実行し,Cloud Buildの動作に必要なCloud Storageバケットを作成します.
    YOUR_BUCKET_NAME はバケット名を表します.
    gsutil mb gs://YOUR_BUCKET_NAME

Important

YOUR_BUCKET_NAMEは,ご自身で好きなバケット名をつけて置き換えてください.

  • なお,バケット名には条件があります.
  1. 次のコマンドを実行してビルドを開始します.
    gcloud builds submit --substitutions=_DEPLOY_DIR=gs://YOUR_BUCKET_NAME,_DEPLOY_FILENAME=app.tar.gz

Important

YOUR_BUCKET_NAMEはご自身が定めたバケット名に置き換えてください.

VMの作成

ここでは,サンプルプログラムのバイナリデータ(ビルド結果)を専用のVMにインストールしてその動作を確認します.

  1. まずは次のコマンドを実行してVMを作成します.
    zoneは目的などに応じて任意に指定することができます.今回はus-central1-aを使用します.
    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 us-central1-a \
    --tags http-server

Important

YOUR_BUCKET_NAMEはご自身が定めたバケット名に置き換えてください.

  1. 次のコマンドを実行して,VMへの特定のネットワーク通信を許可します.

    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"
  2. 次のコマンドを実行してVMの外部IPアドレスを取得します.

    gcloud compute instances list

    EXTERNAL_IP: xxx.xxx.xxx.xxxの形式で出力されたIPアドレスをメモしてください.

    External_IP01

  3. ブラウザで次のURLにアクセスします.

    http://YOUR_INSTANCE_IP
    

Important

YOUR_INSTANCE_IPは,先ほど確認した外部IPアドレスに置き換えてください.

  1. Hello, World!」と表示されていれば正しくVMが起動しています.

    VM Hello World!

リソースを削除

サンプルプログラムの動作を確認できたので,次の手順に備えてここまでに作成したリソースを削除します.

  1. インスタンスの削除
    1. 次のコマンドを実行して,インスタンスを削除します.

      gcloud compute instances delete my-app-instance --zone=us-central1-a --delete-disks=all
    2. 削除の際に確認が求められるのでyを入力しEnterキーで確定します.

      Delete Resource

Important

削除するインスタンスのzoneを指定する必要があります.今回はus-central1-aです.

  1. ファイアウォールルールの削除

    1. 次のコマンドを実行して,ファイアウォールルールを削除します.
      gcloud compute firewall-rules delete default-allow-http-80
    2. 削除の際に確認が求められるのでyを入力しEnterキーで確定します.

より実践的なプログラムの実行

ここまでで,アプリケーションファイルを準備し,ビルドし,VM上で動作させる方法を学ぶことができました.
続いてmain.goのプログラムを書き換え,顧客のデータを取得できるアプリを仮想マシン上で実現してみましょう.

  1. main.goファイルを書き換えます.

    1. Cloud Shell Editorの画面でEXPLORERを開きます.
    2. cloudshell_open/golang-samples/getting-started/gce/main.goにアクセスします. Edit main.go
    3. Ctrl+Aキーを同時に押してテキストを全選択し,Deleteキーで全削除します.
    4. こちら にアクセスし,コードをコピーして先ほど内容を全削除したmain.goに貼り付けます.
    5. 変更内容は自動的に保存されます.
  2. Cloud Shellで以下のコマンドを実行し,アプリのビルドに必要なライブラリをインストールします.

    go get github.com/gorilla/handlers
    go get github.com/gorilla/mux
  3. 先ほどと同様の手順で,ビルドを行います.

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

Important

YOUR_BUCKET_NAMEはご自身のバケット名に置き換えてください.

  1. VMを作成します.
    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 us-central1-a \
    --tags http-server

Important

YOUR_BUCKET_NAMEはご自身のバケット名に置き換えてください.

  1. 同様に,ファイアウォールルールを作成します.

    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"
  2. 以下のコマンドを実行して,インスタンスの外部IPアドレスを取得します.

    gcloud compute instances list

    EXTERNAL_IP: xxx.xxx.xxx.xxxの形式で出力されたIPアドレスをメモしてください.

    External_IP02

  3. ブラウザで次のURLにアクセスし,アプリが実行されていることを確認してください.

    http://YOUR_INSTANCE_IP/v1/customer/22530
    

Important

YOUR_INSTANCE_IPは,先ほど確認した外部IPアドレスに置き換えてください.

  1. 外部IPアドレスにアクセスし,「{"status": "success", "data": {"approved":585,"proposed":1602,"rejected":489}}」と表示されていれば正常に動作しています.

    URL末尾の22530は予め記録されている顧客のIDを示しています.
    この顧客IDをURLのパラメータとして指定することで,その顧客の取引履歴を取得できています.
    ここで,取引履歴が存在しないID(例:70156)や,そもそも存在しない顧客ID(例:12345)を入力するとどのような結果を得られるでしょうか.

Next to do...

Google Cloud Compute Engine を用いてVMを作成し,その上で自作のプログラムを動作させることができました.
VMの利用料金を払い続けることで,このままこのプログラムを使用することができます.

しかし,実はこのアーキテクチャにはいくつかの問題があります.

  1. アップデートや脆弱性対応など,アプリケーション以外の領域に対して継続的なメンテナンスが必要
    • 今回動かしているアプリケーションの他にも,Linuxでは多くのアプリケーションが動作しています.
      そのすべてに対応し続けなければなりません.
    • 脆弱性はいつ発見されるか分かりません.常に情報収集し,影響の大きさや影響が及ぶ可能性を迅速に判断する必要があります.
    • アップデートにはアプリケーションやVMの再起動が必要なものも多く,システムが使えない時間が発生します.
  2. 利用者やデータの増減に合わせて,都度対応が必要
    • 今後の需要を予測して,VMのスペックを上げ下げしたり,VMの数を調整したりという手間が発生します.
    • 予測に失敗すると必要以上のお金がかかったり,システムがダウンしてしまったりという問題に繋がります.
  3. ...

クラウドサービスでは,これらの問題を解決できる様々な「マネージドサービス」が提供されています.
これらのマネージドサービスを用いることで,いわゆる「サーバレス」な環境でアプリケーションを安全かつ快適に実行することができます.

実際に,Cloud Run と Firestore を用いて今回作成したアプリケーションを動作させてみましょう.

2. Cloud Run と Firestore を用いたサーバーレスREST API実行環境の構築 へ進む

目次に戻る