所在表現と所有表現 2

mandel59.hateblo.jp

具体的に、AWSのセキュリティグループ設定する構成を図示することを考えてみる。

EC2インスタンスには、複数のセキュリティグループを割り当てることができる。これを所在表現で表現しようとするなら、セキュリティグループが枠としてあり、その中にインスタンスが置かれる表現になる。複数のセキュリティグループに属しているインスタンスは、枠を重ねてその中に置くか、インスタンスのノードを複製して表現することになる。Mermaidで枠を重ねるのは難しいので、ここではノードを複製して表現する。

graph TD
  subgraph sg-db-client
    i-app-a-1[i-app-a]
  end
  subgraph sg-web-server
    i-app-a-2[i-app-a]
    i-app-b-2[i-app-b]
  end
  subgraph sg-db-server
    i-db
  end

所有表現で表現するときはその逆で、インスタンスという枠に、セキュリティグループが置かれる。複数のインスタンスが属しているセキュリティグループは、枠を重ねてその中に置くか、セキュリティグループのノードを複製して表現することになる。Mermaidで枠を重ねるのは難しいので、ここではノードを複製して表現する。

graph TD
  subgraph i-app-a
    sg-db-client-1[sg-db-client]
    sg-web-server-1[sg-web-server]
  end
  subgraph i-app-b
    sg-web-server-2[sg-web-server]
  end
  subgraph i-db
    sg-db-server-1[sg-db-server]
  end

ノードの複製を認めてしまえば、所在表現・所有表現どちらでも、インスタンスとセキュリティグループの関係を表現することができる。「属する」という二項関係と、その逆関係を、それぞれ図に落とし込んでいるだけなので、当然ではあるが。

これらの図に通信の情報を付加することを考えてみる。

所在表現

graph LR
  subgraph sg-db-client
    i-app-a-1[i-app-a]
  end
  subgraph sg-web-server
    i-app-a-2[i-app-a]
    i-app-b-2[i-app-b]
  end
  subgraph sg-db-server
    i-db
  end

  web-client(web-client) --> sg-web-server
  sg-db-client --> sg-db-server

所有表現

graph LR
  subgraph i-app-a
    sg-db-client-1[sg-db-client]
    sg-web-server-1[sg-web-server]
  end
  subgraph i-app-b
    sg-web-server-2[sg-web-server]
  end
  subgraph i-db
    sg-db-server-1[sg-db-server]
  end

  web-client(web-client) --> sg-web-server-1
  web-client --> sg-web-server-2
  sg-db-client-1 --> sg-db-server-1

所有表現の方が分かりやすいように思われる。セキュリティグループノードの複製によって、通信を表すグラフの辺も複製されているが、それは表現として自然だ。一方で、所在表現では、インスタンスを表すノードが複製されているため、結局そのインスタンスがどのような通信を行うかが可視化できておらず、識別子を使って目で突合しなければならない。