Spring Boot アプリを Cloud SQL に接続します。

Cloud SQL は、Google Cloud 上のリレーショナル データベースの設定、維持、運用、管理を容易にするフルマネージド データベース サービスです。Cloud SQL は、Cloud SQL for MySQL または Cloud SQL for PostgreSQL で使用できます。

この Codelab では、Cloud SQL for MySQL インスタンスを設定してから、Cloud SQL インスタンスをバックエンド ストレージとして使用するように Spring Boot アプリを更新します。Google Cloud SQL の Spring Boot スターターには自動的に構成される DataSource があるため、コードを変更することなく Cloud SQL を簡単に利用できます。この Codelab では、Spring Petclinic ソースコードを使用します。

前提条件

  • Java プログラミング言語とツールに精通していること
  • Linux の標準的なテキスト エディタ(Vim、Emacs、nano など)に関する知識

演習内容

  • Spring Boot アプリで Cloud SQL を使用します。

必要なもの

セルフペース型の環境設定

  1. Cloud Console にログインして新しいプロジェクトを作成するか、既存のプロジェクトを再利用します。(Gmail または G Suite アカウントをまだお持ちでない場合は、作成する必要があります)。

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

この Codelab を実施した場合、費用は数ドルを超えることはありませんが、より多くのリソースを使用する場合や、実行を継続する場合は、さらにコストがかかる可能性があります。

Google Cloud の新規ユーザーは 300 ドル分の無料トライアルをご利用いただけます。

Cloud Shell をアクティブにする

  1. Cloud Console で、Cloud Shell をアクティブにするアイコン をクリックします。

Cloud Shell を起動したことがない場合、その内容を説明する中間画面が(スクロールしなければ見えない範囲に)が表示されます。その場合は、[続行] をクリックします(以後表示されなくなります)。このワンタイム スクリーンは次のようになります。

Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。

この仮想マシンには、必要な開発ツールがすべて用意されています。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワーク パフォーマンスが充実しており認証もスムーズです。このコードラボでの作業のほとんどは、ブラウザまたは Chromebook から実行できます。

Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。

  1. Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list

コマンド出力

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

上記のようになっていない場合は、次のコマンドで設定できます。

gcloud config set project <PROJECT_ID>

コマンド出力

Updated property [core/project].
  1. Cloud Shell が起動したら、コマンドラインを使用して新しい Cloud SQL インスタンスを作成できます。
$ gcloud sql instances create my-instance

このオペレーションが完了すると、インスタンスを使用できるようになります。

  1. Petclinic アプリに使用するデータベースを作成します。
$ gcloud sql databases create petclinic --instance my-instance

Cloud Console からインスタンスにアクセスして構成することもできます。

  1. 次のコマンドを実行して、project-id:zone-id:instance-id 形式のインスタンス接続名を取得します。これは、後で Spring Boot アプリを構成するときに使用します。
$ gcloud sql instances describe my-instance |grep connectionName
  1. ローカルで Petclinic アプリのクローンを作成してテストします。
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. Cloud Shell でウェブでプレビュー アイコン をクリックし、[ポート 8080 でプレビュー] を選択します。

ブラウザに次のように Petclinic のホームページが表示されます。

  1. さまざまなデバイスでデータを確認しましょう。アプリが、インメモリ HyperSQL データベースを使用する。ここでは、HyperSQL から Cloud SQL をデータベースとして使用する方法に切り替えます。

Maven pom.xml ファイルを更新する

次に示すように pom.xml ファイルを更新します。スターターは、Cloud SQL データベースに接続するために自動構成の DataSource オブジェクトを提供します。Vim、nano、Emacs を使用してファイルを編集できます。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    ...
    <!-- Add Spring Cloud GCP Dependency BOM -->
    <dependencyManagement>
        <dependencies>
          <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>1.0.0.RC1</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
    <repositories>
      <!-- Use Spring Milestone Repository -->
      <repository>
        <id>repository.spring.milestone</id>
        <name>Spring Milestones Repository</name>
        <url>http://repo.spring.io/milestone</url>
      </repository>
    </repositories>
</project>

application-mysql.properties を更新する

  1. src/main/resources/application-mysql.properties の内容を以下のプロパティで置き換えます。前の手順で設定したインスタンス接続名を設定する必要があります。

src/main/resources/application-mysql.properties

database=mysql

# Delete the rest of the original content of the file and replace with the following:
spring.cloud.gcp.sql.database-name=petclinic
spring.cloud.gcp.sql.instance-connection-name=YOUR_CLOUD_SQL_INSTANCE_CONNECTION_NAME

# Initialize the database since the newly created Cloud SQL database has no tables. The following flag is for Spring Boot 2.
spring.datasource.initialization-mode=always
  1. 最後に、application.properties' spring.profiles.active プロパティに mysql を追加して、Spring Boot アプリで Cloud SQL for MySQL プロファイルを有効にします。

src/main/resources/application.properties

# Keep the content of the file the same
...

# In the last line, add mysql to the spring.profiles.active property
spring.profiles.active=mysql
  1. Spring Boot プラグインを使用すると、通常どおり Spring Boot アプリを起動できます。
$ ./mvnw -DskipTests spring-boot:run
  1. アプリが起動したら、Cloud Shell ツールバーの [ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。

Spring Petclinic のホームページがブラウザに次のように表示されます。

  1. ペット所有者のエントリを追加します。

省略可: Cloud SQL でデータが保持されていることを確認する

次のように、入力したデータが Cloud SQL に保持されていることを確認できます。パスワードの入力を求められたら、Enter キー(Macintosh の場合)を押します。

$ gcloud sql connect my-instance -u root
Whitelisting your IP for incoming connection for 5 minutes...done.
Enter password: <Press Enter, there is no password by default>
...
mysql> use petclinic;
mysql> select * from owners;
  

省略可: Cloud SQL インスタンスを削除する

アプリを停止したら、次のコマンドを使用して Cloud SQL インスタンスを削除できます。

$ gcloud sql instances delete my-instance 

Spring Boot アプリで Cloud SQL に接続する方法を学習しました。

詳細