Edited at
SENSYDay 2

GAE/SE Pythonランタイムアップデートへの道

社内でGAE/SEのpy27(SEの1gen)のサービスが多くあり、py37(SE 2gen)への移行のために、軽いノリで整理した記事を書いたので、qiita用に整理し直しました。

少し古い情報や間違いもあるかもしれないので、ご指摘いただければと思います。


Python2.7は2020年1月に死亡

https://pythonclock.org/

それまでに移行する必要があります。


python2からpython3へのアップデート!


AppEngine SDKやpython2.7に依存した人の移行案

基本的にAppEngine SDKは完全廃止です :dizzy_face:

もう google.appengine パッケージとは別れを告げよう! :hand_splayed:

代替サービスが無い・開発される予定のないものを使っている人は、一緒に辛い道のりを歩もう! :runner:

公式の違い解説: Understanding differences between Python 2 and Python 3 on the App Engine standard environment

SE 2nd genには、1st genと比べて、


  • プロプライエタリな仕様からの脱却


    • AppEngine専用SDKの廃止

    • 動く環境もGAEの内側でなく、外と同じ感じになる?

    • 自由だけど飼い慣らされた環境じゃない



  • 環境依存の脱却


    • 普通のDockerぽくなる。(gVisor?)

    • テスト等も共通化できる



のような特徴があると感じました。


TaskQueueのPush Queueで非同期処理 :two_men_holding_hands:

Cloud Tasks, AppEngine Queueがβです!


  • 有料化したけど、無料範囲が十分大きいので安心! :heart_eyes:

  • Pull Queueの場合やGAEのサービス間通信の場合はpub/subなども使えます。




App Engine Cronで定期実行 :school:

Cloud Schedulerがbeta中


  • 有料化 :money_with_wings: されましたが、だいぶ安いので問題なさそうです。

  • まだβなのでバグはある?


Memcache最高 :pencil:


  • 廃止? :cross:


    • 検討中ではある?: Stay tuned for updates as we're continuing to look into opening up Memcache to the rest of GCP.



  • ないと困る場合はCloud Memorystore(Redis)に課金すべき?


    • GAEからアクセスできないらしい。




login: admin で管理画面 :police_car:

廃止予定 :skull_crossbones:


Mail APIでお手軽にメール送るっしょ :postbox:

廃止 :mailbox_closed:


  • SendGrid, Mailgun, Mailjet等を使いましょう。


Datastoreのpython用ラッパーndbを使っていた :snake:


  • 移行検討・開発中 :thinking:


    • コメント: We're currently actively exploring bringing ndb to Python 3. Note that this would be close to, but not 100%, API-compatible but would bring the magic of a good ORM to Datastore.



  • 待てないならGoogle Cloud Python client libraries を使うのが早い。


画像キャッシュ最強のImages API :framed_picture:

廃止 :confounded:


  • 自分でGCSとPillowで頑張る


Search APIで検索システム作ってた :microscope:

検討中、おそらく廃止? :cold_sweat:


  • GCEにElasticsearchたてる?


dev_appserver.pyのDatastoreエミュレータでテストしていた :construction_worker:

廃止 :angel:


  • Cloud Datastore Emulatorを起動するタイプにして書き直しましょう。

  • もしくはモック。


GAE/SEのLogはやっぱ見やすくて最高 :see_no_evil:

そのままLoggingしても勝手にまとめてくれません! :thermometer_face:


自分で集めるようにしましょう。。


その他廃止 :rhinoceros:

個人的に使っていないものですが、使っていた方は注意してください。


  • Blobstore


    • バイナリが保存できるやつ

    • そもそもGCSに移行していると思います。。



  • Capabilities



  • Modules API


    • AppEngineのサービス(旧モジュール)を取得するAPI。

    • 複数サービスで同じコードを使ってたり、自サービスや他サービスと連携する場合は使っていた?

    • AppEngine Admin APIや環境変数で対応可。



  • URL Fetch


    • 特に気にせず普通にアクセスできるようになる。

    • Requestsでいい。



  • appcfg.py


    • そもそも現時点でも非推奨になって久しいので気にしなくていい?。




いいところもいっぱいあるので頑張ろう! :muscle:


  • Third partyライブラリが完全に使える


    • C Nativeなライブラリでも自由自在! scikit-learn等も!


      • メモリとかマシンリソースは制限あるけど。。

      • 無料枠がある! :pray:





  • Fileアクセス可能!

  • バックグラウンドスレッドでも殺されない!


    • 今までもできたはできたけど。。



  • Cloud Client Library使える!



    • 今までも使えたけどAppEngine SDKとぶつかって面倒だった。



  • dev_appserver.pyは引き続き使える!


    • ただし、使うにはpython2が必要 (そのうち解消するはず。。)




その他参考