🧜♀️
[Mermaid]MermaidでAWS構成図を書く
はじめに
MermaidでAWS構成図が書けるようになったとの記事を見て、私も試してみました。
まさに期待してたことができるので素敵すぎました。
前提
- Visual Studio Code インストール済み
拡張機能 インストール
- Markdown Preview Mermaid Support
   
- Markdown Preview Enhanced
   
Markdown Preview Enhanced 設定(icons)
- VSCode上で、コマンドパレット([Ctrl] + [Shift] + [P])から、「Markdown Preview Enhanced: Customize Preview HTML Head (Global)」を選択。
   
- 表示される、head.htmlに以下のコードを入力。
 HTML, the markup language of the web
<!-- The content below will be included at the end of the <head> element. -->
<script type="text/javascript">
  const configureMermaidIconPacks = () => {
    window["mermaid"].registerIconPacks([
      {
        name: "logos",
        loader: () =>
          fetch("https://unpkg.com/@iconify-json/logos/icons.json").then(
            (res) => res.json()
          ),
      },
    ]);
  };
    
  // ref: https://stackoverflow.com/questions/39993676/code-inside-domcontentloaded-event-not-working
  if (document.readyState !== 'loading') {
    configureMermaidIconPacks();
  } else {
    document.addEventListener("DOMContentLoaded", () => {
      configureMermaidIconPacks();
    });
  }
</script>
動作確認
- 任意のマークダウンファイルに以下を入力してプレビュー([Ctrl] + K, V)を表示。
 Markdown
``` mermaid
architecture-beta
    service dns(logos:aws-route53)[Route53]
    service cdn(logos:aws-cloudfront)[CloudFront]
    service cert(logos:aws-certificate-manager)[ACM]
    service storage(logos:aws-s3)[S3]
    group vpc(logos:aws-vpc)[VPC]
    service loadbalancer(logos:aws-elb)[ALB] in vpc
    group private_subnet1[Private Subnet 1] in vpc
    service appserver1(logos:aws-ec2)[EC2 Instance 1] in private_subnet1
    service db_primary(logos:aws-aurora)[Aurora Primary] in private_subnet1
    group private_subnet2[Private Subnet 2] in vpc
    service appserver2(logos:aws-ec2)[EC2 Instance 2] in private_subnet2
    service db_replica(logos:aws-aurora)[Aurora Replica] in private_subnet2
    junction asg_junction in vpc
    junction aurora_junction in vpc
    dns:R -- L:cdn
    cdn:R -- L:loadbalancer
    loadbalancer:R -- L:asg_junction
    asg_junction:T -- B:appserver1
    asg_junction:B -- T:appserver2
    appserver1:R -- L:db_primary
    appserver2:R -- L:db_replica
    cdn:T -- B:storage
    db_replica:T -- B:aurora_junction
    aurora_junction:T --> B:db_primary
    cert:B -- T:dns
```

補足
- Markdown Preview Enhancedの背景色と文字色を変更。
- Markdown Preview Enhancedの設定画面を開く。
- 検索窓で「markdown-preview-enhanced theme」を検索。
- Markdown-preview-enhanced: Mermaid Theme > [dark]を選択。
- Markdown-preview-enhanced: Preview Theme > [github-dark.css]を選択。
   
 
まとめ
システムアーキテクチャ図や構成図をバージョン管理できるように、PlantUMLやMermaidで書きたいなと常々思ってましたが、まさにやりたかったことができて感動です。
参考
Architecture Diagrams Documentation (v11.1.0+) | Mermaid
MermaidでAWSアーキテクチャ図を描いてみた!
Mermaidでアーキテクチャ図が書けるようになったらしい #AWS - Qiita
Markdown Preview Enhanced で mermaid を使って AWS のアーキテクチャを書く #VSCode - Qiita



Discussion