1. Local stack 이란?
Site : https://localstack.cloud/
Github : https://github.com/localstack/localstack
local stack은 오픈소스로 만들어진 프레임워크 입니다.
local stack의 가장 큰 특징은 클라우드 환경을 로컬에서 직접 구현이 가능하며, 테스트할 수 있다는 것입니다.
Local Stack에서는 현재 AWS의 관련된 Application을 지원하고 있습니다.
Local Stack은 Application들을 도커 컨테이너로 만들어서 Cloud환경과 동일한 환경을 구축하게 됩니다.
때문에 docker-compose를 통해 정의되며 포트를 Mapping시키므로써 local에서 해당 Application(AWS lambda, S3, EC2, etc...)를 실행하고 호출할 수 있게 됩니다.
2. Local stack의 사용 이유
구글링을 하면 사용 이유에 대해 많이 나오며, 그 이유도 같고, 제가 설명하려는 이유도 같습니다.
우선 제가 현업에서 AWS를 활용해 개발하고 배포하는 과정에서 느꼈던 단점에 대해 설명하고자 합니다.
여러명에서 에자일 방법 중 TrankBased방식을 활용하여 개발을 진행할 때, 작업자들이 하나의 Master Branch에서 Origin Branch 생성하여 작업하는 내용들은 각기 다르게 됩니다. 이를 테스트 하려면 자신이 수정하거나 만든 코드를 AWS로 배포해야 하는데, 이때 문제가 발생됩니다.
- CloudFormation(CFN)을 통해 변경된 Application(Lambda, EC2, IAM, etc...)을 배포할 때, 작업자1 이 변경된 내용을 테스트 하기 위해서 배포된 코드가 있다면, 이 후 작업자2 는 해당 테스트가 끝나기 전에는 테스트를 할 수 없습니다. (왜냐하면 작업자 1이 수정된 코드를 배포 후 테스트를 진행하고 있는데, 작업자 2가 다른 코드를 배포하게 되면, 작업자 1이 테스트 하고 있는 코드가 master branch 코드로 초기화 되기 때문)
- AWS는 리전별로 같은 CFN을 배포할 수 있지만, 그렇게 되면 새로운 리전에 같은 코드를 만들게 되고, 구축하는데 드는 Work factor가 증가되게 되며 비용도 배로 지불해야 합니다. 또한 모든 리전이 똑같은 Application을 제공하지 않아서 제약이 있을 수 있습니다.(예를들어 AWS Cognito 같은 경우 지원하는 리전이 정해져 있습니다.)
- 테스트를 진행하기 위해 '코드 수정 - 배포 - 테스트 - 로그 확인' 의 과정 자체가 많은 Delay time을 발생시킵니다.
특히 CFN으로 배포하게 되었을 때, CFN파일이 커지게 되면 그 시간은 배로 증가하게 됩니다.
이러한 단점들을 극복할 수 있게 해주는 것이 Local stack입니다.
Local stack을 사용하여 로컬환경에서 AWS Cloud를 구축하면, 테스트를 자유롭게 할 수 있으며, Delay time 또한 많이 줄일 수 있습니다.
3. awscli-local
https://github.com/localstack/awscli-local
해당 오픈소스는 Local stack에서 aws명령을 입력할 때, 길어지는 부분을 간소화 시켜주는 툴입니다.
예를들어,
$ aws --endpoint-url=http://localhost:4566 kinesis list-streams
해당 명령어를 다음과 같이 간략하게 사용할 수 있습니다.
$ awslocal kinesis list-streams
4. 참고
Youtube : https://www.youtube.com/watch?v=fzpY7x1siHw
Blog : https://reflectoring.io/aws-localstack/
댓글