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

Учебное пособие: Создание приложения сообщества на посадке с помощью серверу, сбоев и степкой …

Автор оригинала: FreeCodeCapm Team.

Дмитрий Симина

Создайте реальное приложение без сервеса на AWS с Смертная рамка и готовые к использованию функции из StackStorm Exchange Каталог открытых источников.

Эпизод один |. Эпизод два |. Эпизод три |. Эпизод четвертый

Читайте дальше, если вы:

  • Разработчик без сервера использования Смертная рамка Кто хочет проверить готовые к использованию функций из каталога с открытым исходным кодом StackStorm Exchange,
  • А Укладка Пользователь, который живет в AWS и пропускает широту StackStorm Exchange интеграции там.
  • Любой, у кого есть 2 часа, чтобы следовать и изучать безверенно с чем-то более сложной и реальной жизнью, чем Привет-мировой пример Отказ

Если у вас есть только 8 минут, чтобы посмотреть, покинуть текст и примеры, провести дополнительные 30 секунд, просматривая StackStorm Exchange Чтобы увидеть потенциал и залить этот пост, чтобы вернуться к нему, когда вам это нужно.

вступление

Когда я Исследовано безверенно с Python, stackfunctions и веб-интерфейс Одна вещь, которую я пропустил, это каталог многоразовых интеграций. Что-то вроде 200 разъемов для Azure Logic Apps Отказ Или 130 Комплекс интеграции для укладки Отказ

Когда нам нужно проволоку в Slash, Jira, полосой или гнезде, могла ли мы пропустить копание в их API и внутри инстанции и просто захватить готовую функцию?

Теперь мы можем сделать конкретно, что: StackStorm Just Анонсировал плагин для безвесочных рамх Это превращает интеграции от биржи StackStorm в функции AWS Lambda.

В этом уроке я покажу, как использовать интеграции плагина и Exchange, в контексте построения сообщества Servalless On-посадочная приложение с заземления. Давайте сделаем это разговор и весело.

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

Мы будем идти медленно, с мучающими деталями, таким образом, это будет четыре эпизода.

В этом первом эпизоде я все настроил и развернул свою первую биржу штаб-сток.

В следующем эпизоде мы добавим больше действий.

В третьем эпизоде я проводлю их вместе с функцией шага AWS.

В четвертом эпизоде мы добавим интерфейс веб-сайта с отражением и резюме. Каждый эпизод займет около часа.

Готовый? Давай скалы.

Приложение

Мы построим заявление об обществе по борту сообщества. На самом деле, восстановление с нуля тот, который мы бегите в стекстоке. Это как Slackin с многоступенчатым настраиваемым на бортовом рабочем процессе. Приложение представляет регистрационную веб-форму, которая передает новую информацию о пользователе через Gateway API к рабочему процессу StepFunction, который содержит ступени на бонду.

В моем случае этапы 1) приглашают пользователей Slack 2) Создать запись контакта в инструменте CRM ActiveCampaign CRM и 3) Поместите запись пользователя на внутреннюю таблицу DynamOdb. Вот как это выглядит:

Вы можете найти предыдущую реализацию на Github или Используйте его и присоединяйтесь к сообществу StackStorm По провисанию на вопросы об интеграции Gackstorm Exchange.

Готовиться

Во-первых, вам понадобится учетная запись AWS, Nodejs, Docker и Servelless Framework. И слабиться! Поскольку наши первые действия будут приглашать пользователей ослабевать.

  1. Убедитесь, что Node.js установлен, и это версия – это 8.4.0 или выше.
  2. Установить Serverless Framework И настроить учетные данные AWS для этого После этого руководства Отказ
  3. Установить Docker Отказ Плагин использует его для создания среды для создания BAMBDAS BINARY совместимого для среды выполнения AWS, независимо от того, какую ОС вы используете для разработки. Есть способ сделать его работать без докера, но не рискуйте.
  4. Ошибка! Наши действия потребуют доступа администратора и будут использоваться недокументированные SLIC API (DOCS здесь, PAN, предназначенные), чтобы пригласить новых пользователей. Самый простой должен просто идти вперед Создать новую команду Отказ Занимает 4 минуты. Slack не возражает – они покажут рост своим VC.
  5. Как только рабочее пространство создано, время, чтобы получить токен аутентификации. Перейти к api.slack.com/custom-istegrations/legacy-tokens Отказ Страх не «наследие предупреждения»: этот учебник повернет наследие, прежде чем они сделают. Делайте то, что говорят, получите свой токен.

