Diagram-as-codeの活用方法 - miyohide's blog

AWSのシステム構成図作成ツール Diagram-as-codeの活用方法

はじめに

なんらかのシステムを構築する際、全体像を掴むためにシステム構成図を描くことが多いです。ただ、このシステム構成図を描くのが自分はあまり得意ではなく、できれば描きたくない人です。

例えばCloudFormationからこれらのシステム構成図を生成してくれないだろうかと思っていたところ、AWSが開発しているDiagram-as-codeというツールを見つけました。

github.com

このブログではDiagram-as-codeについて紹介します。

インストール

インストールはGo言語の環境が入っていたら簡単で、GitHubリポジトリを見ると、以下のコマンドを実行すれば良いようです。

go install github.com/awslabs/diagram-as-code/cmd/awsdac@latest

私の場合、Docker環境で実行するようにしました。具体的には以下のことをします。

まず、以下の内容のDockerfileを作成します。

FROM golang:1.23.3-bookworm

WORKDIR /app

RUN apt-get update && apt-get install -y \
    fonts-liberation

RUN go install github.com/awslabs/diagram-as-code/cmd/awsdac@latest

CMD [ "awsdac", "-h" ]

あとは、docker build -t myawsdac .としてコンテナイメージを作成し、awsdacコマンドを実行すると動きます。とりあえずバージョン番号を表示させてみます。

docker run -v $PWD:/app -it --rm myawsdac awsdac --version

結果として、awsdac version devとでたら成功です。

さて、Dockerfileでも記載していますが、環境によってはフォントのインストールが必要となるかもしれません。当初、フォントをインストールせずにawsdacコマンドを実行したところ、以下のエラーメッセージが出て動きませんでした。

panic: Specified fonts are not installed.

goroutine 1 [running]:
github.com/awslabs/diagram-as-code/internal/types.(*Resource).prepareFontFace(0x400099b0e0, 0x1, 0x0?)
(省略)

このエラーメッセージの解決に時間がかかりました。結局、以下のファイルを見てフォントをインストールすることにしました。

github.com

今回のDockerfileの例では、fonts-liberationをインストールすることで動くようになりました。

生成

サンプルがGitHubリポジトリexamples以下に公開されているので、それを動かします。

awsdac examples/alb-ec2.yaml -o alb-ec2.png

入力として与えるYAMLファイルの構文は以下を参照。

github.com

時間が取れなくて書けていませんでしたが、そんなに難しい構文ではなさそうです。

CloudFormationのYAMLファイルから生成する

まだベータ版という扱いのようですがCloudFormationからも生成できました。オプションとして--cfn-templateを付与する必要があります。

awsdac my-cfn-file.yaml -o my-cfn-file.png --cfn-template

ちなみに、--cfn-templateをつけなくてもawsdacコマンド自身は異常終了せず、画像は一見生成され、ファイルサイズも0バイト以上ですが図は何も生成されませんでした。

今回、自分が手元にあったCloudFormationのYAMLファイルをもとに作成してみました。

まずはVPCのみ。

大きく間違ってはいないのですが、横に長かったりちょっと冗長すぎる気がしないでもなかったり。

次にCloud9のみ。

VPC+Cloud9。

これも大きく間違ってはいない感じがするのですが、なんか違和感を覚える図な気がします。

考察

AWSが公開しているDiagram as Codeを試して幾つか画像を生成してみました。CloudFormationのYAMLファイルから生成できるのは嬉しい一方で、善良を書き出してしまうため、もうちょっと簡素化したいといった場合は更なる工夫が必要かと思います。

まだベータ版扱いですが、CloudFormationのYAMLファイルからDiagram as Code用のYAMLファイルを生成することができるので、その機能を使ってあとは手作業で修正していくといったことが現実的な活用方法かなと考えています。