Como construir um aplicativo sem servidor usando AWS SAM


No meu anterior artigo, Falei sobre como o AWS Chalice o ajuda a construir rapidamente um aplicativo sem servidor baseado em Python e implantá-lo na AWS em alguns minutos.

Embora tenha sido um protótipo rápido e divertido, Python pode não ser a linguagem escolhida por muitos quando se trata de executar aplicativos de produção em grande escala.

Muitas organizações usam Java como sua linguagem de desenvolvimento primária, e muitos desenvolvedores também estão adotando linguagens mais novas como Go.

Neste artigo, vou guiá-lo pelas etapas necessárias para construir e implantar o mesmo aplicativo sem servidor que recebe as últimas notícias do Google Notícias. Mas, desta vez, usaremos o AWS Serverless Application Model (SAM) e o Java para nosso desenvolvimento.

Como o Chalice, o AWS SAM CLI oferece um rico conjunto de ferramentas que permitem aos desenvolvedores criar aplicativos sem servidor rapidamente.

Pré-requisitos

Este tutorial requer uma conta AWS. Se você ainda não tem um, vá em frente e crie um. Nosso aplicativo usará apenas os recursos de nível gratuito, portanto, o custo não deve ser um problema.

Você também precisa configurar a segurança e criar usuários e funções para seu acesso.

Como configurar as credenciais da AWS

Chalice usa a AWS Command Line Interface (CLI) nos bastidores para implantar o projeto. Se você não usou o CLI da AWS antes para trabalhar com recursos da AWS, você pode instalá-lo seguindo as diretrizes aqui.

Depois de instalado, você precisa configurar seu AWS CLI para usar as credenciais de sua conta AWS.

Como instalar o SAM

Em seguida, você precisa instalar o SAM. Estaremos usando Java neste tutorial, mas você pode usar qualquer tempo de execução de linguagem compatível com AWS Lambda.

Verifique a instalação do Java

$ java --version

openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)

Instale SAM CLI

Dependendo do seu sistema operacional, as instruções de instalação do SAM CLI podem variar. Este artigo cobre as instruções para instalá-lo no MacOS.

A abordagem recomendada para instalar o SAM CLI no macOS é usar o gerenciador de pacotes Homebrew.

Verifique se você tem o Homebrew instalado, assim:

$ brew --version

Homebrew/homebrew-core (git revision fe68a; last commit 2020-10-15)
Homebrew/homebrew-cask (git revision 4a2c25; last commit 2020-10-15)

Caso contrário, você pode instalar o Homebrew usando o seguinte comando:

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Em seguida, instale o SAM usando o seguinte comando:

brew tap aws/tap
brew install aws-sam-cli

Verifique a instalação do SAM

$ sam --version

SAM CLI, version 1.6.2

Como criar um projeto

Em seguida, execute o sam-init comando para criar um novo projeto.

sam init -r java11 -d maven --app-template hello-world -n daily-news-java

Por padrão, o SAM cria um projeto Python. Como queremos criar um projeto Java, precisaremos passar alguns parâmetros adicionais.

Parâmetros:

  • -r java11: use o Java 11 runtime
  • -d maven: use maven como gerenciador de dependências
  • --app-template hello-world: use o modelo de início rápido HelloWorld
  • -n daily-news-java: o nome do nosso projeto

Isso criará um daily-news-java pasta em seu diretório atual. Você pode ver que o SAM criou vários arquivos nesta pasta.

Vamos dar uma olhada no App.java Arquivo.

o sam-init comando criou uma função Lambda simples que retorna o corpo JSON {"message": "hello world"} e o endereço IP da máquina quando chamado. Agora podemos alterar este modelo e adicionar mais código para ler notícias do Google.

Agora vamos dar uma olhada no template.yml Arquivo.

Ele contém o modelo CloudFormation que cria nossos recursos Amazon API Gateway e AWS Lambda.

A configuração do Lambda especifica que temos um HelloWorldFunction lambda que corre Java 11 e 512 MB memória.

A configuração do gateway API define um único GET método com um /hello caminho que usaremos para invocar a API.

Estaremos usando as bibliotecas de análise de HTTP e XML internas do Java, portanto, não precisamos adicionar nenhuma dependência ao nosso pom.xml Arquivo.

