Criando um serviço com Quarkus e publicando na Aws Lambda

Odilio Noronha
RapaduraTech
Published in
5 min readMar 17, 2021

O AWS Lambda é uma plataforma de computação orientada a eventos e sem servidor fornecida pela Amazon como parte dos Amazon Web Services. É um serviço (serveless) que executa o código de tempos em tempos dado um estímulo/evento de “entrada”. O serviço tem suporte às principais linguagens e plataforma do mercado, tais como: Java, Pyhton, Node.JS, .NET Core, e Go.

Além disso, os serviços Lambda só são cobrados pelo consumo da execução deles, ou seja, você só paga por aquilo que usar. Mas cuidado! Quanto maior o tempo de duração e maior o consumo de memória, maior será o custo, então é necessário fazer um estudo de viabilidade, mesmo que simples.

O AWS Lambda é um dos recursos mais importantes que a AWS oferece, já que representa o “futuro” da interação desenvolvedor x infraestrutura. O serviço permite que os desenvolvedores usem a infraestrutura da AWS sem se preocupar com mais nada: o Lambda implementa e gerencia toda a infraestrutura necessária, monitora a integridade do servidor, registra a execução do código e fornece estatísticas detalhadas.

A extensão quarkus-amazon-lambda permite que você use o Quarkus para construir seu AWS Lambdas. Seus lambdas podem usar anotações de injeção do CDI ou Spring e outras facilidades do Quarkus conforme necessário.

O Quarkus lambda pode ser implantado usando o Amazon Java Runtime, ou você pode construir um executável nativo e usar o Custom Runtime da Amazon se quiser um consumo de memória menor e tempo de inicialização mais rápido.

Iniciando o Desenvolvimento

Primeiro vamos instalar a AWS CLI da amazon, seguindo o que pede nesse link.

Agora vamos criar o nosso projeto quarkus, usando um archetype do maven o quarkus-amazon-lambda.

mvn archetype:generate \
-DarchetypeGroupId=io.quarkus \
-DarchetypeArtifactId=quarkus-amazon-lambda-archetype \
-DarchetypeVersion=1.12.2.Final

Se estiver no windows, não use as barras.

mvn archetype:generate -DarchetypeGroupId=io.quarkus -DarchetypeArtifactId=quarkus-amazon-lambda-archetype -DarchetypeVersion=1.12.2.Final

A extensão quarkus-amazon-lambda varre seu projeto em busca de uma classe que implemente diretamente a interface Amazon RequestHandler <?,?> Ou RequestStreamHandler. Ele deve encontrar uma classe em seu projeto que implemente esta interface ou ele lançará um erro de tempo de construção. Se encontrar mais de uma classe de manipulador, uma exceção de tempo de construção também será lançada.

Aqui ele gera um projeto Quarkus com 3 lambdas de exemplo, nós iremos utilizar o TestLambda, neste exemplo temos um classe nomeada como “test”, um Service injetado aqui e um metodo que recebe um Input e um Context.

Ele recebe um input e devolve um output que são os objetos que foram criados para esse exemplo, vamos checar o que temos de atributos nesses objetos.

Para definir o lambda que iremos executar neste projeto pode definir dentro do application.properties utilizando o nome que usamos no @named no caso ficaria como.

quarkus.lambda.handler=test

Agora usamos o comando

mvn clean package

Pra buildar o nosso projeto e gerar o arquivo de scripts manager.sh

Na sua conta aws, pesquise por IAM, como mostrado abaixo, e entre nessa opção.

Va em funções no menu esquerdo, clique no botão criar função, escolha a opção Lambda e chegara a essa tela, escolha a opção AwsLambda_FullAcess

Marque a opção e avance até o passo 4 onde você ira definir o nome da função e efetivamente cria-la

Agora você pode pegar o arn da função aqui, vamos usar para setar uma variável de ambiente que indica para onde iremos enviar o nosso lambda.

Se você estiver em ambiente Unix basta setar o arn como variável de ambiente e executar o script do quarkus.

LAMBDA_ROLE_ARN=”arn:aws:iam::1234567890:role/lambda-role” sh target/manage.sh create

Mas caso esteja no windows, crie uma variável de ambiente com o LAMBDA_ROLE_ARN e coloque o valor que obteve na aws como mostrado na figura abaixo.

Aqui a função create do aws pro windows, voce pode pegar o caminho especificado no — zip-file dentro do script gerado pelo quarkus depois do build, assim como as outras variáveis, o principal ponto de mudança do script é a remoção das barras no windows.

Agora você pode testar a sua função com o script de

sh target/manage.sh invoke

Dessa forma ele procura um payload.json na raiz do projeto mas você também pode especificar o arquivo de payload usando — payload

Você também pode testar diretamente na interface do aws copiando seu payload e criando um evento de teste como na imagem abaixo.

O AWS Lambda é um serviço altamente escalável, orientado a eventos e servless, que permite aos desenvolvedores criar funções rapidamente. Ele pode ser usado por desenvolvedores de software para criar endpoints e também tem sido usado intensamente por engenheiros de dados para desenvolver pipelines de dados entre componentes AWS como S3, Kinesis e Redshift.

Dessa vez não postei o código no github porque é só um estudo do código gerado automaticamente pelo archetype do Quarkus, o ponto principal está em como fazer o deploy na Aws. Ficou alguma dúvida ou tem algum feedback do que poderia ser melhorado nos projetos? É só deixar um comentário

--

--