AWS Localstack Part 1

Ouvi essa semana a seguinte frase “AWS é impossível pra estudar! é caro ter uma conta, e mais caro ainda o material pra iniciar”.

Isso é uma verdade parcial… é caro para estudantes de tecnologia manter uma conta, e o material idem; porém nada é impossível quando temos uma comunidade open-source enganjada em difundir o conhecimento pelos 4 cantos do mundo. Pensando nisso, vou fazer minha parte com um pequeno tutorial em 3 partes:

  1. Ferramentas para estudo ( Containers, AWS Local e GUI para gestão )
  2. Preparação do ambiente e testes de validação
  3. Desenvolvendo e testando o ambiente.

A ideia é deixar uma documentação MUITO simples, para pessoas que já desenvolvem e querem adentrar no mundo AWS a custo baixo ou nenhum custo. Com isso sendo um start, posso até me prontificar a avançar para apresentar a mesma metodologia pra DevOps, CI/CD, Automação de testes e outros reativando meu Blog com essas dicas e quem sabe vídeo aulas.

Vamos ser práticos e rápidos, tirando do pressuposto que todos sabem um mínimo de Linux; a distro padrão vai ser o Ubuntu 18.04 LTS ( Facilmente adaptável pra Debian e outros ). Vamos falar inicialmente das ferramentas, o que fazem, e como instalá-las:

Part 1 — Ferramentas para estudo

Docker

Docker é um software contêiner da empresa Docker Inc, que fornece uma camada de abstração e automação para virtualização de sistema operacional no Windows e no Linux, usando isolamento de recurso do Kernel, e um sistema de arquivos com recursos de união, criando contêineres independentes para executar dentro de uma única instância do OS, evitando sobrecarga de manter VM’s clássicas.

Ahhhh Docker é virtualização!!!… Sim e não… Docker utiliza uma abordagem bem antiga chamada de paravirtualização introduzida pelo XEN, onde o sistema hospede se utiliza de uma porção abstraída do mesmo Kernel Hospedeiro, assim como o KVM da Redhat ou o Hyper-V da Microsoft. Logo ele não é um VMWare nem tão pouco um XEN APP Server, mas é tão ou mais poderoso quanto, com a limitação de rodar apenas Linux.

Instalar Docker no UBUNTU é tarefa das mais triviais, porém aconselho a usar o PPA Oficial; para tanto vamos garantir que não existem pacotes conflitantes originários da distro.

$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get install docker-ce

Por último coloque seu usuário no grupo do Docker pra poder gerenciar o mesmo, substitua o username pelo seu usuário. Após esse passo, efetue um Logoff para o grupo entrar em vigor e podermos continuar.

$ usermod -a -G docker username

Pronto… DockerCE instalado, não vou explicar os comandos acima, pois não é a ideia desse tutorial; mas não tem Rocket Science aí, tudo coisa do dia-a-dia de quem usa Linux. Em outro tutorial, posso ensinar as nuances do Docker mais à fundo.

Link: https://docs.docker.com/install/linux/docker-ce/ubuntu/.

Python e Virtualenv

Aqui não tem muito o que explicar… Python é uma linguagem de programação de alto nível, interpretada, de scriptorização, orientada a objetos, blá blá blá. Se foque nela, pois vai ajudar imensamente em várias tarefas na AWS ( Aconselho também NodeJS ).

Uma das coisas mais legais do Python para AWS é que temos uma SDK chamada Boto desenvolvida pela própria AWS em conjunto com a comunidade para integração de qualquer serviço existente com seus programas de forma MUITO simplificada. Como exemplo, a própria CLI da Amazon usa Boto.

Pra facilitar a vida, podemos trabalhar com ambientes chrooted no Python, usando o Virtualenv; assim não corremos o risco de termos nosso ambiente entupido de coisas desnecessárias, e ainda organizamos nossos projetos em pastas ou como quisermos, mantendo a aplicação com o mínimo necessário. Isso vai ser especialmente importante pra usar a LocalStack; por experiência própria ela é bem chata pra iniciar em ambientes sujos. Primeiro vamos instala-lo no Ubuntu 18.04:

$ sudo apt install virtualenv

Como exemplo, vamos criar o ambiente pro LocalStack com o comando abaixo:

$ virtualenv -p /usr/bin/python3 localstack
$ source localstack/bin/activate

Você vai notar que seu prompt ganhou um prefixo ( localstack ), isso indica que você está com o ambiente recém criado ativo. Aqui você pode instalar qualquer coisa que quiser com o PIP, pois o ambiente é 100% separado da raiz da distro; quando não quiser mais basta desativa-lo com o comando abaixo:

$ deactivate

