Go言語でJSONを返すAPIサーバーを書き、Google App EngineのStandard Environmentで運用するまでの最低限の流れのまとめ。
(他のサービス編もあるよ): Heroku版 / Arukas版
前段階
Golangのインストール
macOSの場合はbrew
でインストールするのが楽。
brew update
brew install go
Google App Engine(GCP SDK)を使う場合、Go 1.8以降を使っていても$GOPATH
を設定する必要がある。(参考: https://cloud.google.com/appengine/docs/standard/go/building-app/creating-your-application)
echo $GOPATH
で$GOPATH
が設定されていることを確認する。必要な場合は~/.bash_profile
などで$GOPATH
を設定する。
export GOPATH=$HOME/go/
Google Cloud Platform SDKのインストール
最新のGCP SDKをインストールする。
GCP SDKはyum
やapt
でインストール/管理しないことが推奨されている。
App Engine extension for Goのインストール
gcloud components install app-engine-go
Go言語用App Engineコンポーネントをインストールする
gcloud用のGoogleアカウント認証
gcloud auth login
```
でCLI(`gcloud`)からプロジェクトのデプロイなどができるように、ログインしておく。
# GCPプロジェクトの作成
[Google Cloud Console](https://console.cloud.google.com/?hl=ja)で新しいプロジェクトを作成する。
# ベース部分の実装
## ローカル作業ディレクトリの作成
```
mkdir myapp
cd myapp
```
## Google App Engine用App設定ファイル(app.yaml)の作成
```
runtime: go
api_version: go1
handlers:
# All URLs are handled by the Go application script
- url: /.*
script: _go_app
```
## main.goの作成
```golang:main.go
package main
import (
"net/http"
"encoding/json"
"google.golang.org/appengine"
)
type Response struct {
Status string `json:"status"`
Message string `json:"message"`
}
func main() {
http.HandleFunc("/", handle)
appengine.Main()
}
func handle(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(Response{Status: "ok", Message: "Hello world."})
}
```
JSONでレスポンスを返すシンプルなHTTPサーバー
## ローカルで動作確認
```
dev_appserver.py app.yaml
```
http://localhost:8080/ にローカルサーバーが立ち上がり、動作を確認できる。ソースコード(app.yaml, main.go)を書き換えると、自動的にリビルドが走る。
### dev_appserver.pyが見つからない場合
`brew`などでGoogle Cloud SDKをインストールした場合はPATHの設定の問題で`dev_appserver.py`をみつけられないことがある。その場合はSDKのインストールパスの下にあるbinをPATHに追加する。
`brew cask`でインストールした場合の例
```
export PATH="/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin:$PATH"
```
### appengine用のライブラリが足りない旨のエラーが出る場合
```
go get "google.golang.org/appengine"
```
# サーバーにデプロイ
```
gcloud app deploy --project myapp
```
`project`引数をつけて、Google Cloud Platform上で作成したプロジェクトのidを指定する。GCP上にプロジェクトが一つしかない場合は、省略しても良いがつけておいたほうが安全。
# 動作確認
```
gcloud app browse --project myapp
```
ブラウザが起動し、デプロイされたコードの動きを確認できる。
# 参考
https://cloud.google.com/appengine/docs/standard/go/building-app/creating-your-application