Lançamento do Amazon Web Services Modelo de aplicativo sem servidorou SAM, há alguns meses. Ele define uma sintaxe simplificada para expressar
recursos sem servidor. O SAM estende AWS CloudFormation para adicionar suporte ao API Gateway, ao AWS Lambda e ao Amazon DynamoDB. Este blog mostrará como criar um microsserviço simples usando
SAM. É claro que usaremos Couchbase em vez de DynamoDB! Este blog também usará os conceitos básicos explicados em Microsserviço usando o AWS API Gateway, o AWS Lambda e o Couchbase. SAM
mostrará a facilidade com que toda a pilha de microsserviços pode ser implantada e gerenciada.

Para relembrar, aqui estão os principais componentes da arquitetura:

serverless-microservice

  • O cliente pode ser curl, AWS CLI/Console, cliente Postman ou qualquer outra ferramenta/API que possa invocar um ponto de extremidade REST.
  • O AWS API Gateway é usado para provisionar APIs. O recurso de nível superior está disponível no caminho /livros. HTTP OBTER e POST são publicados para o recurso.
  • Cada API aciona uma função Lambda. Duas funções Lambda são criadas, lista de livros para listar todos os livros disponíveis e criar livro para criar um novo livro.
  • O Couchbase é usado como um armazenamento de persistência no EC2. Todos os documentos JSON são armazenados e recuperados desse banco de dados.

Outros blogs sobre serverless:

Vamos começar!

Modelo de aplicativo sem servidor (SAM)

Um modelo do AWS CloudFormation com recursos sem servidor em conformidade com o Modelo SAM da AWS é chamado de arquivo ou modelo SAM. Ele é implantado
como uma pilha do CloudFormation. Vamos dar uma olhada no nosso modelo SAM: Esse modelo está disponível em github.com/arun-gupta/serverless/blob/master/aws/microservice/template.yml.

Modelo SAM Especificação fornecer detalhes completos sobre o conteúdo do modelo. As partes principais do modelo são:

  • Define dois recursos, ambos do tipo Lambda Function identificados por AWS::Serverless::Function atributo. O nome da função Lambda é definido por Recursos..
  • A classe de cada manipulador é definida pelo valor de Recursos...Propriedades.Manipulador atributo
  • O tempo de execução do Java 8 é usado para executar a função definida por Recursos...Propriedades.Tempo de execução atributo
  • O código da classe é carregado em um bucket S3, no nosso caso, para s3://serverless-microservice/microservice-http-endpoint-1.0-SNAPSHOT.jar
  • Recursos...Propriedades.Ambiente.Variáveis.COUCHBASE_HOST define o host em que o Couchbase está sendo executado. Isso pode ser facilmente implantado no EC2, conforme explicado em Configurar o Couchbase.
  • Cada função Lambda é acionada por uma API. Ela é implantada usando o AWS API Gateway. O caminho é definido por Eventos.GetResource.Properties.Path. O método HTTP é definido usando Eventos.GetResource.Properties.Method atributo.

Aplicativo Java

O aplicativo Java que contém as funções Lambda está em github.com/arun-gupta/serverless/tree/master/aws/microservice/microservice-http-endpoint.
Função lambda que é acionada por HTTP GET é mostrado:

Um pouco de explicação:

  • Cada função Lambda precisa implementar a interface com.amazonaws.services.lambda.runtime.RequestHandler.
  • A integração do API Gateway e do Lambda exige um formato de entrada e formato de saída.
    Esses formatos são definidos como GatewayRequest e GatewayResponse aulas.
  • A lógica da função usa SDK Java do Couchbase para consultar o banco de dados do Couchbase. N1QL A consulta é usada para consultar
    o banco de dados. Os resultados e a exceção são então agrupados em GatewayRequest e GatewayResponse.

A função Lambda acionada pelo método HTTP POST também é bastante simples:

Um pouco de explicação:

  • A carga útil da solicitação de entrada é recuperada de GatewayRequest
  • O documento inserido no Couchbase é retornado como resposta.
  • Como no método anterior, a lógica Function usa SDK Java do Couchbase para consultar o banco de dados do Couchbase. Os resultados e a exceção são então
    envolto em GatewayRequest e GatewayResponse.

Crie o aplicativo Java como:

Fazer upload da função Lambda para o S3

O modelo SAM lê o código de um bucket S3. Vamos criar um bucket S3:

us-west-2 A região é uma das Regiões compatíveis com o API Gateway. Os nomes dos buckets S3 são globalmente exclusivos, mas sua localização é específica da região. Carregar
o código para o bucket S3:

O código agora foi carregado no bucket S3. O modelo SAM está pronto para ser implantado!

Implantar o modelo SAM

Implante o modelo SAM:

Ele mostra a saída:

Esse comando implementa funções Lambda e recursos/APIs REST que acionam essas funções Lambda.

Invoque o microsserviço

O API Gateway publica uma API REST que pode ser chamada por curl, wget, AWS CLI/Console, Postman ou qualquer outro aplicativo que possa chamar uma API REST. Este blog usará o Console do AWS para mostrar a interação. Página inicial do API Gateway em us-west-2.console.aws.amazon.com/apigateway/home?region=us-west-2#/apis shows:
AWS SAM Microservice API
Clique na API para ver todas as APIs desse recurso:

AWS SAM Microservice API Resources

Clique em POST para ver a página padrão para a execução do método POST:

AWS SAM Microservice API POST

Clique em Test para testar a API:

AWS SAM Microservice API POST Input

Adicione o payload no Request Body e clique em Teste para chamar a API. Os resultados são mostrados a seguir:

AWS SAM Microservice API POST Output

Agora, clique em GET para ver a página de execução padrão:

AWS SAM Microservice API GET

Clique em Test para testar a API:

AWS SAM Microservice API GET Input

Não é necessário nenhum corpo de solicitação, basta clicar em Testar para invocar a API. Os resultados são os mostrados:

AWS SAM Microservice API GET Output

A saída do banco de dados do Couchbase é mostrada no corpo da resposta.

Referências

Autor

Postado por Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase

Arun Gupta é o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experiência na liderança de equipes multifuncionais para desenvolver e executar estratégias, planejamento e execução de conteúdo, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e é membro fundador da equipe Java EE. Gupta é autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experiência em palestras em mais de 40 países sobre diversos tópicos e é um JavaOne Rock Star há três anos consecutivos. Gupta também fundou o capítulo Devoxx4Kids nos EUA e continua a promover a educação tecnológica entre as crianças. Autor de vários livros sobre tecnologia, corredor ávido, viajante do mundo inteiro, campeão de Java, líder de JUG, membro do NetBeans Dream Team e capitão do Docker, ele pode ser facilmente acessado em @arungupta.

Deixar uma resposta