Како променити временско ограничење у АВС Ламбда

Разбирање временског ограничења AWS Lambda функција

Уколико планирате да изградите серверску архитектуру на AWS-у, или бар један њен део, AWS Lambda сервис ће бити кључна компонента. Овај сервис вам омогућава да развијате и покрећете рачунарске функције без потребе за одржавањем позадинских кластера или сервера. Обично се ове функције пишу у програмским језицима као што су Node.js или Python. Више Lambda функција се може повезати како би се формирали комплекснији процеси.

Једно од важних својстава Lambda функција је њихово временско ограничење обраде. Ово ограничење игра кључну улогу у дефинисању намене и правилне употребе AWS Lambda сервиса.

Извор: aws.amazon.com

Шта представља временско ограничење?

Временско ограничење (timeout) AWS Lambda функције је подешавање које дефинише максимално време трајања функције пре него што се принудно заустави. Lambda функције су дизајниране да буду краткотрајне и без стања (stateless), и на тај начин их треба користити. Ипак, често се може видети да тимови покушавају да искористе Lambda функције за дуготрајне процесе, углавном због тога што желе да искористе предности серверског окружења које AWS Lambda нуди. Покретање кода без потребе за серверима са одређеним хардверским конфигурацијама је знатно јефтиније, што је примамљива опција.

Међутим, ако функција ради дуже од предвиђеног, може доћи до проблема са коришћењем ресурса и перформансама. Постоји ризик од закључавања ресурса, а када је у питању дуготрајан процес, често се не посвећује довољна пажња оптимизацији његових корака. Кашњење од пет минута можда не представља проблем у таквим ситуацијама, чак и ако је тај период бескористан за сам процес.

Подразумевано, временско ограничење за Lambda функцију је постављено на 3 секунде. То значи да се сваки код унутар Lambda функције мора извршити у року од три секунде. Ово је корисно за архитектуре са брзим комуникацијама и одговорима, које могу процесуирати милионе трансакција у веома кратком временском периоду. Међутим, ово ограничење може значајно ограничити примену Lambda функција, па се зато може повећати до максимално 900 секунди (15 минута). Када се достигне ово ограничење, Lambda ће прекинути функцију и вратити код грешке.

Како подесити временско ограничење?

Извор: aws.amazon.com

Временско ограничење за Lambda функцију можете подесити користећи AWS конзолу за управљање, AWS CLI или AWS SDK.

Ево корака за подешавање:

  • Отворите AWS Management Console и идите на Lambda сервис.
  • Изаберите Lambda функцију коју желите да измените.
  • У картици „Configuration“, пронађите секцију „General configuration“ и поставку „Timeout“.
  • Кликните на дугме „Edit“ поред поставке „Timeout“.
  • Унесите нову вредност временског ограничења у секундама (између 1 и 900) и кликните на „Save“.
  • Кликните на „Save“ на врху странице да бисте сачували измене Lambda функције.

Такође, можете користити AWS CLI за ажурирање временског ограничења. Ево примера команде:

 aws lambda update-function-configuration --function-name [Име_Ваше_Lambda_Функције] --timeout 900
 

Ова команда поставља временско ограничење за функцију [Име_Ваше_Lambda_Функције] на 15 минута. Унесите стварно име функције и жељену вредност временског ограничења у секундама.

Важна разматрања

Временско ограничење се примењује на целу функцију, а не само на појединачне делове кода или операције. Ако функција обавља дуготрајне операције, као што су обрада великих датотека или мрежни захтеви, морате осигурати да је временско ограничење довољно за завршетак тих операција, чак и у најгорем случају.

Ламбда функције су дизајниране за краткотрајне и једноставне задатке. Ако је функцији потребно много времена да се изврши, размислите о подели на мање функције, које се могу позивати једна за другом помоћу окидача. На пример, ако се излаз претходне функције складишти на S3 сегменту.

