Потоки DynamoDB с Lambda

Potoki Dynamodb S Lambda



Потоки DynamoDB — это функция в Amazon DynamoDB, которая позволяет получать в режиме реального времени поток изменений или изменений данных, которые вносятся в ваши таблицы DynamoDB. Вы можете использовать эту функцию для создания приложений, реагирующих на изменения данных в таблицах DynamoDB, таких как обновление кешей и отправка уведомлений.

Конечно, вы также можете использовать потоки DynamoDB для запуска нижестоящих процессов и функций AWS Lambda. Lambda по определению является бессерверной службой вычислений, которая запускает ваш код в ответ на события и автоматически управляет вычислительными ресурсами для вас.

Вы можете использовать Lambda для написания кода на Node.js, Python, Java или C# для обработки записей потока и выполнения соответствующих действий. Основное преимущество интеграции DynamoDB Streams с Lambda заключается в том, что Lambda позволяет запускать резервные службы или коды приложений без необходимости администрирования.







Как использовать потоки AWS DynamoDB с Lambda

Хотя можно создать лямбда-функцию, которая использует события и вхождения из потока DynamoDB, этот процесс может оказаться довольно трудоемким, особенно при первой попытке. Следующие шаги помогут:



Шаг 1. Убедитесь, что ваша система соответствует предварительным требованиям

Эта процедура будет успешной только в том случае, если вы знаете основные операции и процессы Lambda. Таким образом, это должно быть вашим первым, чтобы убедиться, что ваше понимание Lambda выше среднего.



Второй предпосылкой, которую стоит рассмотреть, является подтверждение версии AWS вашей системы. Вы можете использовать следующую команду:





aws – версия

Результат предоставленной команды должен выглядеть следующим образом:

aws-кли/ 2 .x.x Питон/ 3 .x.x Linux/ 4 .x.x-xxx-std ботокор/ 2 .x.x

Данный образец ответа содержит установленную версию интерфейса командной строки AWS ( aws-cli/2.x.x ), версия Python ( Python/3.xx ) и операционная система ( Linux/4.x.x-xxx-std ). Заключительная часть ответа определяет версию библиотеки Botocore, на которой работает ваш интерфейс командной строки AWS ( ботокор/2.х.х ).



Таким образом, вы получите что-то вроде этого:

Шаг 2. Создайте исполнительную роль

Следующим шагом является создание исполнительной роли в интерфейсе командной строки AWS. Роль выполнения — это роль AWS Identity and Access Management (IAM), которую принимает сервис AWS для выполнения задач от вашего имени. Это дает вам доступ к ресурсам AWS, которые вам понадобятся на этом пути.

Вы можете создать роль с помощью следующей команды:

aws iam создать роль \

--role-name LambdaDynamoDBExecutionRole \

--assume-role-policy-document file://assume-role-policy.json \

--описание ' AWSLambdaDynamoDBExecutionRole' \

--service-name lambda.amazonaws.com

Предыдущая команда — это команда интерфейса командной строки AWS для создания роли. Вы также можете использовать Консоль управления Amazon для создания роли. Как только вы окажетесь в консоли IAM, откройте Роли страницу и нажмите кнопку Создать роль кнопка.

Приступайте к вводу следующего:

  • Доверенное лицо: Лямбда
  • Имя роли: lambda-dynamodb-role
  • Разрешения: AWSLambdaDynamoDBExecutionRole

Вы также можете использовать Python, предварительно установив AWS SDK для Python:

пип установить boto3

Шаг 3. Включите потоки DynamoDB на вашем столе

Вам нужно включить потоки DynamoDB на вашем столе. Для этой иллюстрации мы используем Boto3, AWS SDK для Python. Следующая команда поможет:

импорт бото3

# Подключиться к службе DynamoDB
dynamodb = boto3.client( 'динамодб' )

# Включить потоки DynamoDB для таблицы my-table
ответ = dynamodb.update_table(
ИмяТаблицы= 'моя таблица' ,
StreamSpecification={
'StreamEnabled' : Истинный,
'Стримвиевтип' : 'NEW_AND_OLD_IMAGES'
}
)

# Проверьте ответ, чтобы убедиться, что поток был успешно включен
если ответ[ 'Спецификация потока' ][ 'StreamEnabled' ]:
Распечатать( 'Поток DynamoDB успешно включен' )
еще:
Распечатать( «Ошибка включения потока DynamoDB» )

Этот код включает поток DynamoDB в таблице «mytable», который передает как новые, так и старые изображения элементов, как только происходят какие-либо изменения. Вы можете выбрать только потоковую передачу новых изображений, как только StreamViewType станет «NEW_IMAGE».

