Skip to content

MLIT 環境 インフラアーキテクチャ構成

リージョン: ap-northeast-1 (東京) ドメイン: mlit-eng-ai.hy-create.com


インフラ構成図

%%{init: {'theme': 'default', 'themeVariables': {'fontSize': '11px'}, 'flowchart': {'nodeSpacing': 30, 'rankSpacing': 40, 'curve': 'basis'}}}%%
flowchart TB
    subgraph Internet
        Browser["ブラウザ"]
        Bedrock["Amazon Bedrock<br/>(Claude)"]
    end

    subgraph AWS["AWS ap-northeast-1 (745651872545)"]
        subgraph VPC["VPC 10.0.0.0/16"]
            subgraph Public["Public Subnets"]
                ALB["ALB<br/>mlit-ai-v2-alb<br/>HTTPS :443"]
                NAT["NAT Gateway"]
            end
            subgraph Private["Private Subnets"]
                subgraph ECS["ECS Fargate Cluster<br/>mlit-ai-v2-cluster"]
                    OpenWebUI["Open WebUI<br/>1 vCPU / 2 GB<br/>:8080"]
                    Agentic["Agentic AI Server<br/>0.5 vCPU / 1 GB<br/>:8000"]
                end
                RDS[("RDS PostgreSQL 15<br/>db.t4g.micro<br/>20 GiB GP3")]
            end
        end
        Cognito["Cognito<br/>mlit-mcp-doc-srch-users"]
        AppRunner["App Runner<br/>mlit-mcp-doc-srch<br/>1 vCPU / 2 GB"]
        ES[("Elasticsearch")]
        S3["S3<br/>ALB Logs"]
    end

    Browser -->|"HTTPS :443"| ALB
    ALB -->|"/* :8080"| OpenWebUI
    ALB -->|"/v1/* :8000"| Agentic
    ALB -.->|"アクセスログ"| S3
    OpenWebUI -->|"Service Connect"| Agentic
    OpenWebUI -->|":5432"| RDS
    Agentic -->|"HTTPS + M2M Token"| AppRunner
    Agentic -->|"HTTPS"| Bedrock
    Agentic -->|"NAT経由"| NAT
    NAT -->|"Internet"| Bedrock
    Browser -->|"OIDC"| Cognito
    Agentic -->|"Client Credentials"| Cognito
    AppRunner -->|":9200"| ES

    style ALB fill:#f9e4b7,stroke:#c88a10,stroke-width:2px
    style OpenWebUI fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    style Agentic fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style AppRunner fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
    style RDS fill:#e8f5e9,stroke:#2e7d32
    style ES fill:#e8f5e9,stroke:#2e7d32
    style Cognito fill:#fce4ec,stroke:#c2185b

ネットワーク構成

VPC

項目
VPC名 mlit-ai-v2-vpc
CIDR 10.0.0.0/16
AZ数 2 (ap-northeast-1a, 1c)
NAT Gateway 1台 (Public Subnet 1)

サブネット

サブネット CIDR AZ 用途
Public Subnet 1 10.0.0.0/24 ap-northeast-1a ALB, NAT Gateway
Public Subnet 2 10.0.1.0/24 ap-northeast-1c ALB
Private Subnet 1 10.0.2.0/24 ap-northeast-1a ECS, RDS
Private Subnet 2 10.0.3.0/24 ap-northeast-1c ECS, RDS

セキュリティグループ

SG インバウンド 用途
ALB SG TCP 443/80 from 0.0.0.0/0 ALB
ECS SG TCP 8080/8000 from ALB SG, All TCP from self ECS タスク
RDS SG TCP 5432 from ECS SG データベース

コンピューティング

ECS Fargate

クラスタ: mlit-ai-v2-cluster

Service Discovery: mlit-ai-v2.local (CloudMap)

サービス vCPU メモリ タスク数 ポート コンテナイメージ
agentic 0.5 vCPU (512) 1 GB (1024) 1 8000 mlit-ai-agentic:latest
openwebui 1 vCPU (1024) 2 GB (2048) 1 8080 mlit-ai-openwebui:latest

ECS サービス設定

項目
Minimum Healthy Percent 100%
Maximum Healthy Percent 200%
Circuit Breaker 有効 (自動ロールバック)
Service Connect mlit-ai-v2.local 名前空間
Service Connect タイムアウト idle: 300s, per-request: 300s

