Автор оригинала: 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. И слабиться! Поскольку наши первые действия будут приглашать пользователей ослабевать.
- Убедитесь, что Node.js установлен, и это версия – это
8.4.0
или выше. - Установить Serverless Framework И настроить учетные данные AWS для этого После этого руководства Отказ
- Установить Docker Отказ Плагин использует его для создания среды для создания BAMBDAS BINARY совместимого для среды выполнения AWS, независимо от того, какую ОС вы используете для разработки. Есть способ сделать его работать без докера, но не рискуйте.
- Ошибка! Наши действия потребуют доступа администратора и будут использоваться недокументированные SLIC API (DOCS здесь, PAN, предназначенные), чтобы пригласить новых пользователей. Самый простой должен просто идти вперед Создать новую команду Отказ Занимает 4 минуты. Slack не возражает – они покажут рост своим VC.
- Как только рабочее пространство создано, время, чтобы получить токен аутентификации. Перейти к 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 Отказ