NetworkTips

Mermaidでインフラ構成図を書く【ネットワーク・結線・冗長・3層の4例】

スポンサーラベル
Mermaidで書いたインフラ構成図の例。ネットワーク構成、機器の結線、冗長構成、3層構成 Network

当サイトはアフィリエイト広告を利用しています。

構成図をExcelやPowerPointで描いていると、機器が1台増えるたびに線を引き直すことになります。レビューで指摘が入れば、また図形を動かす作業です。

Mermaidはテキストで図を書ける記法で、差分がGitに残るのとレイアウトを自動でやってくれるのが利点です。GitHubやGitLabはコードフェンスをそのまま図として表示します。

Mermaidで書いたインフラ構成図の例。ネットワーク構成、機器の結線、冗長構成、3層構成

この記事では、インフラの現場でよく描く4つの構成図を、コピーしてそのまま使える形で載せます。記法の基礎や環境構築はPyCharmのMarkdownでmermaidのフロー図を書くとVSCodeでmermaidの図を描く手順にまとめてあります。検証は Mermaid 11 で行いました。

1. ネットワーク構成図

セグメントを subgraph で囲むのが基本形です。ラベルにサブネットを書いておくと、それだけで構成図として成立します。

flowchart LR
  INET([インターネット])
  subgraph DMZ["DMZ  192.168.10.0/24"]
    FW[ファイアウォール] --> REV[リバースプロキシ]
  end
  subgraph LAN["社内LAN  192.168.20.0/24"]
    L3[L3スイッチ]
    SRV[(ファイルサーバー)]
    AD[ADサーバー]
    L3 --> SRV
    L3 --> AD
  end
  INET --> FW
  REV --> L3
DMZと社内LANをsubgraphで囲んだネットワーク構成図。インターネットからファイアウォール、リバースプロキシを経て社内のL3スイッチへ繋がる

押さえるのはノードの形です。[] が四角、([]) が角丸、[()] が円筒になります。インターネットのような「外側」は角丸、ストレージは円筒にしておくと、凡例を書かなくても伝わります。

subgraph のラベルに空白を入れたい場合は ["..."] のようにダブルクォートで囲みます。囲まないとそこで切れます。

2. 機器の結線図

ポート番号まで載せたいときは、矢印にラベルを付けます。-- "ラベル" --> の形です。

flowchart TB
  subgraph RACK["サーバーラック A-01"]
    SW1["スイッチ1<br/>Gi0/1-24"]
    SW2["スイッチ2<br/>Gi0/1-24"]
    S1["サーバー1<br/>NIC0 / NIC1"]
    S2["サーバー2<br/>NIC0 / NIC1"]
  end
  SW1 -- "Gi0/1" --> S1
  SW2 -- "Gi0/1" --> S1
  SW1 -- "Gi0/2" --> S2
  SW2 -- "Gi0/2" --> S2
  SW1 <-. "スタック" .-> SW2
サーバーラック内のスイッチ2台とサーバー2台の結線図。各リンクにポート番号が付き、スイッチ間はスタック接続

ノード内で改行したいときは <br/> を使います。機器名と型番、ホスト名とIPのように2段で書くと読みやすくなります。

スイッチ間のスタック接続は <-. "ラベル" .-> で点線の双方向にしました。実線と点線で「データが流れる線」と「それ以外」を描き分けると、見る側が迷いません。

ただし結線が増えると線が交差します。自動レイアウトなので位置を指定できません。機器が5〜6台を超えるなら、この図は諦めて表にしたほうが読みやすくなります。

3. 冗長構成

主系と待機系は、線の太さと種類で描き分けます。==> が太線、-.-> が点線です。

flowchart LR
  CL[クライアント] --> VIP(["仮想IP<br/>192.168.20.254"])
  VIP ==> R1["ルーター1<br/>Master 優先度200"]
  VIP -. "切替時のみ" .-> R2["ルーター2<br/>Backup 優先度100"]
  R1 --> UP([上位回線])
  R2 -.-> UP
  R1 <-. "VRRP Advertisement" .-> R2
VRRPによる冗長構成図。仮想IPから太線でMaster側へ、点線でBackup側へ繋がる

いま通っている経路を太線、切替時だけ使う経路を点線にすると、平常時の動きが一目で分かります。優先度のような設定値はノード名の2段目に入れておくと、設計書を見に行かずに済みます。

