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

Строительное приложение для регистрации сообщества с серверусными, схемами и биржевым стеклами – Episode 2

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

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

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

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

В этом втором эпизоде я добавлю еще два действия: создайте контакт в ActiveCampaign, и запишите пользователя в Dynamo DB. Полный код для этого эпизода находится на GitHub в 2-Add-More-Action Friendy Отказ

Добавить больше действий

Чтобы продолжить на следующий шаг, вам понадобится ActiveCampaigt учетная запись. Не бойся: это занимает 2 минуты – я просто попробовал – они не просили меня за кредитную карту или что-то глупое. Просто электронная почта. Оценка, перейдите в «Мои настройки» и выберите «Разработчик».

Обратите внимание на URL и Ключ Поля в разделе «API Access». Добавь их в env.yml как это:

# Copy to env.yml and replace with your values.# Don't commit to Github :)slack:  admin_token: "xoxs-111111111111-111111111111-..."  organization: "your-team"active_campaign:  url: "https://YOUR-COMPANY.api-us1.com"  api_key: "1234567a9012a12345z12aa2..."

Pro Tip: Если вы не в настроении для активной кампании, или любые подписи, просто коснитесь конечной точки API с чем-то вроде Макиясь или mockable.io и отрегулируйте примеры соответственно. Для бонусных баллов создайте еще одну функцию без сервеса с конечной точкой Gateway API в вашем Serverless.yml И используйте его, чтобы издеваться на вызов API ActiveCampaigt.

Теперь я готов добавить Активная кампания Функция лямбда. Та же обычная как в Эпизод один : Начните с поиска нового действия в упаковке с SLS StackStorm Info - ActiveCampagt activeCampaign (Подсказка: действие, которое вы выглядите Contact_Sync Добавляет и обновляет контакт). Осмотрите действие с SLS Stackstorm Info active Eccampaign.contact_sync :

Куча параметров, но кроме конфигурации только Email требуется. Я также хочу использовать first_name и last_name Отказ Определение функции в Serverless.yml будет выглядеть так:

RecordAC:    timeout: 10    memorySize: 128    stackstorm:      action: activecampaign.contact_add      input:        email: "{{ input.body.email }}"        first_name: "{{ input.body.first_name }}"        last_name: "{{ input.body.last_name }}"      config: ${file(env.yml):activecampaign}

Я должен был поднять время ожидания, так как API ActiveCampaign занимает дольше, чем у лямбда по умолчанию 6 секунд в течение рождества. Но я могу вернуть стоимость вызова путем снижения использования памяти по умолчанию 512 МБ. На этот раз я не удосужился разоблачить его в Gateway AWS API – мы можем удобно тестировать его с SLS Отказ

Функция готова летать в AWS. Мы могли бы сделать это сразу с SLS развертывает Но давайте сделаем это медленно снова и повторите шаги развертывания, как в Эпизод 1 Из этого руководства выгравируйте рабочий процесс в вашем уме:

  1. Построить и упаковать расслоение:
sls package

2. Проверьте локально (обратите внимание, что я использую --passthrough только тестовые преобразования, удалите его, чтобы сделать фактический вызов):

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

3. Развертывание AWS:

sls deploy

4. Тест на AWS с SLS вызывает :

sls invoke --function RecordAC --logs \ --data '{"body":{"email":"santa@mad.russian.xmas.com", "first_name":"Santa", "last_name": "Claus"}}'

5. Проверьте журналы:

sls logs --function  RecordAC

И я проверил, это работает: Санта-Клаус появился в списке контактов ActiveCampaigt. Откуда я знаю, что это наша лямбда? Потому что я больше не верю, что Санта достаточно реально, чтобы подписаться на сообщество без нашей маленькой ламбда.

Pro Tip: Если вы попали в ошибку или хотите, чтобы функция в упаковке, которую вы используете из StackStorm Exchange , вы можете исправить это на месте. Пакеты клонированы под ./~st2/packs Отказ Найдите там свои действия, измените код и используйте локальный запуск для отладки и проверки. Большой бонус для толкания исправлений Вернуться к обмену: каждая пачка уже является клоном Git, который делает его естественным образом легко внести вклад в сообщество.

Добавим окончательное действие, RecordDB, которое записывает контактную информацию в таблицу Dynamodb. Я мог бы использовать aws.dynamodb_put_item Действие от AWS Pack на Backstorm Exchange – Упаковка сильно используется и ухожена. Но я решил сделать это родным лямбдой: это всего лишь 30 строк кода, без дополнительных зависимостей Python, поскольку библиотека Boto уже находится в среде AWS Lambda.

Код функции входит в ./record_db/handler.py :

Финал Serverless.yml Со всеми тремя действиями теперь выглядит так:

Ух ты! Файл удвоился. Сама функция составляет всего 2 строки (35:36), но проходила довольно много интересных дополнений. Давайте рассмотрим их:

  1. Линия 9 – имя таблицы, создаваемое, чтобы избежать столкновений между регионами и средами.
  2. Линии 10:13 – IAM Роль создана, чтобы дать функцию доступа к таблице Dynamodb.
  3. Строка 39:56 – шаблон облачноформации AWS, определяющий таблицу.

Последняя точка поднимает важное замечание: Serverless Framework упрощает главным образом часть FAAS Serverless. Но потому что WENERLELES – это больше, чем FAAS, вы найдете себя довольно много облачности для предоставления других услуг. Serverless Framework оставляет места для конкретных ресурсов провайдера. Быть серьезным безрусельным на AWS, главная облачность. Ищу «Provider-agnostic Serverless»? Дважды проверьте свои предположения.

Кроме того, я переехал Memorentsize и Тайм-аут Чтобы подать заявку на все функции (линии 6: 7). И конечная точка шлюза API ушла от функции invitesLack: он служил демонстрационной роли в первом эпизоде, но теперь мы научились напрямую проверять функции лямбда. Позже мы вернемся к Gateway API, чтобы вызвать окончательную степень с конца до конца рабочего процесса.

Давайте допустим функцию RecordDB до неба и бежать. Развертывание, вызвано, журналы. Промыть повторять.

# Deploysls deploy ...
# Invokesls invoke --function RecordDB --logs --data '{"body":{"email":"santa@mad.russian.xmas.com", "first_name":"Santa", "last_name": "Claus"}}'...
# Check logs.sls logs --function RecordDB.

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

Полный код примера для этого эпизода находится на GitHub в 2-Add-more-Actions ветка.

Эпизод 3 : Проводка действий с помощью stepfunction

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