以下の手順は下記を参考にしました。簡単でした。10分程度で出来ると思います。
API on Google App Engine with Martini and Go
GAE SDKのインストール
まず下記のリンクから「go_appengine_sdk_darwin_amd64-1.9.10.zip」をダウンロードし任意のディレクトリに解凍します。$HOME直下が良いと思います。
Download the Google App Engine SDK
vi ~/.bash_profile
をして、下記を末尾に追記します。
export PATH=”$HOME/go_appengine:$PATH”
viを保存する時は、Escを押してから:wqでOKです。保存したら読み直しておきます。
source ~/.bash_profile
次のコマンドでSDKが有効になってるか確認します。
goapp version
サンプルの実装(net/http)
下記からサンプルのソースコードをダウンロードします。
mkdir gae_go
cd gae_go
mkdir myapp
myappフォルダの中にダウンロードしたソースコード(hello.go, app.yaml)をコピーします。そしてhello.goのあるフォルダの中で下記のコマンドで実行します。
goapp serve
実行すると下記のURLで確認できます。
サンプルの実装(Martini)
myappをコピーします。そしてアプリケーションの名前を変えます。
cd ..
cp -R myapp api
vi api/app.yaml
application: myapp の箇所を application: api に変えて保存します。次にhello.goを下記のように書き換えます。
package hello
import (
"net/http"
"github.com/go-martini/martini"
)
func init() {
m := martini.Classic()
m.Get("/", func() string {
return "Hello world!"
})
http.Handle("/", m)
}
次にMartiniをインストールします。
goapp get github.com/go-martini/martini
そして、動作を確認します。
cd api
goapp serve
同じく実行すると下記のURLで確認できます。
GAEにデプロイする
下記でアプリを登録する
Project Name: Playing Cards API
Project ID: playing-cards-api-<xxxxx>
app.yamlのapplicationを上記で入力したplaying-cards-api-に変更する。
vi app.yaml
そしてデプロイする。
cd ..
goapp deploy api
すると下記のようにコンソールが走る。途中でGoogleアカウントの認証が求められる。
$ goapp deploy api
06:38 PM Application: playing-cards-api-timanish; version: 1
06:38 PM Host: appengine.google.com
06:38 PM
Starting update of app: playing-cards-api-timanish, version: 1
06:38 PM Getting current resource limits.
Email: hoge@example.com
Password for hoge@example.com:
06:39 PM Scanning files on local disk.
06:39 PM Cloning 11 application files.
06:39 PM Uploading 2 files and blobs.
06:40 PM Uploaded 2 files and blobs
06:40 PM Compilation starting.
06:40 PM Compilation: 10 files left.
06:40 PM Compilation completed.
06:40 PM Starting deployment.
06:40 PM Checking if deployment succeeded.
06:40 PM Deployment successful.
06:40 PM Checking if updated app version is serving.
06:40 PM Completed update of app: playing-cards-api-timanish, version: 1
下記のURLで動作を確認できる。簡単だった。
http://playing-cards-api-timanish.appspot.com/
通常のコードとGAE用のコード
ちなみに昨日投稿したコードと比べると下記のようになる。下記はローカルで動作するMartiniのコード。
package main
import "github.com/go-martini/martini"
func main() {
m := martini.Classic()
m.Get("/", func() string {
return "Hello world!"
})
m.Run()
}
これはgo run server.goという形で実行した。
次にappengine用のコード。
package hello
import (
"net/http"
"github.com/go-martini/martini"
)
func init() {
m := martini.Classic()
m.Get("/", func() string {
return "Hello world!"
})
http.Handle("/", m)
}
これはgoapp serveという形で実行する。m.Run()がhttp.Handle("/", m)になっている。