LocalStack - DynamoDB

danbi lee·2024년 12월 17일

LocalStack

노트북이나 CI 환경에서 단일 컨테이너에서 실행되는 클라우드 서비스 에뮬레이터.
원격 클라우드 공급자에 연결하지 않도고 AWS 애플리케이션이나 람다를 로컬에서 실행할 수 있다.

LocalStack을 사용하려면 라이센스가 필요하다. 14일 평가판을 선택하거나 돈을 지불해야 한다.
https://app.localstack.cloud/sign-in
하지만 무료 버전에서도 다양한 지원을 하고있어서 나는 가입없이 DynamoDB를 사용했다.

준비

localStack을 사용하기 위해선 docker, docker-compose가 필수이다.

  • docker: localStack은 docker 컨테이너 기반으로 작동
  • docker-compose: 여러 aws 서비스들을 한번에 관리하기 위해 필요

나는 LocalStack CLI로 실행한 LocalStack에 NoSQL Workbench를 연결하고 DynamoDB 테이블을 생성했다. DynamoDB만 사용하고 있어 docker-compose을 수정하지 않았다.

설치

  • LocalStack CLI
    • brew install localstack/tap/localstack-cli
    • localstack --version
  • AWS CLI (서비스 테스트용)
    • brew install awscli
    • aws --version

시작

  • 시작 localstack start -d
  • 확인 docker ps
    LocalStack은 다수의 AWS 서비스를 동시에 제공할 수 있기 때문에 여러 포트가 열린다.
    • 포트 4566: 주요 Edge 포트로 모든 서비스 요청을 라우팅한다.
    • 4510-4560: 내부적으로 서비스별 할당된 포트로 대부분 직접 접근할 필요가 없다.
    • 5678: LocalStack 상태 및 디버깅 포트
  • 종료 localstack stop

방법1. docker-compose

version: "3.8"

services:
  localstack:
    image: localstack/localstack:latest
    container_name: localstack-main
    ports:
      - "4566:4566"  # LocalStack Edge 포트
      - "4510-4559:4510-4559"  # 서비스별 포트
    environment:
      - SERVICES=s3,dynamodb,sqs,lambda  # 사용하고자 하는 AWS 서비스
      - DEBUG=1  # 디버깅 모드
      - DATA_DIR=/tmp/localstack/data  # 데이터 지속성 설정
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"  # Docker 내부 접근
      - "./docker/localstack:/tmp/localstack"  # 데이터 저장 경로

방법2. workbench

docker ps로 확인한 localstack과 동일한 port로(4566) workbench에 연결을 해야한다.

local:4566 DB가 생성된게 보인다.

DB에 들어가서 Tables의 + 버튼을 통해 faq 테이블을 만들어봤다.
Connection의 열쇠 아이콘을 누르면 AWS Access Key 정보가 보인다.

터미널에서 aws configure를 실행해 aws 자격 증명 설정은 workbench의 정보를 입력한다.
region은 기본으로 us-east-1로 세팅된다.

        AWS Access Key ID: workbench 정보
        AWS Secret Access Key: workbench 정보 
        Default region name: us-east-1
        Default output format: json

이제 DynamoDB 테이블 확인이 가능하다.
aws dynamodb list-tables --endpoint-url=http://localhost:4566 --region us-east-1

workbench에서 생성한 faq 테이블이 보인다.

awslocal?

awslocal은 자동으로 LocalStack의 endpoint(기본으로 localhost:4566)에 요청을 보낸다.
aws CLI를 사용할 수도 있지만, 매번 --endpoint-url을 입력해야 한다.
awscli-local은 pip를 사용해 설치할 수 있다. 나는 pip 설치하고 awslocal을 또 설치하는게 번거로워서 aws cli를 사용했다.

테이블 생성

터미널에서 create-table을 하면 workbench에서도 tastTable이 추가된것을 확인할 수 있다.

aws dynamodb create-table \
    --table-name TestTable \
    --attribute-definitions AttributeName=Id,AttributeType=S \
    --key-schema AttributeName=Id,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
    --endpoint-url=http://localhost:4566 \
    --region us-east-1



https://docs.localstack.cloud/getting-started/
LocalStack 활용한 AWS 테스트 환경 구성하기

profile
계속해서 보완중

0개의 댓글