LoginSignup
70
62

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で新しいプロジェクトを作成する。

ベース部分の実装

ローカル作業ディレクトリの作成

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の作成

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

ブラウザが起動し、デプロイされたコードの動きを確認できる。

参考

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