【GCP】SpringBoot + App Engine + CloudSQL + VPCネットワーク

はじめに

MySQLを用いたCRUDを行うSpringBootアプリケーションを、App Engineスタンダード環境にデプロイし、プライベートIPでCloud SQLへ接続を行う大枠の手順についてまとめます。

環境

アプリケーション環境

  • 言語: Java8
  • FW: SpringBoot
  • ビルドツール: Maven3.5.4
  • DB: MySQL5.7

GCP環境

  • AppEngine: Java8スタンダード環境
  • Cloud SQL: MySQL5.7, プライベートIP付与
  • VPCネットワーク

やりたいこと

今回やりたいことは、上記環境に基づいて作成したSpringBootアプリケーションをApp Engine上で動かし、Cloud SQLにプライベートIPでアクセスすることです。

App Engine上でデータベースを使う際は、App Engine内でミドルウェアとしてのデータベースを使うのは一般的ではなくGCPのストレージサービスを使用することになりますので、今回はデータベースとしてCloud SQLを使います。

手順

  1. App Engineの準備
  2. VPCネットワーク準備
  3. Cloud SQLの準備
  4. サーバレスVPCアクセスコネクタ作成

App Engineの準備

  1. App Engineインスタンス作成
  2. Spring BootアプリケーションにGAE用の設定をpom.xmlに追記、appengine-web.xml作成
  3. App Engineにデプロイ

この段階でデプロイしてもデータベースの設定がローカルのままなのでエラーになりますが、以降のステップでCloud SQLと連携すると動くようになります。

なお、#2でSpringBootの実行ファイル形式をjarからwarに変更します。

また、SpringBootアプリケーションのビルドやデプロイは以下のコマンドを使いました。

mvn clean install
mvn package appengine:deploy

VPCネットワークの準備

  1. VPCネットワークの作成

Cloud SQLの準備

  1. Cloud SQLでMySQLインスタンスの作成
  2. プライベートIPに作成したVPCネットワークを割り当てる
  3. Cloud ShellでMySQLインスタンスにアクセスしデータベースを作成
  4. SpringBootアプリケーションにCloud SQL用の設定をpom.xmlに追加

サーバレスVPCアクセスコネクタ作成

  1. コネクタの作成
  2. App EngineのVPCネットワーク接続

ここまでの設定を行い、GAEにデプロイすると動くかと思います。今回はざっくりとした手順のみまとめましたが、今後詳しい設定手順をまとめようと思います。