[AWS] What is Localstack?

yoon-bomi·2022년 8월 23일
0

로컬에서 S3 에 파일 업로드를 테스트 하던 중, localStack 을 사용하면 된다고 해서 알아보고 직접 적용해본 내용을 정리했다.


공식문서

https://github.com/localstack/localstack

What is Localstack ?

  • AWS API 를 시뮬레이션 해주는 프레임워크
  • 도커 컨테이너 형태로 제공되며, AWS REST API 스펙에 맞는 모킹 http 서버를 실행한다.


Localstack 지원하는 서비스

Localstack은 유료 버전과 무료 버전으로 나눠져 있으며 무료로 제공하는 서비스는 아래와 같다.

Note: localstack 0.11.0 부터는 모든 APIs 단위 포인트(http://localhost:4566)로 연결을 됨API Gateway at http://localhost:4567
Kinesis at http://localhost:4568
DynamoDB at http://localhost:4569
DynamoDB Streams at http://localhost:4570
S3 at http://localhost:4572
Firehose at http://localhost:4573
Lambda at http://localhost:4574
SNS at http://localhost:4575
SQS at http://localhost:4576
Redshift at http://localhost:4577
Elasticsearch Service at http://localhost:4578
SES at http://localhost:4579
Route53 at http://localhost:4580
CloudFormation at http://localhost:4581
CloudWatch at http://localhost:4582
SSM at http://localhost:4583
SecretsManager at http://localhost:4584
StepFunctions at http://localhost:4585
CloudWatch Logs at http://localhost:4586
EventBridge (CloudWatch Events) at http://localhost:4587
STS at http://localhost:4592
IAM at http://localhost:4593
EC2 at http://localhost:4597
KMS at http://localhost:4599
ACM at http://localhost:4619

왜 쓰나요?

  • 실제 aws s3 와 연동하지 않고도 로컬에서 aws 서비스를 테스트 할 수 있다.
  • AWS 서비스를 사용하는 인프라 로직의 통합테스트를 작성하기 위해 사용한다.

localstack 을 실행하는 방법

  1. Testcontainers
  2. docker compose

→ docker compose 를 사용하는 방법으로 테스트해보겠다.


docker compose 로 localstack 실행하기

  • docker-compose.yml
aws:
    image: localstack/localstack
    environment:
      - SERVICES=s3 // 사용할 서비스 , 를 이용해 나열
      - DEBUG=1
    volumes:
      - "./test/docker-entrypoint-initaws.d:/docker-entrypoint-initaws.d"
  • 사용할 서비스는 SERVICES=ses,s3... 처럼 나열이 가능하다.
  • ./test/docker-entrypoint-initaws.d 경로에 있는 파일에 s3 버킷을 만들 수 있다.

  • ./test/docker-entrypoint-initaws.d
#!/bin/sh

awslocal s3 mb s3://test
  • awslocal 명령어를 이용해 test 버킷을 만들었다.

docker compose up 명령어를 이용해 빌드 후 실행 시켜준다.

make bucket test 가 제대로 뜬다면 성공 🚀


str:
    build:
      context: ./storage-api
      dockerfile: ../Dockerfile.str
    environment:
      - NODE_ENV=development
      - DB_HOST=db
      - DB_PORT=3306
      - DB_USER=root
      - DB_PASSWORD=1234
      - PORT=3030
      - AWS_ENDPOINT=http://aws:4566 # see https://github.com/localstack/localstack
      - AWS_ACCESS_KEY_ID=aws # 아무 값이나 환경변수로 지정하기만 하면 ok
      - AWS_SECRET_ACCESS_KEY=aws # 아무 값이나 환경변수로 지정하기만 하면 ok
    depends_on:
      - db
    ports:
      - "3030:3030"
  • 사용하고자 하는 도커에서 AWS_ENDPOINT=http://aws:4566 로 엔드포인트를 설정해준다. (그래야 localstack 으로 요청이 간다.)
  • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 는 아무 값이나 넣어준다.

storage API 를 이용한 localstack POST 요청 테스트 (파일 업로드)

특정 프로젝트에서 파일 서버를 통해 S3로 파일이 업로드 되는 과정을 테스트한다.
실제 S3와 연결하지 않고 localstack 을 이용해 보았다.

  • 포스트맨

  • localstack docker

  • 결과 : 성공적으로 업로드 된 것을 확인할 수 있다.

localstack 을 통해 업로드 된 파일은 메모리에 저장된다고 한다. 그래서 가시적으로 확인할 수 있는 방법이 없다고 하는데 .. 🤔 스텍오버플로우를 보면 특정 툴을 이용해 확인이 가능한 것도 같다. (유료인지 무료인지는 모름)

ref.

https://tech.inflab.com/202202-integration-test-with-localstack/
https://medium.com/@dudwls96/localstack-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-9b81ec51749c

profile
웹 풀스택에서 백엔드로 진화중 🧚🏻‍♀️

0개의 댓글