このチュートリアルでは、
Java永続化 API (JPA) は、オブジェクト リレーショナル マッピング用の標準的なJava API です。
このチュートリアルでは、Microsoft Entra認証と MySQL 認証という 2 つの認証方法を取り上げます。 Passwordless タブにはMicrosoft Entra認証が表示され、Password タブには MySQL 認証が表示されます。
Microsoft Entra認証は、Microsoft Entra IDで定義されている ID を使用してAzure Database for MySQLに接続するためのメカニズムです。 Microsoft Entra認証を使用すると、データベース ユーザー ID やその他の Microsoft サービスを一元的な場所で管理できるため、アクセス許可の管理が簡素化されます。
MySQL 認証では、MySQL に格納されているアカウントが使用されます。 アカウントの資格情報としてパスワードを使用することを選択した場合、これらの資格情報は テーブルに格納されます。 これらのパスワードは MySQL に保存されるため、パスワードのローテーションは自分で管理する必要があります。
前提条件
Azure サブスクリプション - 無料で作成。
Java Development Kit (JDK) バージョン 8 以降。
Apache Maven。
MySQL コマンド ライン クライアント。
Spring Boot アプリケーションがない場合は、Spring Initializr で Maven プロジェクトを作成します。 必ず Maven Project を選択し、DependenciesSpring Web、Spring Data JPA、および MySQL Driver 依存関係を追加し、バージョン 8 以降Java選択します。
- お持ちでない場合は、
mysqlflexibletestという名前の Azure Database for MySQL フレキシブル サーバー インスタンスを作成します。 手順については、「Quickstart: Azure ポータルを使用して Azure Database for MySQL フレキシブル サーバーを作成するを参照してください。 次に、 という名前のデータベースを作成します。 手順については、「フレキシブル サーバーのデータベースの作成と管理Azure Database for MySQLを参照してください。
重要
パスワードレス接続を使用するには、Azure Database for MySQL インスタンスのMicrosoft Entra管理者ユーザーを作成します。 手順については、「Microsoft Entra 管理者の構成」セクションにある「Azure Database for MySQL - フレキシブル サーバー」用 Microsoft Entra 認証の設定を参照してください。
サンプル アプリケーション参照
このチュートリアルでは、サンプル アプリケーションをコーディングします。 ご利用を急いでいる場合、このアプリケーションは既に開発済みで、https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql から利用可能です。
MySQL サーバーのファイアウォール規則を構成する
Azure Database for MySQL インスタンスは既定でセキュリティで保護されます。 受信接続を一切許可しないファイアウォールがあります。
データベースを使用できるようにするには、サーバーのファイアウォールを開いて、データベース サーバーにアクセスするためのローカル IP アドレスを許可する必要があります。 詳細については、「Azure ポータルを使用した Azure Database for MySQL - フレキシブル サーバーのファイアウォール規則の管理を参照してください。
Windows コンピューター上の Linux 用 Windows サブシステム (WSL) から MySQL サーバーに接続する場合は、WSL ホスト IP アドレスをファイアウォールに追加する必要があります。
MySQL の非管理者ユーザーを作成し、アクセス許可を付与する
この手順では、管理者以外のユーザーを作成し、 データベースに対するすべてのアクセス許可をそのユーザーに付与します。
- パスワードレス (推奨)
- パスワード
次の方法を使用して、パスワードレス接続を使用する管理者以外のユーザーを作成できます。
- サービスコネクター (推奨)
- 手動で構成
次のコマンドを使用して、Azure CLIのService Connector パスワードなしの拡張機能をインストールします。
az extension add --name serviceconnector-passwordless --upgrade次のコマンドを使用して、管理者以外のユーザー Microsoft Entra作成します。
az connection create mysql-flexible \ --resource-group <your_resource_group_name> \ --connection mysql_conn \ --target-resource-group <your_resource_group_name> \ --server mysqlflexibletest \ --database demo \ --user-account mysql-identity-id=/subscriptions/<your_subscription_id>/resourcegroups/<your_resource_group_name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<your_user_assigned_managed_identity_name> \ --query authInfo.userName \ --output tsvコマンドが完了したら、コンソール出力のユーザー名を書き留めます。
Azure Database for MySQLからデータを格納する
Azure Database for MySQLフレキシブル サーバー インスタンスが作成されたので、Spring Cloud Azureを使用してデータを格納できます。
Spring Cloud Azure Starter JDBC MySQL モジュールをインストールするには、次の依存関係を pom.xml ファイルに追加します。
Spring Cloud Azure部品表 (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>注
Spring Boot 4.0.x を使用している場合は、必ず バージョンを に設定してください。
Spring Boot 3.5.x を使用している場合は、必ず バージョンを に設定してください。
Spring Boot 3.1.x-3.5.x を使用している場合は、必ず バージョンを に設定してください。
Spring Boot 2.xを使用している場合は、 バージョンを に設定してください。
この部品表(BOM)は、あなたのpom.xmlファイルのセクションで設定する必要があります。 これにより、すべての Spring Cloud Azure依存関係で同じバージョンが使用されるようになります。
この BOM に使用されるバージョンの詳細については、「どのバージョンの Spring Cloud Azure を使用すべきですか?」を参照してください。
Spring Cloud Azure Starter JDBC MySQL アーティファクト:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
注
パスワードレス接続はバージョン 以降サポートされています。
Azure Database for MySQLを使用するように Spring Boot を構成する
Spring Data JPA を使用してAzure Database for MySQLからデータを格納するには、次の手順に従ってアプリケーションを構成します。
Azure Database for MySQL資格情報を構成するには、application.properties 構成ファイルに次のプロパティを追加します。
- パスワードレス (推奨)
- パスワード
logging.level.org.hibernate.SQL=DEBUG spring.datasource.azure.passwordless-enabled=true spring.datasource.url=jdbc:mysql://mysqlflexibletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC spring.datasource.username=<your_mysql_ad_non_admin_username> spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8Dialect警告
構成プロパティ に が追加されているのは、データベースへの接続時に UTC 日付形式 (協定世界時) を使用するように JDBC ドライバーに指示するためです。 このパラメーターがないと、Java サーバーはデータベースと同じ日付形式を使用しないため、エラーが発生します。
- お持ちでない場合は、
mysqlsingletestという名前の Azure Database for MySQL Single Server インスタンスを作成します。 手順については、「Quickstart: Azure ポータルを使用してAzure Database for MySQL サーバーを作成するを参照してください。 次に、 という名前のデータベースを作成します。 手順については、「データベースの作成」の「create users in Azure Database for MySQL」セクションを参照してください。
重要
パスワードレス接続を使用するには、Azure Database for MySQL インスタンスのMicrosoft Entra管理者ユーザーを作成します。 手順については、「
サンプル アプリケーション参照
この記事では、サンプル アプリケーションをコーディングします。 ご利用を急いでいる場合、このアプリケーションは既に開発済みで、https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql から利用可能です。
MySQL サーバーのファイアウォール規則を構成する
Azure Database for MySQL インスタンスは既定でセキュリティで保護されます。 受信接続を一切許可しないファイアウォールがあります。
データベースを使用できるようにするには、サーバーのファイアウォールを開いて、データベース サーバーにアクセスするためのローカル IP アドレスを許可する必要があります。 詳細については、「Azure ポータルを使用してAzure Database for MySQLファイアウォール規則を作成および管理するを参照してください。
Windows コンピューター上の Linux 用 Windows サブシステム (WSL) から MySQL サーバーに接続する場合は、WSL ホスト IP アドレスをファイアウォールに追加する必要があります。
MySQL の非管理者ユーザーを作成し、アクセス許可を付与する
この手順では、管理者以外のユーザーを作成し、 データベースに対するすべてのアクセス許可をそのユーザーに付与します。
- パスワードレス (推奨)
- パスワード
重要
パスワードレス接続を使用するには、Azure Database for MySQL インスタンスのMicrosoft Entra管理者ユーザーを作成します。 詳細については、「> MySQL での認証にMicrosoft Entra IDを使用する のMicrosoft Entra管理者ユーザーの設定」セクションを参照>。
非管理者ユーザーを作成するための create_ad_user.sql という名前の SQL スクリプトを作成します。 次の内容を追加し、ローカルに保存します。
export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '<your_mysql_ad_non_admin_username>' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON demo.* TO '<your_mysql_ad_non_admin_username>'@'%';
FLUSH privileges;
EOF
次に、次のコマンドを使用して SQL スクリプトを実行し、管理者以外のユーザー Microsoft Entra作成します。
mysql -h mysqlsingletest.mysql.database.azure.com --user <your_mysql_ad_admin_username>@mysqlsingletest --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
ヒント
Microsoft Entra認証を使用してAzure Database for MySQLに接続するには、設定したMicrosoft Entra管理者ユーザーでサインインし、アクセス トークンをパスワードとして取得する必要があります。 詳細については、「 MySQL での認証にMicrosoft Entra IDを使用するを参照してください。
Azure Database for MySQLからデータを格納する
Azure Database for MySQL単一サーバー インスタンスが作成されたので、Spring Cloud Azureを使用してデータを格納できます。
Spring Cloud Azure Starter JDBC MySQL モジュールをインストールするには、次の依存関係を pom.xml ファイルに追加します。
Spring Cloud Azure部品表 (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>注
Spring Boot 4.0.x を使用している場合は、必ず バージョンを に設定してください。
Spring Boot 3.5.x を使用している場合は、必ず バージョンを に設定してください。
Spring Boot 3.1.x-3.5.x を使用している場合は、必ず バージョンを に設定してください。
Spring Boot 2.xを使用している場合は、 バージョンを に設定してください。
この部品表(BOM)は、あなたのpom.xmlファイルのセクションで設定する必要があります。 これにより、すべての Spring Cloud Azure依存関係で同じバージョンが使用されるようになります。
この BOM に使用されるバージョンの詳細については、「どのバージョンの Spring Cloud Azure を使用すべきですか?」を参照してください。
Spring Cloud Azure Starter JDBC MySQL アーティファクト:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
注
パスワードレス接続はバージョン 以降サポートされています。
Azure Database for MySQLを使用するように Spring Boot を構成する
Spring Data JPA を使用してAzure Database for MySQLからデータを格納するには、次の手順に従ってアプリケーションを構成します。
Azure Database for MySQL資格情報を構成するには、application.properties 構成ファイルに次のプロパティを追加します。
- パスワードレス (推奨)
- パスワード
logging.level.org.hibernate.SQL=DEBUG spring.datasource.azure.passwordless-enabled=true spring.datasource.url=jdbc:mysql://mysqlsingletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC spring.datasource.username=<your_mysql_ad_non_admin_username>@mysqlsingletest spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8Dialect警告
構成プロパティ に が追加されているのは、データベースへの接続時に UTC 日付形式 (協定世界時) を使用するように JDBC ドライバーに指示するためです。 このパラメーターがないと、Java サーバーはデータベースと同じ日付形式を使用しないため、エラーが発生します。
新しい
TodoJava クラスを作成します。 このクラスは、JPA によって自動的に作成される、 テーブルにマップされたドメイン モデルです。 次のコードは、あるメソッドと、別のメソッドを無視します。package com.example.demo; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Todo { public Todo() { } public Todo(String description, String details, boolean done) { this.description = description; this.details = details; this.done = done; } @Id @GeneratedValue private Long id; private String description; private String details; private boolean done; }スタートアップ クラス ファイルを編集して、次の内容を表示します。
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.JpaRepository; import java.util.stream.Collectors; import java.util.stream.Stream; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean ApplicationListener<ApplicationReadyEvent> basicsApplicationListener(TodoRepository repository) { return event->repository .saveAll(Stream.of("A", "B", "C").map(name->new Todo("configuration", "congratulations, you have set up correctly!", true)).collect(Collectors.toList())) .forEach(System.out::println); } } interface TodoRepository extends JpaRepository<Todo, Long> { }ヒント
このチュートリアルでは、構成またはコードに認証操作はありません。 ただし、Azure サービスに接続するには認証が必要です。 認証を完了するには、Azure ID を使用する必要があります。 Spring Cloud Azureでは
DefaultAzureCredentialを使用します。これは、コードを変更せずに資格情報を取得するのに役立つAzure ID ライブラリが提供します。は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境など) で異なる認証方法をアプリに使用できます。 詳細については、DefaultAzureCredential を参照してください。
ローカル開発環境で認証を完了するには、Azure CLI、Visual Studio Code、PowerShell、またはその他の方法を使用できます。 詳細については、「Java開発環境での Azure 認証を参照してください。 Azureホスティング環境で認証を完了するには、ユーザー割り当てマネージド ID を使用することをお勧めします。 詳細については、「Azure リソースのマネージド ID とは」を参照してください>
アプリケーションを起動します。 次の例のようなログが表示されます。
2023-02-01 10:29:19.763 DEBUG 4392 --- [main] org.hibernate.SQL : insert into todo (description, details, done, id) values (?, ?, ?, ?) com.example.demo.Todo@1f
Azure Spring Appsにデプロイする
Spring Boot アプリケーションがローカルで実行されたので、運用環境に移行します。 Azure Spring Apps を使用すると、コードを変更することなく、Spring Boot アプリケーションをAzureに簡単にデプロイできます。 Spring アプリケーションのインフラストラクチャはこのサービスによって管理されるため、開発者はコードに専念できます。 Azure Spring Appsでは、包括的な監視と診断、構成管理、サービス検出、CI/CD 統合、ブルーグリーンデプロイなどを使用したライフサイクル管理が提供されます。 アプリケーションをAzure Spring Appsにデプロイするには、「初めてのアプリケーションを Azure Spring Apps にデプロイする」を参照してください。
次のステップ
Spring 開発者向けの AzureSpring Cloud Azure MySQL サンプル