AWS Lambda usando o DynamoDB com Java
1. Introdução
AWS Lambda é um serviço de computação sem servidor fornecido pela Amazon Web Services eWS DynamoDB é um serviço de banco de dados NoSQL também fornecido pela Amazon.
Curiosamente, o DynamoDB suporta armazenamento de documentos e armazenamento de valores-chave e é totalmente gerenciado pela AWS.
Antes de começarmos, observe que este tutorial requer uma conta AWS válida (você pode criar umhere). Além disso, é uma boa ideia ler primeiro o artigoAWS Lambda with Java.
2. Dependências do Maven
Para habilitar lambda, precisamos da seguinte dependência, que pode ser encontrada emMaven Central:
com.amazonaws
aws-lambda-java-core
1.1.0
Para usar diferentes recursos da AWS, precisamos da seguinte dependência, que também pode ser encontrada emMaven Central:
com.amazonaws
aws-lambda-java-events
1.3.0
E para construir o aplicativo, vamos usar oMaven Shade Plugin:
org.apache.maven.plugins
maven-shade-plugin
3.0.0
false
package
shade
3. Código Lambda
Existem diferentes maneiras de criar manipuladores em um aplicativo lambda:
-
MethodHandler
-
RequestHandler
-
RequestStreamHandler
Usaremos a interfaceRequestHandler em nosso aplicativo. AceitaremosPersonRequest no formato JSON, e a resposta seráPersonResponse também no formatoJSON:
public class PersonRequest {
private String firstName;
private String lastName;
// standard getters and setters
}
public class PersonResponse {
private String message;
// standard getters and setters
}
A seguir está nossa classe de ponto de entrada que implementará a interfaceRequestHandler como:
public class SavePersonHandler
implements RequestHandler {
private DynamoDB dynamoDb;
private String DYNAMODB_TABLE_NAME = "Person";
private Regions REGION = Regions.US_WEST_2;
public PersonResponse handleRequest(
PersonRequest personRequest, Context context) {
this.initDynamoDbClient();
persistData(personRequest);
PersonResponse personResponse = new PersonResponse();
personResponse.setMessage("Saved Successfully!!!");
return personResponse;
}
private PutItemOutcome persistData(PersonRequest personRequest)
throws ConditionalCheckFailedException {
return this.dynamoDb.getTable(DYNAMODB_TABLE_NAME)
.putItem(
new PutItemSpec().withItem(new Item()
.withString("firstName", personRequest.getFirstName())
.withString("lastName", personRequest.getLastName());
}
private void initDynamoDbClient() {
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
client.setRegion(Region.getRegion(REGION));
this.dynamoDb = new DynamoDB(client);
}
}
Aqui, quando implementamos a interfaceRequestHandler, precisamos implementarhandleRequest() para o processamento real da solicitação. Quanto ao restante do código, temos:
-
ObjetoPersonRequest - que conterá os valores da solicitação passados no formato JSON
-
ObjetoContext - usado para obter informações do ambiente de execução lambda
-
PersonResponse – que é o objeto de resposta para a solicitação lambda
Ao criar um objeto DynamoDB, primeiro criaremos o objetoAmazonDynamoDBClient e o usaremos para criar um objetoDynamoDB. Observe queregion é obrigatório.
Para adicionar itens na tabela do DynamoDB, usaremos um objetoPutItemSpec - especificando o número de colunas e seus valores.
Não precisamos de nenhum esquema predefinido na tabela DynamoDB, apenas precisamos definir o nome da coluna da chave primária, que é“id” em nosso caso.
4. Construindo o arquivo de implantação
Para construir o aplicativo lambda, precisamos executar o seguinte comando Maven:
mvn clean package shade:shade
O aplicativo Lambda será compilado e empacotado em um arquivojar na pasta de destino.
5. Criação da tabela DynamoDB
Siga estas etapas para criar a tabela do DynamoDB:
-
Faça login emAWS Account
-
Clique em“DynamoDB” que pode ser localizado em“All Services”
-
Esta página mostrará tabelas do DynamoDB já criadas (se houver)
-
Clique no botão“Create Table”
-
Forneça“Table name” e“Primary Key” com seu tipo de dados como“Number”
-
Clique no botão“Create”
-
A tabela será criada
6. Criando a Função Lambda
Siga estas etapas para criar a função Lambda:
-
Faça login emAWS Account
-
Clique em“Lambda” que pode ser localizado em“All Services”
-
Esta página irá mostrar a Função Lambda já criada (se houver) ou nenhuma função lambda foi criada clique em“Get Started Now”
-
“Select blueprint” → Selecione “Blank Function”
-
“Configure triggers” → Clique no botão“Next”
-
“Configurar função”
-
“Name”: SavePerson
-
“Description”: Salvar pessoa para DDB
-
“Runtime”: Selecione“Java 8”
-
“Upload”: Clique no botão“Upload” e selecione o arquivo jar do aplicativo lambda
-
-
“Handler”: com.example.lambda.dynamodb.SavePersonHandler
-
“Role”: Selecione“Create a custom role”
-
Uma nova janela será exibida e permitirá configurar a função do IAM para a execução de lambda e precisamos adicionar as concessões do DynamoDB. Uma vez feito isso, clique no botão“Allow”
-
Clique no botão“Next”
-
“Review”: Revise a configuração
-
Clique no botão“Create function”
7. Testando a Função Lambda
O próximo passo é testar a função lambda:
-
Clique no botão“Test”
-
A janela“Input test event” será exibida. Aqui, forneceremos a entrada JSON para nossa solicitação:
{
"id": 1,
"firstName": "John",
"lastName": "Doe",
"age": 30,
"address": "United States"
}
-
Clique no botão“Save and test” ou“Save”
-
A saída pode ser vista na seção“Execution result”:
{
"message": "Saved Successfully!!!"
}
-
Também precisamos verificar no DynamoDB se o registro persistiu:
-
Vá para“DynamoDB” Management Console
-
Selecione a tabela“Person”
-
Selecione a guia“Items”
-
Aqui você pode ver os detalhes da pessoa que foram passados na solicitação ao aplicativo lambda
-
-
Portanto, a solicitação é processada com sucesso por nosso aplicativo lambda
8. Conclusão
Neste rápido artigo, aprendemos como criar aplicativos Lambda com DynamoDB e Java 8. As instruções detalhadas devem dar uma vantagem inicial na configuração de tudo.
E, como sempre, o código-fonte completo do aplicativo de exemplo pode ser encontradoover on Github.