タダです.
このブログで紹介されていた Diagram-as-Code というツールをつかってみました.
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のサポートがされるのを期待しています.