Перейти к основному содержимому

AWS Lambda использует DynamoDB с Java

· 5 мин. чтения

1. Введение

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

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

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

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

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

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
</dependency>

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

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>1.3.0</version>
</dependency>

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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>

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

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

  • Обработчик методов
  • Обработчик запроса
  • Рекестстримхандлер

Мы будем использовать интерфейс 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<PersonRequest, PersonResponse> {

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.
  • Объект контекста — используется для получения информации из среды выполнения лямбда.
  • PersonResponse — объект ответа на лямбда-запрос.

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

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

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

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

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

mvn clean package shade:shade

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

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

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

  • Войти в учетную запись AWS
  • Нажмите «DynamoDB» , который можно найти в разделе «Все службы».
  • На этой странице будут показаны уже созданные таблицы DynamoDB (если они есть)
  • Нажмите кнопку « Создать таблицу»
  • Укажите «Имя таблицы» и «Первичный ключ» с типом данных «Число».
  • Нажмите на кнопку « Создать»
  • Таблица будет создана

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

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

  • Войти в учетную запись AWS

  • Нажмите «Лямбда» , которая может быть расположена в разделе «Все службы».

  • На этой странице будет показана уже созданная лямбда-функция (если есть) или лямбда-функции не созданы, нажмите «Начать сейчас».

  • «Выберите план» -> выберите « Пустая функция»

  • «Настроить триггеры» -> нажать кнопку « Далее»

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

  • «Имя» : SavePerson

  • «Описание» : Сохранить человека в DDB

  • «Время выполнения» : выберите «Java 8» .

  • «Загрузить» : нажмите кнопку «Загрузить» и выберите файл jar лямбда-приложения.

  • «Обработчик» : com.foreach.lambda.dynamodb.SavePersonHandler

  • «Роль» : выберите «Создать пользовательскую роль» .

  • Появится новое окно, которое позволит настроить роль IAM для выполнения лямбда-выражения, и нам нужно добавить в него гранты DynamoDB. После этого нажмите кнопку « Разрешить» .

  • Нажмите кнопку « Далее»

  • «Обзор» : просмотр конфигурации

  • Нажмите кнопку « Создать функцию»

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

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

  • Нажмите кнопку « Тест»
  • Появится окно «Входное тестовое событие» . Здесь мы предоставим ввод JSON для нашего запроса:
{
"id": 1,
"firstName": "John",
"lastName": "Doe",
"age": 30,
"address": "United States"
}
  • Нажмите кнопку «Сохранить и протестировать» или кнопку «Сохранить» .
  • Результат можно увидеть в разделе «Результат выполнения» :
{
"message": "Saved Successfully!!!"
}
  • Нам также нужно проверить в DynamoDB, что запись сохраняется:

  • Перейдите в консоль управления DynamoDB.

  • Выберите таблицу «Персона»

  • Выберите вкладку «Предметы»

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

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

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

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

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