Google App Engine(GAE)+PHP7+CodeIgniter3でCloud SQL(MySQL)に接続

投稿者: | 2020年5月14日

お久しぶりですGMO NIKKOのS.Tです。
今回は現在稼働中のオンプレシステムをGCPへ移植する機会があったので、その備忘録的な内容となっています。

■準備

Windowsを使用するのでWindows用Google Cloud SDK をインストールしてください。
インストールが完了したらコマンドプロンプトでGCPのコマンドが使用可能になるので、
gcloud initを実行してログイン後、作成済みのCloud Platform プロジェクトを選択します。

■設定

・index.phpのディレクトリにapp.yamlを追加

phpはバージョン7.2で画像ファイル等の静的ファイルとスクリプトをアップロードするように設定しています。
詳細はこちらを確認してください。

・application\config\database.phpの設定変更
AppEngineからCloudSQLに接続するには、
dsnは設定せずにhostnameに’/cloudsql/[CloudSQLのインスタンス接続名]’と設定すればいいようです。

・application\config\config.phpの設定変更
Redisを使用していたので使用しないように設定変更。

 

■コマンド実行

・app.yamlを追加したディレクトリでgcloud app deployを実行
対象プロジェクトやURLが表示されるのでそのまま実行します。
すると以下のようなエラーメッセージが表示されました。どうやら日本語ファイル名が存在すると弾かれるようです。

コマンド実行によりカレントディレクトリに.gcloudignoreファイルが作成されているので対象ファイルを無視するように記述しました。
app.yamlにskip_filesを記述すれば正規表現も使えますが、phpでは使用できないらしいので面倒ですが.gcloudignoreを使います。

再度gcloud app deployを実行するとやっとアップロードが始まったのですが、またまたエラーが出ました。
ここでハマってかなり悩みましたがどうやらアップロード対象にphpのログファイルが含まれていたようでファイルサイズが結構な量になっていたのが原因でした。
これも日本語ファイルと同様に.gcloudignoreに無視ファイルを記述することで対応しました。

無事完了したらgcloud app browseコマンドでページを確認できます。

■ソース修正

OracleからCloudSQL(MySQL)へ変更するため主にSQLの修正になりました。
趣旨から外れるので詳細は省略しますが、MySQLのバージョンが5.7(2020/05/11現在)のためWITH句が使用できないのが痛いですね・・・
早く最新版に対応してほしいです。

■まとめ

GCPは後発のせいか日本語に対応していなかったりMySQLの対応が遅れていたりまだまだ未完成だと思いますね。
ドキュメントを見ても情報量は多いのですがわかりにくいと感じます。
ファイルサイズエラーもCannot allocate memoryではわからないのでかなり時間を取られてしまいました。
これにめげずに頑張りたいですね。

The following two tabs change content below.