Рубрики
Без рубрики

Практический безвероведенторный: как отправить себе письмо с Чаку Норрисом

Фронт MatterserRelless – один из тех терминов, которые увеличиваются по популярности в последнее время. На самом деле, когда я написал статью о моей архитектуре AWS, несколько человек упомянули, чтобы идти без промедления. Serverless на самом деле не означает, что нет серверов, но как поставить Пол Биггар:

Автор оригинала: Jared Nutt.

Спереди

Serverless – это один из тех терминов, которые увеличиваются по популярности в последнее время. На самом деле, когда я написал статью о моей архитектуре AWS, несколько человек упомянули, чтобы идти без промедления.

Безверенные не на самом деле значит нет серверов, а как Пол Биггар поставил это :

WESERSLENLES – это модное слово, которое не относится к определенной структуре, однако я обнаружил, что Смертная рамка самый простой метод начать работу.

Примечание: Ради краткости, ” SLS. «является синонимом Смертная рамка .

Предпосылки

Честно говоря, документация по безмерной структуре настолько хорошая, это была бы нестепенная, чтобы воссоздать их здесь. Итак, чтобы сохранить эту статью супер сосредоточенную, я собираюсь сосредоточиться на вещах за пределами быстрого начала направляющих. Я включил специальные указанные ниже:

Serverless AWS QuickStart Guide

Начало работы с Serverless Framework и AWS

Я предложил читать по тем первым, если вы никогда не делали ничего с помощью Serverless.

Кроме того, вы можете кодировать вместе со мной в моем начале видео ниже:

Запас слов

Есть много терминов, которые окружают SLS Это может запугивать то, что называется. Вот пара ключевых условий:

Сервис: То, как я думаю о сервисе, состоит в том, что это коллекция кода, который все обслуживается с одного места. Может содержать одну или несколько функций.

Этап: Это какой «тип» окружающей среды, которую вы используете. Обычно это было бы разделить на «Дев» и «PROD». Этап – это переменная обслуживания.

Функция: Кусок кода, который выполняется при вызовах. Вау, какое отличное описание. Это не новое для любого, кто запрограммировал что-нибудь, однако важно знать взаимосвязь между функцией и услугой. Может быть одна или несколько функций, которые являются частью услуги.

Поставщик: Проще говоря, место, где ваш сервис развернут, например, AWS, GCP и т. Д.

Более глубокое погружение

Я нашел эту фантастическую статью, которая глубоко объясняет, что такое Severless, если вы хотите больше информации:

https://dev.to/sosnowski/anatomy-of-aws-lambda-1i1e

Что мы строите

Мы собираемся сделать функцию, которая захватывает шутку из Интернета, и отправляет ее на себя.

Это делает это

  1. Тянет данные из API.
  2. Создает шаблон электронной почты.
  3. Отправляет шаблон электронной почты.
  4. Выгода.

Инструменты

  • Смертная рамка
  • AWS аккаунт (необязательно)
  • AWS CLI.
  • NPM
  • odemailer.

Если вам нравится учиться через видео, проверьте видео версию этой статьи здесь:

Строить вещь

Инструмент

Инструмент для SLS довольно просто. Все, что я использовал, был бессвесовой и NPM CLIS. Если у вас не установлено NPM, Установите его первым Отказ Затем запустите:

NPM I -G неверный

В этом

Обычно это хорошая идея, чтобы начать с шаблона. Есть куча на Serverless AWS пример страница.

Для этого проекта я использовал шаблон AWS-NODEJS, запустив следующую команду в терминале:

serverless create --template aws-nodejs --path my-service

Примечание. Если вы не предоставляете флаг пути, он будет инициатировать проект в любой папке, в которой вы текущие.

Если вы оформить заказ каталог, в нем должно быть три файла:

  • Handler.js
  • serverless.yml.yml.yml.yml
  • .gitignore

Если вы запустите SLS вызывает локальный - H привет , вы должны получить ответ обратно с сообщением успеха.

