Hack Your Design!

Google App Engineを第一世代から第二世代に乗り換えた

(image)Google App Engineを第一世代から第二世代に乗り換えた

Google App Engineを第一世代から第二世代に乗り換えました。GoとPHPの環境をGoogle App Engine上にもっているのですが、それぞれGoは1.9から1.11、PHPは5.5から7.2へのアップデートとなります。

第一世代から第二世代の比較

第一世代と第二世代は何が違うのか? 公式ドキュメントを参照します。

first vs second

ポイントとしては下記になるでしょうか。

  • サポート言語のバージョンアップ
  • gVisorベースなコンテナサンドボックス環境
  • /tmpへのRead/Writeアクセス
  • 外部ネットワーク通信が自由に可能に
  • どんな拡張・ライブラリも利用可能に

どのように移行したらよいの?

下記のようにアプリケーションの移行のための公式ドキュメントが用意されているのでそれを参照しながら進めるのがよいでしょう。

注意点

app.yaml の変更

app.yamlで定義したapi_versionloginが使えなくなるなどapp.yamlを書き換える必要があります。この変更は先に引用した公式の移行ドキュメント通りにすすめていけば問題ないです。

公式がGitHub上でサンプルコードを提供しているのでそれを見るのが手っ取り早いかもしれません。

第一世代と第二世代の間の過渡期世代がある

first vs second

  • サンドボックスの制限あり かつ App Engine API 対応 の 純粋な 1st gen ランタイム
  • サンドボックスの制限なし かつ App Engine API 対応 の 過渡期のランタイム
  • サンドボックスの制限なし かつ App Engine API 非対応 の 純粋な 2nd gen ランタイム

の3つに分けることができます。そして 過渡期のランタイム が古い定義では区別せずに 2nd gen と呼ばれていたのに対し、新しい定義では区別せずに 1st gen と呼ばれています。

ref. GAE Go 1.11 ランタイムが公式には 2nd gen ではなくなった件について - Qiita

上引用の通り、第二世代にはApp Engine API対応の過渡期の世代とApp Engine API非対応の完璧な第二世代があります

ここで言うとJava 8、Go 1.11が過渡期の世代にあたるようです。Go 1.12やPHP 7.2のバージョンの世代は完璧な第二世代にあたるので、App Engine APIは利用不可となります。

PHP7.2は dev_appserver.py が使えない

dev_appserver.py is not supported with the PHP 7.2 runtime. To test your application and run it locally, you must download and install PHP 7.2 and set up a web server.

ref. Migrating Your App from PHP 5.5 to PHP 7.2  |  App Engine standard environment for PHP 7.2 docs  |  Google Cloud

PHP7.2を利用する場合 dev_appserver.py は使えなくなるようなので、PHPのビルトインウェブサーバーを使えとのことです。下記のコマンドでPHPが動作するWebサーバーを起動させましょう。

$ php -S localhost:8080

参考: 超簡単コマンドでローカルにHTTPサーバーを起動する方法

App Engine APIの移行先

App Engine APIが使えなくなった後、どのようなサービスに移行したらいいのでしょうか? 下記のようにまとめることができるでしょう。

  • Users -> Identity-Aware Proxy?
  • Memcache -> Cloud Memorystore for Redis
  • Datastore -> Cloud Datastore
  • Search -> …?
  • Mail -> SendGrid?
  • TaskQueue -> Cloud Tasks
  • Cron -> Cloud Scheduler
  • Image -> …?

ref. App Engine Standard Go 1.9 migration to Go 1.11 · gcpug/nouhau

個人的にはlogin:required , login:admin の廃止が一番辛くて、移行も大変だなぁと思うところであります。

参考

  • このエントリーをはてなブックマークに追加