Loading
BLOG 開発者ブログ

2017年7月3日

お手軽だけど…… 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つ挙げてみましたが、いかがでしたでしょうか。
小さなアプリを簡単に試したい場合などは、効率的に無料枠を使用していきたいですね。

watanabe.tのブログ

クラウドソリューショングループ所属

昔はモバイルアプリ開発を、今はGCP, AWS, Firebaseなどのクラウド周りの提案/開発を行っているエンジニアです。

AWS認定ソリューションアーキテクト取得しました!