はじめに
皆さんはAWSアーキテクチャ図を作成する際、どんなツールを使っていますか?
Microsoft PowerPointですか?draw.ioですか?それとも…?
何を使っているにせよ、リージョンやサブネットなどの枠を適切なサイズに広げ、各種アイコンの位置を揃えるといった作業でイライラしませんか?
そんな方に是非使ってみてほしいのが今回紹介するDiagram-as-code(awsdac)です!
Diagram-as-code(awsdac)とは?
Diagram-as-code(awsdac)とはAWSが公開しているOSSで、YAMLファイルからAWSアーキテクチャ図を出力するツールです。
枠のサイズは自動で決定され、アイコンの細かい位置調整も自動で実行されます。
また、アーキテクチャ図の生成元がYAMLファイルなので、Gitで更新履歴を管理しやすいです。
現在、ベータ版としてAWS CloudFormationテンプレートからAWSアーキテクチャ図を出力する機能も提供されています。
実際に使ってみる
今回はApplication Load Balancer・Amazon EC2・Amazon RDSで構成される典型的なWebアプリケーションのAWSアーキテクチャ図を作成してみます。
Diagram-as-codeを使用するにはGo 1.21以上が必要なので、あらかじめインストールしておきます。
Go環境が整ったら、Diagram-as-codeをインストールします。
go install github.com/awslabs/Diagram-as-code/cmd/awsdac@latest
次に、DACファイルと呼ばれるYAMLファイルを用意します。
Diagram:
DefinitionFiles:
- Type: URL
Url: https://raw.githubusercontent.com/awslabs/Diagram-as-code/main/definitions/definition-for-aws-icons-light.yaml
Resources:
Canvas:
Type: AWS::Diagram::Canvas
Direction: vertical
Children:
- Users
- AWSCloud
Users:
Type: AWS::Diagram::Resource
Preset: Users
AWSCloud:
Type: AWS::Diagram::Cloud
Children:
- Region
Region:
Type: AWS::Region
Title: Region (ap-northeast-1)
Children:
- VPC
VPC:
Type: AWS::EC2::VPC
Align: top
Children:
- AStack
- ALB
- CStack
BorderChildren:
- Position: N
Resource: IGW
AStack:
Type: AWS::Diagram::VerticalStack
Children:
- PublicSubnetA
- PrivateSubnetA
ALB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Preset: Application Load Balancer
CStack:
Type: AWS::Diagram::VerticalStack
Children:
- PublicSubnetC
- PrivateSubnetC
IGW:
Type: AWS::EC2::InternetGateway
PublicSubnetA:
Type: AWS::EC2::Subnet
Preset: PublicSubnet
Title: Public subnet (AZ a)
Children:
- PublicSubnetAEmptyResource
PrivateSubnetA:
Type: AWS::EC2::Subnet
Preset: PrivateSubnet
Title: Private subnet (AZ a)
Direction: vertical
Children:
- EC2A
- RDSA
PublicSubnetC:
Type: AWS::EC2::Subnet
Preset: PublicSubnet
Title: Public subnet (AZ c)
Children:
- PublicSubnetCEmptyResource
PrivateSubnetC:
Type: AWS::EC2::Subnet
Preset: PrivateSubnet
Title: Private subnet (AZ c)
Direction: vertical
Children:
- EC2C
- RDSC
PublicSubnetAEmptyResource:
Type: AWS::Diagram::Resource
PublicSubnetCEmptyResource:
Type: AWS::Diagram::Resource
EC2A:
Type: AWS::EC2
Title: Amazon EC2
RDSA:
Type: AWS::RDS
Title: Amazon RDS (Primary)
EC2C:
Type: AWS::EC2
Title: Amazon EC2
RDSC:
Type: AWS::RDS
Title: Amazon RDS (Secondary)
Links:
- Source: Users
SourcePosition: S
Target: IGW
TargetPosition: N
TargetArrowHead:
Type: Open
- Source: IGW
SourcePosition: S
Target: ALB
TargetPosition: N
TargetArrowHead:
Type: Open
- Source: ALB
SourcePosition: W
Target: EC2A
TargetPosition: N
TargetArrowHead:
Type: Open
Type: orthogonal
- Source: ALB
SourcePosition: E
Target: EC2C
TargetPosition: N
TargetArrowHead:
Type: Open
Type: orthogonal
- Source: EC2A
SourcePosition: S
Target: RDSA
TargetPosition: N
TargetArrowHead:
Type: Open
- Source: EC2C
SourcePosition: S
Target: RDSA
TargetPosition: N
TargetArrowHead:
Type: Open
Type: orthogonal
- Source: RDSA
SourcePosition: E
Target: RDSC
TargetPosition: W
TargetArrowHead:
Type: Open
LineStyle: dashed
Labels:
SourceLeft:
Title: Replication
AWS CloudFormationテンプレートの記法に少し似ており、テンプレートを作成したことのある方はとっつきやすいと思います。
文法について詳しく知りたい方はDiagram-as-codeのGitHubリポジトリか私が以前執筆したZennの記事を参照してください。
DACファイルを用意したら、Diagram-as-codeを使ってアーキテクチャ図を出力します。
$ awsdac PATH_TO_DAC_FILE
結構綺麗に描画できていると思いませんか?
ただ、いくつか「惜しい」部分がありますね…。
ここが「惜しい」…!
本記事は「惜しい」技術への愛を語る Advent Calendar 2025の一環で作成しています。
そのため、ここからはDiagram-as-codeの「惜しい」点について述べていきます。
リソースがリソースを跨げない
流派によってはApplication Load BalancerのアイコンがPublic subnet (AZ a)とPublic subnet (AZ c)を跨ぐようにAWSアーキテクチャ図を描きたいでしょう。
しかし、現時点でこれを実現することはできません。
以下の画像のように、枠が枠を跨げない問題はIssue #36として起票されているので、将来解決されるかもしれません。

https://github.com/awslabs/Diagram-as-code/issues/36より引用
線がリソースのラベルに被っている
リソースの位置の微調整が難しいので、Application Load Balancerから伸びる矢印がSubnetの文字に被ってしまうのは仕方ありません。
しかし、Amazon EC2から伸びる矢印が文字に被っているのは気になります。
これもIssue #172として起票されているので、将来解決されるかもしれません。
線のラベルを中央に配置できない
本当は「Replication」の文字を矢印の中央付近に配置したいところですが、現時点では矢印の始点付近または終点付近にしか配置できません。
ただ、ラベルの位置までこだわりだすと何のためにDiagram-as-codeを使っているのか分からなくなるため、現状の仕様のままでよい気もします。
さいごに
いくつか惜しい点はありますが、Diagram-as-codeはまだまだ開発途上なのでこれからも期待できそうです。
Diagram-as-codeに興味を持った方は以下のAWS公式ブログもぜひ読んでみてください。



