Ir para o conteúdo

Essa publicação tem como objetivo falar um pouco de arquitetura Serverless e como aplicá-la em um cenário de leitura de arquivos e inclusão em uma base de dados na AWS Lambda.

AWS Lambda - Como importar arquivos com a plataforma

O que é AWS?

Amazon Web Services, também conhecido como AWS, é uma plataforma de serviços de computação em nuvem oferecida pela Amazon.com. Os serviços são oferecidos em várias zonas distribuídas pelo mundo.

A Nuvem AWS abrange 80 zonas de disponibilidade em 25 regiões geográficas pelo globo, com planos já divulgados para mais 15 zonas de disponibilidade e mais 5 regiões da AWS na Austrália, Índia, Indonésia, Espanha e Suíça.

O que é arquitetura serverless?

Arquitetura Serverless, ou apenas Serverless, é um modelo de execução onde o provedor de Cloud (AWS, Azure ou Google Cloud) será o responsável por executar pedaços de código com recursos que irão ser alocados dinamicamente, cobrando apenas pelos recursos usados para executar aquele código em específico.

Geralmente, o código será executado em containers stateless que podem ser ativados de diversos modos, como requisições HTTP, eventos do banco de dados, serviços de filas, alertas de monitoramento, upload de arquivos, eventos agendados, etc.

O código que será enviado ao provedor é geralmente escrito em forma de funções. Por conta disso, podemos ver a arquitetura Serverless ser referenciada como “Functions as a Service” (Funções como Serviço) ou “FaaS”.

Esses são os maiores provedores de FaaS do mercado atualmente: AWS: AWS Lambda, Microsoft Azure: Azure Functions e Google Cloud: Cloud Functions

Frameworks Serverless

AWS Serverless Application Model (SAM): é uma estrutura de código aberto para a construção de aplicativos sem servidor. Ele fornece uma sintaxe abreviada para expressar funções, APIs, bancos de dados e mapeamentos de fontes de eventos.

Com apenas algumas linhas por recurso, você pode definir o aplicativo que deseja e modelá-lo usando YAML. Durante a implantação, o SAM transforma e expande a sintaxe do SAM para a sintaxe do AWS CloudFormation, permitindo que você crie aplicativos sem servidor com mais rapidez.

Serverless Framework (SLS): É um framework opensouce que permite a construção de aplicativos compostos de microsserviços, executados em resposta a eventos, com escalonamento automático para você, cobrando apenas quando são executados.

Isso reduz o custo total de manutenção de seus aplicativos, permitindo que você crie mais lógica e com mais rapidez. O Framework usa novos serviços de computação orientados a eventos, como AWS Lambda, Google Cloud Functions e muito mais.

É uma ferramenta de linha de comando que fornece estrutura, automação de fluxo de trabalho e melhores práticas para desenvolver e implantar sua arquitetura sem servidor. Também é completamente extensível por meio de plug-ins.

Desafio

O parse de arquivos de diversos formatos (json, XML, csv, etc.. ) para inclusão na base de dados é uma tarefa comum no nosso dia a dia, mas para montar uma arquitetura que atenda essa necessidade de forma robusta, escalável e performática pode não ser trivial.

Nos tópicos abaixo será escolhida uma abordagem para atender essa necessidade.

Arquitetura proposta

Esquema representando a arquitetura proposta.

Framework escolhido

Serverless Framework (SLS)

Mapa com o Serverless Framework no centro, com algumas características dele.

Este framework foi escolhido pelos motivos a seguir:

  • É open source com forte participação da comunidade;
  • Multicloud;
  • É utilizado por grandes players;
  • Vasta documentação e exemplificação.

Pré-requisitos

  • Criação de uma conta AWS (ver nível gratuito);
  • Configuração de credenciais IAM;
  • Instalação/Configuração AWS CLI;
  • Instalação/Configuração Serverless Framework CLI.

Entendendo a configuração

Conforme código fonte a configuração de deploy é realizada no arquivo serverless.yml, contido na raiz do projeto.

  1. A área “provider” vai definir a linguagem, o provedor de nuvem, a região do provedor e variáveis de ambiente.

2. A área “resources” definirá os recursos a serem criados na AWS. No caso dessa aplicação, foram utilizados os recursos S3 para armazenamento dos arquivos JSON e Dynamodb para armazenamento dos dados em base, mas outros recursos estão disponíveis(APIs, MQ, etc..) conforme documentação.

3. A área “iam” concederá permissões nos recursos. Para os recursos definidos no tópico anterior, é necessário conceder permissões de leitura e escrita nos buckets S3 e permissões de consulta, inclusão, atualização e deleção para a base DynamoDB.

4. A área “functions” define as funções lambdas a serem implantas e os respectivos gatilhos associados. No caso dessa aplicação, a função “importDBZJsonToDynamodDB” definida no arquivo javascript “importHandler.js” será acionada sempre que um arquivo for incluído no bucket S3 definido na variável S3_DBZ_INPUT_BUCKET.

Entendendo o código

Conforme código fonte os trechos de código explicados a seguir estão contidos no arquivos javascript “importHandler.js”.

  1. Definição da função lambda

2. Leitura do evento e leitura do arquivo json no bucket S3.

3. Parse do json e persistência dos dados no DynamoDB.

Resultado da execução

Foi incluído um arquivo JSON de 10MBs contendo 10.000 registros no bucket S3. Segue log gerado pela execução da função lambda na região us-east-1.

Utilizando a calculadora de faturamento, com simulação do mesmo processamento sendo executado 1000 vezes por mês, o custo mensal efetivo é de $0.37 .

Utilizando a calculadora EC2, o custo mensal para manter provisionada uma máquina EC2 de configuração mínima t4g.nano e 8gb de armazenamento é de $2.70.

Conclusão

Esse tipo de arquitetura (Serveless) é indicada quando não há a previsibilidade do poder computacional necessário ou mesmo quando não há necessidade de processamento 24/7.

Portanto, é recomendado que seja avaliada a necessidade da solução para a tomada de decisão no uso dessa abordagem.

Referências

Outras publicações