GCP + pythonをやっていくとき、どのサービスを使うか?


概要

pythonでwebアプリを作って公開したいとき、GCPでは様々なサービスを利用できる。
それぞれ特徴があるため、目的に合わせて選別する必要がある。

Cloud Function

公式サイト
https://cloud.google.com/functions/docs/

  • 長所
    • 流行りのサーバレス
    • スクリプト置くだけなのでサーバ側のことを考えなくて良い
    • HTTPアクセスに対してスクリプト実行するので一応webサイトっぽいものも出来る
  • 短所
    • 時間トリガを使うのが面倒
      • Pub/Sub, Schedulerと組み合わせる必要がある
    • 1スクリプトにやりたい処理を書き込むしかないため管理が難しい
      • 普通のソフトウェアなら役割ごとにファイルを分割する

Firebase

公式サイト
https://firebase.google.com/docs/

REST API
https://firebase.google.com/docs/database/rest/start?hl=ja

  • 長所
    • 認証機能がブラウザ上からポチポチ設定で出来るため楽
    • 静的ファイルなら置くだけで動作するので楽
  • 短所
    • python使うとしたらサードパーティ製ライブラリが必要
    • REST APIの操作に限られるので出来ることは少ない

GAE (Google App Engine) + python2 SE

公式サイト
https://cloud.google.com/appengine/docs/

  • 長所
    • webアプリに必要なSDKが豊富
    • アプリ外の設定を考えずに利用可能
    • ErrorReporting, Loggerがあるので監視も楽
    • cron.ymlをデプロイするだけでスケジューラ使用可能
      • Cloud Functionより楽に時間トリガを使える
  • 短所
    • 2系なのでもうすぐサポート切れる
    • 使用できない外部パッケージが多い

GAE (Google App Engine) + python3 SE

  • 長所
    • 2系 SEでは使えなかったパッケージ(scipy, pandasなど)が利用できる
  • 短所
    • GAE SDKが未対応のライブラリ(ndbなど)が多く、2系と比べ使いにくい

GAE (Google App Engine) + python3 FE

  • 長所
    • webアプリに必要なSDKが豊富
    • 2系 SEでは使えなかったパッケージ(scipy, pandasなど)が利用できる
  • 短所
    • SEに比べて高い
    • 起動が遅い

GCE (Google Compute Engine)

  • 長所
    • インフラ周りまで全ての設定が可能
    • 従来のアプリと同様の構成なので、そのままデプロイすれば利用可能、移行が楽
    • GAEと異なりパッケージの制限など検討しなくていい
    • Dockerでデプロイ可能
  • 短所
    • webサーバなどGAEでは不要だった項目の設定が必要で面倒

結論

  • 基本はGAE使うのがベター
  • 裏側で複雑な操作をしないのならfirebase
  • アプリ外の設定を行いたいならGCE

おまけ

GKE (Google Kubernetes Engine)は使ったことないので書いてません。
使うとしたら対象のプロダクトが成熟して、マイクロサービス化するとなったときにようやく出番が出るものという認識。