4. 3層構成

レイヤーごとに subgraph で囲みます。横向き(LR)にすると、リクエストの流れと図の向きが一致します。

flowchart LR
  U([利用者]) --> LB{{ロードバランサ}}
  subgraph WEB["Web層"]
    W1[Web1]
    W2[Web2]
  end
  subgraph APP["AP層"]
    A1[AP1]
    A2[AP2]
  end
  subgraph DB["DB層"]
    D1[(Primary)]
    D2[(Standby)]
  end
  LB --> W1
  LB --> W2
  W1 --> A1
  W2 --> A2
  A1 --> D1
  A2 --> D1
  D1 -. "レプリケーション" .-> D2
利用者からロードバランサを経てWeb層、AP層、DB層へ流れる3層構成図。DBはPrimaryとStandbyでレプリケーション

ロードバランサには {{}}(六角形)を使いました。処理の中継点だけ形を変えると、同じ四角の羅列になりません。

5. 本番と検証を色で分ける

同じ構成の環境が複数あるとき、形だけでは本番と検証が区別できません。classDef でクラスを定義して、ノードに割り当てます。

flowchart LR
  subgraph PROD["本番環境"]
    PW[Web] --> PA[AP] --> PD[(DB)]
  end
  subgraph STG["検証環境"]
    SW[Web] --> SA[AP] --> SD[(DB)]
  end
  PD -. "日次でマスキング複製" .-> SD

  classDef prod fill:#FDF2F2,stroke:#B91C1C,stroke-width:2px
  classDef stg  fill:#ECFDF3,stroke:#15803D,stroke-width:2px
  class PW,PA,PD prod
  class SW,SA,SD stg
本番環境を赤、検証環境を緑で色分けした構成図。本番DBから検証DBへ日次でマスキング複製

classDef 名前 fill:背景色,stroke:線色 で定義し、class ノード1,ノード2 名前 で割り当てます。同じクラスを複数ノードにまとめて指定できるので、環境が増えても行数は増えません。

色は意味を決めて固定するのがおすすめです。触ってはいけないものを赤、作業してよいものを緑、という使い分けにしておけば、図を見た人が事故を起こしにくくなります。

6. 書くときに踏んだ点

実際に4枚作る過程で引っかかったところです。

6.1 subgraph の中の direction は効かないことがある

subgraph の中で向きを変えられる、とされていますが、外側の向きに引きずられることがありました。

flowchart LR
  subgraph DMZ["DMZ"]
    direction TB      ← 縦に並べたいが
    FW --> REV
  end

この指定を入れても、1章の図ではファイアウォールとリバースプロキシが横並びのままです。向きを確実に変えたいなら、subgraph を分けるのではなく図そのものを分けたほうが早いです。

6.2 日本語は引用符で囲むと安全

ノードのラベルに半角の括弧やスラッシュが混ざると解釈が変わることがあります。A["1階(本社)/ 2階"] のようにダブルクォートで囲んでおけば、中身をそのまま文字として扱ってくれます。

全角スペースはそのまま使えました。サブネット表記の区切りなどに使うと、読点を打たずに整えられます。

6.3 ノードの形は4つ覚えれば足りる

記法形使いどころ
A[文字]四角機器全般
A([文字])角丸外部ネットワーク、始点終点
A[(文字)]円筒データベース、ストレージ
A{{文字}}六角形ロードバランサ、中継点

このほかに菱形 A{文字} がありますが、こちらは判断分岐で使うものなので構成図では出番がありません。

7. まとめ

Mermaidでインフラの構成図を書く要点を整理します。

  • セグメントは subgraph で囲み、ラベルにサブネットを書く
  • ポート番号は矢印のラベル(-- "Gi0/1" -->)で表す
  • 実線と点線、太線で「いま通っている経路」を描き分ける
  • ノードの形は4つで足りる。 四角・角丸・円筒・六角形
  • subgraph の中の direction は効かないことがある
  • 結線が増えると線が交差する。 5〜6台を超えるなら表にする

テキストなので、機器が増えたら1行足すだけです。図形を動かす作業から解放されるのが一番の効果だと思います。

構成図以外の図(切り分けフロー・シーケンス図・ガントチャート・状態遷移図・ER図)はMermaidで運用ドキュメントの図を書くにまとめています。

コメント

タイトルとURLをコピーしました