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 ファイルです。

デフォルトでは以下のような設定になっています。

これをStandard Environmetで実行し、インスタンスが1台になるようにすると以下のようになります。

これで、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」でバケットを作成します。
そして、デプロイ時は下記コマンドでアップロードするバケットを、作成したバケットに指定します。

これで、デプロイ時にコードがアップロードされても無料枠を利用することができるようになりました。

 

 

 

おわりに

さて、GAE/Goでアプリケーションを構築する際に、注意したいポイントを3つ挙げてみましたが、いかがでしたでしょうか。
小さなアプリを簡単に試したい場合などは、効率的に無料枠を使用していきたいですね。

watanabe.tのブログ

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

昨年度はモバイル開発を、今年度からはGCPなどのクラウド周りの開発を行っているエンジニアです。

最近はfirebaseの活用法、golangやGCP周りの勉強をしています。

アーカイブ
タグ