23/01/2021 - AWS, DOCKER
If you use this example, you will have a AWS Localstack Docker instance running on your local environment. This will enable you to test AWS commands or applications without having an AWS account. All happens in your local environment.
This is just a bare minimum example setup for the s3
service which runs on eu-west-1
region. If you get a "volume" related error, refer to the documentation. This works fine for Mac OS.
version: "2.1"
services:
localstack:
image: "localstack/localstack"
container_name: "localstack"
ports:
- "4566-4599:4566-4599"
environment:
- DEBUG=1
- DEFAULT_REGION=eu-west-1
- SERVICES=s3
- DATA_DIR=/tmp/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "/tmp/localstack:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
If the container gets stuck between restarts use version below instead and run rm -rf tmp/
command before each restarts.
version: "3.8"
services:
localstack:
image: "localstack/localstack"
container_name: "localstack"
ports:
- "4566-4599:4566-4599"
environment:
- DEBUG=1
- DEFAULT_REGION=eu-west-1
- SERVICES=lambda
- DATA_DIR=/tmp/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
- LAMBDA_EXECUTOR=docker
- HOST_TMP_FOLDER=./tmp/localstack
volumes:
- "./tmp/localstack:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
Once you run it, you should see container as shown below.
CONTAINER ID IMAGE COMMAND PORTS NAMES
600094dd55c1 localstack/localstack "docker-entrypoint.sh" 0.0.0.0:4566-4599->4566-4599/tcp, 8080/tcp localstack
Visiting http://localhost:4566
should produce {"status": "running"}
response. All the enabled APIs (s3
in our case) are accessible via edge service port 4566
.
Assuming that the aws
cli is installed on your system. Create a custom profile dedicated to our Localstack setup.
$ aws configure --profile localstack
AWS Access Key ID [None]: test
AWS Secret Access Key [None]: test
Default region name [None]: eu-west-1
Default output format [None]:
Confirm if it has been created.
$ cat ~/.aws/config
[profile localstack]
region = eu-west-1
$ cat ~/.aws/credentials
[localstack]
aws_access_key_id = test
aws_secret_access_key = test
In terminal you should add profile to the command. e.g., $ aws --profile localstack
. In your application, use config as shown below.
aws.Config{
Address: "http://localhost:4566",
Region: "eu-west-1",
Profile: "localstack",
ID: "test",
Secret: "test",
}