Pronto… você já sabe o básico sobre ambientes virtuais com Python, vamos ao AWS Cli e ao LocalStack.

AWS Cli Linux

CLI ( Command Line Interface ), o nome já é alto explicativo e precisaremos dele em nosso tutorial. Ensinarei a instalar, porém não ensinarei a configurá-lo para uma conta real da AWS; isso fica por conta de vocês, vou por o link do tutorial de como configurar abaixo.

Dentro do passo anterior, ensinei a criar o nosso Virtual Environment de testes… com ele ativado, vamos instalar o AWS Cli.

( localstack ) $ pip install awscli

Pronto! Sério gente… é só isso!

Link: https://docs.aws.amazon.com/pt_br/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration

LocalStack

O gestor da mágica toda! Esse cara é simplesmente genial… Uma AWS Cloud Stack completamente funcional para você testar uma private cloud e aplicações serveless completamente offline! Claro que tem uma dezenas de bugs e restrições, mas o que não tem? Só pra se ter uma ideia, vejamos os serviços suportados por essa Stack:

  • API Gateway
  • Kinesis e Firehose
  • DynamoDB, DynamoDB Streams, Redshift
  • Elasticsearch
  • S3, EC2, Route53
  • Lambda e StepFunction
  • CloudFormation
  • SecretsManager
  • CloudWatch Logs e EventBridge
  • STS, IAM, SSM, SES, ES, SQS, SNS

E pra melhorar, eles acabaram de lançar uma versão PRO e Enterprise, com suporte a persistência dos dados, CI entre LocalStack e a AWS, WebUI, RDS, Cognito, ElasticCache, Layers no Lambda, e uma penca de outras features bem legais pra quem quer subir o nível de um simples ambiente de estudos, para um de desenvolvimento 100% offline voltado pra aplicações AWS.

A instalação também não poderia ser mais simplificada:

$ pip install localstack
$ localstack start

Após iniciar o LocalStack, ela vai demorar um pouquinho, subir alguns containers no Docker recém instalado e ao fim do processo apresentar a mensagem “Ready”, indicando que o ambiente está pronto para uso. Lembre-se! tudo que você fizer será apagado ao parar o LocalStack; os dados não são persistentes na versão free. Vamos testar se tudo está funcionando, criando um simples Bucket S3, fazendo upload de um objeto e listando o bucket? Abra um outro terminal e digite os comandos abaixo:

$ aws s3 mb --endpoint http://127.0.0.1:4572 s3://test01

Aqui nos criamos o bucket test01, a flag — endpoint aponta pro nosso ambiente local, veja no link do LocalStack as portas de cada serviço. Se tudo correu bem, ele retornará a mensagem “make_bucket: test01”, caso contrário revise todos os passos anteriores, ou simplesmente desative o ambiente, apague o diretório criado com o virtualenv e começe do zero.

Vamos listar o bucket criado… Novamente se tudo estiver ok, o bucket test01 será listado.

$ aws s3 ls --endpoint http://127.0.0.1:4572

Por último, vamos criar, copiar e listar um arquivo de 1Mb para o bucket:

$ dd if=/dev/zero of=./file01.txt bs=1024 count=1000
$ aws s3 cp --endpoint http://127.0.0.1:4572 file01.txt s3://test01
$ aws s3 ls --endpoint http://127.0.0.1:4572 s3://test01/

Então pessoal, é isso… já temos uma AWS miniaturizada rodando em nossos humildes computadores!

Link: https://github.com/localstack/localstack

Commandeer

Bem… nesse ponto já teremos o básico funcional e rodando; porém sempre tem como melhorar um pouquinho e facilitar nossa vida. O Localstack tem uma pequena WebUI que pode ser acessada em http://127.0.0.1:8080, mas não temos nada além de uma visualização dos recursos provisionados.

O Commandeer é uma GUI ( em contrução ), para gerenciar tanto uma conta real da AWS ( e outros serviços ), como de uma Localstack. Vamos instalar!

$ wget https://commander-releases.s3-us-west-1.amazonaws.com/Commandeer_0.3.3_amd64.deb
$ sudo dpkg -i Commandeer_0.3.3_amd64.deb

Pronto! basta abrir, entrar com as informações básicas que ele solicita, clica em save e feche a janela de informações. Ali na esquerda, você tem uma lista de serviços, entre eles Infrastructure -> Localstack… basta clicar que ele vai te apresentar todos os serviços.

Pra gerenciar os serviços, use a label AWS na árvore da esquerda e garanta que lá em cima na account, esteja selecionado local.

Link: https://getcommandeer.com/

Bem, ficamos por aqui, semana que vem entra a segunda parte! Um abraço a todos, e espero ter ajudado.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade