JAVA

Spring Boot 3.xでマイクロサービス構築・Docker/Kubernetesデプロイ完全ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1. プロジェクトの作成と依存関係

1‑1. Spring Initializr の利用

Spring Boot 3 系は Jakarta EE 9 に対応し、標準 JDK は Java 17 LTS(以降「最新安定版」)です。
以下の手順でプロジェクトを生成します。

bootVersion は Spring の公式 API (https://api.spring.io) から取得することで、常に最新の安定版を使用できます。

1‑2. ビルド設定(Gradle Kotlin DSL)

生成された build.gradle.kts に自動で以下が追加されます。

ポイント
- バージョンは 3.+1.9+ のように「キャレット」表記で記載し、将来のリリースでも自動的に解決させます。
- 公式ドキュメント: https://spring.io/projects/spring-boot#overview


2. REST API 実装のベストプラクティス

2‑1. レイヤードアーキテクチャと DDD の基本方針

主な責務
Domain エンティティ / 集約 (ビジネスロジック)
Application ユースケース・サービス (トランザクション境界)
Infrastructure リポジトリ実装、外部 API クライアント等

この構造により「層間の依存が一方向」になるため、テスト容易性と置き換え可能性が向上します。

2‑2. サンプルコード(Order マイクロサービス)

まとめ
- Order は集約のルートとして、外部からは必ず OrderService を経由して操作します。
- @Transactional によりビジネスロジックがデータ層に依存しない形で実装できます。


3. Docker イメージの最適化

3‑1. マルチステージビルド(公式例)

3‑2. イメージサイズとセキュリティのチップス

項目 推奨設定
不要ファイル削除 RUN rm -rf /src/src/test && apk del ...(Alpine の場合)
ユーザー権限 既に non‑root イメージを使用しているので追加設定は不要。ただし独自ベースイメージの場合は USER 1000:1000 を明示。
脆弱性スキャン GitHub Actions → aquasecurity/trivy-action(公式ドキュメント: https://github.com/aquasecurity/trivy-action

4. Kubernetes マニフェストと共通設定

4‑1. 基本リソース(Deployment・Service・Ingress)

ポイント
- DeploymentServiceIngress のみで外部公開が完結し、クラウド固有の差分は アノテーション に集約。
- 公式ドキュメント:
* EKS Ingress (ALB) – https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html
* Azure Application Gateway Ingress – https://learn.microsoft.com/azure/application-gateway/ingress-controller-overview

4‑2. ConfigMap と Secret の管理

  • ベストプラクティス
  • 機密情報は必ず Secret に格納し、Pod の環境変数として注入 (envFrom)。
  • ネットワークポリシーで名前空間外からのアクセスを制限(例: NetworkPolicy

5. AWS EKS と Azure Container Apps へのデプロイ手順

5‑1. 共通前提条件

項目 推奨設定
Kubernetes バージョン 各クラウドの「最新安定版」(2026‑04 時点で EKS は v1.30、Azure は AKS の同等バージョン) – 公式ページで随時確認
コンテナレジストリ Amazon ECR / Azure Container Registry (ACR)。イメージは同一タグでプッシュし、マニフェストは image: <registry>/order-service:${VERSION} と変数化

AWS EKS デプロイフロー

公式ガイド: https://docs.aws.amazon.com/eks/latest/userguide/deploying-services.html

Azure Container Apps デプロイフロー

公式ドキュメント: https://learn.microsoft.com/azure/container-apps/

中立的な比較
- 両者とも「Kubernetes の上に構築されたマネージドサービス」ですが、EKS は自前のクラスター管理が必要になる一方で、より高度なカスタマイズが可能です。Azure Container Apps はサーバーレス的に インフラ運用負荷が低く、短時間で外部公開できます。


6. CI/CD パイプラインと Observability の実装例

6‑1. GitHub Actions ワークフロー(マルチクラウド対応)

  • secrets に格納すべき情報は公式ドキュメントに従い、最小権限の IAM ロール/Service Principal を使用してください。

6‑2. Observability(Actuator + Prometheus/Grafana)

6‑2‑1. application.yml の設定

公式リファレンス: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.metrics.export.prometheus

6‑2‑2. Prometheus の ServiceMonitor(EKS)

Azure では Azure MonitorscrapeConfiguration に同様のエンドポイントを追加すれば、同一メトリクスが取得できます。

6‑2‑3. Grafana ダッシュボードインポート

Grafana Hub にある「Spring Boot 3 Dashboard」 (ID: 11074) をインポートすると、CPU・GC・HTTP レイテンシなどが即座に可視化されます。

6‑3. テスト戦略(JUnit 5 + Testcontainers + Pact)

種類 ツール 主な利点
ユニットテスト JUnit 5 + MockMvc コントローラ単体を高速に検証
統合テスト Testcontainers (PostgreSQL) 本番と同一 DB コンテナで実行、環境差異排除
契約テスト Pact JVM Consumer と Provider の API 互換性をコードベースで管理

結論
上記ツールチェーンにより、ローカル・CI 両方で 90 % 以上のカバレッジ を維持しつつ、リグレッションリスクを最小化できます。


7. 次に取るべきステップ

  1. ローカル検証
    bash
    docker compose up --build
    curl http://localhost:8080/api/orders
  2. マルチクラウドデプロイの確認
  3. EKS クラスターで kubectl get ingress → ALB の DNS が取得できるか。
  4. Azure Container Apps でポータルまたは CLI から外部 URL が生成されているか。

  5. CI/CD と Observability を本番環境に適用

  6. 本番向けに resources.requests/limits の調整、PodDisruptionBudget の追加。
  7. アラートポリシー(CPU > 80 % 連続5分)やログ集約(CloudWatch / Azure Monitor)を設定。

  8. 継続的なバージョン管理

  9. Spring Boot、Java、Kubernetes の各コンポーネントは「公式 API」または「リリースノート」から最新安定版を取得するスクリプト(例: curl https://api.spring.io/...)で自動化し、ドキュメントのバージョン固定を避ける。

最終的なまとめ
- Spring Boot 3.x + Java 17 が現在の標準スタック。
- マルチステージ Docker と Distroless により サイズ 120 MB 前後、非 root 実行 を実現。
- Kubernetes の 共通マニフェスト とクラウド固有アノテーションで、AWS EKS と Azure Container Apps の両方に同一コードベースをデプロイ可能。
- GitHub Actions で ビルド・テスト・スキャン・マルチレジストリプッシュ・自動デプロイ を一括管理し、Trivy による脆弱性検知と Prometheus/Grafana による可観測性を確保。
- テストは JUnit 5 + Testcontainers + Pact の組み合わせで、品質保証を自動化。

これらの手順を踏めば、最新のクラウド基盤上で安全かつスケーラブルな Java マイクロサービスを短期間に構築・運用できるようになります。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-JAVA