LocalStack을 활용하여 AWS 환경 구축

wonjun_choi·2024년 11월 4일

LocalStack

목록 보기
2/3
post-thumbnail

들어가며

졸업작품이나 이번에 진행하는 해커톤 등 여러 프로젝트를 진행하며 최대한 AWS 비용을 내지 않고 배포를 테스트할 수 있는 방법을 찾아보았었다. 학생 입장에서 매번 발생하는 서버 비용이 부담되었다. 특히 졸업작품의 경우 1년 정도 프로젝트를 진행하는데 클라이언트와 서버의 연결을 위해 항상 서버를 켜두고 싶지만, AWS를 사용하면 많은 요금이 부과되기에 다른 대안을 찾아보게 되었다. 그렇게 해서 찾게 된 것이 LocalStack이다.
여기서는 LocalStack이 무엇인지 정리하고, LocalStack을 설치하는 과정을 정리해 보려 한다.

LocalStack 이란?

LocalStack은 AWS 클라우드 서비스를 로컬 환경에서 에뮬레이션할 수 있게 해주는 오픈소스 프레임워크이다.
S3, Lambda, DynamoDB, API Gateway 등 다양한 AWS 서비스를 로컬에서 구현할 수 있으며, Docker 기반으로 실행되기에 쉽게 설치하고 관리할 수 있다. AWS CLI와 동일한 명령어를 사용하여 로컬 서비스를 관리할 수 있다. 이를 이용하여 AWS를 사용하지 않고 테스트가 가능하여 비용을 절감할 수 있고, AWS와 유사한 환경을 제공하여 테스트와 개발을 용이하게 한다.

LocalStack 설치

LocalStack CLI 설치

LocalStack을 사용하기 위한 CLI를 설치한다. 설치하기 전에는 Docker가 미리 설치되어있어야 한다.
여기서는 Docker를 설치하는 방법은 넘어가고 CLI 설치부터 정리했다.

brew install localstack/tap/localstack-cli

brew를 사용하여 LocalStack CLI를 설치할 수 있다.
설치 후 localstack --version 명령으로 설치가 되었는지 확인할 수 있다.

사진처럼 버전이 나오면 설치가 완료된 것이다.

CLI를 실행하기 위해서 awslocal 명령어도 설치해야 한다.

pip install awscli-local

이후 awslocal --version 명령어로 설치되었는지 확인할 수 있다.

LocalStack 가입 및 인증토큰, LocalStack 실행

LocalStack에서 제공하는 많은 기능을 사용하기 위해서는 LocalStack 가입 후 인증토큰을 발급받아야 한다. LocalStack을 가입하고, LocalStack의 대시보드에서 Workspace에 Auth Token을 확인할 수 있다.

localstack auth set-token 
localstack start

이후 CLI를 통해 token을 설정하고, LocalStack을 실행해 주면 된다.
실행하기 전 Docker가 설치되었는지, 그리고 Docker가 실행 중인지 확인 후 LocalStack을 실행하도록 한다.


실행하면 사진과 같이 Docker에서 실행되는 모습을 확인할 수 있다.
이후 LocalStack Dashboard에 접속하여 LocalStack의 서비스들을 확인할 수 있다.

LocalStack에 EC2생성하기

이제 LocalStack을 사용해보려한다. LocalStack에서 리소스를 생성하고 관리하기 위해서는 CLI를 사용해야 한다. 리소스 생성 시 CLI로 생성하고 관리하는 것은 추후 Terraform을 사용하는 것으로 대체하려 한다.

제일 먼저 할 것은 보안그룹을 생성해야 한다.

awslocal ec2 authorize-security-group-ingress \
 --group-id default \
 --protocol tcp \
 --port 22 \
 --cidr 0.0.0.0/0

보안그룹 ID를 알아야 EC2를 생성할 때 사용할 수 있다.

sg_id=$(awslocal ec2 describe-security-groups | jq -r '.SecurityGroups[0].GroupId')
echo $sg_id

sg-id 형식으로 나오는 id를 확인해 둔다.

다음은 키페어를 생성한다.

awslocal ec2 create-key-pair --key-name my-key --query 'KeyMaterial' --output text > my-key.pem
chmod 400 my-key.pem

이제 EC2를 생성한다.

awslocal ec2 run-instances \
 --image-id ami-ff0fea8310f3 \
 --count 1 \
 --instance-type t3.nano \
 --key-name my-key \
 --security-group-ids <sg-id>


EC2가 성공적으로 실행되면 Docker에서도 새로운 컨테이너가 실행되는 것을 볼 수 있다.

ssh -i my-key.pem root@127.0.0.1


EC2처럼 ssh로 접속할 수 있는 것을 볼 수 있다.

마무리

LocalStack을 설치하고, EC2를 실행해 보는 것까지 진행해 보았다.
생각보다 많은 AWS 서비스를 지원한다는 점에서 놀랐고, EC2를 실행했을 때 정말 EC2처럼 동작하는 모습이 너무 좋았다. 이제 이것들을 사용하여 이후 진행하는 프로젝트들의 테스트용 서버로 사용하면 될 것 같다.
다만 인프라를 구성하기 위해 CLI를 사용해야 한다는 점이 조금 불편하여 다음에는 Terraform을 사용하여 LocalStack에 인프라를 구성해 보고, 실제로 서비스를 띄워 외부에서도 접속이 되는지 테스트해 보려 한다.

참고

LocalStack Docs / QuickStart
Running an EC2 instance locally using LocalStack and AWS CLI

0개의 댓글