본문으로 바로가기
반응형

개요

기본적으로 개발 환경에서 테스트를 진행할 때 dockerize하여 진행하는 방법을 선호한다. 케이스마다 다르겠지만 실제로 존재하는 서비스에 붙어서 진행하는게 아닌 모든걸 도커화하여 진행하면 아무런 영향을 끼치지 않고 실행 및 종료를 할 수 있기 때문이다. AWS SNS+SQS를 활용하던 중 AWS관련 서비스들은 도커로 테스트할 수 없을까 찾아보다가 localstack이라는걸 발견하여 관련 테스트 진행법에 대해 포스팅한다.

docker-compose.yml

localstack:
  image: localstack/localstack:latest
  environment:
    - AWS_DEFAULT_REGION=ap-northeast-2
    - EDGE_PORT=4566
    - SERVICES=sqs,sns
  ports:
    - "4566-4597:4566-4597"
  volumes:
    - "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
    - "/var/run/docker.sock:/var/run/docker.sock"
  networks:
    - backend

먼저 docker-compose.yml에 위의 내용을 적어준다. SERVICES에 sqs, sns를 명시함으로써 해당 서비스를 사용할 수 있다. 도커를 실행한 후 http://localhost:4566/health 로 접속해보면 아래와 같은 화면을 확인할 수 있다.

위처럼 정상적으로 출력이 된다면 실행이 됐다고 생각하면 된다.

SQS 생성

aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name 큐이름

위 명령어를 통해 큐를 생성할 수 있다.

위처럼 나오면 정상적으로 SQS가 생성된 것이다.

SNS 생성

aws --endpoint-url=http://localhost:4566 sns create-topic --name 토픽이름

위처럼 나오면 정상적으로 SNS가 생성된 것이다.

생성된 SQS 확인

aws --endpoint-url=http://localhost:4566 sqs list-queues

생성한 모든 큐 목록을 확인할 수 있다.

생성된 SNS 확인

aws --endpoint-url=http://localhost:4566 sns list-topics

생성된 모든 SNS 목록을 확인할 수 있다.

SNS에 SQS 연결

aws --endpoint-url=http://localhost:4566 sns subscribe --topic-arn 생성한TOPIC의ARN --protocol sqs --notification-endpoint 생성한SQS주소

위에서 설명한 생성된 SQS/SNS 확인 명령어로 토픽 ARN과 SQS주소를 채워넣고 연결한다.

위처럼 SQS가 특정 토픽을 구독중인 모습을 확인할 수 있다.

구독 리스트 확인

aws --endpoint-url=http://localhost:4566 sns list-subscriptions

모든 구독 리스트를 확인할 수 있다.

SNS 메시지 발행

aws --endpoint-url=http://localhost:4566 sns publish  --topic-arn 토픽ARN --message 'Hi Hide'

토픽ARN과 메시지를 채워넣고 전송한다.

위처럼 나오면 정상적으로 메시지가 publish된 것이다.

SQS 메시지 컨슈밍

aws --endpoint-url=http://localhost:4566 sqs receive-message --queue-url SQS주소

SQS주소를 알맞게 써준다.

위 사진처럼 consume한 메시지를 확인할 수 있다.

반응형