Сегодня мы создадим т.н. fonksiyona Yandex (официальное название
А ещё я противник (но без фанатизма) традиционных серверов, и сторонник т.н. serverless (бессерверных) решений, поскольку не люблю (да и толком не умею) администрировать сервера, а ещё больше — платить за то время, когда они не нагружены. Другое дело — функции. Их кто-то обслуживает без меня, а я плачу только за вызовы. В начале октября 2019 г. Яндекс представил свои Fonksiyonên Cloud Yandex — кажется первый в РФ serverless. И что особо приятно — для навыков Алисы они вообще бесплатны, поэтому с тех пор находятся в поле моего периферийного зрения. Но давайте уже приступим.
Представим такой сценарий. Ваше приложение (например, навык Алисы
О том, как из Яндекс-функций делать записи в БД Cloud Firestore мы уже рассматривали в туториале
1. Создание аккаунта в SendGrid
bingotinSendGrid — это лишь мой выбор, который я сделал по некоторым причинам, и главная из которых — наличие у них готового SDK для Node.js. Вы можете выбрать любой другой сервис почтовых рассылок.
Perekhodim min
На следующем шаге выбираем Node.js:
Далее придумываем для своего API-ключа название (будет отображаться только в консоли в списке ключей, и к нашему будущему коду отношения не имеет; я вот придумал нетленное demo-api-key) û bişkojê bikirtînin Key Biafirîne:
Ключик сгенерируется, мы его скопируем и сохраним в глубочайшей тайне. А у нас появится экран с кнопкой Verify Integration, как на картинке ниже, но мы её пока нажимать не станем, а перейдём к написанию кода:
2. Написание кода
А самого кода, как видите, до смешного мало — 22 строки!
Di rêzê de #8 хардкодом прописана моя почта (и поэтому стыдливо прикрыта) — вы укажите свою. В реальной же жизни мы будем получать все данные (включая email) из объекта bûyer. Например, если методом KOZ в нашу функцию отправляется объект bikaranîvan с полем (свойством) email, значение этого поля можно получить так:
const { user } = event;
const email = user.email;
А если адрес почты передаётся в функцию методом STENDIN, wek nimûne: https://functions.yandexcloud.net/123abc?[email protected]
parametre znachenie email можно получить эдак:
const email = event.queryStringParameters.email;
Чтобы взглянуть на то, что именно содержится в объекте bûyer, можно создать простейшую fonksiyona Yandex и покрутить её запросами:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};
Подробнее (но менее доходчиво) об этом говорится в официальной документации
Итак, создаём каталог проекта (например, peyamnêr), переходим в него, инициализируем проект, устанавливаем зависимости:
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
Здесь обязательным является только пакет @sendgrid/mail. Çenteyê plastîk email-validator проверяет на валидность адрес почты (как я сразу не догадался?), но если мы в нём уверены (давно уже проверено без нас), его можно не устанавливать (и в коде, естественно, проверку не делать). Пакет dotenv предназначен для чтения записей из файла .a V как переменных среды выполнения. Но в Яндекс-функциях имеется возможность помещать эти переменные непосредственно в среду выполнение. Как? — я покажу это ниже. Поэтому пакет dotenv также можно не ставить, и файл .a V — не создавать, и при этом код в файле index.js не менять. Но здесь мы этот пакет установили, поэтому создаём файлы index.js и .a V:
touch index.js
touch .env
Di pelê de index.js пишем 22 строки кода, показанного на скриншоте выше (только в строке #8 поменяйте почту), а в файле .a V — (без каких-либо кавычек и знаков препинания) укажите пару — имя/значение ключа 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
Di pelê de index.js, в строке #8 поменяйте почту; в корневом каталоге создайте файл .a V, и в нём укажите имя/значение ключа API, как показано чуть выше.
3. Деплой
Более-менее внятно и подробно о Yandex.Cloud и о том, как там размещать fonksiyonên Yandex рассказано в моей статье
Создаём zip-архив (назовём его, например, mailer.zip), в который включаем каталог node_modules и файлы .env, index.js — все из каталога нашего проекта:
Создаём функцию с названием… правильно — peyamnêr, в левом навигационном меню вбираем Edîtorê, заполняем необходимые поля, и переключившись на вкладку arşîva ZIP загружаем наш архив mailer.zip:
А вот и упомянутая ранее возможность загрузить API-key непосредственно здесь, а не создавать в проекте файл .a V, и не устанавливать пакет dotenv. Но мы всё это уже сделали, поэтому показываю просто для информации. То есть — дублировать не надо!
Теперь в правом верхнем углу нажимаем кнопку Guhertoyek çêbikin, и ждём пару секунд. Когда всё будет готово, мы автоматически перейдём в раздел gistî. Там включим опцию Fonksiyona giştî, чтобы с ней можно было взаимодействовать из внешнего мира.
Видите синюю ссылку напротив надписи Girêdana telefonê? Нажмите её. Откроется пустое окно браузера… Но подождите — мне пришло письмо:
Теперь можно вернуться в консоль SendGrid, и нажать кнопку Verify Integration. Система проверит всё по своим каналам, и в результате должна вернуть такой вот экран:
Вот так, ребята (и девчата, разумеется) — всё действительно очень просто и элегантно! Будут ещё статьи. Кому читать подобное интересно — подписывайтесь, чтобы не пропустить.
4. Донаты
Source: www.habr.com