Развертывание

Обычно развертывание приложения остается на конец учебного пособия, но не для SLS. В случае Руководство по QuestStart Serverless Это шаг 2.

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

Провайдеры

Итак, теперь приходит большой вопрос … Где мы собираемся развернуть эту вещь? Для этого учебника я собираюсь использовать AWS, но вы можете использовать любую услугу, которую вы предпочитаете.

Вот быстрое начало для получения AWS Setup в качестве провайдера: Serverless AWS QuickStart Guide Отказ

Безвесочное предприятие

Он не сразу очевиден на своем сайте, что ценообразование для их предприятия. Однако, как только вы зарегистрируетесь, они отправят вам электронное письмо, которое говорит это:

Развернуть вещь

После того, как вы получили настройки ваших учетных данных, просто запустите SLS развертывает команда в терминале.

Самая запутанная вещь для меня после набора этой команды было интересно … Куда она пошла?

В случае AWS он создает стопку облака, который управляет этим Сервис для тебя. AWS относится к этому как Приложение Отказ Чтобы увидеть, что только что произошло, проверьте свой Консоль лямбда на AWS Отказ Вы должны увидеть функцию, которую вы только что развернули.

Если не появится, проверьте, чтобы убедиться, что вы находитесь в правильном регионе. Регион по умолчанию является США-Восток-1 (Северная Вирджиния). Он может быть изменен через раскрывающийся список в правом верхнем углу:

Попробуй это

Чтобы убедиться, что это сработало, просто запустите SLS вызывает -f Привет в вашем терминале. Вы должны получить тот же ответ, что и раньше, но на этот раз от облака!

Местное развитие

W уже уже один раз тестировал с SLS вызывает локальный - H привет Отказ Если вы делаете что-то более сложное, и хотелось бы, чтобы кодовый код стиля узема, проверьте Смертный автономный Отказ

Начните писать!

Теперь, когда у нас есть наша настройка проекта, давайте начнем написать какой-то реальный код!

Откройте Serverless.yml файл снова и давайте внесем некоторые изменения.

functions:
  sendEmail:
    handler:
     emailHandler.sendEmail
  hello:
    handler: handler.hello

Во-первых, мы добавили новую функцию и новый обработчик. Обработчик ссылается на файл в корневом каталоге, называемом EmailHandler (который еще не существует). Пойдем создать это!

// emailHandler.js
module.exports.sendEmail = async event => {
  return {
    statusCode: 400,
    body: JSON.stringify(
      {
        message: 'Email sent!',
      },
      null,
      2,
    ),
  };
};

Если вы вызываете функцию через SLS вызывает локальный -H sendremail Вы должны получить это:

{
    "statusCode": 400,
    "body": "{\n  \"message\": \"Email sent!\"\n}"
}

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

// emailHandler.js
module.exports.sendEmail = async event => {
  // grab the joke from the API
  const response = await fetch('https://api.chucknorris.io/jokes/random');
  //  grab the JSON
  const joke = await response.json();
  return {
    statusCode: 400,
    body: JSON.stringify(
      {
        message: joke.value,
      },
      null,
      2,
    ),
  };
};

Милая! Теперь мы получаем шутки! Давайте построим часть электронной почты.

Переменные среды

Прежде чем мы слишком далеко до этого, вы, вероятно, осознали, что нам нужно будет тянуть в некоторые секреты. Предполагая, что мы не хотим, чтобы мир имел наши ключи API, то есть.

Стадии

Обычно, когда бы ни работал с приложением узла, среда узла будет диктовать, является ли она «dev» или «производство». В SLS, который определяется тегом «этап», которая прикреплена к провайдеру.

Отличное объяснение от Степ без сервера :

Очередь секреты

Создать env.yml в корневом каталоге.

Обязательно добавьте его в .gitignore

Добавьте наши переменные.

# Add the environment variables for the various stages
prod:
  MAIL_HOST: ""
  MAIL_PORT: 2525
  MAIL_USER: ""
  MAIL_PASS: ""