App Runner (MCP サーバー)

項目
サービス名 mlit-mcp-doc-srch
vCPU 1 vCPU (1024)
メモリ 2 GB (2048)
ポート 8080
URL cnvvqpwdsa.ap-northeast-1.awsapprunner.com
公開ドメイン mlit-mcp-doc.hy-create.com

データベース

RDS PostgreSQL

項目
インスタンス識別子 mlit-ai-v2-openwebui-db
インスタンスクラス db.t4g.micro (2 vCPU, 1 GB RAM, Graviton2)
エンジン PostgreSQL 15.14
ストレージ 20 GiB GP3
最大ストレージ 100 GiB (オートスケール)
Multi-AZ なし
DB名 openwebui
ユーザー名 openwebui

ALB (Application Load Balancer)

項目
名前 mlit-ai-v2-alb
スキーム internet-facing
アイドルタイムアウト 300秒
ACM 証明書 4afee029-e441-45f0-9fad-8f09722f8ca2
アクセスログ S3 (mlit-ai-v2-alb-logs)

リスナールール

優先度 パス ターゲット 認証
- HTTP :80 HTTPS リダイレクト (301) -
10 /v1/* agentic-tg :8000 Cognito
100 /* openwebui-tg :8080 Cognito

ターゲットグループ

TG ポート ヘルスチェック Healthy/Unhealthy
mlit-ai-v2-openwebui-tg 8080 /health (30s間隔, 10sタイムアウト) 2/5
mlit-ai-v2-agentic-tg 8000 /health (30s間隔, 10sタイムアウト) 2/5

認証 (Cognito)

項目
User Pool mlit-mcp-doc-srch-users
Pool ID ap-northeast-1_E14PdjUEF
ドメイン mlit-mcp-doc-srch.auth.ap-northeast-1.amazoncognito.com
登録ユーザー数 7
MFA OFF

認証フロー

  • ユーザー認証: Cognito OIDC → Open WebUI (Authorization Code Grant)
  • M2M 認証: Agentic → Cognito (Client Credentials Grant) → MCP サーバー

ECR リポジトリ

リポジトリ 用途
mlit-ai-openwebui Open WebUI コンテナイメージ
mlit-ai-agentic Agentic AI Server コンテナイメージ

CDK スタック構成

MlitAIv2Core (CoreInfraStack)
  └── VPC, SG, ALB, ECS Cluster, CloudMap, S3
        │
        ├── MlitAIv2Database (DatabaseStack)
        │     └── RDS, DB Secrets, DATABASE_URL Lambda
        │
        └── MlitAIv2App (AppStack)
              └── ECR, Task Definitions, ECS Services, Cognito App Client

月額コスト概算

リソース スペック 概算 (USD/月)
ECS Fargate (agentic) 0.5 vCPU / 1 GB ~$15
ECS Fargate (openwebui) 1 vCPU / 2 GB ~$30
RDS db.t4g.micro ~$12
NAT Gateway 1台 + データ転送 ~$35-45
ALB + データ転送 ~$18-25
App Runner (MCP) 1 vCPU / 2 GB ~$30
その他 CloudWatch, Secrets, ECR, S3, Route53 ~$5-10
合計 ~$145-167

※ Amazon Bedrock (Claude) 利用料は別途 (従量課金) ※ 現在の運用実績的には80/月程度、今後スケールさせる場合でも2〜3倍程度を想定 ※ メインの費用発生はElasticsearchとBedrock APIになる想定


MCP Document Search サーバー構成 (mcp-doc-srch)

Agentic AI Server が利用する外部MCPツールサーバー。 Elasticsearch 上のドキュメントに対してハイブリッド検索 (BM25 + ベクトル検索) を提供する MCP (Model Context Protocol) サーバーである。

リポジトリ: mcp-doc-srch


システム概要

%%{init: {'theme': 'default', 'themeVariables': {'fontSize': '11px'}, 'flowchart': {'nodeSpacing': 30, 'rankSpacing': 40, 'curve': 'basis'}}}%%
flowchart LR
    Agentic["Agentic AI Server<br/>(ECS Fargate)"]
    Cognito["Cognito"]
    MCP["MCP Doc Search<br/>App Runner<br/>1 vCPU / 2 GB<br/>:8080"]
    ES[("Elasticsearch<br/>Elastic Cloud")]

    Agentic -->|"1. Client Credentials"| Cognito
    Cognito -->|"2. access_token"| Agentic
    Agentic -->|"3. MCP (streamable-http)<br/>Bearer Token"| MCP
    MCP -->|"ApiKey認証"| ES

    style Agentic fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style MCP fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
    style ES fill:#e8f5e9,stroke:#2e7d32
    style Cognito fill:#fce4ec,stroke:#c2185b

App Runner スペック

項目
サービス名 mlit-mcp-doc-srch
vCPU 1 vCPU (1024)
メモリ 2 GB (2048)
ポート 8080
ランタイム Python 3.12 (slim)
フレームワーク FastMCP + Uvicorn
MCP トランスポート streamable-http (ステートレス)
オートスケール min=1, max=1
ヘルスチェック GET /healthz (10s間隔, 5sタイムアウト)
カスタムドメイン mlit-mcp-doc.hy-create.com
ECR リポジトリ mcp-doc-srch (745651872545)

MLIT 環境で有効なツール

config.mlit.yaml に基づき、3つのツールが有効:

| ツール名 | 説明 | インデックス | |----------|------|------------|-------------| | search_ppe_guidelines | 公共事業評価 (PPE) 指針・要領の検索 | sugi-exp-proeva | | search_docs_ppe_karte | 公共事業評価カルテの検索 (再評価・事後評価) | mlit-karte | | search_docs_law | 法令文書の検索 (建設業法、行政機関政策評価法等) | law |

各ツールに対応する詳細取得ツール (get_document_details_*, get_ppe_karte_details) も自動登録される。

ツール呼び出しパラメータ

search_ppe_guidelines(
    query: str,                    # 検索クエリ
    semantic_search: bool = True,  # ベクトル検索の有効/無効
    filters: dict = None,          # メタデータフィルタ
    size: int = 50,                # 取得件数 (最大100)
    page: int = 0,                 # ページネーション
    output: "text"|"json"|"yaml" = "text"  # 出力形式
)

Elasticsearch 構成

  • バックエンド: Elastic Cloud (マネージド)
  • Elastic serverlessを利用
  • IPフィルタリング + API_KEY

検索方式

  • RRF実行のためにEnterpriseが必要
方式 説明 設定
BM25 (全文検索) title^3 + text_content で multi_match デフォルト有効
KNN (ベクトル検索) feature_vector フィールドで近傍探索 k=100, candidates=500
RRF (ハイブリッド) BM25 + KNN を Reciprocal Rank Fusion で統合 window_size=100, デフォルト有効

認証

M2M 認証 (Agentic → MCP)

項目
OAuth フロー Client Credentials Grant
Resource Server docsearch
スコープ docsearch/read, docsearch/search
JWT 検証 RS256, Cognito JWKS エンドポイント

Cognito (MCP サーバー側)

MCP サーバーの CDK スタックで Cognito リソースを作成:

項目
User Pool mlit-mcp-doc-srch-users (ap-northeast-1_E14PdjUEF)
ドメイン mlit-mcp-doc-srch.auth.ap-northeast-1.amazoncognito.com
M2M クライアント Client Credentials フロー
Web クライアント Authorization Code フロー

月額コスト概算 (MCP サーバー単体)

リソース 概算 (USD/月)
App Runner (1 vCPU / 2 GB, 常時1台) ~$30
Elasticsearch (後述) 従量課金
Secrets Manager ~$1
合計 (AWS 分) ~$31 + ES従量課金

Elasticsearch Serverless 従量課金見積もり

想定: 月10万クエリ(≒ 約3,300クエリ/日, 約140クエリ/時)、データ量10〜20GB、ベクトル検索あり程度を目安に考える

  • エンベディングは OpenAI Embedding API で事前生成(安価)→ ES 側の ML VCU は不要
  • ベクトル検索は全文検索より計算コストが高いが、BBQ圧縮(Serverless デフォルト)により General Purpose プロファイルで十分
  • Storage: ベクトルデータは通常のテキストより容量が大きい
項目 月額目安
Search VCU $50〜$120
ML VCU (推論) $30〜$80
Ingest VCU $5〜$20
Storage $1〜$5
Egress 数ドル
小計 $90〜$230
Enterprise サポート (+15%) +$14〜$35
合計 $100〜$260/月程度