Article image
Fernando Araujo
Fernando Araujo05/04/2024 17:59
Compartilhe

AWS Lambda – Disparo automático de aplicações sem servidor

  • #AWS

Olá, dev!

Este artigo apresenta o AWS Lambda, as situações em que ele é aplicado, exemplos de uso e boas práticas de uso.

Sumário

1.  Introdução

2.  AWS

3.  AWS Lambda

4.  Exemplo de uso

5. Exemplo Prático: Processamento de Imagens com AWS Lambda

6.  Considerações finais

7.  Referências

1 – Introdução

Os serviços de nuvem (cloud), como a AWS, da Amazon, revolucionaram a forma como as empresas consomem recursos computacionais, tornando-os acessíveis sob demanda, eliminando a necessidade de investimentos pesados em hardware e infraestrutura física.

Estes serviços de datacenters são distribuídos em vários locais do mundo, permitindo que os usuários implantem suas aplicações e dados mais próximos de seus clientes, reduzindo a latência e melhorando o desempenho.

Este artigo trata de um dos serviços mais populares da nuvem AWS, o AWS Lambda.

2 – AWS

Segundo [1], a Amazon Web Services (AWS) é uma plataforma de computação em nuvem que possibilita a construção de aplicações de maneira eficiente e econômica.

Ela oferece vários serviços, que podem ser utilizados para construir e escalar aplicações e infraestrutura de Tecnologia da Informação (TI).

Os serviços oferecidos abrangem computação, armazenamento, banco de dados, “data lakes”, segurança, redes, desenvolvimento de aplicações, análises, ferramentas de gerenciamento, Inteligência Artificial (IA), Internet das Coisas (IoT), entre outras.

Duas das principais características da AWS são a elasticidade e o pagamento por uso.

A elasticidade permite que os usuários dimensionem seus recursos conforme a demanda, aumentando ou diminuindo a capacidade de computação e armazenamento de acordo com as necessidades do negócio.

O pagamento por uso cobra apenas os recursos realmente utilizados, sem custos iniciais ou contratos de longo prazo.

A AWS é amplamente adotada por empresas de todos os tamanhos e setores, incluindo startups, empresas de tecnologia, instituições financeiras, empresas de saúde, agências governamentais e outras.

Além disso, a AWS oferece uma ampla gama de ferramentas de automação, monitoramento e gerenciamento, para simplificar as operações de TI e garantir a segurança e o desempenho das aplicações implantadas na nuvem.

Entre os serviços mais populares da AWS, destaca-se o AWS Lambda, detalhada nas próximas seções.

3 – AWS Lambda

De acordo com [2], a AWS Lambda revolucionou a maneira como desenvolvedores criam e executam código na nuvem. Desde sua introdução em 2014, ela tem sido uma ferramenta fundamental para a construção de aplicações escaláveis, flexíveis e altamente disponíveis na plataforma AWS.

A AWS Lambda é um serviço de computação em nuvem sem servidor (“serverless”) que permite aos desenvolvedores a execução de código sem a necessidade de prover ou gerenciar servidores.

Segundo [3], o AWS Lambda pode ser referido como “Function as a Service" (FaaS)”, ou “recurso como serviço”, uma vez que os eventos acionam as funções relevantes necessárias para proceder com as requisições.

Juntamente com a FaaS, a arquitetura serverless também é conhecida como “Backend as a Service" (BaaS)”, que remove uma boa parte da sobrecarga de administração de banco de dados e oferece autorização para usuários e níveis diferentes. A figura abaixo ilustra os componentes desta arquitetura e suas conexões:

image

Nesta figura, vemos uma função Lambda como o recurso de computação (“backend“), um aplicativo móvel que se conecta diretamente a ele, e a Amazon API Gateway, que fornece um endpoint HTTP para um site estático, hospedado na Amazon S3.

Ainda segundo [2]. para o funcionamento do serviço os desenvolvedores devem carregar seu código e definir os eventos que desencadearão sua execução, cabendo ao serviço escalar automaticamente o código em resposta aos eventos, garantindo que ele seja executado apenas quando necessário e cobrando apenas pelo tempo de execução real.

Essa abordagem apresenta diversas vantagens, incluindo:

•   Escalabilidade automática: o serviço escala automaticamente a execução do código em resposta ao volume de eventos, garantindo que os recursos sejam alocados conforme necessário;

•   Sem custo de infraestrutura: o serviço gerencia todos os recursos necessários para executar o código, não sendo necessário os desenvolvedores se preocuparem com a infraestrutura subjacente;

•   Pagamento por uso: o cliente é cobrado apenas pelo tempo de execução real do código, sem cobranças por tempo de inatividade ou de recursos ociosos;

•   Alta disponibilidade: o serviço é altamente disponível e tolerante a falhas, garantindo que o código seja executado de forma confiável, mesmo em caso de falhas de hardware ou software.

A arquitetura da AWS Lambda é projetada para simplificar o processo de desenvolvimento e execução de código na nuvem. Segue uma visão geral do seu funcionamento:

