Como desenvolver AWS Serverless sem gastar 1 centavo
Como ter um ambiente de dev que não gere custos pro seu projeto
Sabemos como desenvolver na AWS é perigoso, falando de lambdas propriamente dito cada request da lambda é um valor gasto dentro da AWS.
Falando de ambiente de DEV isso pode ser custoso ao longo do tempo, e claro torna o teste dentro do ambiente de desenvolvimento demorado.
Hoje vou te mostrar uma alternativa simples, que vai te ajudar nos seus testes de integração e execução do ambiente local.
⚡️LocaStack
LocalStack é uma ferramenta poderosa de simulação de ambiente local que replica muitos dos serviços da AWS na máquina localmente.
Especificamente, quando se trata de aplicações AWS serverless, o LocalStack é utilizado para criar um ambiente simulado em que devs podem testar suas funções Lambda, API Gateway, DynamoDB, S3 e outros serviços AWS sem a necessidade de interagir diretamente com a nuvem da AWS.
No exemplo que irei mostrar utilizei pra um bucket S3!
Com o LocalStack, devs podem desenvolver e testar suas aplicações serverless de forma mais rápida e eficiente, pois não precisam implementar todo código na nuvem AWS e testar por la.
Pode simular interações com serviços da AWS e debuggar localmente, o que reduz o tempo de desenvolvimento e facilita a detecção de problemas.
Essa abordagem também ajuda a reduzir custos, uma vez que não é necessário pagar pelos recursos da AWS durante o desenvolvimento e teste. Além disso, o LocalStack permite aos devs trabalhar offline.
Basicamente LocalStack é uma ferramenta valiosa para desenvolvedores de aplicações serverless que desejam aumentar sua produtividade, reduzir custos e melhorar a qualidade de seus produtos, permitindo-lhes simular o ambiente AWS localmente em suas máquinas.
😬 Show me the code
Falar é fácil né, vou te mostrar na prática!
Basicamente criei um simples projeto de uma api http que roda com AWS Lambda com Api Gateway utilizando Serverless.
Você pode conferir o projeto na integra aqui no repositório do github
Adicionando a imagem do localstack podemos criar um teste de integração que valida que a publicação foi feita com sucesso
docker-compose.yml
localstack:
container_name: "localstack"
image: localstack/localstack:1.0.4
ports:
- "4566:4566"
environment:
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
Este é um teste de integração que verifica a funcionalidade de criação e exclusão de um bucket S3 em um ambiente simulado pelo LocalStack.
beforeAll
: Antes de todos os testes serem executados, este bloco cria um bucket S3 chamado "test" usando a funçãocreateBucket
do AWS SDK. Se ocorrer algum erro durante a criação do bucket, ele será registrado no console.afterAll
: Após todos os testes serem executados, este bloco exclui o bucket S3 criado anteriormente usando a funçãodeleteBucket
do AWS SDK. Se ocorrer algum erro durante a exclusão do bucket, ele será registrado no console.it
: Este é o teste real. Que chama a funçãomain
do seu aplicativo, que deve retornar uma lista de todos os buckets S3. O teste então verifica se o bucket "test" está presente nessa lista. Ele também verifica se o status da resposta é 200, indicando sucesso.
s3bucket.test.js
describe('Testing s3 bucket with serverless offline', () => {
const bucketConfig = {
Bucket: "test"
}
beforeAll(async () => {
try {
await S3.createBucket(bucketConfig).promise();
} catch (error) {
console.error('Error creating bucket:', error);
}
}, 10000); // 10 seconds
afterAll(async () => {
try {
await S3.deleteBucket(bucketConfig).promise();
} catch (error) {
console.error('Error deleting bucket:', error);
}
}, 10000);
it('it should return an array with a S3 Bucket', async () => {
const expected = bucketConfig.Bucket
const response = await main()
const { allBuckets: { Buckets } } = JSON.parse(response.body)
const { Name } = Buckets.find(({ Name }) => Name === expected)
expect(Name).toStrictEqual(expected)
expect(response.statusCode).toStrictEqual(200)
})
Rodando o docker + o teste podemos ver que a chamada da função lambda retornou com sucesso
🤗 Keep it simple
Essa é uma maneira simples e eficaz de trazer facilidade no desenvolvimento envolvendo lambdas, sabemos como é importante se preocupar com custos e perfomance e como ter um ambiente local nos ajuda no desenvolvimento de novas features e… principalmente na manutenção das já existentes!
Obrigada por ter lido até aqui, te vejo na próxima terça!
Dicas da semana 🔥
[CURSOS] -
[TESTES] - Como eu mostrei não basta apenas fazer exemplos, precisamos TESTAR DE FATO! Se você tem dificuldade ou quer se especializar um testes automatizados, tenho indiação de um curso fodástico para você → SE VOCÊ QUER MUDAR COMO TESTA SE CÓDIGO, CLICA AQUI!
[PODCAST]-
Participei do Café Debug Podcast falando da minha mudança de stack de Java para JavaScript o episódio ficou muuuito divertido e cheio de ensinamento, vale a pena colocar pra ouvir! → CLIQUE AQUI PRA OUVIR NO SPOTIFY
[YOUTUBE] -
Vídeo incrível que achei no youtube debxp na qual cria um sistema operacional do ZERO, incrível assistam! →
E claro, meu vídeo no youtube na qual mostro a diferença de perfomance do Aggreagate e do FindAll do MongoDB, e… essa semana sai mais um vídeo!