Contents
Azure に Java アプリをデプロイする全体像と選定基準
Java アプリケーションを Azure に置く際に最初に行うべきは、「どのホスティング形態が自分の要件に最も合致しているか」 を見極めることです。本章では、代表的な 4 種類(App Service、Virtual Machines、Web App for Containers、Azure Kubernetes Service)を機能・運用負荷だけでなく コスト・SLA の観点から比較し、選択の指針を示します。
ポイント:PaaS が最も手軽ですが、スケール要件やレガシー依存が強い場合はコンテナ化/フル K8s へ段階的に移行するのが一般的です。
1. サービス比較表(機能・運用負荷・コスト・SLA)
| サービス | 主な提供形態 | 運用負荷* | 推奨シナリオ | 月額目安 (Standard/T2)※ | SLA |
|---|---|---|---|---|---|
| App Service(Linux / Windows) | PaaS の Web アプリホスティング | 低 – OS・ミドルウェアは Azure が管理 | 小〜中規模の REST API、Spring Boot 単体起動 | 約 ¥2,500/月 (B1) 〜 ¥15,000/月 (Standard S2) | 99.95%(単一インスタンス) |
| Virtual Machines | IaaS の仮想サーバー | 高 – OS パッチ、ランタイム、セキュリティは自前 | レガシーアプリの lift‑and‑shift、OS 固有要件がある場合 | 約 ¥4,000/月(B2s)〜 ¥30,000/月(Dsv3 系列) | 99.9%(単一 VM) |
| Web App for Containers | コンテナ単位の PaaS (Docker) | 中 – イメージ管理のみ必要 | Docker 化した Spring Cloud、Micronaut 等 | 同左 App Service の料金体系で利用可 | 99.95%(App Service と同一) |
| Azure Kubernetes Service (AKS) | フルマネージド K8s クラスタ | 中〜高 – クラスタ運用は Azure が支援、ただしワーカーノードは自前管理 | マイクロサービス・頻繁なスケールアウトが必要な大規模システム | 管理プレーンは無料。ノードは VM と同等料金(例: D2s_v3 で約 ¥12,000/月) | 99.95%(マネージドコントロールプレーン) |
* 運用負荷 は「日常的に必要になる管理作業の多さ」の目安です。
※ 料金は 2026 年 4 月時点で日本リージョン (East Japan) の参考値です。実際の請求額は選択した SKU、使用量、割引(予約インスタンス等)に依存します。
2. 選定フロー(冗長表現を排除)
- 既存環境の要件 → OS / ミドルウェアが固定か?
- 固定なら VM、柔軟であれば次へ。
- 開発スピードと運用コスト → 速くデプロイしたいか?
- 「コードだけをプッシュ」できる App Service (Linux) が最適。
- コンテナ化の有無 → Docker イメージで管理したいか?
- はい → Web App for Containers(PaaS)または AKS(本格的なオーケストレーション)。
- スケール要件 → 数十〜数百コンテナの同時稼働が必要か?
- 大規模なら AKS、中小規模であれば Web App for Containers がシンプル。
この 4 段階を順に確認すれば、冗長な比較表や「PaaS→コンテナ化→フル K8s」の記述に悩むことはなくなります。
デプロイ前の事前準備
本章では Azure CLI・Java 開発環境・Eclipse Toolkit の 最新版取得方法 とインストール手順を示します。全てのコマンドは Bash/PowerShell どちらでも実行可能です。
2‑1. Azure CLI(常に最新バージョン)
|
1 2 3 4 5 6 |
# Linux (Debian/Ubuntu 系) – 最新版取得スクリプト curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash # macOS – Homebrew 経由で自動アップデート可能 brew update && brew upgrade azure-cli |
最新版確認:
az version --output jsonでazure-cliのバージョンが表示されます。定期的に (az upgrade) 実行して更新してください。
2‑2. Java SDK・Maven(または Gradle)
| ツール | 推奨取得手段 | 最新版確認コマンド |
|---|---|---|
| JDK (OpenJDK) | sdkman または OS パッケージマネージャ |
java -version |
| Maven | sdkman install maven、または公式バイナリの tar.gz を展開 |
mvn -v |
| Gradle | sdkman install gradle(必要に応じ) |
gradle -v |
Ubuntu でのインストール例(OpenJDK 17 + Maven)
|
1 2 3 4 5 6 7 8 9 10 |
sudo apt-get update sudo apt-get install -y openjdk-17-jdk curl tar # Maven (最新版取得) curl -sL https://downloads.apache.org/maven/maven-3/$(curl -s https://archive.apache.org/dist/maven/maven-3/ | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+/' | tail -1)/binaries/apache-maven-$(curl -s https://archive.apache.org/dist/maven/maven-3/ | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+/' | tail -1)-bin.tar.gz \ | tar xz -C $HOME export MAVEN_HOME=$HOME/apache-maven-$(curl -s https://archive.apache.org/dist/maven/maven-3/ | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+/' | tail -1) export PATH=$MAVEN_HOME/bin:$PATH mvn -v # 例: Apache Maven 3.9.8 |
2‑3. Eclipse Azure Toolkit for Java
- Eclipse Marketplace → 「Azure Toolkit for Java」検索
- Install → 必要な依存関係を確認し、再起動後に Azure Explorer ビューが表示されれば完了。
- バージョンは Help → About Eclipse から「Installed Software」で確認し、Marketplace の「Updates」タブで随時更新してください。
Maven プラグインで Azure App Service にデプロイ(Linux / Windows 共通)
公式プラグイン azure-webapp-maven-plugin は pom.xml に数行追記するだけでデプロイが完了します。以下では最新バージョン取得方法と、Windows 用 startupCommand の具体例を示します。
3‑1. プラグインの最新版取得
|
1 2 3 4 |
# Maven Central から最新リリース番号を取得(例: 2.12.0 が最新) LATEST=$(curl -s https://search.maven.org/solrsearch/select?q=g:%22com.microsoft.azure%22+AND+a:%22azure-webapp-maven-plugin%22&rows=1&wt=json | jq -r '.response.docs[0].latestVersion') echo "Latest azure-webapp-maven-plugin version: $LATEST" |
3‑2. pom.xml への設定例(Linux)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<build> <plugins> <plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>${LATEST}</version><!-- 上記で取得した最新版 --> <configuration> <resourceGroup>java-demo-rg</resourceGroup> <appName>java-demo-appsvc</appName> <region>japaneast</region> <runtime> <os>Linux</os> <javaVersion>Java 17</javaVersion> <webContainer>JAR</webContainer> </runtime> </configuration> </plugin> </plugins> </build> |
3‑3. Windows 用 startupCommand の書き方と公式ドキュメント
Windows App Service は IIS がデフォルトハンドラになる ため、app.jar だけでは自動起動されません。startupCommand に明示的に Java 起動コマンドを指定する必要があります。
|
1 2 3 4 5 6 7 8 |
<configuration> … <deployment> <!-- 例: メモリ上限 1GB、プロファイル prod を有効化 --> <startupCommand>java -Xms512m -Xmx1024m -jar app.jar --spring.profiles.active=prod</startupCommand> </deployment> </configuration> |
- ポイント
app.jarの名前は必ず「app.jar」に統一してください(Azure が自動で検出)。-
環境変数を使う場合は
setx JAVA_OPTS "…"等で事前に設定し、startupCommandはシンプルに保ちます。 -
公式ドキュメント:https://learn.microsoft.com/ja-jp/azure/app-service/configure-custom-container-startup-command#windows
(「Configure custom startup command for Windows」ページ)
3‑4. デプロイ実行
|
1 2 |
mvn clean package azure-webapp:deploy # Linux と Windows 共通コマンド |
成功すると、以下のようなメッセージが表示されます。
|
1 2 3 |
[INFO] Deploying to Azure Web App java-demo-appsvc (Linux) … [INFO] Deployment successful. URL: https://java-demo-appsvc.azurewebsites.net |
コンテナ化とフルマネージド K8s の活用
4‑1. Docker イメージの作成と ACR へのプッシュ
|
1 2 3 4 5 6 |
# Dockerfile(Spring Boot 用) FROM eclipse-temurin:17-jre-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] |
手順(最新 CLI を利用)
|
1 2 3 4 5 6 7 8 |
# ACR 作成(SKU は Basic で十分) az acr create -n javaacr -g java-demo-rg --sku Basic # ログイン & イメージビルド・プッシュ az acr login -n javaacr docker build -t javaacr.azurecr.io/java-demo:$(date +%s) . docker push javaacr.azurecr.io/java-demo:latest |
4‑2. Web App for Containers にデプロイ(Startup Command 不要)
|
1 2 3 4 5 6 7 |
az webapp create \ --resource-group java-demo-rg \ --plan java-plan \ --name java-demo-container \ --deployment-container-image-name javaacr.azurecr.io/java-demo:latest \ --runtime "java|17" |
備考:
DockerfileのENTRYPOINTがそのままコンテナ起動コマンドになるため、App Service の「Startup Command」設定は空のままで問題ありません。
4‑3. AKS クラスタ作成とデプロイ(最新版取得)
|
1 2 3 4 5 6 7 8 9 10 |
# 最新安定版 Kubernetes バージョンを取得 AKS_VER=$(az aks get-versions -l japaneast --query "orchestrators[-1].orchestratorVersion" -o tsv) az aks create \ -g java-demo-rg -n java-aks \ --node-count 2 \ --kubernetes-version $AKS_VER \ --generate-ssh-keys \ --enable-addons monitoring |
デプロイマニフェスト例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
apiVersion: apps/v1 kind: Deployment metadata: name: java-demo spec: replicas: 2 selector: matchLabels: app: java-demo template: metadata: labels: app: java-demo spec: containers: - name: java-demo image: javaacr.azurecr.io/java-demo:latest ports: - containerPort: 8080 |
|
1 2 3 |
kubectl apply -f deployment.yaml kubectl expose deployment java-demo --type LoadBalancer --port 80 --target-port 8080 |
SLA 補足:AKS のコントロールプレーンは 99.95% の SLA が適用され、ノードは使用する VM と同等です。
Virtual Machine に手動デプロイ(レガシー向け)
| 手順 | コマンド例 |
|---|---|
| VM 作成(Ubuntu LTS) | az vm create -g java-demo-rg -n java-vm --image UbuntuLTS --admin-username azureuser --generate-ssh-keys |
| SSH 接続 | ssh azureuser@<public-ip> |
| ランタイム構築 | sudo apt-get install -y openjdk-17-jdk maven git |
| アプリ配置 & Systemd サービス化 | 参考スクリプトは下表参照 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# /etc/systemd/system/java-demo.service [Unit] Description=Java Demo Service After=network.target [Service] ExecStart=/usr/bin/java -jar /opt/app.jar Restart=always User=azureuser EnvironmentFile=-/opt/java-demo.env # 必要なら環境変数ファイル [Install] WantedBy=multi-user.target |
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl enable --now java-demo.service |
コスト比較:VM は常時稼働が前提になるため、スケールダウンの自動化(Azure Automation、Scheduled VM)を組み込むと費用削減につながります。
デプロイ後の確認・トラブルシューティング
5‑1. エンドポイント検証とログ取得
| 方法 | コマンド |
|---|---|
| ブラウザで直接確認 | https://<app-name>.azurewebsites.net |
| CLI でリアルタイムログ取得(App Service) | az webapp log tail -g java-demo-rg -n java-demo-appsvc |
| AKS の Pod ログ取得 | kubectl logs -f deployment/java-demo |
5‑2. Application Insights 有効化手順
- ポータル → App Service → Application Insights → 「オン」に切替
az monitor app-insights component create -a java-demo-ai -g java-demo-rg --location japaneast(CLI)で自動作成も可能
効果:リクエストレイテンシ、例外率、依存関係呼び出しを 1 分単位で可視化でき、障害原因の特定が容易になります。
5‑3. よくあるエラーと対策
| エラーメッセージ | 想定原因 | 確認ポイント | 推奨解決策 |
|---|---|---|---|
502 Bad Gateway (App Service) |
startupCommand が未設定、または JAR 名が不一致 |
Log Stream に「No such file」エラー | app.jar にリネームし、Windows なら startupCommand を追加 |
Container failed to start (AKS) |
Docker イメージのレイヤー破損、環境変数未設定 | kubectl describe pod <pod> の Events |
イメージを再ビルドし、正しいタグでプッシュ |
| VM 起動後にポート 8080 が開かない | ファイアウォール(NSG)でブロック | Azure ポータルの ネットワーク インターフェイス → 受信規則 | NSG に Allow TCP 8080 を追加 |
まとめと次のステップ
- 選定は「OS 要件 → 開発速度 → コンテナ化 → スケール」順に評価し、コスト・SLA も必ず比較ポイントに入れましょう。
- 事前準備では Azure CLI と開発ツールの 最新版 を取得し、定期的なアップデートを自動化しておくとトラブル防止になります。
- App Service の Windows 起動コマンドは公式ドキュメントリンク付きで必ず記述し、
app.jar名との整合性を保つことが成功の鍵です。 - コンテナ化・AKSは CI/CD パイプライン(GitHub Actions / Azure DevOps)と組み合わせることで本格運用が可能になります。
次に取り組むべきは、実際にサンプルアプリを作成し、App Service (Linux) にデプロイ → ログ・Insights で動作確認 → 必要に応じて Windows 用
startupCommandを追加というフローです。これができれば、以降のコンテナ化や AKS 移行もスムーズに進められます。
参考リンク集
| 内容 | URL |
|---|---|
| Azure Java デプロイ選択ガイド | https://learn.microsoft.com/ja-jp/azure/developer/java/get-started/choose |
| App Service(Windows) Startup Command 公式ドキュメント | https://learn.microsoft.com/ja-jp/azure/app-service/configure-custom-container-startup-command#windows |
| Azure CLI バージョン確認・アップグレード | https://learn.microsoft.com/cli/azure/install-azure-cli?view=azure-cli-latest |
| Maven Plugin 最新版取得例(JSONPath) | https://search.maven.org/ |
| Eclipse Azure Toolkit for Java (Marketplace) | https://marketplace.eclipse.org/content/azure-toolkit-java |
| AKS バージョン取得スクリプト | https://learn.microsoft.com/ja-jp/cli/azure/aks?view=azure-cli-latest#az_aks_get_versions |
以上が、指摘事項をすべて反映した改訂版です。文字数・構成・表記揺れの改善に加え、最新版取得手順とコスト/SLA の比較情報を新たに掲載しました。ぜひこのガイドラインに沿って Azure 上で Java アプリケーションを安全かつ効率的にデプロイしてください。