ДинамоДБ токови са Ламбда

Dinamodb Tokovi Sa Lambda



ДинамоДБ Стреамс је функција у Амазон ДинамоДБ која вам омогућава да у реалном времену добијете ток промена или промена података које се уносе у ваше ДинамоДБ табеле. Ову функцију можете користити за прављење апликација које реагују на промене података у ДинамоДБ табелама, као што су ажурирање кеша и слање обавештења.

Наравно, такође можете да користите ДинамоДБ Стреамс да покренете низводне процесе и АВС Ламбда функције. Ламбда, по дефиницији, је рачунарска услуга без сервера која покреће ваш код као одговор на догађаје и аутоматски управља рачунарским ресурсима уместо вас.

Можете да користите Ламбда да напишете код у Ноде.јс, Питхон, Јава или Ц# за обраду записа стрима и предузимање одговарајућих радњи. Главна предност интеграције ДинамоДБ токова са Ламбда-ом је та што вам Ламбда омогућава покретање подржаних услуга или кодова апликација без потребе за администрацијом.







Како користити АВС ДинамоДБ токове са Ламбда-ом

Иако је могуће креирати Ламбда функцију која користи догађаје и појаве из ДинамоДБ Стреам-а, процес може бити прилично тежак, посебно у вашем првом покушају. Следећи кораци ће помоћи:



Корак 1: Уверите се да ваш систем испуњава предуслове

Ова процедура ће бити успешна само ако познајете основне Ламбда операције и процесе. Дакле, ово би требало да буде ваш први који ће осигурати да је ваше разумевање Ламбде изнад просека.



Други предуслов који вреди размотрити је потврда верзије АВС система. Можете користити следећу команду:





авс –верзија

Резултат за дату команду би требало да изгледа овако:

авс-цли/ 2 .к.к Питхон/ 3 .к.к Линук/ 4 .к.к-ккк-стд ботоцоре/ 2 .к.к

Дати пример одговора садржи инсталирану верзију АВС ЦЛИ ( авс-цли/2.к.к ), верзија Питхон-а ( Питхон/3.к.к ), и оперативни систем ( Линук/4.к.к-ккк-стд ). Последњи део одговора дефинише верзију библиотеке Ботоцоре на којој ради ваш АВС ЦЛИ ( ботоцоре/2.к.к ).



Дакле, на крају ћете добити нешто попут овога:

Корак 2: Креирајте извршну улогу

Следећи корак је креирање извршне улоге у АВС ЦЛИ. Улога извршења је улога АВС управљања идентитетом и приступом (ИАМ) коју преузима АВС услуга да би извршила задатке у ваше име. Омогућава вам приступ АВС ресурсима који ће вам бити потребни на том путу.

Можете креирати улогу користећи следећу команду:

авс иам креирање улоге \

--роле-наме ЛамбдаДинамоДБЕкецутионРоле \

--ассуме-роле-полици-доцумент филе://ассуме-роле-полици.јсон \

--Опис ' АВСЛамбдаДинамоДБЕкецутионРоле' \

--име-услуге ламбда.амазонавс.цом

Претходна команда је АВС ЦЛИ команда за креирање улоге. Такође можете да користите Амазон Манагемент Цонсоле да креирате улогу. Када сте на ИАМ конзоли, отворите Улоге страницу и кликните на Креирајте улогу дугме.

Наставите да унесете следеће:

  • Поуздани ентитет: Ламбда
  • Име улоге: ламбда-динамодб-роле
  • Дозволе: АВСЛамбдаДинамоДБЕкецутионРоле

Такође можете да користите Питхон тако што ћете прво инсталирати АВС СДК за Питхон:

пип инсталл бото3

Корак 3: Омогућите ДинамоДБ токове на вашем столу

Морате да омогућите ДинамоДБ токове на својој табели. За ову илустрацију користимо Бото3, АВС СДК за Питхон. Следећа команда ће помоћи:

импорт бото3

# Повежите се са услугом ДинамоДБ
динамодб = бото3.цлиент( 'динамодб' )

# Омогућите ДинамоДБ стреамове на табели 'ми-табле'
одговор = динамодб.упдате_табле(
ТаблеНаме= 'митабле' ,
СтреамСпецифицатион={
'СтреамЕнаблед' : Истинито,
'СтреамВиевТипе' : 'НЕВ_АНД_ОЛД_ИМАГЕС'
}
)

# Проверите одговор да бисте се уверили да је стрим успешно омогућен
ако одговор[ 'СтреамСпецифицатион' ][ 'СтреамЕнаблед' ]:
штампа ( „ДинамоДБ стрим је успешно омогућен“ )
остало:
штампа ( „Грешка при омогућавању ДинамоДБ стрима“ )

Овај код омогућава ДинамоДБ ток на табели „митабле“ који стримује и нове и старе слике ставки чим дође до било какве промене. Можете одабрати да стримујете само нове слике чим СтреамВиевТипе буде на „НЕВ_ИМАГЕ“.

