前回インストールから例を実行するところまで実施しましたが、
コード構成がどうなっているのか深掘りしてみます
Diagrams
Diagrams 基本
サンプルコードの基本の説明は以下です
- from diagrams import Diagram →基本モジュールインポートでDiagramsはこれ必須
- EC2("web") → EC2でモジュール名を指定、("web")はそのダイアグラムの名前指定
-
サンプルコード
from diagrams import Diagram from diagrams.aws.compute import EC2 with Diagram("Simple Diagram"): EC2("web")
-
結果
Diagrams オプション
サンプルコードのオプションは以下です。
- filename="my_diagram" →出力ファイル名を指定できる
- outformat="jpg" → 出力ファイル形式(png、jpg、svg、pdf、デフォルトはpng) を指定できる
-
show=False →デフォルト(show=true)でコマンド実行すると自動で出力ファイルが開くが、Falseで無効にできる
from diagrams import Diagram from diagrams.aws.compute import EC2 with Diagram("Simple Diagram", filename="my_diagram", outformat="jpg", show=False): EC2("web")
Nodes
Nodes基本
Nodesオブジェクトは、provider、resource type、およびnameの 3 つの部分で構成されます。
サンプルコードの from diagrams.aws.compute import EC2 は
- aws が provided
- compute が resource type
- EC2 が Name
となります。
-
サンプルコード ※EC2オブジェクトの詳細はここ参照
from diagrams import Diagram from diagrams.aws.compute import EC2 with Diagram("Simple Diagram"): EC2("web")
また、provided、resource typeが同じであれば、
from diagrams.aws.network import ELB, Route53, VPC
のよに複数指定することも可能みたいです。
Data Flow
データ フローをは以下記号を使います。
- 「>> 」→ ノードを左から右方向に接続
- 「<< 」→ ノードを右から左方向に接続
- 「 - 」→ ノードを無方向に接続
-
サンプルコード
from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB from diagrams.aws.storage import S3 with Diagram("Web Services", show=False): ELB("lb") >> EC2("web") >> RDS("userdb") >> S3("store") ELB("lb") >> EC2("web") >> RDS("userdb") << EC2("stat") (ELB("lb") >> EC2("web")) - EC2("web") >> RDS("userdb")
-
結果 ※レンダリングされた図の順序は、宣言の順序の逆
データフローの方向は、direction(デフォルトはLR)で変更でき、設定できる値は以下
- TB (Big-Endian):上から下の順
- BT (Little-Endian):下から上の順
- LR (Left-to-Right):左から右への順
- RL (Right-to-Left):右から左への順
-
サンプルコード
from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB with Diagram("Workers", show=False, direction="TB"): lb = ELB("lb") db = RDS("events") lb >> EC2("worker1") >> db lb >> EC2("worker2") >> db lb >> EC2("worker3") >> db lb >> EC2("worker4") >> db lb >> EC2("worker5") >> db
-
結果
Group Data Flow
すべてのノードが一度に他のノードに接続されるように、ノードをリストにグループ化できます。
グループ化は、[XX,XX,]のようにします。
-
サンプルコード
from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB with Diagram("Grouped Workers", show=False, direction="TB"): ELB("lb") >> [EC2("worker1"), EC2("worker2"), EC2("worker3"), EC2("worker4"), EC2("worker5")] >> RDS("events")
Clusters
Clustersを使用すると、分離されたグループ内のノードをグループ化 (またはクラスター化) できる
Clusters 基本
Cluster クラスを使用してクラスター コンテキストを作成できます。
また、クラスター内のノードをクラスター外の他のノードに接続することもできます
-
サンプルコード
from diagrams import Cluster, Diagram from diagrams.aws.compute import ECS from diagrams.aws.database import RDS from diagrams.aws.network import Route53 with Diagram("Simple Web Service with DB Cluster", show=False): dns = Route53("dns") web = ECS("service") with Cluster("DB Cluster"): db_primary = RDS("primary") db_primary - [RDS("replica1"), RDS("replica2")] dns >> web >> db_primary
-
結果
Nested Clusters
Clusters をネストすることも可能です。
例えば、AWSのよくある構成とかだと、以下コードになります。
※AWSのAZの良い表現は模索中。。
-
サンプルコード
from diagrams import Cluster, Diagram, Edge from diagrams.aws.general import Users, InternetGateway from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB, Route53, VPC from diagrams.aws.storage import S3 from diagrams.aws.management import Cloudwatch with Diagram("アーキテクチャ図", filename="sample", direction="TB"): with Cluster("AWS"): with Cluster("VPC"): with Cluster("Public Subnet"): Public = [EC2("EC2e"), EC2("EC2f"), EC2("EC2g")] with Cluster("Private Subnet EC2"): PrivateEC = [EC2("EC2a"), EC2("EC2b"), EC2("EC2c")] with Cluster("Private Subnet RDS"): PrivateRDS = RDS("RDS") LBPublic = ELB("Public LB") LBPrivate = ELB("Private LB") IGW = InternetGateway("InternetGateway") Route53 = Route53("Route53") S3 = S3("S3") Cloudwatch = Cloudwatch("Cloudwatch") Users("Users") - IGW - LBPublic >> Public Public >> LBPrivate >> PrivateEC PrivateEC >> PrivateRDS
-
結果
Edges
Edge は、ノード間の接続を表すオブジェクト(先のスタイル)を設定できます
Edgeは、以下3 つの属性があります。
- label → Edge(label="ここがラベル") のようなフォーマット
- color → Edge(color="firebrick") のようなフォーマット ※詳細はここを参照
- style → Edge(style="dashed") のようなフォーマット ※指定できる値はここを参照
利用するには、モジュールで from diagrams import Diagram, Edge のようにEdgeを指定する必要があります。
from diagrams import Cluster, Diagram, Edge
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
from diagrams.aws.storage import S3
with Diagram("Edge Diagram", show=False):
ELB("lb") >> EC2("web")
ELB("lb") >> Edge(color="blue", style="dashed") >> EC2("web")
ELB("lb") >> Edge(color="black", style="bold") >> EC2("web")
ELB("lb") >> Edge(color="red",label="ここらべる") >> EC2("web")
- 結果