Сёння мы створым т.зв. Яндэкс-функцыю (афіцыйная назва
А яшчэ я супернік (але без фанатызму) традыцыйных сервераў, і прыхільнік т.зв. бессерверной (бессерверных) рашэнняў, паколькі не кахаю (ды і толкам не ўмею) адміністраваць сервера, а яшчэ больш - плаціць за той час, калі яны не нагружаныя. Іншая справа - функцыі. Іх нехта абслугоўвае без мяне, а я плачу толькі за выклікі. У пачатку кастрычніка 2019 г. Яндэкс прадставіў свае Yandex Cloud Functions - здаецца першы ў РФ бессерверной. І што асабліва прыемна - для навыкаў Алісы яны наогул бясплатныя, таму з тых часоў знаходзяцца ў полі майго перыферыйнага зроку. Але давайце ўжо прыступім.
Уявім такі сцэнар. Ваша прыкладанне (напрыклад, навык Алісы
Аб тым, як з Яндэкс-функцый рабіць запісы ў БД Воблачны камень мы ўжо разглядалі ў тутарыяле
1. Стварэнне акаўнта ў SendGrid
ЗаўвагаSendGrid – гэта толькі мой выбар, які я зрабіў па некаторых прычынах, і галоўная з якіх – наяўнасць у іх гатовага SDK для Node.js. Вы можаце выбраць любы іншы сэрвіс паштовых рассылак.
Пераходзім
На наступным кроку выбіраемы Node.js:
Далей прыдумляем для свайго API-ключа назва (будзе адлюстроўвацца толькі ў кансолі ў спісе ключоў, і да нашага будучага кода стаўлення не мае; я вось прыдумаў нятленнае demo-api-key) і націскаем кнопку Стварыць ключ:
Ключык згенеруецца, мы яго скапіюем і захаваем у найглыбокай таямніцы. А ў нас з'явіцца экран з кнопкай Verify Integration, як на малюнку ніжэй, але мы яе пакуль націскаць не станем, а пяройдзем да напісання кода:
2. Напісанне кода
А самога кода, як бачыце, да смешнага мала - 22 радкі!
У радку #8 хардкодам прапісана мая пошта (і таму сарамліва прычыненая) - вы пакажыце сваю. У рэальным жа жыцці мы будзем атрымліваць усе дадзеныя (уключаючы электронная пошта) з аб'екта падзея. Напрыклад, калі метадам POST у нашу функцыю адпраўляецца аб'ект карыстальнік з полем (уласцівасцю) электронная пошта, значэнне гэтага поля можна атрымаць так:
const { user } = event;
const email = user.email;
А калі адрас пошты перадаецца ў функцыю метадам GET, Напрыклад: https://functions.yandexcloud.net/123abc?[email protected]
значэнне параметру электронная пошта можна атрымаць гэтак:
const email = event.queryStringParameters.email;
Каб зірнуць на тое, што менавіта змяшчаецца ў аб'екце падзея, можна стварыць найпростую Яндэкс-функцыю і пакруціць яе запытамі:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};
Падрабязней (але менш даходліва) пра гэта гаворыцца ў афіцыйнай дакументацыі
Такім чынам, ствараем каталог праекту (напрыклад, ліст), пераходзім у яго, ініцыялізуем праект, які ўсталёўваецца залежнасці:
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
Тут абавязковым з'яўляецца толькі пакет @sendgrid/mail. Пакет email-validator правярае на валіднасць адрас пошты (як я адразу не здагадаўся?), але калі мы ў ім упэўненыя (даўно ўжо праверана без нас), яго можна не ўсталёўваць (і ў кодзе, натуральна, праверку не рабіць). Пакет датэнв прызначаны для чытання запісаў з файла .env як зменных асяроддзя выканання. Але ў Яндэкс-функцыях ёсць магчымасць змяшчаць гэтыя зменныя непасрэдна ў сераду выкананне. Як? - я пакажу гэта ніжэй. Таму пакет датэнв таксама можна не ставіць, і файл .env - не ствараць, і пры гэтым код у файле index.js не мяняць. Але тут мы гэты пакет устанавілі, таму ствараем файлы. index.js и .env:
touch index.js
touch .env
У файле index.js пішам 22 радкі кода, паказанага на скрыншоце вышэй (толькі ў радку #8 памяняйце пошту), а ў файле .env - (без якіх-небудзь двукоссяў і знакаў прыпынку) пазначце пару - імя / значэнне ключа API, які мы нядаўна атрымалі ў кансолі SendGrid:
SENDGRID_API_KEY=your-very-secret-sendgrid-api-key
А калі хочаце, каб працы было паменш - склануйце рэпазітар, усталюйце пакеты:
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
У файле index.js, у радку #8 памяняйце пошту; у каранёвым каталогу стварыце файл .env, і ў ім укажыце імя/значэнне ключа API, як паказана крыху вышэй.
3. Дэплой
Больш-менш выразна і падрабязна аб Яндэкс.Аблокі і пра тое, як там размяшчаць Яндэкс-функцыі расказана ў маім артыкуле
Ствараем ZIP-архіў (назавём яго, напрыклад, mailer.zip), у які ўключаем каталог вузелавыя модулі і файлы .env, index.js - усё з каталога нашага праекта:
Ствараем функцыю з назвай ... правільна - ліст, у левым навігацыйным меню ўбіраем рэдактар, запаўняем неабходныя палі, і пераключыўшыся на ўкладку ZIP-архіў загружаем наш архіў mailer.zip:
А вось і згаданая раней магчымасць загрузіць API-key непасрэдна тут, а не ствараць у праекце файл .env, і не ўсталёўваць пакет датэнв. Але мы ўсё гэта ўжо зрабілі, таму паказваю проста для інфармацыі. Гэта значыць - дубляваць не трэба!
Цяпер у правым верхнім куце націскаем кнопку Стварыць версію, і чакаем пару секунд. Калі ўсё будзе гатова, мы аўтаматычна пяройдзем у падзел Агляд. Там уключым опцыю Публічная функцыя, каб з ёй можна было ўзаемадзейнічаць з навакольнага свету.
Бачыце сінюю спасылку насупраць надпісу Спасылка для выкліку? Націсніце яе. Адкрыецца пустое акно браўзэра ... Але пачакайце - мне прыйшоў ліст:
Цяпер можна вярнуцца ў кансоль SendGrid, і націснуць кнопку Verify Integration. Сістэма праверыць усё па сваіх каналах, і ў выніку павінна вярнуць такі вось экран:
Вось так, хлопцы (і дзяўчаты, зразумела) - усё сапраўды вельмі проста і элегантна! Будуць яшчэ артыкулы. Каму чытаць падобнае цікава - падпісвайцеся, каб не прапусціць.
4. Данаты
Крыніца: habr.com