お断り
Google App Engine、というか、Google Cloud Platformは日進月歩で機能が新しくなっていきます。
そのため、以下でお話しすることは半分ぐらいは思い出話(今はそうではない)ということになると思います。
前提
私がGCPで動かしているDjangoはGoogleAppEngineのStandard環境です。当時はStandard環境なんて言葉はありませんでしたが。
また、動かしているのは組織内コミュニケーションツール的なものになります。
Djangoのバージョン
app.yamlのlibrariesでdjangoを指定すると使えます。
しかし、最新のDjangoは指定できません。
モデルに変更を加えて、今なら簡単にマイグレーションが行えますが、この機能がDjango本体に取り込まれたのは1.7です。その当時、AppEngineで使える最新のDjangoは確か1.5でした。
モデルを変更する必要があり、どうしようかなと悩んでいてふと、「あ、ライブラリ自分のローカルに置けばいいじゃん」とlibディレクトリ以下にDjango全部コピーしてデプロイしました。
で、公式ドキュメント確認してみたら同じような技が使われていますね。それでいいのかGCP(笑)
バックエンドのデータベース
第1世代Cloud SQL
初めにアプリをApp Engineで動かそうという話になった時、「○○(別の人が作ったツール)、Django使ってるよ」ということなので調べてみるとCloud SQLなるものがありました。当時出たてなのでもちろん、「第1世代」という言葉はついていませんが。
ともかく、これを使ってDjangoアプリを立ち上げました。
あ、「○○、Django使ってるよ」って言葉はもう一回出てくるので覚えておいてください。
第2世代Cloud SQL
しばらく運用していると妙な動作をしていることに気づきました。別アプリからの連携(HTTPリクエスト)作った時だったかな、リクエストの処理がたまに時間がかかるのです。調べてみると第1世代Cloud SQLはデフォルトで従量制なので、そこまで頻繁にリクエストが飛んでくるわけではないのでよくスリープしているということがわかりました。
というわけで解決策はないかと調べていたところ、これまた出たての第2世代。こいつならスリープしないようなので第2世代に切り替えました。それが罠とも知らずに・・・
第2世代のCloud SQLを作ってからしばらくして、「結構請求されてるな」ということに気づきました。そう、第2世代Cloud SQLは結局のところ、GCEのインスタンスを作ってそこでMySQL動かしてるだけなのです(自分でGCE作るよりは割引されるみたいですが)
ということで、月$10ぐらいかかっているのですが、今のところこのまま動かしてます。まあ自分で払うわけじゃないしw
Djangae
そんなわけで移行はしていませんが、調べたところDjangaeなるものがあることを知りました。公式ドキュメントでも一応紹介はされているので使っちゃ駄目というわけではないのでしょう。
ご存知の方も多いかと思いますが、Datastoreなら無料枠を超えなければ課金されません。
ここで先ほど伏線しておいた「○○、Django使ってるよ」と言う言葉が出てくるのですが、最近になって「Django使ってるよって、Djangoのテンプレート機能使ってるよってことか!」と気づきました。別のアプリはwebapp使って作られています。
ログ
logging使って出力したログはGCPコンソールのログビューアで確認できます。
ただし、過去一か月。一時期、一週間分しか保存されないってことがあった時期に比べれば優しくなったかなと思います(笑)
もう少し保存期間を延ばしたいという場合はStorage等にエクスポートすることもできるようです。試したことはありませんが。
Pythonのバージョン
Standard環境は2.7です。これ今後どうなるの??
おわりに
というわけでGoogle App EngineのStandard環境でDjangoを動かしてきたお話をしました。作り始めたときはDjangoに対する理解、GCPに対する理解も浅かったのでいろいろと「歴史的経緯」な部分ができてしまいましたが、今新しいアプリを作るとするとそこら辺の反省を活かして作れるかなと思います。