Pro Tip: Использовать Это быстрое взломать Чтобы получить и использовать токен авторизации своего пользователя. Намного быстрее, хорошо для игры и отладки. Но, пожалуйста, никогда, никогда не используйте его для производства!

Создайте проект, добавьте первое действие

Попробуйте SLS --help Чтобы убедиться, что хотя бы что-то работает. SLS это сокращение для Смертный , Serverless Framework CLI. Теперь поставьте свой кофе в сторону, время создать проект. Некоторые люди любят использовать шаблоны, которые поставляются с неверным: SLS Создать --template Отказ Я предпочитаю начать с нуля:

mkdir slack-signup-serverless-stormlesscd slack-signup-serverless-stormless
npm init
# Once you answer questions, the project is set up.

Далее установите Serverless-Plugin-StackStorm тот, который подключается к StackStorm Exchange Действия.

npm install --save-dev serverless-plugin-stackstorm

… и создать минимальный Serverless.mymy файл, так что SLS Команда заберет плагин:

Теперь Создайте первое действие Отказ Я буду использовать битран Slack Pack от Beachstorm Exchange Отказ Какое действие вы говорите? ОК, Exchange StackStorm не достаточно умна, чтобы показать список действий пакета, но SLS Stackstorm спас нас.

SLS StackStorm Info info

О, мой! Там так много! кто они такие? Я думаю, мне нужен PR, чтобы распечатать описание действия. Тем временем, |. Греп админ Получим нам тот, который нам нужен: Slack.Users.admin.invite Отказ Давайте запросим действие для его параметров:

$ sls stackstorm info --action slack.users.admin.inviteslack.users.admin.invite ...... Send an invitation to join a Slack OrgParameters  attempts [integer]  ......... description is missing  channels [string]  .......... Channels to auto join.  email [string] (required) ... Email address to send invitation to.  first_name [string]  ........ Users first name  set_active [boolean]  ....... Should the user be active.  token [string]  ............. Slack API token.Config  action_token [string]  ...... Slack Action token.  admin [object]  ............. Admin-action specific settings.  post_message_action [object]   Post message action specific settings.  sensor [object]  ............ Sensor specific settings.

Потрясающие! Мы видим, что есть только один необходимый параметр, Email , но я добавлю first_name оставаться разговором. Токен может быть передан в виде параметров или в качестве конфигурации. И если я решил использовать конфигурацию, мои предыдущие пленки знания намекает на то, что admin [Объект] требует только admin_token Отказ Тот, который я попросил вас вспомнить, когда вы устанавливаете Slack Workspace.

Pro Tip: Хотя мы все еще полируем плагин, чтобы открыть все детали конфигурации, вы можете обнаружить его, исследуя схему конфигурации Pack Exchange Pack Exchange StackStorm в config.schema.yaml файл. Например, вот config.example.yaml для нашей слабой упаковки.

Теперь у нас есть все, что нам нужно создать сердце любого неверного проекта: Serverless.yml Отказ Вот это приходит:

Это хорошее время, чтобы узнать немного без сервера. Возьми быстрый перерыв, чтобы скрутить Основные понятия и закладки Ссылка Serverless.yml Отказ

Я бросил в События Раздел в строках 9:12, чтобы мы могли вызвать функцию с помощью REST Call через конечную точку шлюза AWS API. Serverless Framework будет делать всю волшебство шлюза.