Уколико је неопходно покренути процес који премашује ограничење од 15 минута, размотрите AWS Step Functions за оркестрирање низа Lambda функција или других AWS сервиса.

Најбоље праксе

Чини се да подразумевано временско ограничење није довољно за неке сложеније задатке. Често програмери постављају ограничање на 15 минута за све Lambda функције. Иако функција може завршити раније, неће бити никаквих негативних последица.

Међутим, постоје неке најбоље праксе којих се треба придржавати.

#1. Дефинишите одговарајућу вредност

Временско ограничење треба поставити на основу очекиваног времена извршавања функције. То значи да не треба да буде ни прекратко ни непотребно дуго.

Можда је пожељно да укупно време Lambda функције не буде дуже од три минута, због архитектонских или перформансних разлога. Исто тако, функција не би требало да се прекине пре, на пример, три минута, како би се омогућио одређен број поновних покушаја у случају да су ресурси неопходни за извршење кода заузети или закључани.

Пре постављања временског ограничења на 15 минута, размислите о оптималној вредности. Дефинисање прецизнијих вредности је корисно за постављање граница у развојном тиму.

#2. Праћење током времена

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

Користите CloudWatch метрике и евиденције за праћење времена извршавања. Идентификујте функције којима треба више времена него што се очекивало, као и оне које се извршавају брже од очекиваног.

#3. Асинхроно позивање

Ако се Lambda функција покреће догађајем који не захтева тренутни одговор, као што је отпремање датотеке или порука из реда, користите асинхроно позивање да бисте смањили ризик од временских ограничења. Функција ће се извршавати у позадини, без чекања на одговор. Ово може довести до смањеног броја истека времена, јер се време чекања на ресурс не урачунава у укупно време извршавања Lambda функције.

#4. Користите Step Functions за сложене процесе

За дуготрајне процесе који премашују 15 минута, користите AWS Step Functions за оркестрирање Lambda функција или других AWS сервиса. Функције корака разбијају процес на мање задатке којима се лакше управља и које се могу извршити у оквиру временског ограничења. Могуће је покренути више ламбда функција паралелно, а затим нека функција корак сачека њихове резултате пре него што настави даље. Ово је облик хоризонталног скалирања, где неколико функција дели један проблем и заједно га решава.

Коначно, потребно је прикупити делимичне резултате и изградити коначно решење, за шта може бити довољна једна Lambda функција.

#5. Оптимизујте код

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

Како временско ограничење утиче на наплату?

Извор: aws.amazon.com

Временско ограничење не утиче директно на наплату AWS Lambda функција. Наплата се врши на основу броја захтева и трајања извршавања функције.

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

Међутим, ако се функција не позива често или ако заврши процес пре него што се достигне временско ограничење, утицај на наплату ће бити минималан.

Постављање свих Lambda функција на подразумевано ограничење од 15 минута не мора бити главни разлог повећања трошкова, али може довести до индиректног повећања укупних трошкова. Програмери могу да се осећају слободније и мање ће се трудити око оптимизације кода, за разлику од ситуације у којој би временска ограничења била рестриктивнија.

AWS Lambda нуди бесплатни ниво који укључује 1 милион бесплатних захтева и 400.000 GB-секунди рачунарског времена месечно. Уколико је употреба функција у оквиру бесплатних граница, нећете плаћати време извршавања без обзира на поставку временског ограничења.

Завршна реч

AWS Lambda функције су моћан алат за обраду без сервера у AWS облаку. Важно је бити свестан њихове сврхе и ограничења. Немојте их користити за случајеве за које нису дизајниране.

Оне су идеалне за једноставне, асинхроне задатке који не захтевају извршавање дуже од 15 минута. За сложеније процесе, користите AWS Step Functions да комбинујете неколико Lambda функција у један оркестрирани процес. Или, ако ни то није довољно, користите сервере са одговарајућом конфигурацијом и рачунарском снагом.

За додатне информације, погледајте увод у AWS Lambda за почетнике.