楽屋

GAEでサクッとAPIサーバ構築

はじめに


Google App Engine(GAE)とは

GAEはGoogle Cloud Platform(GCP)で利用できるアプリケーション/サービスの一つです。

サービス分類はPaaSとなり、インフラの管理をプラットフォーム側が担ってくれますのでアプリケーション開発に集中することができます。本稿では、GAE上にPythonを利用して簡単なAPIサーバーを構築していきます。

 

補足情報


GAEにはスタンダード版とフレキシブル版が存在しますが、今回は「スタンダード版」を利用していきます。

無料枠で利用できる範囲での実装を想定しておりますが、何らかの事情により課金がされる場合があります。

 

必要な知識、準備


  1. GCPのアカウント
  2. Cloud SDKのインストールと準備
  3. Python2.7
  4. Flask
  5. virtualenv(必要に応じて)

作業の流れ


  1. CloudSDKの設定確認
  2. 権限の確認
  3. GAEの立ち上げ
  4. ディレクトリ構造
  5. hello, world
  6. ローカル環境でのテスト
  7. デプロイ
  8. アプリの拡張
  9. 関連サービス

CloudSDKの設定確認


GCPへのアクセス権限を確認します。下記コマンドを実行し権限が正しいか確認します。

ご自身のアカウントが表示されればOKです。

このステップが済んでいない場合は下記ドキュメントよりセットアップを行っていただく必要があります。

https://cloud.google.com/sdk/downloads?hl=ja

 

権限の確認


利用しているアカウントが「オーナー権限」であるかを確認します。左のスライドにある「IAMと管理」をクリックし、自身のアカウントがオーナー権限かを確認してください。(ご自身で作成されたアカウントであればデフォルトでオーナー)

コンソール画面

 

コンソール画面からIAMを選択

 

IAMに入りオーナー権限が付与されているか確認

 

 ディレクトリ構造


開発環境の準備ができましたので必要なものを揃えていきます。

まずは下記ディレクトリ構造でファイル、ディレクトリを作成してください。

 

hello, worldの実装


それでは、GAEの挙動を掴むために「hello, world」アプリの実装を行っていきます。

app.yaml

main.py

appengine_config.pyに下記コードを記述

requirements.txt にライブラリ情報をロード

libディレクトリを作成しrequirements.txtに記載されてるライブラリをインポートする

デプロイする準備が整いました。

正しくコードの記述がされていれば、デプロイ後に指定のURLにアクセスすると「hello,world」と記載されます。

 

ローカル環境でのテスト


デプロイする前にローカルテストを行います。テスト環境が用意されているのでそちらを利用していきます。

Cloud SDKをインストールした時点でテストができるスクリプトが用意されており、パスはこちらとなります。

/<your>/<path-to>/google-cloud-sdk/bin/dev_appserver.py

ローカル環境の立ち上げには下記コマンドを実行します。

http://localhost:8000/にアクセスし管理画面を確認

http://localhost:8080/ hello, world   が表示されることを確認します。

 

デプロイ


ローカルで正しく動くことが確認できたので、デプロイしていきます。

下記コマンドで簡単にデプロイが可能です。

しばらくするとデプロイが完了し、アクセスできる状態になります。(軽いアプリでも1 – 2分程度時間がかかります)

 

アプリの拡張


GAEの利用方法自体はこれまでのステップ通りですが、hello,worldを拡張し実践に即したアプリに拡張していきます。

まずは、apps ディレクトリを作成し、処理周りのこの中にまとめていきます。

model.py

view.py 

main.py

ローカルテストで問題なく結果が表示されていることを確認し、問題なければ先ほどと同様の手順でデプロイを行います。

 

関連サービス


これまでのステップでは実装とデプロイのみ行ってきましたが、デプロイした結果やGAEの便利機能を少しだけ紹介していきます。

要件次第ではGAEと関連アプリだけでバックエンド開発が済んでしまうほど多機能となりますので、詳細は個別でお調べいただければと思います。

 

バージョン管理とトラフィックのマイグレーション


デプロイの状況をコンソールから確認することが可能です。

また、(個人的には)GAEの機能の中でもTOP3に入るおすすめ機能が「トラフィックのマイグレーション」です。

一言で言うと、バージョン管理が「1クリックで行える機能になります。

バックエンドでバグが見つかった際にはすぐにバージョンを戻せるので障害の影響を限定的にすることが可能です。

フロントエンドにおいては、どんどんリリースしていき、バグ・修正点が見つかり次第ロールバックすると言う手法も取ることも可能です。

 

cron


cronもマネージドで提供されています。

利用方法は下記のドキュメントを見ていただければと思いますが、これまでのステップで利用した「app.yaml」に似た記法なので学習コストも少なく実装できます。

こちらも非常に便利ですので利用してみてはいかがでしょうか。

https://cloud.google.com/appengine/docs/standard/python/config/cronref?hl=ja

*仕様が一般的なcronとは異なり、発火タイミングで「URL」を叩く仕様となっていますので、処理したい内容はコントローラーに記載しておく必要があります。

 

Taskqueue


自身で実装すると大変なQueueサービスですが、こちらもマネージドで提供されています。

利用方法はcron同様とてもシンプルなので学習コストも少なく実装可能です。

https://cloud.google.com/appengine/docs/standard/python/taskqueue/push/

https://cloud.google.com/appengine/docs/standard/python/taskqueue/push/creating-push-queues

 

logging


ログの取得は非常にシンプルで、Pythonの場合は、トレースバックや標準出力がそのままログに出力されます。

GCP上でのloggingはStackDriverというサービスに統一されており設定をしなくても自動でロッギングしてくれます。

GCEでは自身で実装しないとならない機能もGAEではマネージド?的な振る舞いで処理してくれます。

https://cloud.google.com/logging/docs/view/service/appengine-logs?hl=ja

 

まとめ


GAEを利用し簡単にAPIサーバーを実装する方法を紹介いたしました。

今回は基本的な設定のみで構築しましたが、設定・アプリの拡張を行うことで本番環境でも十分に利用可能です。

スナップチャットや国内のゲーム会社などでも利用実績がありwebアプリを開発するのであれば選択肢の一つとして入ってくるサービスだと思います。(トラフィックが多い場合はGOでの実装がおすすめ)

 

最後に


GCPは他サービスに比べ料金的メリットや様々なサービスが提供されていますので要件が合えば一度利用してみてはいかがでしょうか。