DynamoDB потоци с Lambda

Dynamodb Potoci S Lambda



DynamoDB Streams е функция в Amazon DynamoDB, която ви позволява да получавате в реално време поток от промени или промени в данни, които са направени във вашите DynamoDB таблици. Можете да използвате тази функция, за да създадете приложения, които реагират на промените в данните в таблиците на DynamoDB, като например актуализиране на кешове и изпращане на известия.

Разбира се, можете също да използвате DynamoDB Streams, за да задействате процесите надолу по веригата и AWS Lambda функциите. Lambda по дефиниция е изчислителна услуга без сървър, която изпълнява вашия код в отговор на събития и автоматично управлява изчислителните ресурси вместо вас.

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







Как да използвате AWS DynamoDB потоците с Lambda

Въпреки че е възможно да се създаде Lambda функция, която консумира събитията и събитията от DynamoDB поток, процесът може да бъде доста натоварващ, особено при първия ви опит. Следните стъпки ще помогнат:



Стъпка 1: Уверете се, че вашата система отговаря на предпоставките

Тази процедура ще бъде успешна само ако знаете основните операции и процеси на Lambda. Следователно, това трябва да е първото ви, за да се уверите, че разбирането ви за Lambda е над средното ниво.



Второто задължително условие, което си струва да имате предвид, е потвърждаването на AWS версията на вашата система. Можете да използвате следната команда:





aws –версия

Резултатът за предоставената команда трябва да изглежда така:

aws-cli/ 2 .x.x Python/ 3 .x.x Linux/ 4 .x.x-xxx-std botocore/ 2 .x.x

Даденият примерен отговор съдържа инсталираната версия на AWS CLI ( aws-cli/2.x.x ), версията на Python ( Python/3.x.x ) и операционната система ( Linux/4.x.x-xxx-std ). Последната част от отговора дефинира версията на библиотеката Botocore, на която работи вашият AWS CLI ( botocore/2.x.x ).



Следователно ще получите нещо подобно:

Стъпка 2: Създайте роля за изпълнение

Следващата стъпка е да създадете роля за изпълнение в AWS CLI. Ролята за изпълнение е роля на AWS Identity and Access Management (IAM), поета от AWS услуга за изпълнение на задачите от ваше име. Дава ви достъп до ресурси на AWS, които ще ви трябват по пътя.

Можете да създадете роля, като използвате следната команда:

aws аз създавам роля \

--име-на-роля LambdaDynamoDBExecutionRole \

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

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

--име-на-услуга lambda.amazonaws.com

Предишната команда е AWS CLI команда за създаване на роля. Можете също да използвате конзолата за управление на Amazon, за да създадете роля. След като сте в IAM конзолата, отворете Роли страница и щракнете върху Създайте роля бутон.

Продължете да въведете следното:

  • Доверен субект: Lambda
  • Име на роля: lambda-dynamodb-role
  • Разрешения: AWSLambdaDynamoDBExecutionRole

Можете също да използвате Python, като първо инсталирате AWS SDK за Python:

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

Стъпка 3: Активирайте потоците DynamoDB на вашата маса

Трябва да активирате DynamoDB потоците на вашата маса. За тази илюстрация използваме Boto3, AWS SDK за Python. Следната команда ще ви помогне:

импортиране на boto3

# Свържете се с услугата DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Активиране на DynamoDB потоци в таблицата 'my-table'.
отговор = dynamodb.update_table(
Име на таблица= 'mytable' ,
StreamSpecification={
„StreamEnabled“ : Вярно,
„StreamViewType“ : „NEW_AND_OLD_IMAGES“
}
)

# Проверете отговора, за да се уверите, че потокът е активиран успешно
ако отговор [ „StreamSpecification“ ][ „StreamEnabled“ ]:
печат ( „Потокът на DynamoDB е активиран успешно“ )
иначе:
печат ( „Грешка при активиране на DynamoDB поток“ )

Този код позволява потока на DynamoDB в таблицата „mytable“, който предава както новите, така и старите изображения на елементи веднага щом настъпят промени. Можете да изберете да предавате поточно новите изображения само веднага след като StreamViewType стане „NEW_IMAGE“.

За отбелязване е, че изпълнението на този код може да активира потоците на вашите маси само след известно време. Вместо това процесът може да отнеме известно време. Можете да използвате метода describe_table, за да проверите състоянието на потока.

