LocalStack으로 AWS 로컬 환경 구축하기

ds_chanin

·

2021. 5. 30. 03:51


목적

Docker와 LocalStack, AWS CLI을 이용해서 AWS SQS를 구축해보자.

 

환경

  • Docker
    • Engine : 19.03.8
    • compose : 1.25.4
  • Mac os

 

docker-compose.yml

version: "3"

services:
  localstack:
    container_name: localstack
    image: localstack/localstack:0.12.11
    ports:
      - "4566-4576:4566-4576"
    environment:
      - SERVICES=sqs
      - DEFAULT_REGION=${DEFAULT_REGION- }
      - DEBUG=0
      - DOCKER_HOST=unix:///var/run/docker.sock
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "${TMPDIR:-/tmp/localstack}:/tmp/localstack"

  setup-aws-resources:
    image: amazon/aws-cli:2.2.7
    volumes:
      - ./dev_env:/project/dev_env
      - ./aws:/aws
    environment:
      - AWS_ACCESS_KEY_ID=${ACCESS_KEY_ID- }
      - AWS_SECRET_ACCESS_KEY=${SECRET_ACCESS_KEY- }
      - AWS_DEFAULT_REGION=${DEFAULT_REGION- }
    entrypoint: /bin/sh -c
    command: >
      "
        echo wait for the state of localstack to become ready...
        sleep 10
        aws sqs create-queue --queue-name local-signup-request --endpoint-url=http://localstack:4566 --attributes file://local-signup-request.json
        echo set up aws resources is complete
      "
    depends_on:
      - localstack

위 스크립트는 두개의 컨테이너를 생성한다.

  • localstack: AWS 리소스를 사용하기 위해 띄워주는 컨테이너이다. sqs, sns, s3등 AWS 리소스를 로컬환경에서 사용할 수 있게 해준다.
  • setup-aws-resources: localstack 만으로 AWS 리소스를 생성할 수 없기 때문에 AWS CLI를 사용해야한다. AWS CLI 를 이용해서 AWS 리소스를 생성해주도록 하자.

 

주의점

컨테이너의 이미지들의 버전은 꼭 명시해주도록하자 안그러면 자동으로 최신 버전을 가져와서 호환성 문제로 컨테이너가 제대로 생성되지 않을 수도 있다.

localstack.environment.SERVICESAWS CLI의 서비스 이름을 콤마로 구분해서 적어주면 된다.

AWS CLI 를 사용해서 리소스를 생성하는 부분을 보면 --attributes file://local-signup-request.json 이 있다.

SQS queue의 상세 설정을 json 파일로 작성해두고 생성할 때 참고하여 생성한다. 따라서 host의 로컬에서 json 파일을 작성하고 컨테이너에서 실행할 수 있어야하므로 volume을 마운트 해주도록 한다.

AWS CLI 명령어의 실행 위치는 /aws 이다. docker-compose.yml 파일 경로에 aws 폴더를 생성하고 json 파일을 작성해주도록 한다.

 

위 스크립트에는 환경변수 4개가 필요하다.

  • DEFAULT_REGION: AWS 리젼
  • ACCESS_KEY_ID: AWS 접근 ID
  • SECRET_ACCESS_KEY: AWS 접근 비밀번호
  • TMPDIR: compose 를 실행하는 host의 공유 폴더

매번 환경 변수를 커맨드라인으로 넣어주기 귀찮으니 간단한 스크립트(run.sh)를 작성해서 사용하도록 하자.

#!/bin/bash

# Localstack
export SERVICES=sqs
export TMPDIR=/private$TMPDIR
export DEBUG=0
export DEFAULT_REGION=ap-northeast-2
export ACCESS_KEY_ID=accesskey
export SECRET_ACCESS_KEY=secretkey

docker-compose up -d --remove-orphans

./run.sh 명령어로 스크립트를 실행하면 문제없이 로컬스택이 구축이 된다.

 

확인

위 스크립트에서는 SQS를 생성했다. 잘 생성되었는지 아래 커맨드로 확인을 해본다.

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

생성한 큐가 잘 보인다면 localstack을 이용한 AWS local 환경 구축은 잘 된것이다!