継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

YAML ファイルからアーキテクチャ図を生成する Diagram-as-Code を使ってみたメモ✍

タダです.

このブログで紹介されていた Diagram-as-Code というツールをつかってみました.

github.com

Diagram-as-Code とは

Diagram-as-Code は CLI ツールで YAML のコードを使って AWS の構成図を描くことができます.

Diagram-as-Code の導入と構成図の生成

Introduction に沿って使ってみます.Diagram-as-Code のインストールとこのコードを構成図生成してみました.

$ brew install awsdac
$ awsdac https://raw.githubusercontent.com/awslabs/diagram-as-code/main/examples/alb-ec2.yaml
[Completed] AWS infrastructure diagram generated: output.png

生成されたファイル

構成図の元ファイル

Diagram:
  DefinitionFiles:
    - Type: URL
      Url: "https://raw.githubusercontent.com/awslabs/diagram-as-code/main/definitions/definition-for-aws-icons-light.yaml"
    #- Type: LocalFile
    #  LocalFile: ./definitions/definition-for-aws-icons-light.yaml

  Resources:
    Canvas:
      Type: AWS::Diagram::Canvas
      Direction: vertical
      Children:
        - AWSCloud
        - User
    AWSCloud:
      Type: AWS::Diagram::Cloud
      Direction: vertical
      Preset: AWSCloudNoLogo
      Align: center
      Children:
        - VPC
    # VPC
    VPC:
      Type: AWS::EC2::VPC
      Direction: vertical
      Children:
        - VPCPublicStack
        - ALB
      BorderChildren:
        - Position: S
          Resource: IGW
    VPCPublicStack:
      Type: AWS::Diagram::HorizontalStack
      Children:
        - VPCPublicSubnet1
        - VPCPublicSubnet2
    VPCPublicSubnet1:
      Type: AWS::EC2::Subnet
      Preset: PublicSubnet
      Children:
        - VPCPublicSubnet1Instance
    VPCPublicSubnet1Instance:
      Type: AWS::EC2::Instance
    VPCPublicSubnet2:
      Type: AWS::EC2::Subnet
      Preset: PublicSubnet
      Children:
        - VPCPublicSubnet2Instance
    VPCPublicSubnet2Instance:
      Type: AWS::EC2::Instance
    ALB:
      Type: AWS::ElasticLoadBalancingV2::LoadBalancer
      Preset: Application Load Balancer
    IGW:
      Type: AWS::EC2::InternetGateway
      IconFill:
        Type: rect
    User:
      Type: AWS::Diagram::Resource
      Preset: User

  Links:
    - Source: ALB
      SourcePosition: NNW
      Target: VPCPublicSubnet1Instance
      TargetPosition: SSE
      TargetArrowHead:
        Type: Open
    - Source: ALB
      SourcePosition: NNE
      Target: VPCPublicSubnet2Instance
      TargetPosition: SSW
      TargetArrowHead:
        Type: Open
    - Source: IGW
      SourcePosition: N
      Target: ALB
      TargetPosition: S
      TargetArrowHead:
        Type: Open
    - Source: User
      SourcePosition: N
      Target: IGW
      TargetPosition: S
      TargetArrowHead:
        Type: Open

構成図の定義ファイルで必要な要素

構成図の定義ファイルでは YAML 形式で3つのセクションで構成されています.

  • DefinitionFiles: アイコンの元ファイル情報
  • Resources: AWS リソースの設定値.CloudFormation と同じように定義できる.
  • Links: リソース間の接続フロー

CloudFormation テンプレートからの生成も可能

以下の CloudFormation テンプレートを Diagram-as-Code で構成図にできます.

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      EnableDnsSupport: true
      EnableDnsHostnames: true

  Subnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Ref AvailabilityZone1
      CidrBlock: !Ref Subnet1CIDER
      MapPublicIpOnLaunch: false

  Subnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Ref AvailabilityZone2
      CidrBlock: !Ref Subnet2CIDER
      MapPublicIpOnLaunch: false

  EC2Instance1:
   Type: "AWS::EC2::Instance"
   Properties:
     InstanceType: "t3.small"
     NetworkInterfaces:
     - AssociatePublicIpAddress: true
       DeviceIndex: "0"
       SubnetId: !Ref Subnet1

  EC2Instance2:
   Type: "AWS::EC2::Instance"
   Properties:
     InstanceType: "t3.small"
     NetworkInterfaces:
     - AssociatePublicIpAddress: true
       DeviceIndex: "0"
       SubnetId: !Ref Subnet2

生成された構成図

まとめ

YAML ファイルからアーキテクチャ図を作成できる Diagram-as-Code を簡単に触ってみたのでまとめました.今は CloudFormation テンプレートがサポートされている模様ですが,CDKやTerraformのサポートがされるのを期待しています.