お手軽だけど…… GAE/Goで注意したい3つのポイント
こんにちは。クラウドソリューショングループのwatanabe.tです。
Google App Engine(GAE)はGoogleが提供する、PaaSです。
そんなGoogle App Engine上でGo製のWebアプリを動かす勉強をしたい時、GoogleのGo Bookshelfアプリのチュートリアルは複数のサービスを組み合わせて学ぶことができるため、非常に有効です。
しかし、知らないとハマってしまうポイントがいくつかあるため、その中でも重要度が高そうな3つのポイントを紹介したいと思います。
1.Standard Environment と Flexible Environment(β)
GAEにはStandard EnvironmentとFlexible Environmentという2つの実行環境があります。
→ それぞれの特徴はコチラ
チュートリアルはFlexible Environmentを採用していますが、GAEの無料枠の対象となるのはStandard Environmentのみのため、注意が必要です。
さらに、デフォルトではインスタンスが2台立ち上がるようになっているため、知らず知らずのうちに課金額が大きくなってしまう、ということがあります。
この設定をしているのは、アプリケーションディレクトリにある、 app.yaml
ファイルです。
デフォルトでは以下のような設定になっています。
runtime: go
env: flex
api_version: 1
env_variables:
OAUTH2_CALLBACK: https://your-project-id.appspot.com/oauth2callback
これをStandard Environmetで実行し、インスタンスが1台になるようにすると以下のようになります。
runtime: go
api_version: go1
env_variables:
OAUTH2_CALLBACK: https://your-project-id.appspot.com/oauth2callback
instance_class: B1
manual_scaling:
instances: 1
handlers:
- url: /.*
script: _go_app
これで、Standard Environmentで実行できるため、無料枠を使うことができるようになりました。
2.GAE/Goは$GOPATH以下のコードを全てアップロードしてビルドする
これは見落としがちな挙動ですが、GAE/Goではアプリケーションをローカルでビルドして、バイナリをアップロードしている、というわけではなく、コードを全てアップロードした後に、クラウドでビルドしています。
そのため、デプロイするたびにアプリケーションで使っていないファイルもアップロードされてしまいます。
それを防ぐために、デプロイ時などには環境変数GOPATHを変更する必要があります。
しかし、いちいち環境変数を変更するのは手間ですし、設定をコード化して環境構築の手間を楽に減らしたいですよね。
そこで、direnvというツールが便利です。
direnvはディレクトリ毎に環境変数を定義し、カレントディレクトリがそのディレクトリ配下にあるときのみ、環境変数を有効にしてくれます。
これで、環境変数の設定をコード管理に含めつつ、楽に開発・デプロイが可能になりました。
3.デプロイ時のコードはデフォルトのCloud Storageバケットにアップロードされる
上記に関連してですが、GAE/Goでデプロイを行った際、何も設定を行わないと、デフォルトのCloud Storageバケットが作成され、そこにコードがアップロードされます。
しかし、この時作成されるCloud Storageはプロジェクトのデフォルトリージョンで作成されます。
Cloud Storageの無料枠を使用するためにはus-west1、us-central1、および us-east1でバケットを作成する必要があります。
なので、無料対象リージョンでバケットを作成した後に、デプロイ時にコードをそのバケットにアップロードするようにします。
コンソールからCloud Storageを開き、バケットを作成から「Regional」の「us-west1」でバケットを作成します。
そして、デプロイ時は下記コマンドでアップロードするバケットを、作成したバケットに指定します。
gcloud app deploy --bucket=gs://バケット名
これで、デプロイ時にコードがアップロードされても無料枠を利用することができるようになりました。
おわりに
さて、GAE/Goでアプリケーションを構築する際に、注意したいポイントを3つ挙げてみましたが、いかがでしたでしょうか。
小さなアプリを簡単に試したい場合などは、効率的に無料枠を使用していきたいですね。