iPhoneで Grafanaの グラフを 参照できる アプリ Grafanizer 作ってます。 詳しくは こちらへ

このページは GolangアプリをGitLabCI経由でAppEngineに公開する シリーズの一部です。
全体の目次は こちら でどうぞ。

環境構築

Golang 製のプログラムをデプロイする前に、AppEngine , LocalPC, GitLab で環境を整える。

GoogleCloudConsoleにプロジェクトを作成

Google Cloud Console にて新しいプロジェクトを作成し、 project_id を控えておき Cloud ShellAppEngine アプリケーションを作成する。

natural-apricot-157505:~$ gcloud beta app create
You are creating an app for project [natural-apricot-157505].
WARNING: Creating an app for a project is irreversible.
Please choose a region for your application. After choosing a region,
you cannot change it. Which region would you like to choose?
 [1] us-central    (supports standard and flexible)
 [2] europe-west   (supports standard)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel
Please enter your numeric choice:  4
Creating App Engine application in project [natural-apricot-157505] and region [asia-northeast1]....done.                        
Success! The app is now created. Please use `gcloud app deploy` to deploy your first app.

今だったら日本の asia-northeast1 が選べる。

Google東京リージョン

リポジトリの準備

適当な場所にリポジトリとなるフォルダを作成して 下記内容で app.yaml として保存する。

module: default
version: 1
runtime: go
api_version: go1

handlers:
  - url: /.*
    script: _go_app

内容は AppEngine 用アプリケーションの設定ファイルとなっていて、 Golang のWAFでルーティングさせる前に AppEngine ルーティングする設定を行ってる。

サンプルによっては project_id を必須にしているものもあるが、後からコマンドのオプションで指定するので必要なし。

最低限のGolangソース準備

Hello World を表示させるだけの最低限の main.go はこんな感じ。 普通の Golang ソースにある main 関数は不要で AppEngine が自動的に実行してくれる。

package main

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "%s", "Hello World")
}

SDKの準備

ここ から App Engine SDK ダウンロードして適当な場所にコピーする(素直に c:\go_appengine にしておいたほうが楽かと)。

コピーした後はRefreshTokeを取得するために、作成したリポジトリで下記コマンドを打ち込む。

> c:\go_appengine\goapp.bat deploy -application long-advice-XXXXXX
> cat %HOME%\.appcfg_oauth2_tokens

ブラウザで認証が済むと作成された %HOME%\.appcfg_oauth2_tokens が開くので、 refresh_token を控えておく。

GoogleCloudSDKについては必要なし。