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:
- Ferramentas para estudo ( Containers, AWS Local e GUI para gestão )
- Preparação do ambiente e testes de validação
- 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-cePor ú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 usernamePronto… 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 virtualenvComo exemplo, vamos criar o ambiente pro LocalStack com o comando abaixo:
$ virtualenv -p /usr/bin/python3 localstack
$ source localstack/bin/activateVocê 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:
$ deactivatePronto… 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 awscliPronto! Sério gente… é só isso!
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 startApó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://test01Aqui 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:4572Por ú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.debPronto! 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.