2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Sekibanを使ってC#でイベントソーシングとアクターモデルによるアプリケーションを手軽に開発、デプロイする(2)アプリをAzure AppServiceにデプロイする

Last updated at Posted at 2025-07-02

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ユーザーは事前に環境を整える必要があります。

必要なツール一覧

  1. Azure CLI: Azureリソースの管理
  2. Bash環境: デプロイスクリプトの実行
  3. jq: JSONデータの処理
  4. 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: 使用量ベースの課金

さらなるコスト削減方法

  1. 開発環境の定期停止: 夜間・休日の自動停止設定
  2. Reserved Instance: 長期利用でのコスト削減
  3. 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にデプロイできます。

主なメリット

  1. インフラストラクチャ as Code: Bicepによる再現可能なデプロイ
  2. セキュアな設定: Key VaultとManaged Identityによる安全な運用
  3. スケーラブル: Orleans+App Serviceによる高いスケーラビリティ
  4. 監視可能: Application Insightsによる詳細な監視
  5. コスト効率: 用途に応じた2つのデプロイオプション

選択指針

  • 標準デプロイ: 本格運用、高パフォーマンスが必要な場合
  • 安価デプロイ: 開発・検証環境、コスト重視の小規模運用

次回は、CI/CDパイプラインの構築と、運用监視のベストプラクティスについて詳しく解説する予定です。

Sekibanを使った現代的なイベントソーシングアプリケーションの開発・運用に、ぜひチャレンジしてみてください!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?