Localstack, a "AWS" local para desenvolvimento em cloud
Tags: aws, localstack, cloud, development
Published: 2023-11-09 18:59:46

Neste artigo vamos abordar a Localstack, que simula localmente  alguns dos serviços da cloud AWS.

Assim como o uso de containers tornou-se um padrão de ambiente para desenvolvimento de software desde alguns anos atrás, creio que podemos dizer o mesmo da Localstack quando o foco                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            é o desenvolvimento para a cloud AWS.

A Localstack é um conjunto de ferramentas que simula o ambiente cloud AWS, com isto podemos desenvolver e testar localmente soluções como microsserviços ou funções, acessando serviços existentes na AWS, em nossa própria máquina para então quando estiver tudo ok, fazer o deploy na cloud AWS.

A maneira que considero mais fácil e rápida para termos a Localstack rodando, é fazendo uso da imagem oficial para containers. Para isso podemos criar um arquivo com o nome compose.yml para o Podman com o conteúdo abaixo:

```
version: "3.8"

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack:1.3.1
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559"  # external services port range
    environment:
      - DEBUG=${DEBUG-}
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
```

_Aqui estou usando o gerenciador de containers Podman, caso você utilize o Docker nomeie o arquivo acima como docker-compose.yml_

E então via podman-compose subir o container com o comando:

```
podman-compose up -d
```

_Novamente, se você usa Docker substitua no comando acima podman-compose por docker-compose_

Certo, agora temos a Localstack operante em nossa máquina local, mas como podemos interagir com ela? Bem, da mesma forma que interagimos com a cloud AWS. Pode ser pela AWS CLI, por AWS SDK e outra forma que muitas pessoas gostam é através de uma console web e para isso temos uma console [disponível](https://app.localstack.cloud/sign-in), onde você pode fazer um cadastro gratuito e então essa console web interage com a sua Localstack rodando na sua máquina local. Alguns "serviços" requerem uma assinatura paga para utilização, mas vários serviços trivais são gratuitos.

Para a instalação do AWS CLI, que é super fácil, você pode seguir o tutorial da própria AWS, link nas referências ao final do artigo.

Creio que seja uma boa prática você criar um perfil próprio para a Localstack pois facilita a separação do seu Localstack para uma possível conta na cloud AWS e você pode criar este perfil com o comando abaixo:

```
aws configure --profile localstack
```

Sugestão de preenchimento dos valores que são pedidos na criação do perfil:

```
AWS Access Key ID [None]: teste_access_id
AWS Secret Access Key [None]: teste_access_secret
Default region name [None]: us-east-1
Default output format [None]: json
```

Agora para testar vamos criar um bucket S3 na nossa Localstack:

```
aws s3api create-bucket \
    --endpoint=http://localhost:4566 \
    --bucket meu-bucket \
    --profile localstack
```

A saída deste comando deverá ser:

```
{
    "Location": "/meu-bucket"
}
```

E para listarmos nossos buckets S3 utilizamos o comando abaixo:

```
aws s3 ls \
    --endpoint=http://localhost:4566 \
    --profile localstack
```

E teríamos uma saída como:

```
2023-11-05 15:20:06 meu-bucket
```

Era isso que eu queria trazer neste artigo, mostrar mesmo que de forma superficial o poder e a utilidade da Localstack para podermos desenvolver e testar localmente antes de subirmos para a cloud AWS.

## Referências

1. https://localstack.cloud/
2. https://github.com/localstack/localstack
3. https://docs.aws.amazon.com/pt_br/cli/latest/userguide/getting-started-install.html
4. https://docs.aws.amazon.com/cli/latest/reference/
5. https://app.localstack.cloud/sign-in/