クラウドアーキテクチャ入門
約10分
クラウドアーキテクチャとは、アプリケーションやサービスをインターネット上のクラウドインフラ(AWS、GCP、Azureなど)で動かすための構成設計のことです。本番AIサービスでは、ユーザーのリクエストを受け取るAPIゲートウェイから、LLM API呼び出し、データベース、認証、監視まで、複数のコンポーネントが連携して動作します。
クラウドアーキテクチャを体系的に学ぶ順番
Section titled “クラウドアーキテクチャを体系的に学ぶ順番”このセクションでは、本番AIサービスを支えるクラウドアーキテクチャの各要素を扱います。
- このページ: 本番AIサービスの全体構成と各コンポーネントの役割をつかむ
- API設計とAPIゲートウェイ: REST・GraphQL・gRPCの比較とレート制限・認証統合を学ぶ
- データベース設計パターン: RDB・ベクトルDB・キャッシュの使い分けを理解する
- 監視とオブザーバビリティ: ログ・メトリクス・トレーシングの設計を学ぶ
- デプロイとCI/CD: コンテナ・Kubernetes・GitHub Actionsを使ったデプロイを学ぶ
クラウドアーキテクチャの知識が必要な理由
Section titled “クラウドアーキテクチャの知識が必要な理由”ローカルで動くAIスクリプトを本番環境に持っていくと、次のような課題に直面します。
- 複数のユーザーが同時にリクエストしたとき、スケールできるか?
- APIキーが漏洩しないよう安全に管理されているか?
- システムがダウンしたとき、すぐに気づける体制があるか?
- データベースのデータが消えないよう、バックアップがあるか?
- デプロイするたびに手作業が発生しないよう自動化されているか?
クラウドアーキテクチャの知識は、これらの問題に対して体系的な答えを与えます。
本番AIサービスの典型的な構成
Section titled “本番AIサービスの典型的な構成”graph TD
User["ユーザー\n(ブラウザ/アプリ)"] --> CDN["CDN\nCloudflare / CloudFront"]
CDN --> APIGW["APIゲートウェイ\nレート制限・ルーティング"]
APIGW --> Auth["認証サービス\nOAuth2 / JWT"]
Auth --> App["アプリケーションサーバー\nFastAPI / Node.js"]
App --> DB["リレーショナルDB\nPostgreSQL"]
App --> VDB["ベクトルDB\nPinecone / pgvector"]
App --> Cache["キャッシュ\nRedis"]
App --> Queue["メッセージキュー\nSQS / Pub/Sub"]
App --> LLMAPI["LLM API\nAnthropic / OpenAI"]
Queue --> Worker["非同期ワーカー"]
Worker --> DB
App --> Monitor["監視・ログ\nDatadog / CloudWatch"]
APIGW --> Monitor各コンポーネントの役割
Section titled “各コンポーネントの役割”| コンポーネント | 役割 | 代表的なサービス |
|---|---|---|
| CDN | 静的ファイルをエッジで配信、DDoS対策 | Cloudflare、AWS CloudFront |
| APIゲートウェイ | リクエストのルーティング、レート制限、SSL終端 | AWS API Gateway、Kong、nginx |
| 認証サービス | JWT発行・検証、OAuth2フロー、セッション管理 | Auth0、AWS Cognito、自前実装 |
| アプリケーションサーバー | ビジネスロジック、LLM API呼び出し、レスポンス整形 | FastAPI、Express、Django |
| リレーショナルDB | ユーザー情報、会話履歴、設定データの永続化 | PostgreSQL、MySQL、Cloud SQL |
| ベクトルDB | 埋め込みベクトルの保存と類似検索(RAG用) | Pinecone、pgvector、Weaviate |
| キャッシュ | 頻繁なリクエストへの高速レスポンス、セッション保存 | Redis、Memcached |
| メッセージキュー | 非同期処理、ピーク時のバッファリング | AWS SQS、Google Pub/Sub、RabbitMQ |
| LLM API | テキスト生成・埋め込みの外部API呼び出し | Anthropic、OpenAI、Gemini |
| 監視・ログ | エラー検知、パフォーマンス監視、ログ集約 | Datadog、CloudWatch、Grafana |
クラウドアーキテクチャの設計原則
Section titled “クラウドアーキテクチャの設計原則”1. ステートレス設計
Section titled “1. ステートレス設計”アプリケーションサーバーは、状態(セッション情報など)をメモリに持たない設計にします。状態はRedisやDBに外出しすることで、複数のサーバーインスタンスに負荷を分散(スケールアウト)できます。
2. 最小権限の原則
Section titled “2. 最小権限の原則”各コンポーネントは必要最小限の権限だけを持ちます。アプリケーションサーバーはDBへの読み書きだけ、ワーカーはキューの読み取りだけ、という設計です。IAMロール(AWS)やサービスアカウント(GCP)で細かく制御します。
3. 障害に備えた設計(Fault Tolerance)
Section titled “3. 障害に備えた設計(Fault Tolerance)”単一障害点(SPOF: Single Point of Failure)をなくします。DBはレプリカ(読み取り専用のコピー)を用意し、アプリケーションサーバーは複数台起動します。LLM APIが一時的に応答しない場合の再試行ロジックも必要です。
4. オブザーバビリティ
Section titled “4. オブザーバビリティ”問題が発生したときに素早く原因を特定できるよう、3種類のデータを収集します。
| 種類 | 内容 | ツール例 |
|---|---|---|
| ログ | アプリケーションの動作記録、エラーメッセージ | CloudWatch Logs、Datadog |
| メトリクス | レイテンシ、エラー率、CPU/メモリ使用率 | Prometheus、CloudWatch Metrics |
| トレース | リクエストが各コンポーネントをどう通ったか | AWS X-Ray、Jaeger、OpenTelemetry |
5. セキュリティの多層防御
Section titled “5. セキュリティの多層防御”ひとつのセキュリティ対策に頼らず、複数の層で守ります。
[CDN層] DDoS対策、WAF(Web Application Firewall)
↓
[APIゲートウェイ層] レート制限、APIキー検証
↓
[アプリケーション層] 認証・認可、入力バリデーション
↓
[データ層] 暗号化、アクセス制御シンプルな構成から始める
Section titled “シンプルな構成から始める”最初から完全な構成を作る必要はありません。段階的にアーキテクチャを育てる考え方が実践的です。
graph LR
A["フェーズ1\nMVP"] --> B["フェーズ2\n本番対応"]
B --> C["フェーズ3\nスケール対応"]
subgraph A["フェーズ1: MVP"]
A1["単一サーバー\n(例: Railway, Render)"]
A2["PostgreSQL\n(マネージド)"]
A3["LLM API直接呼び出し"]
end
subgraph B["フェーズ2: 本番対応"]
B1["コンテナ化\n(Docker)"]
B2["認証追加\n(Auth0等)"]
B3["監視追加\n(Datadog等)"]
end
subgraph C["フェーズ3: スケール対応"]
C1["Kubernetes / ECS"]
C2["CDN + APIゲートウェイ"]
C3["キャッシュ・キュー追加"]
endAIサービス特有の設計ポイント
Section titled “AIサービス特有の設計ポイント”一般のWebサービスと異なり、LLMを使うAIサービスでは次の点に注意が必要です。
レイテンシとストリーミング
Section titled “レイテンシとストリーミング”LLMのレスポンスは生成に時間がかかります。ユーザー体験を改善するために、生成中のテキストをリアルタイムに送信するストリーミングレスポンス(Server-Sent Events や WebSocket)が重要です。
LLM APIはトークン数に応じた従量課金です。リクエスト数・トークン数を監視し、コスト上限アラートを設定します。同じリクエストへの重複した呼び出しをRedisでキャッシュすると、コストと速度の両方が改善します。
プロンプトインジェクション対策
Section titled “プロンプトインジェクション対策”ユーザー入力にプロンプトを操作しようとする悪意ある文字列が含まれる場合があります。入力バリデーションと、システムプロンプトとユーザー入力を明確に分離した設計が必要です。
- 本番AIサービスは、APIゲートウェイ・認証・DB・ベクトルDB・LLM API・監視が連携する多層構成
- ステートレス設計・最小権限・障害対応・オブザーバビリティ・多層防御が基本原則
- 最初はシンプルな構成から始め、段階的に機能を追加するのが実践的
- LLM特有の課題(レイテンシ、コスト、プロンプトインジェクション)に対応した設計が必要
よくある質問
Section titled “よくある質問”Q: AWS・GCP・Azureのどれを選べばいいですか?
A: 3つとも本番AIサービスを構築できます。日本国内では、既存の企業システムがAWSを使っている場合が多いため、AWS(特にAmazon Bedrock)が選ばれることが多いです。GCPはVertex AIとGeminiとの統合が強く、Azure はMicrosoft 365環境との親和性があります。
Q: コンテナとサーバーレスのどちらを使うべきですか?
A: LLMのレスポンスは生成に数秒〜数十秒かかるため、コールドスタートが問題になるサーバーレス(AWS Lambda等)は工夫が必要です。常時起動が前提のコンテナ(ECS、Cloud Run、Kubernetes)のほうが安定しやすいです。
Q: ベクトルDBは必須ですか?
A: RAGを使わないシンプルなAIチャットなら不要です。社内文書検索やパーソナライズ機能を追加する場合に必要になります。小規模なら、PostgreSQLのpgvector拡張で始めるのが手軽です。
Q: 個人開発で本番AIサービスを動かすには?
A: Railway、Render、Flyなどのマネージドサービスを使うと、Dockerfileがあればサーバー管理なしで本番デプロイできます。PostgreSQLも同じプラットフォームで提供されるため、初期コストを抑えられます。
このページの外部仕様・背景情報は、参考文献を参照してください。[1][2][3][4][5]