LoginSignup
1
2

【GCP】App EngineにデプロイしたLaravelのアプリからCloud SQLに接続する方法を解説

Last updated at Posted at 2023-08-03

今回は、GCPのApp EngineにデプロイしたLaravelのアプリからCloud SQLに接続する方法を解説します。Laravelはバージョン10を使っていきます。

ローカル環境から本番環のでマイグレーションを行う手順やローカル環境からCloud SQLのデータベースに接続する方法なども、この記事で詳しく解説していきますね。

開発環境

  • macOS Venture 13.2.1
  • Laravel 10.15.0
  • PHP 8.1.21

LaravelのアプリをApp Engineにデプロイ

まずは、Laravel 10のプロジェクトを新しく作成して、GCPのApp Engineにをデプロイしていきます。

Laravel 10のプロジェクトを作成する方法やApp EngineにLaravelのアプリをデプロイする方法については、こちらの記事で詳しく解説しているので参考にしてみてください。

現時点では、アプリがデプロイされたURLで以下のようなlaravelの画面が表示されていればOKです。
スクリーンショット 2023-07-28 14.png

ここからは、以前に記事でApp EngineにデプロイしたLaravelのアプリに、ユーザーの新規登録とログインの機能をつけて、そのユーザーのデータがCloud SQLのデータベースに保存されるようにしていきます。

Laravelに認証機能をつける

まずは、ローカル環境のLaravelのアプリにログインとユーザー登録の機能をつけていきます。ここではBreezeを使って認証機能を作ります。以下のコマンドを順番にターミナルで入力してください。

composerにBreezeを入れるために、まずはこちらのコマンドを入力します。

./vendor/bin/sail composer require laravel/breeze --dev

次はLaravelにBreezeをインストールします。

./vendor/bin/sail php artisan breeze:install

ここまでできたらマイグレーションを実行します。このマイグレーションでユーザーテーブルが作成されます。

 ./vendor/bin/sail php artisan migrate

マイグレーションが完了したら、npm installとnpm run devを実行します。

./vendor/bin/sail npm install
 ./vendor/bin/sail npm run dev

ターミナルに以下のようになればOKです。
スクリーンショット 2023-08-02 10.22.23.png

実際に、ローカルのLaravelのアプリの画面を開くとログインとユーザー登録の機能ができていることが確認できるはずです。
スクリーンショット 2023-08-02 10.25.08.png

Cloud SQLのインスタンスを作成する

次はCloud SQLを使うための設定を行なっていきます。GCPの管理画面を開いてください。

スクリーンショット 2023-08-02 10.png

画面左上のナビゲーションメニューを開くと「SQL」という項目があるので、そちらをクリックしてください。※もしナビゲーションメニューにSQLがなければ、全てのプロダクトのページから追加してください。
スクリーンショット 2023-08-02 10.50.56.png

Cloud SQLを使うためには、Cloud SQLのインスタンスを作成する必要があるので「無料クレジットを利用してインスタンスを作成」をクリックしてください。
スクリーンショット 2023-08-02 10.53.33.png

するとデータベースの種類を選択する画面が表示されます。ここではMySQLを使っていくので、MySQLを選択してください。
スクリーンショット 2023-08-02 11.03.08.png

ここで「インスタンスを作成するには、まず Compute Engine API を有効にする必要があります」という表示が出る場合には「APIを有効化する」をクリックしてAPIを有効化してください。
スクリーンショット 2023-08-02 11.08.46.png

APIの有効化が完了すると、以下のようなMySQLのインスタンスを作成する画面が表示されます。
スクリーンショット 2023-08-02 11.11.06.png

まずはインスタンスIDとrootユーザーのパスワードを入力してください。
スクリーンショット 2023-08-02 11.13.59.png

インスタンスIDとrootユーザーのパスワードを入力したら、Cloud SQLのエディションの選択します。EnterpriseとEnterprise Plusがあるので、ここではEnterpriseを選択します。また、エディションのプリセットはサンドボックスにしておきます。
スクリーンショット 2023-08-02 11.15.25.png

次はリージョンを選択します。リージョンはApp Engineのインスタンスと同じリージョンにしておきます。※App Engineのインスタンスリージョンは、GCPの管理画面からApp Engineのダッシュボードを開くと確認できます。
スクリーンショット 2023-08-02 11.38.55.png

リージョンを選択したら「インスタンスを作成」をクリックします。しばらく待つと以下のような画面が表示されます。
スクリーンショット 2023-08-02 11.46.40.png

これでインスタンスの作成は完了です。

データベースを作成する

次は、先ほど作成したインスタンスに今回のLaravelのアプリで使うためのデータベースを作成していきます。

先ほどのSQLの画面の左側にあるメニューから「データベース」を選択します。
スクリーンショット 2023-08-02 11.58.41.png

すると、先ほど作成したインスタンスにあるデータベースの一覧が表示されます。Laravelのアプリに使うためのデータベースを新しく作りたいので「データベースの作成」をクリックします。
スクリーンショット 2023-08-02 12.01.32.png

すると、データベース名などを入力するモーダルが出てくるので、データベースを名をローカルで作成したLaravelのプロジェクトで使っているデータベース名と同じにし、照合を「utf8_general_ci」に変更して「作成」ボタンをクリックします。
スクリーンショット 2023-08-02 13.17.37.png

Laravelのプロジェクトで使っているデータベース名は.envファイルから確認できます。
スクリーンショット 2023-08-02 13.png

これでデータベースが作成されました。実際にデータベース一覧のところに今回作成したデータベースが作成されていると思います。
スクリーンショット 2023-08-02 13.21.40.png

ここからはローカルからCloud SQLに接続するための設定をしていきますね。

接続の設定から自分のIPアドレスを追加する

Cloud SQLは外部からのアクセスをデフォルトでシャットアウトしているため、接続を許可するIPアドレスのリストに自分のIPアドレスを追加する必要があります。

まずは、画面の左側のメニューから「接続」を選択してください。
スクリーンショット 2023-08-02 13.39.57.png

接続のページを開いたら「ネットワーキング」を選択し、ネットワークの追加をクリックしてください。
スクリーンショット 2023-08-02 13.42.46.png

するとネットワークを追加する入力欄が表示されるので、ここに適当なネットワーク名と自分のIPアドレスを入力して「完了」を押して、画面の下の方にある「保存」をクリックします。完了を押しただけだと保存されないので注意してくださいね。

ちなみに、自分のIPアドレスはこちらで調べることができます。
スクリーンショット 2023-08-02 13.png

保存ボタンを押してしばらく待つと、先ほど自分のIPアドレスが承認済みのネットワークのところに保存されているのが確認できるはずです。
スクリーンショット 2023-08-02 13.55.58.png

Cloud SQLに接続するためのIPアドレスの追加はこれで完了です。

APIを有効にする

次は、ローカル環境からCloud SQLに接続するために必要なAPIを有効化していきます。

まずはこちらのページを開いてください。

このページの「始める前に」の3のところにある「APIを有効化する」のボタンをクリックしてください。
スクリーンショット 2023-08-02 14.50.47.png

APIを有効化するのボタンをクリックすると、以下のような画面が表示されるので「次へ」をクリックしてください。
スクリーンショット 2023-08-02 14.45.32.png

すると以下のような画面になるので「有効化する」をクリックしてください。
スクリーンショット 2023-08-02 14.45.42.png

少し待つとAPIの有効化が完了します。

Cloud SQL Auth Proxyを使ってローカルからCloud SQLのデータベースに接続する

ローカル環境からCloud SQLに接続するためにはCloud SQL Auth Proxyというものが必要になります。

まずは、このCloud SQL Auth Proxyをインストールしていきます。ターミナルでLaravelのプロジェクトのディレクトリに移動して、以下のコマンドを入力してください。

curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.6.0/cloud-sql-proxy.darwin.amd64
chmod +x cloud-sql-proxy

次はCloud SQL Auth Proxyを起動させます。Cloud SQLの接続名がaaa:bbb:cccだった場合、以下のコマンドでCloud SQL Auth Proxyを起動することができます。

./cloud-sql-proxy -dir=cloudsql -instances=aaa:bbb:ccc

これでローカル環境からCloud SQLに接続することができました。次はローカル環境からCloud SQLのデータベースでマイグレーションを行います。

.envファイルを変更してマイグレーションを行う

Cloud SQLに接続できたので、次はローカルからCloud SQLのデータベースのマイグレーションを行います。

Laravelのプロジェクトの.envファイルの環境変数をCloud SQLのものに変更して、ローカル環境のLaravelのコンテナの中に入ってマイグレーションのコマンドを実行すればCloud SQLのデータベースでマイグレーションが実行されるようになっています。

まずは.envファイルの中身を変更します。変更するのは

・DB_HOST
・DB_USERNAME
・DB_PASSWORD

の3つです。この画像のところですね。
スクリーンショット 2023-08-02 18.png

まずはDB_USERNAMEをrootにして、DB_PASSWORDをCloud SQLのインスタンスを作成したときに決めたrootユーザーのパスワードにします。

そうしたら、GCPの管理画面から今回使うCloud SQLの概要のページを開いて、パブリックIPアドレスをコピーします。
スクリーンショット 2023-08-02 17のコピー.png

このパブリックIPアドレスをDB_HOSTの値にしてください。

これでマイグレーションを実行するための準備ができたので、次はLaravelのコンテナの中に入ってマイグレーションを実行します。

以下のコマンドを使ってコンテナの中に入ります。

./vendor/bin/sail shell

コンテナの中に入ったらマイグレーションを実行してください。

php artisan migrate

マイグレーションが完了したらOKです。

ここまでできたら、次は認証機能を実装したLaravelのアプリをApp Engineにデプロイするための設定をしていきます。

app.yamlの編集

Laravelのプロジェクトのルートディレクトリにあるapp.yamlのenv_variablesのところにデータベース名やデータベースのユーザー名、パスワードなどを追加します。
スクリーンショット 2023-08-02 17.png

Cloud SQLのデータベース名はローカル環境のLaravelと同じにしているので、app.yamlでも同じ名前にしてください。ここではexample_appになっています。

ユーザー名はrootで、パスワードはCloud SQLのインスタンスを作成したときに決めたrootユーザーのパスワードにしておいてください。

DB_SOCKETは"/cloudsql/接続名"という感じにしてください。例えば、接続名がaaa:bbb:cccであれば、DB_SOCKETは"/cloudsql/aaa:bbb:ccc"となります。

デプロイ

ここまでできたらLaravelのアプリをApp Engineにデプロイして実際にCloud SQLに接続できるかどうかを確かめてみましょう。

以下のコマンドをターミナルに入力してください。

gcloud app deploy

デプロイが終わったら次のコマンドで、デプロイされたLaravelのアプリの画面を開きます。

gcloud app browse

実際にLaravelのアプリの画面が表示され、ログインとユーザー登録の機能も有効になっているはずです。新規登録したユーザーの情報はCloud SQLのインスタンスにあるデータベースのusersテーブルに保存されるようになっています。

まとめ

GCPの管理画面からCloud SQLのインスタンスとデータベースを作成して、App EngineにデプロイしたLaravelのアプリからCloud SQLのデータベースに接続することができる。

また、Cloud SQL Auth Proxyを使うことでローカル環境からCloud SQLに接続し、マイグレーションなどを行うこともできる。

今回作成したLaravelのプロジェクトのリポジトリはこちらです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2