Примечательно, что запуск этого кода может включить потоки на ваших столах только через некоторое время. Вместо этого процесс может занять некоторое время. Вы можете использовать метод description_table для проверки состояния потока.

Шаг 4: Создайте лямбда-функцию

Следующий шаг — создание функции Lambda, которая запускает поток DynamoDB. Следующие шаги должны помочь:

  • Откройте консоль AWS Lambda и щелкните вкладку «Создать функцию». На странице «Создать функцию» выберите «Автор с нуля» и введите имя для своей функции. Вам также необходимо ввести время выполнения на этом этапе. Для этой иллюстрации мы выбрали Python.
  • В разделе «Выберите или создайте роль выполнения» выберите «Создать новую роль с базовыми разрешениями Lambda», чтобы создать роль IAM с необходимыми разрешениями для вашей функции Lambda.
  • Нажмите кнопку «Создать функцию», чтобы создать лямбда-функцию.
  • На странице «Конфигурация» вашей функции прокрутите вниз до раздела «Конструктор» и нажмите вкладку «Добавить триггер».
  • В появившемся окне «Конфигурация триггера» выберите «DynamoDB» в раскрывающемся меню «Триггер».
  • Выберите таблицу DynamoDB, которую вы хотите использовать для запуска функции. После этого выберите, хотите ли вы, чтобы функция запускалась при всех обновлениях таблицы или только при определенных обновлениях (например, при обновлениях определенных столбцов).
  • Нажмите кнопку «Добавить», чтобы создать триггер.
  • В редакторе «Код функции» напишите код Python для вашей функции. Вы можете использовать объект события, который передается вашей функции, для доступа к данным, запускающим функцию.
  • Нажмите кнопку «Сохранить», чтобы сохранить функцию.

Вот и все, что происходит при создании лямбда-функции! Теперь ваша функция срабатывает при каждом обновлении указанной таблицы DynamoDB.

Вот пример простой функции Python, которую может вызвать поток DynamoDB:

def lambda_handler (событие, контекст):

для записи в событии[ «Записи» ]:

печать(запись[ 'динамодб' ][ 'Новое изображение' ])

Эта функция перебирает записи в объекте события и распечатывает новое изображение элемента в таблице DynamoDB, которое запускает функцию.

Шаг 5: протестируйте лямбда-функцию

Чтобы протестировать функцию Lambda, которую может запускать поток DynamoDB, вы можете использовать бото3 библиотека для доступа к DynamoDB API и вызывать метод лямбда клиент для запуска функции.

Вот пример того, как это сделать:

импорт бото3

# Подключиться к службе DynamoDB
dynamodb = boto3.client( 'динамодб' )

# Подключиться к сервису Lambda
lambda_client = boto3.client( лямбда )

# Вставить элемент в таблицу my-table
ответ = dynamodb.put_item(
ИмяТаблицы= 'моя таблица' ,
Товар={
'я бы' :{ 'Н' : «123» },
'название' :{ 'С' : 'Джоэл Остин},
'
возраст ':{' Н ':' 3. 4 '}
}
)

# Проверьте ответ, чтобы убедиться, что элемент успешно вставлен
если ответ['
Метаданные ответа '][' HTTPStatusCode '] == 200:
print('Элемент успешно вставлен')
еще:
print('Ошибка добавления элемента')

# Запустить лямбда-функцию, которая подписана на '
мой стол ' стол
ответ = lambda_client.invoke(
ИмяФункции='
моя функция ',
Тип вызова='
Событие ',
Тип журнала='
Хвост ',
Полезная нагрузка='
{ «Рекорды» :[{ 'динамодб' :{ 'Новое изображение' :{ 'я бы' :{ 'Н' : '123' }, 'название' :{ 'С' : 'Джоэл Остин' }, 'возраст' :{ 'Н' : '3. 4' }}}}]} '
)

# Проверяем ответ, чтобы убедиться, что функция успешно запущена
если ответ['
Код состояния '] == 202:
print('Лямбда-функция успешно запущена')
еще:
print('Ошибка запуска лямбда-функции')

Этот код сначала вставляет элемент в мой стол таблицы, а затем запускает моя функция Лямбда-функция, отправив образец полезной нагрузки события в функцию с помощью вызывать метод. Полезные данные события имитируют событие потока DynamoDB, которое включает новое изображение только что вставленного элемента.

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

Заключение

Важно отметить, что вы можете вызывать несколько раз одну и ту же запись потока, поскольку поток DynamoDB может запускать функцию Lambda. Основная причина этого заключается в том, что записи потока в конечном итоге согласуются, и одна и та же запись может обрабатываться функцией Lambda несколько раз. Крайне важно спроектировать вашу лямбда-функцию так, чтобы она правильно обрабатывала этот случай.