このドキュメントでは、Azure Relay デモアプリケーションの説明・実演シナリオを提供します。
このデモを通じて、以下を理解できます:
- Azure Relay の価値: VPN なしでオンプレミスとクラウドを安全に接続
- ハイブリッドクラウドの実現: 既存のオンプレミス資産を活用
- シンプルな実装: 最小限のコードで実現できる
- セキュリティ: 多層防御の重要性
[デモ担当者のPC]
↓
├─ onprem-api (localhost:5000)
│ └─ プロセス情報を提供
│
└─ azure-web (localhost:5001)
└─ プロセス情報を表示
所要時間: 5分
Azure Relay なしで、ローカル環境でアプリケーションの基本動作を確認します。
「まず、オンプレミス側の API が何を提供するか見てみましょう。
このプロジェクトは、ローカルマシンのプロセス一覧を取得する API です。」
# ターミナル1
cd C:\works\azure-relay-demo\src\onprem-api
dotnet run説明ポイント:
- 「ローカルマシンのポート 5000 で API が起動しました」
- 「このように、通常の ASP.NET Core Web API です」
# ターミナル2
# 認証なしでリクエスト
curl http://localhost:5000/api/processes
# 結果: 401 Unauthorized説明ポイント:
- 「認証なしではアクセスできません」
- 「Azure Relay があっても、API レベルの認証は必須です」
# 認証ありでリクエスト
curl -H "X-API-Key: demo-api-key-12345" http://localhost:5000/api/processes
# 結果: プロセス一覧の JSON が返却される説明ポイント:
- 「API キーを指定すると、プロセス一覧が取得できます」
- 「このマシンで実行中のプロセス情報ですね」
# ターミナル3
cd C:\works\azure-relay-demo\src\azure-web
dotnet run --urls "http://localhost:5001"説明ポイント:
- 「Azure 側のアプリケーションを起動します」
- 「設定では localhost:5000 を呼び出すようになっています」
ブラウザで http://localhost:5001 を開く
説明ポイント:
- 「このように、プロセス一覧が見やすく表示されます」
- 「メモリ使用量の多い順に上位 50 件を表示しています」
- 「azure-web が onprem-api を呼び出し、結果を表示しています」
「現在はローカル環境で直接通信していますが、
本番環境では Azure Relay を経由して安全に接続します。
次に、Azure Relay の仕組みを見てみましょう。」
所要時間: 5分
Azure Relay がどのように動作するかを説明し、従来の方法との違いを明確にします。
スライドまたはホワイトボード:
❌ 従来の方法: VPN 接続
┌─────────────┐ ┌─────────────┐
│ Azure │ │ On-Premises │
│ Web App │◀───VPN──│ API │
└─────────────┘ └─────────────┘
課題:
- 複雑なネットワーク設定
- ファイアウォールの設定変更が必要
- セキュリティリスク
- 高コスト
- 管理負荷が大きい
説明ポイント:
- 「VPN を設定するには、ネットワークエンジニアの協力が必要です」
- 「ファイアウォールにインバウンドルールを追加する必要があります」
- 「セキュリティ部門の承認が必要で、時間がかかります」
スライドまたはホワイトボード:
✅ Azure Relay の方法
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Azure │ │ Azure │ │ On-Premises │
│ Web App │──HTTPS─→│ Relay │◀──WSS───│ Listener │
└─────────────┘ └─────────────┘ └─────────────┘
│
↓
┌─────────────┐
│ API │
└─────────────┘
利点:
- VPN 不要
- アウトバウンド接続のみ(ポート 443)
- ファイアウォール設定変更不要
- マネージドサービス
- 従量課金で低コスト
説明ポイント:
- 「オンプレミス側からクラウドに接続します(アウトバウンド)」
- 「インバウンドのファイアウォールルールは不要です」
- 「HTTPS (443) のみで、既存のファイアウォール設定で動作します」
- 「Azure がサービスを管理してくれるので、運用負荷が低いです」
1. [Listener] Azure Relay に接続を確立(WebSocket)
↓
2. [Client] Azure Relay にリクエストを送信
↓
3. [Relay] 接続中の Listener にリクエストを転送
↓
4. [Listener] ローカル API にリクエストを転送
↓
5. [API] レスポンスを生成
↓
6. [Listener] レスポンスを Relay 経由で返却
説明ポイント:
- 「Listener が常に接続を維持しています」
- 「インバウンドの接続は一切発生しません」
- 「すべての通信は TLS で暗号化されています」
所要時間: 3分
多層防御の重要性を説明します。
Layer 1: Azure AD 認証(オプション)
↓
Layer 2: Azure Relay 認証(SAS トークン)
↓
Layer 3: API キー認証
説明ポイント:
- 「Azure Relay があるからといって、API の認証を省略してはいけません」
- 「Relay は通信経路のセキュリティ、API は認可を担当します」
- 「責任の分離が重要です」
# API キーなしでリクエスト
curl http://localhost:5000/api/processes
# 結果: 401 Unauthorized説明ポイント:
- 「このように、API レベルでの認証は必須です」
- 「Relay を通過しても、API が拒否します」
所要時間: 3分
Azure Relay の高可用性とスケーラビリティを説明します。
スライドまたはホワイトボード:
┌──────────────┐
┌─→│ Listener 1 │─→ API Server 1
│ └──────────────┘
│
┌──────────────┐ │ ┌──────────────┐
│ Azure Relay │─┼─→│ Listener 2 │─→ API Server 2
└──────────────┘ │ └──────────────┘
│
│ ┌──────────────┐
└─→│ Listener 3 │─→ API Server 3
└──────────────┘
特徴:
- 自動負荷分散(ラウンドロビン)
- 高可用性(フェイルオーバー)
- 水平スケール
説明ポイント:
- 「複数の Listener を接続するだけで、自動的に負荷分散されます」
- 「1つの Listener がダウンしても、他が処理を継続します」
- 「アプリケーション側の変更は不要です」
所要時間: 5分
Azure Relay の実践的なユースケースを紹介します。
【課題】
- 20年前のメインフレームシステム
- クラウド移行が困難
- でも、Web アプリから呼び出したい
【解決策】
Azure Relay でブリッジを構築
- メインフレームは変更不要
- Listener だけをデプロイ
- Web アプリから安全にアクセス
【課題】
- 工場内の IoT デバイスにアクセスしたい
- デバイスはインターネットに公開できない
- リアルタイムでデータを取得したい
【解決策】
Azure Relay で安全に接続
- デバイス側から接続(アウトバウンド)
- Azure からコマンド送信可能
- セキュアな双方向通信
【課題】
- 一部のシステムだけクラウド化
- オンプレミスとの連携が必要
- 段階的な移行を進めたい
【解決策】
Azure Relay で共存
- クラウドとオンプレミスを接続
- 段階的な移行が可能
- 既存システムの変更を最小化
所要時間: 2分
「このデモで見たように、Azure Relay は非常にシンプルです。
- VPN 設定不要
- ファイアウォール変更不要
- 既存の API に最小限の変更
」
「セキュリティも確保されています。
- TLS 暗号化
- SAS 認証
- API レベルの認証
- 多層防御
」
「本番環境でも安心です。
- 自動負荷分散
- 高可用性
- 水平スケール
- マネージドサービス
」
「コストも効率的です。
- 従量課金
- 無料枠あり
- VPN より低コスト
- 管理負荷が少ない
」
A: 「通常の HTTP 通信に比べて、50-100ms 程度のオーバーヘッドがあります。 リアルタイム性が重要な場合は検討が必要ですが、 通常の業務アプリケーションであれば十分な性能です。」
A: 「HTTP モードでは 64KB、WebSocket モードでは 256KB までです。 大きなデータを扱う場合は、分割送信や Azure Blob Storage を経由する方法を検討してください。」
A: 「Standard プランで月額約 10 ドル、 加えてメッセージ数に応じた従量課金です。 無料枠が 500 万メッセージ/月あるので、 小規模な利用であれば基本料金のみで運用できます。」
A: 「VPN は専用線的な接続で、すべてのトラフィックが通ります。 Azure Relay は特定のアプリケーション間の通信に特化しています。 用途に応じて使い分けることをお勧めします。」
A: 「Azure Relay は SLA 99.9% で高可用性が保証されています。 また、複数の Listener を接続しておくことで、 オンプレミス側の障害にも対応できます。」
- .NET 10 SDK がインストールされている
- プロジェクトがビルドできる
- ポート 5000, 5001 が空いている
- インターネット接続がある(Azure 説明用)
- ブラウザが用意されている
- ターミナルを3つ開いておく
- プロジェクトのパスに移動しておく
- デモ用のスライドを準備
- タイムキーパーを設定
- ポート競合時の対処法を把握
- ビルドエラー時の対処法を把握
- バックアップの計画(動画など)
0:00 - 0:05 シナリオ1: ローカル環境での動作確認
0:05 - 0:10 シナリオ2: Azure Relay の仕組み説明
0:10 - 0:13 シナリオ3: セキュリティの説明
0:13 - 0:16 シナリオ4: スケーラビリティの説明
0:16 - 0:21 シナリオ5: ユースケースの紹介
0:21 - 0:23 シナリオ6: まとめ
0:23 - 0:30 Q&A
合計: 30分
デモを実施した後、参加者に以下を案内してください:
- GitHub リポジトリ
- セットアップガイドで実際に試す
- Azure Relay ドキュメントで詳細を学ぶ
- 自社のユースケースを検討する