Как да индексирате ново и съществуващо съдържание на Amazon DynamoDB с Amazon Elasticsearch Service.

Диаграма, направена в cloudcraft.co

Какво имам: таблица „елементи” на Amazon DynamoDB с ~ 49K обекти.

Какво ми трябва: Услуга на Amazon Elasticsearch с всички съществуващи елементи в таблицата ми и всички нови входящи артикули.

Какво ще използвам: Amazon Elasticsearch Service, Amazon DynamoDB, Amazon Lambda, Python script.

Отначало трябва да създадете поток от вида на изображението за вашата таблица (Услуги> DynamoDB> Таблици> Изберете вашата таблица> Раздел Обзор).

Копирайте ARN на потока, ще ви е необходим по-късно.

Отворете услугата Elasticsearch (Услуги> Elasticsearch Service) и създайте нов домейн. Посочете такива параметри като име на домейн Elasticsearch, клъстер, конфигурация на възел / съхранение за вашите нужди.

Зададох политиката за достъп до домейна като публична само за тестване, трябва да изберете по-сигурна опция.

Копирайте ARN на домейна, ще ви е необходим по-късно.

След това трябва да създадете нова роля и да зададете политики за достъп за нея, за да отидете на Ролите (Услуги> IAM> Роли) и да създадете нова.

Изберете типа роля на услугата AWS и услугата Lambda, като услуга, която ще използва тази роля.

Изберете AWSLambdaBasicExecutionRole като политика за разрешения и щракнете върху Напред.

Дайте име за вашата роля, в моя случай това е dynamodb-to-es.

Сега е време да добавите политики към ролята, тя е необходима за достъп до DB, поток и домейн Elasticsearch.

Щракнете върху „Добавяне на вградена политика“ и изберете „Персонализирана политика“.

Добавете Access-to-the-DynamoDB (заменете ресурса с вашата таблица ARN, можете да го намерите в таблицата):

Тя трябва да изглежда така:

Добавете поток Access-to-the-DynamoDB (заменете ресурса с вашата таблица ARN, който споменахме при създаването на stream):

Тя трябва да изглежда така:

Добавете Lambda към Amazon-ES (заменете ресурса с вашата таблица ARN, който споменахме при създаването на домейна Elasticsearch):

Забележете, има име * след името на домейна.

Тя трябва да изглежда така:

Следваща стъпка е създаването на Amazon Lambda. Създайте нова функция от нулата (Услуги> Ламбда).

Добавете тригер DynamoDB с избрана подходяща таблица и начална позиция на Trim хоризонт. Можете да активирате задействане в този момент.

Дайте име за вашата функция и изберете Python 2.7 време на изпълнение.

Във функционалната област на кода Lambda поставете скрипта dynamodb-to-es.py и посочете крайната точка на вашия домейн Elasticsearch.

Изберете ролята на dynamodb-to-es като Съществуваща роля.

В подменюто Разширени настройки можете да изберете по-голям период от време, ако вашите записи са огромни или ще поставите повече от един запис наведнъж.

Сега можете да вмъкнете / редактирате няколко елемента в таблицата си и след това отидете на страницата на домейна, за да сте сигурни, че са създадени индекси.

По принцип можете да отправяте заявки до вашия Elasticsearch, но ще има само елементи, които сте добавили / изтрили след създаването на Elasticsearch Service и създаването на функция Lambda.

Пример на заявка с празна заявка:

https://search-elementsdomain-bsbkhmwsd2u7zm2cukbmht2eqm.us-east-1.es.amazonaws.com/elements/_search?size=10&pretty=true&q=*

Забележете, че трябва да посочите индекса на таблицата след крайната точка.

Втората част на тази публикация е за това как да добавите предварително съществуващо съдържание към Elasticsearch Service от DynamoDB.

Отидете на Роли (Услуги> IAM> Роли) и създайте нова политика. Поставете нови разрешения, както на снимките по-долу:

В ресурсно поле на Amazon поставете ARN на вашата функция Lambda:

Копирайте тази политика, ще ви е необходима за потребителски разрешения:

Отидете до потребителя, който ще изпълни скрипт (Услуги> IAM> Потребители) и добавете персонализирани вградени правила като това (не забравяйте да промените ресурсите на вашите):

Ако нямате ключ за достъп - създайте го:

Копирайте на сигурно място идентификационния номер на ключ за достъп и секретен ключ за достъп:

Увеличете единиците за капацитет за четене за вашата таблица (това е само за времето за изпълнение на скрипта).

За да извикате Lambda на Amazon, трябва да стартирате скрипт post_to_es_from_dynamodb.py.

Съвет: Ако искате да стартирате този скрипт като Amazon Lambda, трябва да помните, че максималният период на изчакване е 5 минути и обикновено не е достатъчно за обработка на много записи.

Преди изпълнение променете параметъра на региона в скрипта ръчно:

За да публикувате предварително съществуващи данни от DynamoDb в Elasticsearch, изпълнете тази команда с подходящи аргументи:

python post_to_es_from_dynamodb.py --tn "" --ak "" --sk "" --esarn "" --lf ""

Примери за параметри:

esarn: arn: aws: dynamodb: us-east-1: XXXXXXXXXXX: таблица / елементи / поток / 2017-09-14T14: 16: 12.788
lf: arn: aws: lambda: us-east-1: XXXXXXXXXXX: функция: dynamostream-to-es

За да видите дефиницията на параметрите - изпълнете:

python post_to_es_from_dynamodb.py --help

Съвет: Ако няма модул с име boto3, можете да стартирате:

pip инсталиране boto3

Съвет: Ако сте инсталирали Amazon CLI на вашето устройство, трябва да конфигурирате вашите локални параметри на AWS (AWS тайна / достъп / регион), както в аргументи, които сте използвали по-горе с команда "aws configure".

Сега можете да извършите заявка:

https://search-elementsdomain-bsbkhmwsd2u7zm2cukbmht2eqm.us-east-1.es.amazonaws.com/elements/_search?size=10&pretty=true&q=*

Както можете да видите на снимката по-долу, броят на предметите е увеличен:

Най-накрая можете да зададете единици с по-малък капацитет, за да намалите разходите.

И така, това е, сега можете да използвате услугата Elasticsearch с вашия DynamoDB!

Вдъхновен от това и това. Създадено само за образователни цели.

Всички скриптове и правила можете да намерите тук. Не се колебайте да задавате въпроси!