dev:
  MAIL_HOST: ""
  MAIL_PORT: 2525
  MAIL_USER: ""
  MAIL_PASS: ""

Ссылка переменных в serverless.yml.yml.yml.yml

provider:
  name: aws
  runtime: nodejs10.x
  stage: dev
  environment:
    MAIL_HOST: ${file(env.yml):${self:provider.stage}.MAIL_HOST}
    MAIL_PORT: ${file(env.yml):${self:provider.stage}.MAIL_PORT}
    MAIL_USER: ${file(env.yml):${self:provider.stage}.MAIL_USER}
    MAIL_PASS: ${file(env.yml):${self:provider.stage}.MAIL_PASS}

Да, это довольно сумасшедшая длинная линия, но в основном ее просто говорит:

Читайте файл (env.yml) -> Используйте сцену, которую мы работаем (dev) -> используйте переменную, связанную с этим этапом

Для дальнейшего чтения на предмет нагрузки в секретах: посмотрите эту статью: Секреты нагрузки от env.yml

Отправить электронную почту

Чтобы сделать это просто, я собираюсь использовать Mailtrap. . Это фантастический инструмент для тестирования электронной почты, который не требует от вас настроить почтовый сервер.

Установить NodEmailer

Для того, чтобы установить NODEMailer, вам необходимо init Project NPM. Идите вперед и сделайте это через командную строку:

npm init -y

Затем установите NodEmailer

npm i nodemailer

Добавьте свои ключи API

Захватите свои ключи API из демонстрации MailTrap и добавьте в свой env.yml.

Чтобы отправить почту, мы собираемся использовать NODEMAILER. Вот код для mailtrap + nodemailer:

const nodemailer = require('nodemailer');
// grab the variables from the process
const { MAIL_HOST, MAIL_PORT, MAIL_USER, MAIL_PASS } = process.env;

// create the transport
const transport = nodemailer.createTransport({
  host: MAIL_HOST,
  port: MAIL_PORT,
  auth: {
    user: MAIL_USER,
    pass: MAIL_PASS,
  },
});

module.exports.sendEmail = async event => {
  // grab the joke from the API
  const response = await fetch('https://api.chucknorris.io/jokes/random');
  //  grab the JSON
  const joke = await response.json();
  // create HTML template
  const html = `
	

Joke of the Day

${joke.value}

`; // send mail with our transport object let info = await transport.sendMail({ from: '"Chuck Norris" ', // sender address to: 'name@email.com', // list of receivers subject: 'Daily Joke', // Subject line html, // html body }); return { statusCode: 400, body: JSON.stringify( { message: joke.value, }, null, 2, ), }; };

Если все прошло хорошо, вызовите локальные и проверьте свою mailtrap.

SLS вызывает локальный – Sendremail

{
    "statusCode": 400,
    "body": "{\n  \"message\": \"Chuck Norris' favorite chewing gum are bullets.\"\n}"
}

Что дальше

Эта статья немного долго получила, поэтому я собираюсь остановиться здесь. Однако в следующем издании Практический безвесочный Я собираюсь включить подключение к БД (не так просто, как должно быть), и настройка автоматической функции прогона через CRON (гораздо проще, чем звучит!).

Последние мысли

Я позволю вам принять решение о практичности отправки себе шуток, но я думаю, что это использование выходит за пределы мистера Норриса. Это часть 1 серии называется Практично без Если у вас есть предложения, которые вы хотели бы добавить, пожалуйста, сделайте!

Как всегда, счастливое кодирование!

Код Репо

https://github.com/DarthOstrich/sls-part1-sendemail

Ресурсы

https://serverless.com/learn/use-cases/

https://serverless.com/framework/docs/getting-started/

https://medium.com/a-man-with-no-server/running-aws-lambda-and-api-gateway-locally-serverless-offline-3c64b3e54772

Оригинал: “https://www.freecodecamp.org/news/serverless-use-case-sending-yourself-an-e-mail/”