Google App EngineでLaravelを動かしてCloud SQLへ接続してみた

投稿者:

GCP」って本当に便利ですね。最近は色々なプロジェクトでお世話になっております。今まではGCP上でLaravelを動作させる場合は、Dockerも含めて「Google Compute Engine(GCE)」がほとんどだったのですが、Laravelで構築するサービスがシンプルな場合はフルマネージド型である「Google App Engine(GAE)」を使った方が簡単なので、Laravel+GAEの運用環境を構築する事にしました。また今回はGCPのリレーショナルデータベース「Cloud SQL」への接続まで説明したいと思います。




参考サイト・ページ

https://cloud.google.com/community/tutorials/run-laravel-on-appengine-standard

1. Laravel側の設定

デプロイ用ファイル(app.yaml)の設定

Laravelのインストールや「Google Cloud SDK」の環境構築についてはこの記事では説明しませんので別途準備しておいてください。GAEのデプロイには「app.yaml」という専用ファイルをプロジェクトに設置する事が必須です。

設定にある「YOUR_APP_KEY」はLaravelの.envファイルに記述されている「APP_KEY」に置き換えてください。

その他Laravelの設定

「bootstrap/app.php」も以下のように追記して修正してください。

最後に以下のコマンド(composer)を実行して「beyondcode/laravel-dump-server」を削除します。

公式サイトにもありますが、ここで一旦デプロイして、「https://プロジェクト名.appspot.com」にアクセスして、LaravelのTOPページが表示される事を確認しておきましょう。

2. Cloud SQLへの接続設定

事前準備

次にCloud SQLへの接続ができるように設定を行います。まずはGCPの同一プロジェクトのCloud SQLにてインスタンスを作成して「インスタンスID」を控えておいてください。ここでは「db01」とします。ちなみにデータベースエンジンは「MySQL(第2世代)」を選択しています。

Cloud SQL Proxyの設定と接続

ローカル環境からマイグレーションを行えるよう、「Cloud SQL Proxy」を設定します。Cloud SQL Proxyを使うためには「Cloud SQL Admin API」を有効化する必要があるため、ここから設定するか、GCPの「APIとサービス」から設定してください。写真のピンク枠が「DISABLE API」になっていれば有効化状態です。

補足ですがGAEからCloud SQLへの接続にCloud SQL Proxyは必要なく、Cloud SQL Proxyが必要なのはGCEだけのようです。
「Cloud SQL Proxy」についての詳細はこちら

Cloud SQL Proxyは実行ファイルになっているので、こちらからファイルをダウンロードします。私の環境はMacOSの64ビットなので以下を実行しました。

続いては「インスタンス接続名」を取得します。Cloud SQLのインスタンスの詳細画面にも表示されていますが、以下のコマンドでも取得できます。形式としては「プロジェクト名:リージョン:インスタンスID」になります。

「YOUR_INSTANCE_NAME」にはインスタンスIDが入るので「db01」を入れます。

実行すると「connectionName: インスタンス接続名」のように表示されますので、それを使ってCloud SQL Proxyのコネクションを張ります。

Cloud SQL Proxyは127.0.0.1:3306を使う事になるのですが、私の環境ではMySQLを稼働させていたためか「listen tcp 127.0.0.1:3306 bind: address already in use」と表示されました。仕方がないのでMySQLを一旦停止した所、正常に動きました。

またこちら。

データベースの作成

ローカルからCloud SQLへのコネクションが正常な場合、マイグレーションが可能になります。その前にまずはデータベースを作ってみましょう。

成功するとメッセージが表示されます。実際にGCP上のCloud SQLの画面から見ると、ちゃんと「laravel」というデータベースが作られていました。

マイグレーション

マイグレーションはローカルから行いますので、DBへの接続設定は「app.yaml」ではなく「.env」を参照する点だけ注意してください。

あとはテスト環境でゴリゴリ作って、「gcloud app deploy」でデプロイをすれば「https://プロジェクト名.appspot.com」でアプリケーションが公開されます。デプロイしたバージョンを即公開したくない場合は「–no-promote」オプションを付与すればオッケーです(非公開バージョンの公開操作はGCP上の「App Engine」の「バージョン」メニューから操作可能)。