- 公開日
Google App Engineを第一世代から第二世代に乗り換えた
目次
Google App Engineを第一世代から第二世代に乗り換えました。GoとPHPの環境をGoogle App Engine上にもっているのですが、それぞれGoは1.9から1.11、PHPは5.5から7.2へのアップデートとなります。
Google App Engine で動かしているGoの環境を1.9から1.11に上げた。わりとすんなりいけた
— toshimaru (@toshimaru_e) May 14, 2019
勢いでPHP on Google App Engine もphp 5.5からphp 7.2に上げといた
— toshimaru (@toshimaru_e) May 16, 2019
第一世代から第二世代の比較
第一世代と第二世代は何が違うのか? 公式ドキュメントを参照します。
ポイントとしては下記になるでしょうか。
- サポート言語のバージョンアップ
- gVisorベースなコンテナサンドボックス環境
/tmp
へのRead/Writeアクセス- 外部ネットワーク通信が自由に可能に
- どんな拡張・ライブラリも利用可能に
どのように移行したらよいの?
下記のようにアプリケーションの移行のための公式ドキュメントが用意されているのでそれを参照しながら進めるのがよいでしょう。
注意点
app.yaml の変更
app.yaml
で定義したapi_version
やlogin
が使えなくなるなどapp.yaml
を書き換える必要があります。この変更は先に引用した公式の移行ドキュメント通りにすすめていけば問題ないです。
公式がGitHub上でサンプルコードを提供しているのでそれを見るのが手っ取り早いかもしれません。
第一世代と第二世代の間の過渡期世代がある
- サンドボックスの制限あり かつ 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.
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
の廃止が一番辛くて、移行も大変だなぁと思うところであります。