1.   Upload de código: O desenvolvedor cria seu código em uma das linguagens suportadas pelo serviço (Node.js, Python, Java, C#, entre outras). Em seguida, o código é empacotado e carregado na AWS Lambda;

2.   Definição de gatilhos: O desenvolvedor define os eventos que dispararão a execução do código, que podem ser eventos de outros serviços da AWS, como uploads de arquivos no Amazon S3, mensagens em filas do Amazon SQS, alterações em tabelas do Amazon DynamoDB etc.;

3.   Execução do código: Quando ocorre um evento, o serviço escala automaticamente a execução do código associado ao evento, em um ambiente isolado, provisionado pela AWS, e por um tempo limitado, chamado "tempo de execução";

4.   Processamento de resultados: Concluída a execução do código, opcionalmente, o serviço pode processar os resultados e tomar medidas adicionais, como enviar notificações por email, gravar logs de auditoria, etc;

5.   Encerramento do ambiente: A conclusão do processo se dá pelo encerramento do ambiente de execução, liberando os recursos e garantindo eficiência na utilização dos recursos da AWS.

A AWS Lambda oferece uma variedade de recursos aos desenvolvedores, dos quais podemos destacar os principais:

•   Suporte a várias linguagens: o serviço suporta várias linguagens de programação (Node.js, Python, Java, C#, Go e outras), dando flexibilidade na escolha da linguagem mais adequada para suas necessidades;

•   Integração com outros serviços da AWS: o serviço pode ser integrado facilmente com outros serviços da AWS (como Amazon S3, Amazon DynamoDB, Amazon SQS, Amazon SNS e outros), permitindo a criação de pipelines de dados complexos e aplicações sem servidor altamente integradas;

•   Tempo de execução flexível: O tempo de execução máximo para os códigos pode ser especificado, permitindo controlar o desempenho e os custos da execução.

•   Monitoramento e logging integrados: permite rastrear o desempenho e o comportamento de códigos em tempo real;

•   Gestão de permissões granulares: as permissões de acesso aos recursos da AWS podem ser controladas de forma granular, garantindo a segurança e o controle de acesso adequados;

•   Versões e aliases: é oferecido suporte para o versionamento de código e aliases;

•   Integração com ferramentas de desenvolvimento: o serviço é integrado com várias ferramentas de desenvolvimento populares, como AWS Toolkit para Eclipse, AWS Toolkit para Visual Studio, AWS CLI, entre outras, facilitando o desenvolvimento e a depuração de códigos.

A AWS Lambda pode ser aplicada em uma variedade de casos de uso, incluindo:

•   Processamento de eventos em tempo real: logs de aplicativos, eventos de streaming de dados, eventos de IoT, por exemplo.

•   Automatização de tarefas: para tarefas repetitivas, como processamento de dados, conversão de formatos de arquivos, geração de relatórios etc.

•   Aplicações sem servidor: para execução do código em resposta a eventos específicos, sem a necessidade de prover ou gerenciar servidores;

Integração de sistemas: oferece integração de sistemas e serviços heterogêneos, possibilitando a troca de dados e a coordenação de fluxos de trabalho entre diferentes sistemas;

•   Backends de aplicativos móveis e web: fornece uma maneira escalável e eficiente de executar a lógica de negócios do aplicativo.

Existe um serviço associado ao AWS Lambda chamado Lambda SnapStart.

Ao acionar este serviço para uma determinada função, a publicação de uma nova versão da função acionará um processo de otimização. O processo inicia sua função e a executa durante toda a fase Init. Depois, ele obtém um instantâneo criptografado e imutável da memória e do estado do disco e o armazena em cache para reutilização.

Quando a função é invocada posteriormente, o estado é recuperado do cache em partes conforme necessário e usado para preencher o ambiente de execução. Essa otimização torna o tempo de invocação mais rápido e previsível, já que a criação de um novo ambiente de execução não requer mais uma fase Init dedicada.

4 – Exemplos de uso

Agora, veja como podemos criar uma função AWS Lambda na prática.

Segundo [4], primeiro, o editor de código integrado do AWS Management Console carrega um snippet de código Python pré-existente e totalmente funcional, que você pode testar e implantar de imediato.

A partir daí, você pode editar seu código Python e testar suas funções do AWS Lambda.

Para construir uma função AWS Lambda usando a linguagem Python, siga os passos:

1. Faça login no console AWS e navegue até o painel do Lambda.

2. Clique no botão Criar Função;

3. Escreva o nome da função e a versão do Python (as versões disponíveis vão da 3.8 até a mais atual);

4. Edite o código Python no editor de código incorporado da Amazon;

5. Clique em Deploy e depois em Test para ver sua função Python Lambda funcionando.

Ver a figura abaixo:

image

A Amazon fornece um editor de código-fonte na guia Código da página de configuração da nova função. O código fornecido é totalmente funcional, mas você precisa personalizar sua função Python Lambda:

Adicione uma instrução print à função: as instruções de impressão serão  transformadas em logs do CloudWatch;

Personalize o JSON na cláusula return: estes são os dados que serão retornados ao programa de chamada.

Vamos começar com uma função bem simples, do tipo “Hello World”, ver a figura a seGuir:

image

Agora, você vai testar a sua função Lambda. Clique nos botões Deploy e Test, sua função Lambda atualizada e o código Python serão executados. A saída será mostrada na guia Resultados da Execução. A instrução de impressão aparece como entradas de log e o bloco de retorno é a resposta do Lambda, como mostrado na figura.

image

5- Exemplo Prático: Processamento de Imagens com AWS Lambda

De acordo com [5], para ilustrar a aplicação da AWS Lambda com um exemplo prático, vamos criar uma aplicação de processamento de imagens.

Em um bucket do Amazon S3, os usuários fazem o upload de imagens. Por questões de padronização, toda vez que uma nova imagem for carregada no bucket, ela será redimensionada, automaticamente, para um tamanho específico, digamos 512 x 512 pixels.

Um bucket é um recipiente de armazenamento do Amazon S3 usado para armazenar objetos digitais, de qualquer tipo de dado. Ele fornece um contexto lógico para a organização dos dados, possibilitando o gerenciamento dos objetos armazenados.

Os passos para a implementação desta aplicação usando a AWS Lambda são:

1.   Criar a função Lambda: Esta função Lambda será disparada sempre que uma nova imagem for carregada no bucket;

2.   Definir o gatilho: Configurar o Amazon S3 para enviar notificações para a função Lambda sempre que uma nova imagem for carregada no bucket;

3.   Processar a imagem: Na função Lambda, após recuperar a imagem recém-carregada do bucket, ela será redimensionamos para o tamanho desejado (512 x 512), usando uma biblioteca de processamento de imagens da linguagem utilizada; depois, a imagem redimensionada será carregada de volta no bucket.

A figura a seguir ilustra este processo.

image

Aqui está um exemplo de código Python para implementar esta função Lambda, usando a biblioteca de imagens Pillow, obtido de [6]:

import boto3
from PIL import Image
from io import BytesIO

s3 = boto3.client('s3')

def lambda_handler(event, context):
 for record in event['Records']:
     bucket_name = record['s3']['bucket']['name']
     object_key = record['s3']['object']['key']

     # Carregar imagem do S3
     response = s3.get_object(Bucket=bucket_name, Key=object_key)
     image_data = response['Body'].read()

     # Redimensionar imagem
     image = Image.open(BytesIO(image_data))
     resized_image = image.resize((512, 512)) # Redimensionar para 512x512 pixels

     # Salvar imagem redimensionada de volta no S3
     output_buffer = BytesIO()
     resized_image.save(output_buffer, format='JPEG')
     output_buffer.seek(0)
     s3.put_object(Bucket=bucket_name, Key=f"resized/{object_key}", Body=output_buffer)

6– Considerações finais

Este artigo tratou de um dos serviços populares da plataforma de nuvem da Amazon, a AWS.

O serviço é o AWS Lambda, uma ferramenta poderosa para o desenvolvimento de aplicações em nuvem, oferecendo uma maneira simples e eficiente aos desenvolvedores para que eles executem um código “serverless” (sem servidor).

A AWS Lambda simplifica o processo de construção de aplicações escaláveis, flexíveis e altamente disponíveis.

Foram mostradas as características do serviço, depois, a maneira de se criar um serviço AWS Lambda.

Por fim, foi mostrado um código em Python para criar uma função AWS Lambda para aplicação de Processamento de imagens, de redimensionamento automático de imagens.

6 – Referências

[1] AWS Documentation, Computação em nuvem com a AWS. Disponível em: <https://aws.amazon.com/pt/what-is-aws/?nc2=h_ql_le_int>.Acesso em:04/04/2024.

[2] AWS Documentation, AWS Lambda. Disponível em: <https://aws.amazon.com/pt/lambda/>.Acesso em: 04/04/2024.

[3] MANDIC, Lambda AWS para desenvolvedores Java serverless: como melhor aproveitá-lo?. Disponível em: <https://blog.mandic.com.br/artigos/aws-lambda-para-desenvolvedores-java-serverless-como-melhor-aproveita-lo/#:~:text=O%20Lambda%20%C3%A9%20muitas%20vezes,executar%20fun%C3%A7%C3%B5es%20sem%20maiores%20inc%C3%B4modos>. Acesso em: 04/04/2024.

[4] AWS Documentation, Building Lambda functions with Python. Disponível em: <https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html>. Acesso em: 04/04/2024.

[5] theserverside, Create your first Python AWS Lambda function in minutes. Disponível em: <https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/create-python-aws-lambda-function-hello-world-tutorial-serverless-how-to-example>. Acesso em 04/04/2024.

[6] ChatGPT, código em Python para aplicação de processamento de imagens. Disponível em: <https://chat.openai.com>. Acesso em: 04/04/2024.

Compartilhe
Comentários (0)