70
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goで書いたAPIサーバーをGoogle App Engineへデプロイするまでの最低限の手順

Last updated at Posted at 2018-04-15

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はyumaptでインストール/管理しないことが推奨されている。

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
70
62
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?