Sekibanアプリを本格運用に向けてAzure App Serviceにデプロイする
前回の記事では、Sekibanを使ったイベントソーシング+アクターモデルのアプリケーション開発について解説しました。今回は、開発したアプリケーションを実際にAzureにデプロイして本格運用する方法について解説します。
前記事:Sekibanを使ってC#でイベントソーシングとアクターモデルによるアプリケーションを手軽に開発、デプロイする(1)アプリを開発する。
デプロイ方法の概要
Sekibanのプロジェクトテンプレートで作成したアプリケーションには、Azure App Serviceへのデプロイに必要なBicepテンプレートとデプロイスクリプトが自動的に含まれています。デプロイ方法は以下の2つから選択できます。
1. 標準デプロイ:別々のApp Service Plan
- フロントエンドとバックエンドを異なるApp Service Planにデプロイ
- より高いパフォーマンスと独立したスケーリングが可能
- 本格的な運用環境に適している
2. 安価デプロイ:同一App Service Plan
- フロントエンドとバックエンドを同じApp Service Planにデプロイ
- コストを抑えた運用が可能
- 開発・検証環境や小規模な運用に適している
どちらも基本的なデプロイ手順は同じで、使用するBicepファイルが異なるだけです。
デプロイ環境の準備
Windows環境での開発ツール準備
Azure App Serviceへのデプロイには、以下のツールが必要です。特にWindowsユーザーは事前に環境を整える必要があります。
必要なツール一覧
- Azure CLI: Azureリソースの管理
- Bash環境: デプロイスクリプトの実行
- jq: JSONデータの処理
- zip: デプロイパッケージの作成
Windows環境でのインストール方法
1. WSL2(Windows Subsystem for Linux)の利用(推奨)
最も簡単で確実な方法は、WSL2を使用することです。
# WSL2のインストール
wsl --install
# Ubuntuの起動後、必要なツールをインストール
sudo apt update
sudo apt install -y curl jq zip unzip
# Azure CLIのインストール
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
2. Git Bashの利用
Git for Windowsに含まれるGit Bashを使用する方法もあります。
# Chocolateyをインストール済みの場合
choco install azure-cli jq zip
macOS環境の場合
# Homebrewを使用してjqをインストール
brew install jq
# Azure CLIをインストール
brew install azure-cli
.NET 9 SDKの確認
デプロイするアプリケーションをビルドするため、.NET 9 SDKが必要です。
# バージョン確認
dotnet --version
# .NET 9がインストールされていない場合
# https://dotnet.microsoft.com/download からダウンロード
Azure環境の準備
1. Azureにログイン
まず、対象のAzureテナントにログインします。
# テナントIDを指定してログイン
az login --tenant <tenant-id>
# 組織ドメイン名を使用してログイン
az login --tenant contoso.onmicrosoft.com
# デバイスコードを使用したログイン(複数アカウントがある場合)
az login --tenant <tenant-id> --use-device-code
2. デプロイ設定ファイルの作成
プロジェクトのinfrastructure
フォルダ内で、デプロイ設定ファイルを作成します。
標準デプロイの場合: infrastructure/azure_appservice/
フォルダ内
安価デプロイの場合: infrastructure/azure_appservice_minimal/
フォルダ内
{
"resourceGroupName": "myweatherapp-prod-001",
"location": "japaneast",
"backendRelativePath": "../../MyWeatherApp.ApiService",
"frontendRelativePath": "../../MyWeatherApp.Web",
"logincommand": "az login --tenant yourorg.onmicrosoft.com --use-device-code"
}
ファイル名はmydeploy.local.json
として保存し、以降のコマンドではmydeploy
部分を参照名として使用します。
重要な注意点:
-
resourceGroupName
は小文字、ハイフン、数字のみ使用可能 -
location
はAzureリージョン名を指定(japaneast、eastus等) - パスは相対パスで指定
デプロイの実行
1. リソースグループの作成
# 実行権限を付与
chmod +x ./create_resource_group.sh
# リソースグループ作成
./create_resource_group.sh mydeploy
2. Key Vaultの削除状態確認(必要に応じて)
以前に同名のKey Vaultを削除した場合、論理削除状態になっている可能性があります。
# Key Vaultのパージ(必要な場合のみ)
chmod +x ./purge_keyvault.sh
./purge_keyvault.sh mydeploy
3. インフラストラクチャのデプロイ
一括デプロイ
# 実行権限を付与
chmod +x ./runbicep.sh
# 標準デプロイの場合
./runbicep.sh mydeploy main.bicep
# 安価デプロイの場合
./runbicep.sh mydeploy minimal_main.bicep
段階的デプロイ(トラブルシューティング時)
何らかの理由で一括デプロイが失敗した場合、段階的にデプロイできます。
# Key Vaultのデプロイ
./runbicep.sh mydeploy 1.keyvault/create.bicep
# ストレージアカウントのデプロイ
./runbicep.sh mydeploy 2.storages/1.create.bicep
# その他のリソースも同様に
4. Key Vaultへのアクセス権限設定
# 自分自身にKey Vaultへのアクセス権限を付与
chmod +x ./user_access_keyvault.sh
./user_access_keyvault.sh mydeploy
5. アプリケーションのデプロイ
バックエンドAPIのデプロイ
# 実行権限を付与
chmod +x ./code_deploy_backend.sh
# バックエンドのデプロイ
./code_deploy_backend.sh mydeploy
フロントエンドのデプロイ
# 実行権限を付与
chmod +x ./code_deploy_frontend.sh
# フロントエンドのデプロイ
./code_deploy_frontend.sh mydeploy
デプロイされるAzureリソース
デプロイが完了すると、以下のAzureリソースが作成されます。
共通リソース
- Resource Group: すべてのリソースを含むコンテナ
- Key Vault: アプリケーション設定とシークレットの管理
- Storage Account: Orleans用のテーブルストレージとBlob
- Cosmos DB: イベントストアとOrleansクラスター管理
- Virtual Network: セキュアなネットワーク環境
- Application Insights: アプリケーション監視とログ
- Event Hub: Orleans用のメッセージング(オプション)
App Service関連
標準デプロイの場合:
- App Service Plan(Backend): バックエンドAPI用(B1プラン)
- App Service Plan(Frontend): フロントエンド用(B1プラン)
- App Service(Backend): .NET APIアプリケーション
- App Service(Frontend): Blazor WebAssemblyアプリケーション
安価デプロイの場合:
- App Service Plan(Shared): 共有プラン(B1プラン)
- App Service(Backend): .NET APIアプリケーション
- App Service(Frontend): Blazor WebAssemblyアプリケーション
運用とモニタリング
Application Insightsでの監視
デプロイされたアプリケーションは、自動的にApplication Insightsと連携されます。
- パフォーマンス監視: レスポンス時間、スループットの監視
- エラー追跡: 例外やエラーの詳細ログ
- 分散トレース: Orleans Grainをまたいだリクエストの追跡
- カスタムメトリクス: ビジネスメトリクスの計測
スケーリング設定
App Service Planは必要に応じてスケールアップ・スケールアウトが可能です。
# スケールアップ(プラン変更)
az appservice plan update --name <plan-name> --resource-group <rg-name> --sku S1
# スケールアウト(インスタンス数変更)
az appservice plan update --name <plan-name> --resource-group <rg-name> --number-of-workers 3
セキュリティ設定
- Key Vault: すべての機密情報(接続文字列、APIキー等)を安全に管理
- Managed Identity: アプリケーションがKey Vaultにアクセスする際の認証
- Virtual Network: App Service間の通信をプライベートネットワーク内に制限
- HTTPS強制: すべての通信をHTTPS化
コスト最適化のポイント
安価デプロイでのコスト削減
- 共有App Service Plan: フロントエンドとバックエンドで同じプランを使用
- Basic B1プラン: 月額約¥1,500程度(2025年現在)
- Cosmos DB Serverless: 使用量ベースの課金
さらなるコスト削減方法
- 開発環境の定期停止: 夜間・休日の自動停止設定
- Reserved Instance: 長期利用でのコスト削減
- Azure Dev/Test Pricing: 開発・テスト環境での割引価格
トラブルシューティング
よくある問題と解決方法
1. Key Vault作成エラー
# 論理削除されたKey Vaultのパージ
./purge_keyvault.sh mydeploy
2. App Serviceデプロイエラー
# ログの確認
az webapp log tail --name <app-name> --resource-group <rg-name>
3. Orleans接続エラー
- Cosmos DBとStorage Accountの接続文字列をKey Vaultで確認
- Virtual Network設定による接続制限の確認
4. Windows環境でのスクリプト実行エラー
- WSL2またはGit Bashの使用を推奨
- 権限エラーの場合は
chmod +x
でスクリプトに実行権限を付与
CI/CDパイプラインとの連携
GitHub ActionsやAzure DevOpsとの連携も可能です。
# GitHub Actions例
name: Deploy to Azure
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '9.0.x'
- name: Deploy Backend
run: |
cd infrastructure/azure_appservice
./code_deploy_backend.sh production
まとめ
Sekibanを使って開発したアプリケーションは、含まれているBicepテンプレートとデプロイスクリプトを使用することで、簡単にAzure App Serviceにデプロイできます。
主なメリット:
- インフラストラクチャ as Code: Bicepによる再現可能なデプロイ
- セキュアな設定: Key VaultとManaged Identityによる安全な運用
- スケーラブル: Orleans+App Serviceによる高いスケーラビリティ
- 監視可能: Application Insightsによる詳細な監視
- コスト効率: 用途に応じた2つのデプロイオプション
選択指針:
- 標準デプロイ: 本格運用、高パフォーマンスが必要な場合
- 安価デプロイ: 開発・検証環境、コスト重視の小規模運用
次回は、CI/CDパイプラインの構築と、運用监視のベストプラクティスについて詳しく解説する予定です。
Sekibanを使った現代的なイベントソーシングアプリケーションの開発・運用に、ぜひチャレンジしてみてください!