AWS Lambda Использование DynamoDB с Java

AWS Lambda Использование DynamoDB с Java

1. Вступление

AWS Lambda - это служба бессерверных вычислений, предоставляемая Amazon Web Services, аWS DynamoDB - это служба баз данных NoSQL, также предоставляемая Amazon.

Интересно, что DynamoDB поддерживает как хранилище документов, так и хранилище значений ключей и полностью управляется AWS.

Прежде чем мы начнем, обратите внимание, что для этого руководства требуется действующая учетная запись AWS (вы можете создать однуhere). Кроме того, рекомендуется сначала прочитать статьюAWS Lambda with Java.

2. Maven Зависимости

Чтобы включить лямбда, нам понадобится следующая зависимость, которую можно найти вMaven Central:


    com.amazonaws
    aws-lambda-java-core
    1.1.0

Чтобы использовать разные ресурсы AWS, нам нужна следующая зависимость, которая также может быть найдена вMaven Central:


    com.amazonaws
    aws-lambda-java-events
    1.3.0

И для создания приложения мы будем использоватьMaven Shade Plugin:


    org.apache.maven.plugins
    maven-shade-plugin
    3.0.0
    
        false
    
    
        
            package
            
                shade
            
        
    

3. Лямбда-код

Существуют разные способы создания обработчиков в лямбда-приложении:

  • MethodHandler

  • RequestHandler

  • RequestStreamHandler

Мы будем использовать интерфейсRequestHandler в нашем приложении. Мы примемPersonRequest в формате JSON, и ответ будетPersonResponse также в форматеJSON:

public class PersonRequest {
    private String firstName;
    private String lastName;

    // standard getters and setters
}
public class PersonResponse {
    private String message;

    // standard getters and setters
}

Далее идет наш класс точки входа, который будет реализовывать интерфейсRequestHandler как:

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);
    }
}

Здесь, когда мы реализуем интерфейсRequestHandler, нам нужно реализоватьhandleRequest() для фактической обработки запроса. Что касается остальной части кода, у нас есть:

  • PersonRequest объект - который будет содержать значения запроса, переданные в формате JSON

  • ОбъектContext - используется для получения информации из среды выполнения лямбда

  • PersonResponse –, который является объектом ответа на лямбда-запрос

При создании объекта DynamoDB мы сначала создадим объектAmazonDynamoDBClient и будем использовать его для создания объектаDynamoDB. Обратите внимание, чтоregion является обязательным.

Чтобы добавить элементы в таблицу DynamoDB, мы воспользуемся объектомPutItemSpec - указав количество столбцов и их значения.

Нам не нужна какая-либо предопределенная схема в таблице DynamoDB, нам просто нужно определить имя столбца первичного ключа, которым в нашем случае является“id”.

4. Создание файла развертывания

Чтобы построить лямбда-приложение, нам нужно выполнить следующую команду Maven:

mvn clean package shade:shade

Lambda-приложение будет скомпилировано и упаковано в файлjar в целевой папке.

5. Создание таблицы DynamoDB

Выполните следующие шаги, чтобы создать таблицу DynamoDB:

  • Войти вAWS Account

  • Щелкните“DynamoDB”, который может находиться под“All Services”

  • На этой странице будут показаны уже созданные таблицы DynamoDB (если есть)

  • Нажмите кнопку“Create Table”

  • Предоставьте“Table name” и“Primary Key” его тип данных как“Number”

  • Нажмите кнопку“Create”

  • Таблица будет создана

6. Создание лямбда-функции

Выполните следующие шаги, чтобы создать функцию Lambda:

  • Войти вAWS Account

  • Щелкните“Lambda”, который может находиться под“All Services”

  • На этой странице будет показана уже созданная лямбда-функция (если есть) или лямбда-функции не созданы, нажмите“Get Started Now”

  • “Select blueprint” → Выберите «Blank Function”

  • “Configure triggers” → Нажмите кнопку“Next”

  • «Настроить функцию»

    • “Name”: SavePerson

    • “Description”: Сохранить человека в DDB

    • “Runtime”: выберите“Java 8”

    • “Upload”: нажмите кнопку“Upload” и выберите файл jar приложения лямбда.

  • “Handler”: com.example.lambda.dynamodb.SavePersonHandler

  • “Role”: выберите“Create a custom role”

  • Появится новое окно, в котором можно настроить роль IAM для лямбда-выполнения, и нам нужно добавить в него гранты DynamoDB. После этого нажмите кнопку“Allow”

  • Нажмите кнопку“Next”

  • “Review”: просмотрите конфигурацию

  • Нажмите кнопку“Create function”

7. Тестирование лямбда-функции

Следующим шагом является проверка лямбда-функции:

  • Нажмите кнопку“Test”

  • Откроется окно“Input test event”. Здесь мы предоставим входные данные JSON для нашего запроса:

{
  "id": 1,
  "firstName": "John",
  "lastName": "Doe",
  "age": 30,
  "address": "United States"
}
  • Нажмите кнопку“Save and test” или“Save”

  • Результат можно увидеть в разделе“Execution result”:

{
  "message": "Saved Successfully!!!"
}
  • Нам также нужно проверить в DynamoDB, что запись сохраняется:

    • Перейти к“DynamoDB” Management Console

    • Выберите таблицу“Person”

    • Выберите вкладку“Items”

    • Здесь вы можете увидеть данные человека, которые были переданы в запросе лямбда-приложения.

  • Таким образом, запрос успешно обрабатывается нашим лямбда-приложением

8. Заключение

В этой быстрой статье мы узнали, как создать Lambda-приложение с помощью DynamoDB и Java 8. Подробные инструкции должны дать вам преимущество при настройке.

И, как всегда, полный исходный код примера приложения можно найтиover on Github.