AWS Lambda usando o DynamoDB com Java

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.