O
AWS Lambda é uma plataforma que permite executar código sem a necessidade de
provisionar ou gerenciar servidores. Ele é altamente flexível e pode ser
integrado com uma variedade de serviços da AWS e outras plataformas externas.
Algumas das integrações que o serviço permite fazer são:
1. Integração com eventos da AWS: O Lambda pode ser acionado automaticamente em resposta a eventos gerados por outros serviços da AWS, como o Amazon S3, Amazon DynamoDB, Amazon Kinesis, Amazon Simple Notification Service (SNS) e Amazon Simple Queue Service (SQS).
2.
Integração com APIs: O Lambda pode ser usado como um endpoint para APIs
RESTful, permitindo que o código seja executado em resposta a solicitações de
API.
3.
Integração com ferramentas de DevOps: O Lambda pode ser usado com ferramentas
de integração e entrega contínuas, como o AWS CodePipeline e o AWS CodeDeploy,
para automatizar o processo de implantação de código.
4.
Integração com serviços externos: O Lambda pode ser usado para integrar com
serviços externos, como o Salesforce, Twilio e Slack, permitindo que o código
seja executado em resposta a eventos gerados por esses serviços.
5.
Integração com bancos de dados: O Lambda pode ser usado para integrar com
bancos de dados, como o Amazon RDS e o Amazon Aurora, permitindo que o código
seja executado em resposta a eventos gerados pelo banco de dados.
Essas
são apenas algumas das integrações possíveis com o AWS Lambda. O serviço é
altamente flexível e pode ser integrado com uma ampla variedade de serviços e
plataformas externas.
Pensando
nessa variedade de integrações e flexibilidade que o serviço nos fornece, a
pergunta que fica aqui é, até onde podemos chegar?
Bom,
a resposta para isso é muito simples…
Como dizem muitos sábios “o céu é o limite!!!”
Integração com serviços AWS
Claro que pelo Lambda ser desenvolvido e mantido pela
AWS, a integração facilitada com outros serviços nativos existe e funciona
muito bem. No entanto, cada serviço da AWS possui suas próprias peculiaridades
e nuances, e é importante estar ciente dessas peculiaridades ao integrar o
Lambda com outros serviços. Nesta seção, vamos discutir algumas dessas
peculiaridades de alguns dos serviços mais comuns que são integrados com o AWS
Lambda. Compreender essas peculiaridades pode ajudar a garantir que a
integração seja feita da forma mais eficiente e eficaz possível.
Amazon S3:
Quando
se trata de integração do AWS Lambda com o Amazon S3, há várias maneiras de
enviar informações para o Lambda ou acioná-lo a partir de objetos que são
adicionados a um bucket do S3.
Uma
maneira é usar um gatilho do S3, que pode ser configurado para acionar o Lambda
sempre que um objeto é adicionado, excluído ou atualizado em um bucket do S3. O
gatilho do S3 pode ser configurado para acionar o Lambda de forma síncrona ou
assíncrona, dependendo das necessidades específicas.
Outra
forma é usar o serviço Amazon S3 Event Notifications, que permite monitorar e
receber notificações quando ocorrem eventos específicos no bucket do S3. O
serviço pode ser configurado para enviar uma notificação para uma fila do
Amazon Simple Queue Service (SQS), um tópico do Amazon Simple Notification
Service (SNS) ou um endpoint HTTP, que pode então acionar o Lambda.
Além
disso, também é possível acionar o Lambda diretamente a partir de um objeto no
S3, usando a API do AWS Lambda para enviar um comando para o serviço. Isso
permite que você envie informações diretamente do objeto para o Lambda e
execute ações específicas com base nos dados do objeto.
Essas
são algumas das maneiras mais comuns de integrar o AWS Lambda com o Amazon S3.
Cada abordagem tem suas próprias vantagens e desvantagens, e é importante
escolher a abordagem certa com base nas necessidades específicas do projeto.
Veja um
exemplo em Python do envio de objetos do Lambda para um S3 bucket:
Agora note
a diferença do exemplo acima para outro, onde o Lambda que é acionado pelo S3 Event
Notification:
Amazon DynamoDB:
Quando se trata
do DynamoDB, um banco de dados NoSQL gerenciado pela AWS, é possível integrá-lo
com o Lambda da mesma forma que mencionamos anteriormente com o Amazon S3.
O Lambda pode ser
configurado para enviar e receber dados do DynamoDB. É possível criar uma
função Lambda que seja acionada quando ocorrerem determinados eventos no
DynamoDB, como a inserção de novos itens ou atualizações em um item existente.
Por exemplo, você
pode usar o Lambda para receber notificações quando novos itens são adicionados
ao banco de dados DynamoDB e executar um código personalizado para processar
esses itens. Ou, você pode usar o Lambda para adicionar novos itens ao DynamoDB
a partir de uma fonte externa, como uma API HTTP.
Para integrar o
DynamoDB com o Lambda, é necessário criar uma função Lambda que receba os
eventos do DynamoDB e execute o código desejado. Em seguida, é necessário
configurar o DynamoDB para enviar notificações para essa função Lambda quando
ocorrerem eventos específicos.
Veja um exemplo
de função Lambda, em Python, enviando dados para o DynamoDB:
Agora note a
diferença de uma função Lambda que é chamada pelo recurso de stream de uma
tabela do DynamoDB:
Mas é possível construir aplicações inteiras com Lambda?
A resposta é sim
e serei mais enfático ainda, RECOMENDO MUITO!!!
Como tecnologia,
o Lambda está entre as mais modernas de computação, ou seja, a nata da nata.
Portanto, o custo-benefício ao utilizar o serviço AWS tende a ser muito
vantajoso para seus sistemas, principalmente quando a aplicação completa é
construída em cima do Lambda.
Logo abaixo vou
deixar alguns exemplos de aplicações que você pode construir em cima deste
poderoso serviço AWS:
1 – Processamento
de eventos em tempo real: Lambda pode ser usado para processar eventos em tempo
real, como logs, streams de dados, notificações e atualizações de banco de
dados;
2 – Automação de
processos: é possível usar Lambda para automatizar processos, como backups,
atualizações de software, fluxos de trabalho de aprovação e outras tarefas
comuns de rotina;
3 – Análise de
dados: usando serviços como o Amazon Kinesis e o Amazon Redshift, Lambda pode
ser usado para processar e analisar grandes volumes de dados em tempo real;
4 – Criação de
APIs: Lambda pode ser usado para criar APIs sem servidor para sua aplicação,
com integração com outros serviços da AWS como o Amazon API Gateway;
5 – Desenvolvimento
de aplicações móveis: com o AWS Mobile Hub, você pode usar Lambda para
desenvolver aplicativos móveis sem servidor, incluindo autenticação de usuário,
gerenciamento de usuários e armazenamento de dados;
6 – Desenvolvimento de chatbots: Lambda pode ser usado para desenvolver chatbots usando plataformas como o Amazon Lex, permitindo a integração com serviços de mensagens como o Slack e o Facebook Messenger.
Que tal fazer um exemplo você mesmo?
Para começar,
acesse: https://github.com/gugamainchein/serverless-framework-typescript
O repositório do
GitHub em questão contém um projeto desenvolvido com o framework Serverless e
utilizando a linguagem TypeScript. O Serverless Framework é uma plataforma para
desenvolvimento de aplicações sem servidor, que permite que os desenvolvedores
criem e implantem facilmente aplicações em serviços gerenciados na nuvem, como
AWS Lambda, Azure Functions e Google Cloud Functions.
O projeto contém
um conjunto de arquivos que descrevem a infraestrutura da aplicação, além dos
códigos-fonte e dependências necessárias para sua execução. O código-fonte está
organizado em módulos que representam diferentes funcionalidades da aplicação,
como a autenticação do usuário e o gerenciamento de tarefas.
O uso de
TypeScript, uma linguagem de programação que adiciona recursos de tipagem
estática ao JavaScript, traz uma série de benefícios para o desenvolvimento da
aplicação, como melhorias na produtividade, manutenção de código mais fácil e
redução de erros.
O projeto
apresenta um exemplo de como criar uma aplicação sem servidor escalável,
utilizando uma série de serviços gerenciados da AWS, como AWS Lambda, API
Gateway, DynamoDB e S3. É um bom exemplo para quem deseja aprender como
utilizar o Serverless Framework com TypeScript, bem como explorar a integração
com serviços da AWS.
gustavo.mainchein@darede.com.br
Gustavo possui larga experiência em desenvolvimento de software e cloud computing. Ele possui diversas certificações da Hashicorp e da AWS, sendo a última AWS DevOps Engineer – Professional.