はじめに
最近話題になっている awsdac(AWS Diagram as Code) を触ってみました。
結論から言うと、
- AIとの相性はかなり良い
- Git管理できるのは強い
- でも「クライアント向け資料」としては少し悩ましい
という感想でした。
あくまで 1回試しただけの体験談 です。
なぜ触ってみたのか
正直な動機はシンプルです。
- 手で作るより速そう
- AIと相性が良さそう
- 話題になっていたから触ってみたかった
既存の作図ツールに強い不満があったわけではありません。
話題になっていたのが一番大きかったかもしれません。
まずはSkill Builderの図を模倣してみた
とりあえず使ってみよう、ということで
AWS Skill Builderで見かけたアーキテクチャ図を模倣してみました。
参考にしたアーキテクチャ図
awsdacで描いたアーキテクチャ図
「どっちが良い?」と聞かれたら参考にしたアーキテクチャ図の方を選びますよね。
diagram.yaml
人人人人人人人人人人人人人人人人人人人人人人人_
> ソースコードを表示(折りたたみ) <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
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: horizontal # or vertical
Children:
- AWSCloud
- AWSConnectionGroup
- OnPrem
AWSCloud:
Type: AWS::Diagram::Cloud
Direction: vertical
Preset: AWSCloudNoLogo
Children:
- VPC
- ALB
VPC:
Type: AWS::EC2::VPC
Preset: VPC
Children:
- AZ1
- AZ2
AZ1:
Type: AWS::EC2::AvailabilityZone
Title: アベイラビリティゾーン 1
Preset: Availability Zone 1
Direction: vertical
Children:
- HostsGroup
- ENI
- Subnet1
HostsGroup:
Type: AWS::Diagram::HorizontalStack
Children:
- Host1
- Host2
Host1:
Type: AWS::EC2::Host
Title: " " # スペースを入れることで擬似的な空を設定
Preset: Host
Host2:
Type: AWS::EC2::Host
Title: " "
Preset: Host
ENI:
Type: AWS::EC2::NetworkInterface
Preset: Network Interface
Subnet1:
Type: AWS::EC2::Subnet
Preset: Subnet
Children:
- FSx
FSx:
Type: AWS::FSx::FileSystemforWindows
Preset: FSx for Windows
Direction: vertical
Children:
- WindowsFileServer
- VolumesGroup
WindowsFileServer:
Type: AWS::EC2::Instance
Title: "Windowsファイルサーバ"
Preset: FSx for Windows
VolumesGroup:
Type: AWS::Diagram::HorizontalStack
Children:
- FSxVolume1
- FSxVolume2
FSxVolume1:
Type: AWS::Diagram::Resource
Title: " "
Preset: Database
FSxVolume2:
Type: AWS::Diagram::Resource
Title: " "
Preset: Database
AZ2:
Type: AWS::EC2::AvailabilityZone
Title: アベイラビリティゾーン 2
Preset: Availability Zone 2
Children:
- Host3
Host3:
Type: AWS::EC2::Host
Title: " "
Preset: Host
AWSConnectionGroup:
Type: AWS::Diagram::VerticalStack
Children:
- DirectConnect
- VPN
DirectConnect:
Type: AWS::Diagram::Resource
Title: " "
Preset: AWS Direct Connect
VPN:
Type: AWS::EC2::VPNGateway
Title: "AWS Direct Connect または VPN"
Preset: VPN
OnPrem:
Type: AWS::Diagram::DataCenter
Title: オンプレミス
Direction: vertical
Children:
- OnPremClientGroup
OnPremClientGroup:
Type: AWS::Diagram::HorizontalStack
Children:
- OnPremClient1
- OnPremClient2
OnPremClient1:
Type: AWS::Diagram::Resource
Preset: User
Title: " "
OnPremClient2:
Type: AWS::Diagram::Resource
Preset: User
Title: " "
Links:
- Source: Host1
SourcePosition: S # N, S, E, W, NE, NW, SE, SW
Target: ENI
TargetPosition: N
TargetArrowHead:
Type: Open
- Source: Host2
SourcePosition: S # N, S, E, W, NE, NW, SE, SW
Target: ENI
TargetPosition: N
TargetArrowHead:
Type: Open
- Source: Host3
SourcePosition: W # N, S, E, W, NE, NW, SE, SW
Target: ENI
TargetPosition: E
TargetArrowHead:
Type: Open
- Source: ENI
SourcePosition: S # N, S, E, W, NE, NW, SE, SW
Target: FSx
TargetPosition: N
TargetArrowHead:
Type: Open
- Source: FSxVolume1
SourcePosition: E # N, S, E, W, NE, NW, SE, SW
Target: FSxVolume2
TargetPosition: W
TargetArrowHead:
Type: Open
- Source: FSxVolume2
SourcePosition: W # N, S, E, W, NE, NW, SE, SW
Target: FSxVolume1
TargetPosition: E
TargetArrowHead:
Type: Open
- Source: OnPrem
SourcePosition: W # オンプレ → AWS への接続
Target: DirectConnect
TargetPosition: E
TargetArrowHead:
Type: Open
- Source: DirectConnect
SourcePosition: W # N, S, E, W, NE, NW, SE, SW
Target: ENI
TargetPosition: E
TargetArrowHead:
Type: Open
やってみて感じたこと
- 位置関係は意外と書きやすい
- でもリソース名を調べるのが大変
- AWS::EC2::VPN のような正式名称を調べるのに時間がかかりました
- これは awsdac の問題というより、自分のAWS習熟度の問題です
- AIとの相性はかなり良い
AIとの相性はやはり良かったです。
AIに「オンプレの部分を書いて」と依頼したらデータセンターやユーザのリソース名を調べて書いてくれました。
さらに何度か修正を指示することで最終的にはゴールできました。
刺さらなかった理由
① 手で描いた方が早い気がした(1回目)
これは完全に体感です。
まだ1回しか試していないので習熟すれば逆転する可能性はあります。
ただ初回体験としては「おお、爆速だ」という感じではありませんでした。
② 図が機械的に見える
線がすべて直線でどうしても少し無機質に感じました。
美しさを求めているわけではありませんが、
- クライアントに見せる
- 提案資料に載せる
- 安心感を与える
という観点で考えると、
「これをそのまま出して良いのか?」
という迷いはありました。
ここが少々自問自答しているポイントです。
結論
はじめに書いたように自分の評価は以下です。
- AIとの相性はかなり良い
- Git管理できるのは強い
- でも「クライアント向け資料」としては少し悩ましい
今後さらに使い込むことで印象は変わるかもしれません。
もう少しAWS理解度が上がった状態で再挑戦してみたいと思います。

