# LocalStack Configuration

LocalStack is a local sandbox of aws environment for testing Terraform Iac and other useful things without concern about billings & payments

more information is here: https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli?in=terraform%2Faws-get-started

## Requirements

first of all we need python & pip:

```bash
sudo pacman -S python
```

```bash
curl -sS https://bootstrap.pypa.io/get-pip.py | python
python -m pip install --upgrade pip
```

we need localstack python package:

```bash
pip install localstack
```

This installs the ```localstack-cli``` which is used to run the Docker image that hosts the LocalStack runtime.

## Runing

firstly, we need localstack container invoked:

```bash
docker-compose up -d
```

right now we have to start localstack on host (not in container):

```bash
localstack start -d
```

it will get output like that:

```bash
     __                     _______ __             __
    / /   ____  _________ _/ / ___// /_____ ______/ /__
   / /   / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/
  / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,<
 /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_|

 💻 LocalStack CLI 1.4.0

[20:22:20] starting LocalStack in Docker mode 🐳
           preparing environment
LocalStack container named "localstack_main" is already running 
```

at last we can check services status:

```bash
localstack status services
```

more information on: https://github.com/localstack/localstack

## Helpful commands

use ```tflocal``` instead ```terraform```:

```bash
pip install terraform-local
```

```tflocal``` takes care of automatically configuring the local service endpoints, which allows you to easily deploy your unmodified Terraform scripts against LocalStack. Otherwise you must declare ```aws``` provider like that:

```tf
provider "aws" {
  access_key                  = "test"
  secret_key                  = "test"
  region                      = "us-east-1"
  s3_use_path_style           = false
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  skip_requesting_account_id  = true

  endpoints {
    apigateway     = "http://localhost:4566"
    apigatewayv2   = "http://localhost:4566"
    cloudformation = "http://localhost:4566"
    cloudwatch     = "http://localhost:4566"
    dynamodb       = "http://localhost:4566"
    ec2            = "http://localhost:4566"
    es             = "http://localhost:4566"
    elasticache    = "http://localhost:4566"
    firehose       = "http://localhost:4566"
    iam            = "http://localhost:4566"
    kinesis        = "http://localhost:4566"
    lambda         = "http://localhost:4566"
    rds            = "http://localhost:4566"
    redshift       = "http://localhost:4566"
    route53        = "http://localhost:4566"
    s3             = "http://s3.localhost.localstack.cloud:4566"
    secretsmanager = "http://localhost:4566"
    ses            = "http://localhost:4566"
    sns            = "http://localhost:4566"
    sqs            = "http://localhost:4566"
    ssm            = "http://localhost:4566"
    stepfunctions  = "http://localhost:4566"
    sts            = "http://localhost:4566"
  }
}
```

more information on: https://docs.localstack.cloud/user-guide/integrations/terraform/

