Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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をインストールする。

https://cloud.google.com/sdk/docs/

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

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

参考

https://cloud.google.com/appengine/docs/standard/go/building-app/creating-your-application

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした