Cloud SQL は、Google Cloud 上のリレーショナル データベースの設定、維持、運用、管理を簡単にできるようにするフルマネージド データベース サービスです。Cloud SQL は、Cloud SQL for MySQL または Cloud SQL for PostgreSQL で使用できます。
この Codelab では、Cloud SQL for MySQL インスタンスを設定し、Cloud SQL インスタンスをバックエンド ストレージとして使用するように Spring Boot アプリを更新する方法について学習します。Spring Boot Starter for Google Cloud SQL は、自動構成された DataSource を提供します。これにより、コードを最小限に変更するだけで、Cloud SQL を簡単に利用できます。この Codelab では、Spring Petclinic のソースコードを使用します。
前提条件
- Java プログラミング言語とツールに関する知識
- Linux の標準的なテキスト エディタ(Vim、Emacs、nano など)に関する知識
演習内容
- Spring Boot アプリで Cloud SQL を使用する。
必要なもの
- Google Cloud プロジェクト
- ブラウザ(Google Chrome、Firefox など)
セルフペース型の環境設定
- Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します。(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。
プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID
と呼びます。
- 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
この Codelab の操作をすべて行って、費用が生じたとしても、少額です。ただし、リソースの使用量を増やしたり、実行したままにしたりすると、費用が増加する可能性があります。
Google Cloud の新規ユーザーは、300 ドル分の無料トライアルの特典があります。
Cloud Shell をアクティブにする
- Cloud コンソールで、[Cloud Shell をアクティブにする]
をクリックします。
Cloud Shell を起動したことがない場合、その内容を説明する中間画面が(スクロールしなければ見えない範囲に)が表示されます。その場合は、[続行] をクリックします(以後表示されなくなります)。この中間画面は次のようになります。
Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。
この仮想マシンには、必要な開発ツールがすべて用意されています。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワーク パフォーマンスが充実しており認証もスムーズです。このコードラボでの作業のほとんどは、ブラウザまたは Chromebook から実行できます。
Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- 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].
- Cloud Shell が起動したら、コマンドラインを使用して新しい Cloud SQL インスタンスを作成できます。
$ gcloud sql instances create my-instance
このオペレーションが完了すると、インスタンスを使用できるようになります。
- ここで、Petclinic アプリに使用するデータベースを作成します。
$ gcloud sql databases create petclinic --instance my-instance
Cloud コンソールからインスタンスにアクセスして構成することもできます。
- 次のコマンドを実行して、
project-id:zone-id:instance-id
形式でインスタンス接続名を取得します。これは、後で Spring Boot アプリを構成するときに使用します。
$ gcloud sql instances describe my-instance |grep connectionName
- 次に、Petclinic アプリのクローンを作成してローカルでテストします。
$ git clone https://github.com/spring-projects/spring-petclinic $ cd spring-petclinic $ ./mvnw spring-boot:run
- Cloud Shell で [ウェブでプレビュー]
をクリックし、[ポート 8080 でプレビュー] を選択します。
ブラウザに次のような Petclinic のホームページが表示されます。
- データを追加して、いろいろ試してみましょう。アプリはインメモリの 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 を更新する
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
- 最後に、
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
- Spring Boot プラグインを使用して、Spring Boot アプリを通常どおりに起動できます。
$ ./mvnw -DskipTests spring-boot:run
- アプリが起動したら、Cloud Shell ツールバーの [ウェブでプレビュー]
をクリックし、[ポート 8080 でプレビュー] を選択します。
ブラウザに次のような Spring Petclinic のホームページが再び表示されます。
- ペットの飼い主のエントリを追加します。
省略可: Cloud SQL がデータを永続化したことを確認する
入力したデータが Cloud SQL に永続化されていることを、次の図のように確認できます。パスワードの入力を求められたら、Enter キー(Macintosh の場合は Return キー)を押します。
$ 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 に接続する方法を学習しました。