おっさんのダベリ

IT系の技術的な話題が多いです

Google App Engine for Goの環境を作る

きっかけ

流行りに乗ってBot作りたい。というのが理由。 Herokuとかが多そうだけど、Goを使ってとなるとGoogle App Engine(GAE)でもいいんじゃないかと思ったので、勉強も兼ねて環境を作ってみる。

インストール

まずは、SDKを入れる。 Quick StartページからSDKをダウンロードして適当な場所に置きます。

今回は、HOMEの下に置きました。

~/go_appengine

どうもpython 2.7が必要らしいけど、もともと入っていたもので良さそう。 $PATHを通してこれで準備完了。

サンプルを起動

QuickStartページにサンプルの動かし方があるので、順番にやってみる。

リポジトリのclone

サンプルのリポジトリGitHubにあるので、てけとうな場所にcloneします。

$ cd てけとうな場所
$ git clone -b part1-helloworld https://github.com/GoogleCloudPlatform/appengine-guestbook-go.git helloworld
$ cd helloworld

いまは、helloworldいいるのでこの場所で先ほどインストールしたSDKの下のgoappコマンドを以下のように呼び出します。

goapp serve .

初回起動時だけCould not read search indexesと言われますが、普通に起動します。

コンソールにも表示されていますが、3つのサーバが公開されています。

起動しているサービスを終了させるには、Ctrl-Cを押下する必要があります。

Adminサーバでは、GAEが提供するDataStoreやmemcacheなどの内容を確認したりできるため、デバッグなどで役に立ちそうです。

App Engineにデプロイする

まずは、Cloud Platform Consoleにログインし、プロジェクトを作成します。 作成したら、Project IDを控えておいて、次のようにターミナルで実行します。

$ appcfg.py -A <ProjectID> -V v1 update . 

これを実行するとデフォルトブラウザが開いて、Googleアカウントの認証処理が走ります。 ここで利用するアカウントの選択を行い、ターミナルに戻るとゴロゴロと処理が走っていることが確認できます。

Authentication successful.
01:35 AM Scanning files on local disk.
01:35 AM Cloning 4 application files.
01:35 AM Compilation starting.
01:35 AM Compilation: 1 files left.
01:35 AM Compilation completed.
01:35 AM Starting deployment.
01:35 AM Checking if deployment succeeded.
01:35 AM Deployment successful.
01:35 AM Checking if updated app version is serving.
01:35 AM Completed update of app: <ProjectID>, version: v1

上記のようにターミナルには表示されました。無事にデプロイされたようです。 このプロジェクトのURLは、次のようになります。

http://<ProjectID>.appspot.com

さらに、httpsでもアクセスできますので、セキュアなAPIも簡単に用意できますね。

プロジェクトの削除

さくさくドキュメントを読み進めていくと、「Clean upのやりかた」とか書いてますね。 リソースの状況によってはお金がかかるのを避けるために不要なプロジェクトは消しましょう。

Cloud Platform Consoleから「すべてのプロジェクトの管理」ページに遷移し、削除したいプロジェクトにチェックを入れ、右上のゴミ箱ボタンをクリックします。 これでサービスはシャットダウンされますが、すぐに削除はされないようで、しばらくは復元させることができるようです。 うっかりさんには安心ですね。

どこまで遊び倒せるか

App Engineの料金ページを見ると、課金を有効にしないかぎりはお金は掛からないようです。 ただし、上限を超えた場合には503エラーが発生します。

また、課金を有効にした場合でも一日あたりの予算を設定することが出来ます。小さなサービスで開始し、大きく成長させる場合や、ちょっとお試しの場合にも使いやすいですね。

ということで、ドキュメントの読み込みから始めるかな。