Я столкнулся с этим при создании статического веб-сайта. Ему нужна контактная форма, которая отправит электронное письмо. Я искал самое быстрое решение и наткнулся на облачные функции. Ниже приводится мое понимание облачных функций и того, как они могут быть очень полезными.

Часто возникают ситуации, когда вы хотите выполнить что-то столь же простое, как настройка простого почтового сервера или сервера, который отправляет неактивные уведомления в канал на основе события. Установка и запуск этого традиционным способом может занять много времени и быть неэффективной. Напишите код, подготовьте серверы и разверните, управляйте своими серверами и масштабируемостью, а также платите за сервер, даже когда он простаивает (в большинстве случаев).

Облачные функции вам в помощь! Не нужно управлять серверами, не беспокойтесь о масштабируемости, платите только за время использования, отказоустойчиво и очень просто в использовании. Это управляемая событиями служба, основанная на категории облачных вычислений FaaS (функция как услуга), которая является одним из способов достижения бессерверной архитектуры. Он поощряет микросервисы вместо монолитов, что является проверенным способом создания масштабируемых приложений.

Ниже приведен простой пример, показывающий облачные функции в действии. Все, что он делает, это отправляет электронное письмо на указанный адрес при запуске с использованием HTTP-вызова. Прежде чем мы начнем, давайте настроим проект на Google Cloud Platform.

Предпосылки

  • Некоторые знания о том, как работают API-интерфейсы nodeJS и HTTP.

Шаги

  • Выберите или создайте проект GCP — ссылка
  • Включить биллинг, если он еще не включен — ссылка. Обратите внимание, что у GCP есть пробный период, в течение которого вы можете использовать бесплатный кредит (300 долларов США), поэтому вам не придется ничего платить за это.
  • Включить Cloud Functions API для вашего проекта — ссылка
  • Далее давайте создадим новую функцию Облака, перейдите по этой ссылке
  • Нажмите «Создать функцию» и выберите «Http Trigger». Указав http Trigger, мы говорим, что будем вызывать эту функцию с помощью HTTP-вызова. Есть и другие способы запуска функции, но в этом примере я буду использовать HTTP-триггеры.
  • Выберите nodejs 6 в качестве среды выполнения
  • Теперь в исходном коде вы увидите пример кода. Удалите его и скопируйте следующий блок
const Buffer = require(‘safe-buffer’).Buffer;
const sendgrid = require(‘sendgrid’);
const uuid = require(‘uuid’);
const API_KEY = <YOUR_SENDGRID_API_KEY>;
function getClient (key) {
 if (!key) {
 const error = new Error(‘SendGrid API key not provided. Make sure you have a “sg_key” property in your request querystring’);
 error.code = 401;
 throw error;
 }
 return sendgrid(key);
}
function constructPayload (requestBody) {
 if (!requestBody.body) {
 const error = new Error(‘Email content not provided. Make sure you have a “body” property in your request’);
 error.code = 400;
 throw error;
 }
//Add more validations here
return {
 personalizations: [
 {
 to: [
 {
 email: requestBody.to;
 }
 ],
 subject: requestBody.subject’
 }
 ],
 from: {
 email: ‘requestBody.from’
 },
 content: [
 {
 type: ‘text/plain’,
 value: requestBody.body
 }
 ]
 };
}
exports.sendEmail = (req, res) => {
 return Promise.resolve()
 .then(() => {
 if (req.method !== ‘POST’) {
 const error = new Error(‘Only POST requests are accepted’);
 error.code = 405;
 throw error;
 }
// Get a SendGrid client
 const client = getClient(API_KEY);
// Build the SendGrid request to send email
 const request = client.emptyRequest({
 method: ‘POST’,
 path: ‘/v3/mail/send’,
 body: constructPayload(req.body)
 });
// Make the request to SendGrid’s API
 console.log(`Sending email to: ${req.body.to}`);
 return client.API(request);
 })
 .then((response) => {
 if (response.statusCode < 200 || response.statusCode >= 400) {
 const error = Error(response.body);
 error.code = response.statusCode;
 throw error;
 }
console.log(`Email sent to: ${req.body.to}`);
// Forward the response back to the requester
 res.status(response.statusCode);
 if (response.headers[‘content-type’]) {
 res.set(‘content-type’, response.headers[‘content-type’]);
 }
 if (response.headers[‘content-length’]) {
 res.set(‘content-length’, response.headers[‘content-length’]);
 }
 res.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
if (response.body) {
 res.send(response.body);
 } else {
 res.end();
 }
 })
 .catch((err) => {
 console.error(err);
 const code = err.code || (err.response ? err.response.statusCode : 500) || 500;
 res.status(code).send(err);
 return Promise.reject(err);
 });
};

Что делает этот код

Приведенный выше код распаковывает ваш HTTP-запрос, чтобы получить данные, необходимые для отправки электронного письма. Сюда входят to адрес, from адрес, subject и body . Затем он использует службу под названием SendGrid для отправки электронной почты. SendGrid — это сторонний почтовый сервис. Ниже приведены шаги по созданию учетной записи SendGrid и генерации ключа API. Обратите внимание, что SendGrid также имеет бесплатную квоту электронной почты, которую вы можете выбрать при создании учетной записи. Следуйте инструкциям ниже.

Создайте учетную запись SendGrid:

  1. Создайте учетную запись SendGrid. Вы можете сделать это вручную через веб-сайт SendGrid или использовать Google Cloud Launcher, который создаст для вас учетную запись и интегрирует биллинг.
  2. См. Создание учетной записи SendGrid с помощью Cloud Launcher

Создайте ключ API SendGrid:

  1. Войдите в свою учетную запись SendGrid по адресу https://app.sendgrid.com.
  2. Перейдите в «Настройки» > «Ключи API».
  3. Создайте новый ключ API с полным доступом
  4. Скопируйте этот API-ключ в безопасное место, он будет отображаться только один раз.
  5. Замените значение <YOUR_SENDGRID_API_KEY> ключом в блоке кода выше.

Вернуться к облачной функции сейчас

  • В текстовом поле ниже с надписью «Выполняемая функция» нам нужно указать функцию, которая экспортируется. В нашем случае он называется sendEmail
  • Внизу страницы нажмите Create
  • Дождитесь завершения создания функции. Вы увидите зеленую галочку, когда это будет сделано

Готово, вы успешно развернули свою первую облачную функцию! Давайте проведем быстрый тест.

Тестирование функции

Хотя в облачной консоли есть встроенный инструмент, мы собираемся использовать стандартный http-клиент, чтобы лучше понять, как это работает.

  • Получите URL-адрес вашей функции на вкладке Trigger внутри сведений о функции.
  • Добавьте к нему /sendEmail и создайте почтовый запрос, используя ваш любимый http-клиент со следующим телом
{
 "to":"<enter_email_address>",
 "from":"<enter_email_address>",
 "subject":"Hello",
 "body":"Hello World!"
}

Вы должны вернуть 202, и сообщение должно быть успешно доставлено.

Вуаля!

Это было руководство для начинающих по облачным функциям. Дайте мне знать, как вы прошли или если у вас были какие-либо проблемы с ним. Вы можете сделать с ним гораздо больше, ознакомьтесь с официальной документацией. Удачи!