goでWebサービス No.4

7 min読了の目安(約6300字TECH技術記事

今回は前回作ったものをGAEにデプロイしたいと思います。
今回のデータはgithubにあげています。必要なファイルはクローンしてお使いください。

注意

コマンドラインを使った操作が出て来ることがあります。cd, ls, mkdir, touchといった基本的なコマンドを知っていることを前提に進めさせていただきます。
環境の違いで操作や実行結果に差異が出てくる可能性があります。私の実行環境は以下になります。

MacBook Pro (Early 2015)
macOS Catalina ver.10.15.6
go version go1.14.7 darwin/amd64
エディタはVScode

GAE

GAEとは

GAE(Google App Engine)とは、Googleが提供するクラウドサービスGCP(Google Cloud Platform)の内のPaaSです。Goを実行するために必要なものが揃った状態になっているのでそのままデプロイするだけで実行可能です。

GoogleCloudSDKのインストール

参考:クイックスタートGoogle Cloud SDK のインストール
基本的に上のクイックスタートに書いてあることをすればできます。コマンドと実行結果を残しておくのを忘れたので私が経験した注意点だけ説明します。

  • 最初に書いてあるようにpythonを使用してインストールするのでpythonがインストールされていることを確認し、もしなければインストールしてください。

  • パッケージをダウンロードし展開するとgoogle-cloud-sdkというディレクトリができます。パッケージは任意の場所で実行できますが、homeディレクトリなど他の実行ファイルをおいているディレクトリと同じ場所に展開することをオススメします。

    :~/google-cloud-sdk
    $ ls -a
    ./                   bin/                 lib/
    ../                  completion.bash.inc  path.bash.inc
    .install/            completion.zsh.inc   path.fish.inc
    LICENSE              data/                path.zsh.inc
    README               deb/                 platform/
    RELEASE_NOTES        install.bat*         properties
    VERSION              install.sh*          rpm/
    
  • install.sh実行時やgcloud init時の(y/N)等の選択は特別な理由がなければ大文字の方(左だとN)を選択すれば問題ありません。途中ブラウザでの認証もあります。上の参考リンクに格OSでの細かいインストール方法も載っているので参考にしてください。

  • install.sh実行時にパスを通します。私の場合、.zshrcにパスを通されましたがいつもはbashを使っているので.bashrcに変更しました。

  • パスが通ればgcloudコマンドが使えるのでgcloud components install app-engine-goでGo専用のAppEngineをインストールしましょう。

App Engineを使ってデプロイ

参考:Google Cloud公式クイックスタート

コマンドラインで実行していきます。

  1. プロジェクトの作成
  2. appの作成
  3. 設定ファイルの作成
  4. デプロイ
  5. ブラウザで確認

という流れになります。

# 新しいプロジェクトの作成
:~/go/src/web_server_study/03static_file (form)
$ gcloud projects create go-study-20201009 --set-as-default
Create in progress for [https://cloudresourcemanager.googleapis.com/v1/projects/go-study-20201009].
Waiting for [operations/cp.8307227708514163670] to finish...done.                                                         
Enabling service [cloudapis.googleapis.com] on project [go-study-20201009]...
Operation "operations/acf.****************************" finished successfully.
Updated property [core/project] to [go-study-20201009].

# 作成したプロジェクトの確認
:~/go/src/web_server_study/03static_file (form)
$ gcloud projects describe go-study-20201009
createTime: '2020-10-09T04:16:26.262Z'
lifecycleState: ACTIVE
name: go-study-20201009
projectId: go-study-20201009
projectNumber: '************'

# appの作成
:~/go/src/web_server_study/03static_file (form)
$ gcloud app create --project=go-study-20201009
You are creating an app for project [go-study-20201009].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
<https://cloud.google.com/appengine/docs/locations>.
# 使用するサーバの場所を設定します。
Please choose the region where you want your App Engine application 
located:

 [1] asia-east2   
 [2] asia-northeast1
 [3] asia-northeast2
 [4] asia-northeast3
 [5] asia-south1  
 [6] asia-southeast2
 [7] australia-southeast1
 [8] europe-west  
 [9] europe-west2 
 [10] europe-west3 
 [11] europe-west6 
 [12] northamerica-northeast1
 [13] southamerica-east1
 [14] us-central   
 [15] us-east1     
 [16] us-east4     
 [17] us-west2     
 [18] us-west3     
 [19] us-west4     
 [20] cancel
Please enter your numeric choice:  1

Creating App Engine application in project [go-study-20201009] and region [asia-east2]....done.                           
Success! The app is now created. Please use `gcloud app deploy` to deploy your first app.

# 設定ファイルの作成
:~/go/src/web_server_study/03static_file (form)
$ touch app.yaml

作成した設定ファイルに以下のように記述しましょう。

# app.yaml
runtime: go114

ここではGoのバージョンを指定します。私は現在1.14.7を使用しているので上のようにしています。また今回はしていませんがモジュールごとのルーティングの設定などもできるようです。
ここまででディレクトリ構成は以下のようになります。

$ tree
.
├── app.yaml
├── assets
│   ├── img
│   │   └── biplane.png
│   ├── js
│   │   └── script.js
│   └── style
│       └── style.css
├── main.go
└── root
    ├── greeting.html
    └── index.html

デプロイしていきましょう。

# デプロイ(Cloud Build APIのインストールが必要)
:~/go/src/web_server_study/03static_file (form)
$ gcloud app deploy
ERROR: (gcloud.app.deploy) Error Response: [7] Access Not Configured. Cloud Build has not been used in project go-study-20201009 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudbuild.googleapis.com/overview?project=go-study-20201009 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
:~/go/src/web_server_study/03static_file (form)

$ gcloud app deploy
Services to deploy:

descriptor:      [/go/src/web_server_study/03static_file/app.yaml]
source:          [/go/src/web_server_study/03static_file]
target project:  [go-study-20201009]
target service:  [default]
target version:  [20201009t132629]
target url:      [https://go-study-20201009.df.r.appspot.com]


Do you want to continue (Y/n)?  Y

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 0 files to Google Cloud Storage                ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.                                                                                        
Setting traffic split for service [default]...done.                                                                       
Deployed service [default] to [https://go-study-20201009.df.r.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

# ブラウザで開く
:~/go/src/web_server_study/03static_file (form)
$ gcloud app browse
Opening [https://go-study-20201009.df.r.appspot.com] in a new tab in your default browser.

デプロイ時にCloud Build APIのインストールが必要になります。インストールしていない場合はエラーでリンクを渡してくるのでリンク先からインストールしデプロイしなおしてください。
注)1日のビルドタイムが120分を超えると料金が発生するので気をつけてください。

実行結果

実行結果は以下のようになります。
サイト