Стъпка 4: Създайте ламбда функцията

Следващата стъпка е създаването на Lambda функция, която задейства DynamoDB потока. Следните стъпки трябва да помогнат:

  • Отворете конзолата AWS Lambda и щракнете върху раздела „Създаване на функция“. На страницата „Създаване на функция“ изберете „Автор от нулата“ и въведете име за вашата функция. Тук също трябва да въведете вашето време за изпълнение. Избрахме Python за тази илюстрация.
  • Под „Избор или създаване на роля за изпълнение“ изберете „Създаване на нова роля с основни разрешения за Lambda“, за да създадете IAM роля с необходимите разрешения за вашата функция Lambda.
  • Щракнете върху бутона „Създаване на функция“, за да създадете вашата Lambda функция.
  • На страницата „Конфигурация“ за вашата функция превъртете надолу до секцията „Дизайнер“ и щракнете върху раздела „Добавяне на тригер“.
  • В полето „Конфигурация на задействане“, което се показва, изберете „DynamoDB“ от падащото меню „Задействане“.
  • Изберете таблицата DynamoDB, която искате да използвате, за да задействате функцията. След като сте готови, изберете дали искате функцията да се задейства при всички актуализации на таблицата или само при конкретни актуализации (като актуализации на определени колони).
  • Щракнете върху бутона „Добавяне“, за да създадете тригера.
  • В редактора „Функционален код“ напишете кода на Python за вашата функция. Можете да използвате обекта на събитието, който се предава на вашата функция, за достъп до данните, които задействат функцията.
  • Щракнете върху бутона „Запазване“, за да запазите функцията.

Това е всичко, което се случва при създаването на функция Lambda! Вашата функция сега се задейства всеки път, когато има актуализации на определената таблица DynamoDB.

Ето пример за проста функция на Python, която DynamoDB потокът може да задейства:

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

за запис в събитие[ 'Записи' ]:

печат (запис [ 'dynamodb' ][ 'Нова картинка' ])

Тази функция преминава през записите в обекта на събитието и отпечатва новото изображение на елемента в таблицата DynamoDB, която задейства функцията.

Стъпка 5: Тествайте ламбда функцията

За да тествате Lambda функция, която DynamoDB поток може да задейства, можете да използвате boto3 библиотека за достъп до DynamoDB API и извиквам метод на Ламбда клиент, за да задейства функцията.

Ето пример как да го направите:

импортиране на boto3

# Свържете се с услугата DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Свържете се с услугата Lambda
lambda_client = boto3.client( 'ламбда' )

# Вмъкване на елемент в таблицата 'my-table'.
отговор = dynamodb.put_item(
Име на таблица= 'mytable' ,
Артикул={
'документ за самоличност' :{ 'Н' : '123' },
име :{ 'С' : „Джоел Остин},
'
възраст ':{' н ':' 3. 4 '}
}
)

# Проверете отговора, за да се уверите, че елементът е вмъкнат успешно
ако отговор ['
ResponseMetadata '][' HTTPStatusCode '] == 200:
print('Елементът е вмъкнат успешно')
иначе:
print('Грешка при вмъкване на елемент')

# Задействайте функцията Lambda, която е абонирана за '
моята маса ' маса
отговор = lambda_client.invoke(
Име на функция='
моята функция ',
InvocationType='
Събитие ',
LogType='
Опашка ',
Полезен товар='
{ 'записи' :[{ 'dynamodb' :{ 'Нова картинка' :{ 'документ за самоличност' :{ 'Н' : '123' }, 'име' :{ 'С' : 'Джоел Остин' }, 'възраст' :{ 'Н' : '3. 4' }}}}]} '
)

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

Този код първо вмъква елемент в mytable таблица и след това задейства моята функция Lambda функция чрез изпращане на примерен полезен товар за събитие към функцията, използвайки извиквам метод. Полезният товар на събитието симулира събитие на DynamoDB поток, което включва новото изображение на току-що вмъкнатия елемент.

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

Заключение

Жизненоважно е да се отбележи, че можете да извикате многократно за един и същ запис на поток, който DynamoDB поток може да задейства Lambda функция. Основната причина за това е, че записите на потока в крайна сметка са последователни и е възможно един и същи запис да се обработва многократно от функцията Lambda. От решаващо значение е да проектирате вашата Lambda функция, за да се справите правилно с този случай.