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