AWS 아키텍처 다이어그램: 코드로 그리기 (Diagram as Code)

모든 것을 코드로: 다이어그램 자동화의 시대
예전에는 다이어그램을 직접 손으로 그렸지만, 최근에는 코드를 활용해 쉽고 빠르게 아키텍처 그림을 만들 수 있습니다. 특히 AI와 DevOps의 성장 덕분에 이 과정마저 자동화되고 있습니다.
Python Diagrams 라이브러리 소개
Python용 Diagrams 라이브러리를 사용하면 AWS와 같은 클라우드 구조를 코드로 표현할 수 있습니다. draw.io와 같은 그래픽 툴 대신, 몇 줄의 코드로 복잡한 구조를 시각적으로 나타낼 수 있죠.
개발 환경 설정 방법
프로젝트 별로 파이썬 가상 환경을 만들어 필요한 라이브러리만 설치하는 것이 좋습니다.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtrequirements.txt 파일에는 diagrams 라이브러리 등의 의존성이 적혀 있습니다.
AWS 기본 구조 다이어그램 예시 코드
아래 코드는 AWS의 간단한 구성 예시로, VPC → 로드밸런서 → EC2 인스턴스 → 데이터베이스 및 스토리지의 흐름을 나타냅니다.
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB, VPC
from diagrams.aws.storage import S3
with Diagram(AWS Architecture Diagram, show=False):
vpc = VPC(VPC)
lb = ELB(Load Balancer)
ec2_instance = EC2(EC2 Instance)
database = RDS(Database)
storage = S3(S3 Bucket)
vpc >> lb >> ec2_instance
ec2_instance >> database
ec2_instance >> storage코드에서 >> 연산자는 방향성을 가진 연결을 나타내며, 리소스 간의 데이터 흐름을 시각적으로 표현해줍니다.
연결 관계 설명
vpc >> lb >> ec2_instance: VPC에서 로드밸런서를 거쳐 EC2 인스턴스로 트래픽이 흐름을 보여줍니다.ec2_instance >> database: EC2 인스턴스가 데이터베이스와 통신함을 의미합니다.ec2_instance >> storage: EC2 인스턴스가 S3 스토리지를 이용함을 표시합니다.
이러한 방식으로 코드만으로 시스템 내 상호작용을 명확하게 그릴 수 있습니다.
AWS 자동화 스케줄링 예시 코드
여러 EC2 인스턴스와 EventBridge, Lambda를 이용해 EC2의 시작/중지 스케줄링을 자동화할 수 있습니다.
from diagrams import Diagram
from diagrams.aws.compute import EC2, Lambda
from diagrams.aws.integration import Eventbridge
from diagrams.aws.network import ELB, VPC
with Diagram(Automating EC2 Instance Start and Stop Scheduling with EventBridge and Lambda, show=True):
vpc = VPC(VPC)
lb = ELB(Load Balancer)
ec2_instance1 = EC2(EC2 Instance 1)
ec2_instance2 = EC2(EC2 Instance 2)
ec2_instance3 = EC2(EC2 Instance 3)
ec2_instance4 = EC2(EC2 Instance 4)
eventbridge = Eventbridge(EventBridge)
lambda_function = Lambda(Lambda Function)
vpc >> lb >> [ec2_instance1, ec2_instance2, ec2_instance3, ec2_instance4]
eventbridge >> lambda_function >> [ec2_instance1, ec2_instance2, ec2_instance3, ec2_instance4]여러 리소스를 리스트 형태로 연결할 수 있고, 이벤트 기반 자동화 구조까지 한눈에 파악 가능합니다.
사용자 정의 리소스 노드 활용
특별한 리소스를 그림에 표현하고 싶다면 Custom 노드를 사용하면 됩니다. 예를 들어 파이썬 스크립트 파일을 별도의 노드로 나타낼 수 있습니다.
from diagrams import Diagram
from diagrams.aws.compute import EC2, Lambda
from diagrams.aws.integration import Eventbridge
from diagrams.aws.network import ELB, VPC
from diagrams.custom import Custom
with Diagram(Automating EC2 Instance Start and Stop Scheduling with EventBridge and Lambda, show=True):
vpc = VPC(VPC)
lb = ELB(Load Balancer)
ec2_instance1 = EC2(EC2 Instance 1)
ec2_instance2 = EC2(EC2 Instance 2)
ec2_instance3 = EC2(EC2 Instance 3)
ec2_instance4 = EC2(EC2 Instance 4)
eventbridge = Eventbridge(EventBridge)
lambda_function = Lambda(Lambda Function)
python_script = Custom(Python Script, python-icon.png)
vpc >> lb >> [ec2_instance1, ec2_instance2, ec2_instance3, ec2_instance4]
eventbridge >> lambda_function >> [ec2_instance1, ec2_instance2, ec2_instance3, ec2_instance4]
lambda_function >> python_script이미지 파일로 아이콘을 원하는 위치에 추가하면, 커스텀 리소스까지 명확하게 표현할 수 있습니다.
코드로 그리는 다이어그램의 장점
실시간으로 구조 변경이 가능해 관리가 수월합니다.
반복 작업과 수작업에 드는 시간을 크게 줄일 수 있습니다.
협업과 문서화에 적합합니다.
이제 손으로 그렸던 복잡하고 반복적인 다이어그램 작업을 효율적으로 자동화할 수 있습니다.