Observe que o padrão pom.xml fornecido como parte do código padrão, vem com a fonte do compilador definida como 1.8. Precisamos atualizar isso para 11 para que possamos usar a nova biblioteca HTTP que faz parte do Java 11.

Uma vez que Java é orientado a objetos, vamos também criar um NewsItem classe que contém o título e a data de publicação de uma notícia.

Observe que substituímos o toString método. Isso cria uma representação JSON do objeto e evita o uso de qualquer biblioteca de análise JSON.

Em seguida, você precisa adicionar um método para buscar o feed RSS do Google, analisá-lo para extrair o título da notícia e a data de publicação e criar uma lista de itens de notícias. Para fazer isso, adicione o seguinte código ao seu App.java:

Agora vamos atualizar o handleRequest método em App.java para invocar este método e retornar a lista de itens de notícias como resultado.

Não se esqueça de atualizar os testes de unidade também. Eles foram escritos para testar a presença de “hello world” na resposta e começarão a falhar após nossa mudança.

Como iniciar a construção

De daily-news-java pasta, execute o sam build comando.

Isso compila seu código-fonte e cria quaisquer dependências que você tenha no aplicativo. Em seguida, ele move todos os arquivos para o .aws-sam/build pasta para que eles estejam prontos para serem empacotados e implantados. Ele também atualiza o template.yml arquivo em conformidade.

Como testar seu aplicativo localmente

Ora aqui está a parte bonita do SAM. Você pode implantar e testar seu aplicativo localmente! Isso é realmente útil durante o estágio de desenvolvimento, quando você deseja testar seu código sem ter que implantá-lo na AWS.

O SAM CLI fornece o sam local comando para executar seu aplicativo localmente. Isso usa o Docker internamente para simular o ambiente de execução do Lambda. Se você não tem o Docker instalado, pode obtê-lo em aqui.

Podemos testar localmente nosso aplicativo de duas maneiras:

  • Hospedar a API localmente
  • Invocar diretamente a função Lambda

Vamos dar uma olhada em ambas as opções.

Hospedagem Local

Use o seguinte comando para iniciar a API localmente:

sam local start-api

Isso cria internamente um servidor local e expõe um terminal local que replica sua API REST.

Depois que o contêiner do Docker é carregado, você pode acessar a API em localhost, como isso:

curl http://127.0.0.1:3000/hello

Invocação Direta

Use o seguinte comando para invocar a função Lambda:

sam local invoke "HelloWorldFunction" -e events/event.json

Isso invoca diretamente a função Lambda (assim como chamaríamos o main método) e passa o event.json arquivo como carga útil.

Como implantar o projeto

Vamos implantar o aplicativo. De daily-news-java pasta, execute o sam deploy --guided comando. Siga os prompts e forneça as entradas necessárias (ou apenas pressione Enter para aceitar os padrões).

Isso implanta nosso aplicativo na AWS usando Amazon API Gateway e AWS Lambda. Leva os artefatos de implantação que construímos com o sam build comando, empacota e carrega-os para um bucket do Amazon S3 criado pelo AWS SAM CLI e implanta o aplicativo usando AWS CloudFormation.

API de notícias diárias em API Gateway

Função Lambda de notícias diárias

Agora podemos tentar acessar a API usando o URL do endpoint fornecido acima.

Como limpar recursos

Podemos usar o aws cloudformation delete-stack comando para excluir a pilha do AWS CloudFormation junto com todos os recursos criados quando executamos o sam deploy comando.

Conclusão

Parabéns! Você acabou de implantar um aplicativo sem servidor na AWS usando AWS SAM. Envolveu um pouco mais de trabalho do que mais cedo, mas também não foi muito difícil.

Agora você pode ir em frente e fazer quaisquer modificações em seu App.java arquivo e execute novamente sam deploy para reimplantar suas mudanças.

O código-fonte completo deste tutorial pode ser encontrado aqui.

Obrigado por ficar comigo até agora. Espero que você tenha gostado do artigo. Você pode se conectar comigo no LinkedIn onde discuto regularmente tecnologia e vida. Também dê uma olhada em alguns dos meus outros artigos sobre Médio.

Boa leitura 🙂



Fonte

Leave a Reply

Your email address will not be published. Required fields are marked *