로컬에서 S3 에 파일 업로드를 테스트 하던 중, localStack 을 사용하면 된다고 해서 알아보고 직접 적용해본 내용을 정리했다.
https://github.com/localstack/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
→ docker compose 를 사용하는 방법으로 테스트해보겠다.
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 버킷을 만들 수 있다.#!/bin/sh
awslocal s3 mb s3://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
는 아무 값이나 넣어준다.특정 프로젝트에서 파일 서버를 통해 S3로 파일이 업로드 되는 과정을 테스트한다.
실제 S3와 연결하지 않고 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