Обратите внимание, что эта конфигурация по умолчанию указывает на Gateway API, чтобы пройти позвонить по поводу остальных вызов с помощью почтового тела под Тело Ключ ( Детали здесь . Когда мы будем публиковать {"first_name": «Санта», «Электронная почта»: «Santa@mad.russian.xmas.com»} , событие, переданное лямбду:

..."body": {    "first_name": "Santa",     "email": "santa@mad.russian.xmas.com"}

Знание структуры входных данных важно отображать ее в входные параметры действия. Это интуитивно понятно: вход представляет событие Параметр AWS Lambda Model Model (Кстати, мы должны называть это событие ? Голосовать с PR!).

Jinja используется для отображения входов; Наши друзья JavaScript, которые менее знакомы с этим общим инструментом Python, достаточно интуитивно понятны в простых случаях; и переполнение стека полна волшебных хитростей Jinja.

В строках 16:17 из Serverless.yml Я сопоставляю два параметра от входного тела до желаемых параметров ввода действий. Необязательно, вы также можете сформировать вывод функции из результатов действия. Я буду держать это просто сейчас (Line 20:22) и сэкономить больше хитростей на потом.

Чтобы сохранить конфигурацию отдельно, я создал файл env.yml Это и поставить свои параметры конфигурации в нем:

# ./env.yml# WARNING: Don't commit to Github :)slack:  admin_token: "xoxs-111111111111-..."  organization: "my-team"

Тогда я использовал это в Serverless.yml Как это: admin: $ {file (env.yml): slack} Отказ Обратите внимание, как этот синтаксис помещает объект из ключа в файл к ключу в Serverless.yml Отказ

Хорошо, вот и все! Функция готова летать на AWS с SLS развертывает Отказ Но я беру это Слоууу Отказ Шаг за шагом. Во-первых, я упакую это локально.

sls package

Сам первый раз занимает много времени, так как это время, когда плагин устанавливает свои зависимости выполнения. Он вытягивает образы докера из концентратора. Он устанавливает Packstorm Runners – код, который знает, как управлять пакетами Exchange Packstorm. Это тянет слабый пачка от обмена. Это устанавливает слабый Пакет Python зависимостей. Это делает много работы для нас, и это требует времени. Хорошие новости: это только первый раз.

О, я упомянул, что вы должны быть связаны? Или мы принимаем интернет-соединение базовым товаром, таким как дыхание воздуха и электроэнергии? По крайней мере, до того, как FCC отменяет сетевой нейтралитет? Таким образом, да, вам нужно подключение к Интернету, чтобы жить в мире без сердца.

Теперь давайте запустим это локально.

sls stackstorm docker run --function InviteSlack --verbose \--data \'{"body": {"first_name": "Santa", "email": "santa@mad.russian.xmas.com"}}'

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

Когда я отладку вводных и выходных преобразований параметров, я не хочу вызывать фактическую функцию, как в случае предельной скорости API. Использовать --passthrough Параметр, который сообщает плагину сделать сухой пробег и пропустить вызов действия.

Теперь мы действительно готовы. Давайте разверним функцию AWS и запустите ее «Serverless».

sls deploy

Это займет некоторое время – теперь это безвесочный (и честно, наш пакет немного раздутый, терпение! Разработчики плагинов в настоящее время заняты решение других проблем, мы будем оптимизировать его, как только мы сможем)

Pro Tip: Если что-то пойдет не так, на данный момент, скорее всего, что-то не имеет права с настройкой AWS. Вернитесь к «готово, шаг 2». Читать Установка без пробелов док Google, Stack-Overflow, Serverless Детсерский канал или Форум Отказ

Возможно, вам может быть любопытно посмотреть, как он выглядит в консоли AWS. Если Pro в тебе говорится: «Нет, вы должны оставаться круто и использовать CLI», не слушайте. Иди побаловать себя, откройте браузер и посмотрите на свою лямбду. Пока там вы также можете осмотреть конечную точку шлюза API, что SLS создан для вас.

Но чтобы проверить это, мы вернемся к терминалу. Вот как запускать лямбда с SLS :

sls invoke --function InviteSlack --log --data '{"body": {"first_name": "Santa", "email": "santa@mad.russian.xmas.com"}}'

Наконец, давайте отправимся на конечную точку API. Конечная точка была напечатана в конце SLS развертывает И вы должны были уведомить, но все в порядке, если вы не сделали: вы всегда можете получить его, набрав SLS Info Отказ

Вы Curl Любители идут вперед, используйте его до публикации; Обязательно установите Content-Type = Приложение/JSON заголовок Я – я покажу с httpie , ака скручивается для людей:

# DON'T copy-paste! Use YOUR endpoint!
http --json POST  https://YOUR-ENDPOINT.amazonaws.com/dev/invite \email=test@example.com first_name=Dmitri

Как прошло? Все работало, по крайней мере, для меня. Давайте покажем еще один наиболее полезный SLS Команда для проверки журналов CloudWatch:

sls logs --function InviteSlack

Успех! И конец первого эпизода. Достаточно сейчас: Рождество здесь, возьмите его медленно, наслаждайтесь!

Пример кода до сих пор на Github в 1-Add-First-Action Отказ

Эпизод 2 : Добавление большего количества действий

Надеюсь, это помогло вам узнать что-то новое, найти что-то интересное или спровоцировало несколько хороших мыслей. Пожалуйста, поделитесь своими мыслями в комментариях здесь или Tweet Me @dzimine Отказ