はじめに
なんらかのシステムを構築する際、全体像を掴むためにシステム構成図を描くことが多いです。ただ、このシステム構成図を描くのが自分はあまり得意ではなく、できれば描きたくない人です。
例えばCloudFormationからこれらのシステム構成図を生成してくれないだろうかと思っていたところ、AWSが開発しているDiagram-as-codeというツールを見つけました。
このブログでは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?) (省略)
このエラーメッセージの解決に時間がかかりました。結局、以下のファイルを見てフォントをインストールすることにしました。
今回のDockerfile
の例では、fonts-liberation
をインストールすることで動くようになりました。
生成
サンプルがGitHubリポジトリのexamples
以下に公開されているので、それを動かします。
awsdac examples/alb-ec2.yaml -o alb-ec2.png
入力として与えるYAMLファイルの構文は以下を参照。
時間が取れなくて書けていませんでしたが、そんなに難しい構文ではなさそうです。
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ファイルを生成することができるので、その機能を使ってあとは手作業で修正していくといったことが現実的な活用方法かなと考えています。