Spring Boot マイクロサービスをビルドする
このモジュールでは、クラウド対応の Spring Boot マイクロサービスを構築します。 これは、どちらも Azure Spring Apps で管理およびサポートされる Spring Cloud Service レジストリと Spring Cloud Config Server を使用します。
このマイクロサービスは、Spring Data JPA を使用して Azure Database for MySQL データベースとの間で、データの読み書きを行います。
- Azure Spring Apps は、そのデータベースをサービスに自動的にバインドします。
- Azure Database for MySQL は、Azure 上で実行されるフル マネージド バージョンの MySQL です。
Azure Spring Apps にアプリケーションを作成する
Azure Spring Apps インスタンスに特定の todo-service
アプリケーションを作成します。
az spring app create --name todo-service --resource-group "$RESOURCE_GROUP_NAME" --service "$SPRING_CLOUD_NAME" --runtime-version Java_17
MySQL データベースを作成する
ここで Azure Database for MySQL を作成します。
az mysql server create \
--name ${SPRING_CLOUD_NAME}-mysql \
--resource-group "$RESOURCE_GROUP_NAME" \
--sku-name B_Gen5_1 \
--storage-size 5120 \
--admin-user "spring"
この操作には数分かかることがあり、JSON ドキュメントが出力されます。そのドキュメント内の password 属性は後で使用するため、コピーしておきます。
次に、そのサーバーに todos データベースを作成し、そのファイアウォールを開いて、Azure Spring Apps からアクセスできるようにします。
az mysql db create \
--name "todos" \
--server-name ${SPRING_CLOUD_NAME}-mysql
az mysql server firewall-rule create \
--name ${SPRING_CLOUD_NAME}-mysql-allow-azure-ip \
--resource-group "$RESOURCE_GROUP_NAME" \
--server ${SPRING_CLOUD_NAME}-mysql \
--start-ip-address "0.0.0.0" \
--end-ip-address "0.0.0.0"
この操作が完了したら、このワークショップ用に作成したリソース グループに作成されたものを確認できます。
MySQL データベースをアプリケーションにバインドする
Azure Spring Apps により、作成した MySQL データベースをこのマイクロサービスに自動的にバインドできます。
ご使用の Azure Spring Apps インスタンスにアクセスします。
アプリを選択します。
todo-service アプリケーションを選択します。
[サービス コネクタ] を選択し、[+ 作成] を選択します。
- [サービスの種類] に、[DB for MySQL 単一サーバー] を選択します。
- 接続名を指定します (例: mysql_todos)。
- 正しいサブスクリプションが表示されていることを確認します。
- 前の手順で作成した MySQL サーバーを選択します。
- 前に作成した MySQL データベースを選択します。
- [クライアントの種類] として SpringBoot を選択します。
- 下部にある [次: 認証] ボタンを選択します。
[認証] ページで、[接続文字列] が選択されていることを確認します。
[続行...データベース資格情報] を選択し、ユーザー名とパスワードのフィールドに入力します。 ユーザー名は "spring" で、パスワードは前にコピーした password 属性です。
Note
パスワードを忘れた場合は、
az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password>
を使用してパスワードをリセットできます[Configure firewall rules to enable access to target service] (ターゲット サービスへのアクセスを有効にするようにファイアウォール規則を構成する) が選択されていることを確認します。
[次へ: 確認と作成] をクリックします。
[検証に合格しました] メッセージが表示されたら、[作成] ボタンを選択して サービス コネクタを作成します。
Spring Boot マイクロサービスを作成する
これで、Azure Spring Apps インスタンスをプロビジョニングし、サービス バインドを構成したので、todo-service
のコードを準備しましょう。
マイクロサービスを作成するには、コマンド ラインで https://start.spring.io を使用します。
curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=web,mysql,data-jpa,cloud-eureka,cloud-config-client -d baseDir=todo-service -d bootVersion=3.1.5.RELEASE -d javaVersion=17 | tar -xzvf -
Note
Spring Web
、MySQL Driver
、Spring Data JPA
、Eureka Discovery Client
、Config Client
の各コンポーネントを使用します。
Spring Data JPA を使用してデータを管理するための Spring コードを追加する
DemoApplication
クラスの横に、Todo
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, boolean done) {
this.description = description;
this.done = done;
}
@Id
@GeneratedValue
private Long id;
private String description;
private boolean done;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
}
次に、このエンティティを管理するために、TodoRepository
と呼ばれる Spring Data JPA リポジトリを作成します。
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TodoRepository extends JpaRepository<Todo, Long> {
}
TodoController
という Spring MVC コントローラーを追加して、このアプリケーションのコーディングを終了します。
package com.example.demo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import java.util.Arrays;
@RestController
public class TodoController {
private final TodoRepository todoRepository;
public TodoController(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
@PostConstruct
public void init() {
todoRepository.saveAll(Arrays.asList(
new Todo("First item", true),
new Todo("Second item", true),
new Todo("Third item", false)));
}
@GetMapping("/")
public Iterable<Todo> getTodos() {
return todoRepository.findAll();
}
}
データベース テーブルを作成するように Spring Boot を構成する
アプリケーションの配置時にデータベース テーブルが自動的に生成されるようにするには、src/main/resources/application.properties
構成ファイルに次の行を追加します。
spring.jpa.hibernate.ddl-auto=create-drop
アプリケーションをデプロイする
これで、"todo-service" プロジェクトをビルドし、Azure Spring Apps に送信できるようになりました。
cd todo-service
./mvnw clean package -DskipTests
az spring app deploy --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" --artifact-path target/demo-0.0.1-SNAPSHOT.jar
cd ..
何らかの問題が発生したときに、アプリケーションのログを確認する場合は、az spring app logs
コマンドを使用できます。
az spring app logs --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" -f
クラウドでプロジェクトをテストする
アプリケーションがデプロイされたので、次にそれをテストします。
- Azure portal で、Azure Spring Apps インスタンスの [アプリ] に移動します。
- todo-gateway の登録状態が 0/1 になっていることを確認します。 この情報は、Spring Cloud Service Registry に正しく登録されていることを示しています。
- todo-service を選択し、マイクロサービスの詳細情報を取得します。
- 用意されている "テスト エンドポイント" をコピーして貼り付けます。
これで、cURL を使用してエンドポイントをテストできます。 テスト コマンドは次のようになります。
curl https://primary:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@azure-spring-cloud-workshop.test.azuremicroservices.io/todo-service/default/
そして、このコマンドの結果は、MySQL データベースに前に挿入された 3 つの項目になります。
[{"id":"1","description":"First item","done":true},{"id":"2","description":"Second item","done":true},{"id":"3","description":"Third item","done":false}]