AWS를 이용하여 앱을 개발할 경우, 동작 확인 시마다 AWS 상으로 S3, DynamoDB, Lambda 등의 리소스를 생성하면, 환경의 구축, 삭제, 이용 요금 관리 등 필요한 작업이 발생합니다. 이에, AWS API를 PC 상으로 재현하고, AWS CLI나 Terraform 등에서 60 이상의 AWS 서비스를 로컬 환경에서만 무료로 이용할 수 있는 에뮬레이터 “MiniStack”을 사용해 보았습니다. MiniStack — The Best AWS Emulator | Free Open-Source LocalStack Alternative https://ministack.org/
ministackorg/ministack: Ministack: 무료, 오픈소스 로컬 AWS 에뮬레이터 - 60+ 서비스, Terraform 호환, 실제 데이터베이스. 영원히 무료. MIT 라이선스. https://github.com/ministackorg/ministack
◆MiniStack 구축 방법
이번에는 Windows에 Docker Desktop과 Git for Windows의 Git Bash, 그리고 AWS CLI를 준비한 환경에서 구축합니다. 작업 폴더 내에 compose.yml을 생성합니다.
컨테이너를 시작하면 구축이 완료됩니다.
◆MiniStack 사용법 Git Bash를 열고 AWS CLI로 사용하는 테스트용 인증 정보를 설정합니다.
먼저 S3에 버킷을 생성합니다.
버킷이 존재하는지 ls 명령을 실행하면 생성한 test-bucket이 표시됩니다. 실제 AWS와 동일한 AWS CLI를 사용하면서 테스트가 가능합니다.
SQS 큐도 생성할 수 있습니다. S3와 SQS에서 포트를 전환할 필요는 없으며, MiniStack가 AWS 요청을 분석하여 60 이상의 서비스로 전송합니다.
◆RDS에서는 실제 PostgreSQL을 실행 가능합니다. MiniStack는 API 응답만 재현하는 서비스에 더하여, RDS에서는 PostgreSQL, MySQL, MariaDB, Amazon ElastiCache에서는 Redis와 같은 실제 소프트웨어를 Docker 컨테이너로 실행할 수 있습니다.
RDS의 경우 AWS의 RDS API에 대한 관리 부분은 MiniStack가 처리하고, 실제 데이터베이스 처리는 로컬에서 실행된 PostgreSQL 등이 담당하는 구성이 됩니다. 이 때문에 단순한 API 모킹뿐만 아니라 애플리케이션에서 실제로 SQL을 발행하는 부분까지 로컬에서 확인할 수 있습니다. ◆ 여러 개의 AWS 계정 및 리전을 재현 MiniStack에서는 12자리 “AWS_ACCESS_KEY_ID”를 AWS의 계정 ID로 처리하고, 하나의 MiniStack 내에 여러 계정의 리소스를 분리하여 유지할 수 있습니다. AWS_ACCESS_KEY_ID에 “111111111111”을 설정하고 상태를 확인.
AWS_ACCESS_KEY_ID에 “222222222222”를 설정하고 상태를 확인.
더욱이 리전 정보도 분리되므로, us-east-1과 eu-west-1에 동일한 이름을 가진 SQS 큐를 생성하더라도 서로 독립적인 리소스로 취급됩니다. 각 리전에서 SQS 큐를 생성 후, 확인 명령을 실행하면 다음과 같이 표시되었습니다.
계정 및 리전을 분리함으로써 하나의 MiniStack에서 여러 개발자가 사용하는 테스트 환경 구축이 가능합니다. ◆기타 기능 MiniStack는 S3, SQS, DynamoDB, Lambda 등 주요 서비스에 더하여 EC2, ECS, EKS, CloudFormation, Step Functions, Amazon Bedrock 등 60가지 이상의 AWS 서비스를 처리합니다.
◆MiniStack 사용 시 주의사항 MiniStack는 AWS의 모든 동작을 완전히 재현하는 가상 클라우드가 아닌, VPC 패킷 라우팅이나 DNS 전파 등 로컬 환경에서는 재현 대상으로 하지 않는 기능이 있습니다. ◆MiniStack 평가 소셜 뉴스 사이트인 Hacker News에서 MiniStack에 대해 다양한 논의가 진행되고 있으며 “주로 중요한 것은 비용이 아닌 반복 속도와 CI 환경에서 빠르게 실행할 수 있는 것”이라는 평가가 있는 반면 “DynamoDB의 서비스 예외, 입력 값 검증, 결과 일관성, 에지 케이스를 적절하게 재현하지 않는다”는 의견도 게시되고 있습니다. 이에 대해 저자는 “대상 용도는 올바른 작업을 올바른 데이터로 호출하는지 확인하는 통합 테스트이며, 실제 환경과 완전히 동일한 동작을 재현하는 것이 아니다”라고 설명하고 있습니다.
원문 보기 | 출처: Gigazine