Посебно, покретање овог кода може да омогући стримове на вашим табелама тек након неког времена. Уместо тога, процес може потрајати. Можете да користите метод десцрибе_табле да проверите статус тока.

Корак 4: Креирајте Ламбда функцију

Следећи корак је креирање Ламбда функције која покреће ДинамоДБ ток. Следећи кораци би требало да помогну:

  • Отворите АВС Ламбда конзолу и кликните на картицу „Креирај функцију“. На страници „Креирај функцију“ изаберите „Аутор од нуле“ и унесите назив за своју функцију. Такође морате да унесете своје време извођења у овом тренутку. Изабрали смо Питхон за ову илустрацију.
  • У одељку „Изаберите или креирајте извршну улогу“ изаберите „Креирајте нову улогу са основним Ламбда дозволама“ да бисте креирали ИАМ улогу са потребним дозволама за вашу Ламбда функцију.
  • Кликните на дугме „Креирај функцију“ да бисте креирали своју Ламбда функцију.
  • На страници „Конфигурација“ за своју функцију, померите се надоле до одељка „Дизајнер“ и кликните на картицу „Додај окидач“.
  • У оквиру „Конфигурација окидача“ који се појави изаберите „ДинамоДБ“ из падајућег менија „Триггер“.
  • Изаберите ДинамоДБ табелу коју желите да користите за покретање функције. Када завршите, одаберите да ли желите да се функција покреће на свим ажурирањима табеле или само на одређеним ажурирањима (као што су ажурирања одређених колона).
  • Кликните на дугме „Додај“ да бисте креирали окидач.
  • У уређивачу „Фунцтион цоде“ напишите Питхон код за своју функцију. Можете користити објекат догађаја који се прослеђује вашој функцији да бисте приступили подацима који активирају функцију.
  • Кликните на дугме „Сачувај“ да бисте сачували функцију.

То је све што се дешава када се креира Ламбда функција! Ваша функција се сада покреће кад год постоје ажурирања наведене ДинамоДБ табеле.

Ево примера једноставне Питхон функције коју ДинамоДБ ток може да покрене:

деф ламбда_хандлер(догађај, контекст):

за запис у догађају [ 'Рекорди' ]:

штампа (запис[ 'динамодб' ][ 'Нова слика' ])

Ова функција итерира кроз записе у објекту догађаја и штампа нову слику ставке у ДинамоДБ табели која покреће функцију.

Корак 5: Тестирајте Ламбда функцију

Да бисте тестирали Ламбда функцију коју ДинамоДБ ток може да покрене, можете користити бото3 библиотеци за приступ ДинамоДБ АПИ-ју и призивати методом Ламбда клијент да покрене функцију.

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

импорт бото3

# Повежите се са услугом ДинамоДБ
динамодб = бото3.цлиент( 'динамодб' )

# Повежите се на Ламбда услугу
ламбда_цлиент = бото3.цлиент( 'ламбда' )

# Убаците ставку у табелу 'моја табела'
одговор = динамодб.пут_итем(
ТаблеНаме= 'митабле' ,
Ставка={
'ид' :{ 'Н' : '123' },
'име' :{ 'С' : 'Јоел Аустин},
'
старости ':{' Н ':' 3. 4 '}
}
)

# Проверите одговор да бисте били сигурни да је ставка успешно уметнута
ако одговор['
РеспонсеМетадата '][' ХТТПСтатусЦоде '] == 200:
принт('Ставка је успешно уметнута')
остало:
принт('Грешка при уметању ставке')

# Покрени Ламбда функцију која је претплаћена на '
мој сто ' сто
одговор = ламбда_цлиент.инвоке(
ФунцтионНаме='
моја функција ',
ИнвоцатионТипе='
Догађај ',
ЛогТипе='
Реп ',
носивост='
{ 'Рекорди' :[{ 'динамодб' :{ 'Нова слика' :{ 'ид' :{ 'Н' : '123' }, 'име' :{ 'С' : 'Џоел Остин' }, 'старост' :{ 'Н' : '3. 4' }}}}]} '
)

# Проверите одговор да бисте били сигурни да је функција успешно покренута
ако одговор['
СтатусЦоде '] == 202:
принт('Ламбда функција је успешно покренута')
остало:
принт('Грешка при покретању Ламбда функције')

Овај код прво убацује ставку у митабле табела, а затим покреће моја функција Ламбда функција слањем примера корисног оптерећења догађаја функцији користећи призивати методом. Корисно оптерећење догађаја симулира догађај ДинамоДБ стрима који укључује нову слику ставке која је управо уметнута.

Затим можете да проверите евиденцију Ламбда функције да видите да ли је успешно покренула и обрађивала податке о догађају.

Закључак

Важно је напоменути да можете више пута позвати за исти запис тока који ДинамоДБ стреам може покренути Ламбда функцију. Примарни разлог за ово је тај што су записи тока на крају конзистентни и могуће је обрадити исти запис више пута помоћу Ламбда функције. Од кључне је важности да дизајнирате своју Ламбда функцију да бисте правилно поступали са овим случајем.