0.11
버전부터 4566
포트로 모든 서비스에 접근 가능하다.EDGE_PORT
환경변수값으로 조정 가능하다.version: "3" services: localstack: image: localstack/localstack:0.12.6 # 혹시나 자동 버전업으로 인한 오류를 막기위해 tag 명시 container_name: localstack ports: - "4566:4566" environment: - SERVICES=sns,sqs,s3 - USE_SINGLE_REGION=1 - DEFAULT_REGION=ap-northeast-2 - HOSTNAME=localhost - HOSTNAME_EXTERNAL=loaclhost - DATA_DIR=/tmp/localstack/data - DOCKER_HOST=unix:///var/run/docker.sock volumes: - "${TMPDIR:-/tmp/localstack}:/tmp/localstack" # localstack 이 생성하는 파일을 직접 편집하고 싶을 때 - "./localstack-init.d:/docker-entrypoint-initaws.d" - "/var/run/docker.sock:/var/run/docker.sock"
localstack-init.
디렉토리에 *.sh
파일을 둔다. 이 파일은 정렬 순서대로 실행되므로 00-init.sh
, 01-create-xxx.sh
형태 등으로 만드는 것이 좋다.awslocal
명령으로 aws
명령을 실행하면 된다./tmp
혹은 /tmp/localstack
에 localstack 의 데이터가 저장된다./tmp/localstack/data
에 있는 SQS 데이터를 지워준다.sleep 30 # awslocal 호출 --endpoint-url=http://localstack:4566 생략 가능 # localstack 은 docker-compose service 이름인데, 여기에 밑줄이 있으면 네트워크 접속이 안됐음. # regtion 은 DEFAULT_REGION=ap-northeast-2 으로 자동 지정됨. echo "## creating topics" awslocal sns create-topic --name my-sns echo "## creating queues" awslocal sqs create-queue --queue-name my-sqs awslocal sns subscribe --topic-arn arn:aws:sns:ap-northeast-2:000000000000:my-sns \ --protocol sqs --notification-endpoint http://localstack:4566/queue/my-sqs \
TMPDIR=/private$TMPDIR docker-compose up
localstack-full
에서 지원했으나 deprecated 상태였고 최근 버전에서는 아예 지원을 안 하는 것으로 보임.arn:aws:sns:[region]:000000000000
형태이다.docker-entrypoint-initaws.d/
volume 에 *.sh
파일들을 만들고, awslocal
명령으로 스크립트를 실행하면 된다._
) 이 들어있을 경우 올바로 네트워크 접속이 안됐음.awslocal
명령 실행을 위해 shell 진입# localstack 은 컨테이너 이름. docker exec -it localstack /bin/bash # 명령실행 awslocal ...
# user 계정 영역에 설치 pip install --user awscli-local
alias awslocal="AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=${DEFAULT_REGION:-$AWS_DEFAULT_REGION} aws --endpoint-url=http://${LOCALSTACK_HOST:-localhost}:${LOCALSTACK_PORT:-4566}" # 환경변수 DEFAULT_REGION, LOCALSTACK_HOST, LOCALSTACK_PORT 를 지정한다.
AWSStaticCredentialsProvider localstackCrendentialProvider = new AWSStaticCredentialsProvider(new BasicAWSCredentials("anykey", "anysecret")); AwsClientBuilder.EndpointConfiguration localstackEndpointConfiguration = new AwsClientBuilder.EndpointConfiguration("http://localhost:4566", Regions.AP_NORTHEAST_2.name()); AmazonSNS amazonSNS = AmazonSNSClient .standard() .withEndpointConfiguration(localstackEndpointConfiguration) .withCredentials(localstackCrendentialProvider) .build();
.withPathStyleAccessEnabled(true)
가 있어야 한다. 안그러면 S3 접속 주소가 <버킷이름>.localhost
같은 형태가 되어 매번 hosts 파일에 주소를 등록해줘야 한다.AmazonS3 amazonS3 = AmazonS3ClientBuilder .standard() .withEndpointConfiguration(localstackEndpointConfiguration) .withCredentials(localstackCrendentialProvider) .withPathStyleAccessEnabled(true) .build();