УДК 004.42
ББК 32.972
С81
С81 Слободан Стоянович, Александар Симович
Бессерверные приложения на JavaScript / пер. с англ. А. Н. Киселева. – М.:
ДМК Пресс, 2020. – 394 с.: ил.
ISBN 978-5-97060-782-4
Преимущества облачных бессерверных веб-приложений бесспорны:
меньшая сложность, быстрое продвижение на рынок и автоматическая
масштабируемость выгодно отличают их от традиционных серверных
проек тов. Данная книга научит вас проектировать и создавать бессерверные
веб-приложения на AWS с использованием JavaScript, Node и Claudia.js.
Новичков издание знакомит не только с AWS Lambda, но и с целым рядом
связанных служб, таких как DynamoDB, Cognito, API Gateway. Даже решив
позднее взять на вооружение другие инструменты, вы сможете сохранить
весь код и просто развернуть его немного иначе. Подробно описывается несколько
вариантов практического использования бессерверных платформ,
в том числе веб-API, чат-боты, обработка платежей и управление заказами.
Издание предназначено веб-разработчикам, знакомым с JavaScript и
Node.js.
УДК 004.42
ББК 32.972
Original English language edition published by Manning Publications. Copyright © 2019
Все права защищены. Любая часть этой книги не может быть воспроизведена
by Manning Publications. Russian language edition copyright © 2019 by DMK Press. All
rights reserved.
в какой бы то ни было форме и какими бы то ни было средствами без письменного
разрешения владельцев авторских прав.
Материа,л, изложенный в данной книге, многократно проверен. Но, поскольку
вероятность технических ошибок все равно существует, издательство не может гарантировать
абсолютную точность и правильность приводимых сведений. В связи
с этим издательство не несет ответственности за возможные ошибки, связанные с
использованием книги.
ISBN 978-1-61729-472-3 (англ.)
ISBN 978-5-97060-782-4 (рус.)
Copyright © 2019 by Manning Publications Co.
© Оформление, перевод на русский язык,
издание, ДМК Пресс, 2020
Стр.5
Оглавление
Предисловие от издательства .......................................................................12
Предисловие .....................................................................................................13
Вступление ........................................................................................................15
Благодарности ..................................................................................................16
Об этой книге ....................................................................................................17
Кому адресована книга ................................................................................... 17
Краткое содержание ....................................................................................... 17
Об исходном коде ........................................................................................... 19
Автор в сети..................................................................................................... 20
Другие онлайн-ресурсы ................................................................................. 20
Об авторах ........................................................................................................21
Об иллюстрации на обложке .........................................................................22
ЧАСТЬ I. Бессерверная пиццерия ................................................................23
Глава 1. Введение в бессерверные вычисления с Claudia ........................24
1.1. Серверы и стиральные машины.............................................................. 25
1.2. Основные понятия ................................................................................... 26
1.3. Как работают бессерверные вычисления? ............................................. 28
1.4. Бессерверные вычисления на практике ................................................. 28
1.4.1. Бессерверная пиццерия тетушки Марии .................................................. 29
1.4.2. Распространенный подход ........................................................................ 29
1.4.3. Бессерверное решение ............................................................................... 31
1.5. Бессерверная инфраструктура – AWS ..................................................... 32
1.6. Что такое и для чего используется Claudia? ........................................... 38
1.7. Когда и где использовать бессерверные вычисления ............................ 41
В заключение .................................................................................................. 42
Глава 2. Создание первого бессерверного API ............................................43
2.1. Приготовление пиццы из ингредиентов: сборка API ............................ 43
2.1.1. Какие пиццы можно заказать? .................................................................. 46
Стр.6
6 Оглавление
2.1.2. Структурирование API ............................................................................... 49
2.1.3. Отправка заказа .......................................................................................... 55
2.2. Как Claudia развертывает API .................................................................. 59
2.3. Управление трафиком: как работает API Gateway ................................. 61
2.4. Когда бессерверный API не является решением .................................... 62
2.5. Опробование! ........................................................................................... 63
2.5.1. Упражнение ................................................................................................ 63
2.5.2. Решение....................................................................................................... 64
В заключение .................................................................................................. 68
Глава 3. Простота асинхронных операций с Promise() ..............................69
3.1. Хранение заказов ..................................................................................... 69
3.2. Обещание доставить меньше чем за 30 минут! ..................................... 75
3.3. Опробование API ...................................................................................... 79
3.4. Извлечение заказов из базы данных ...................................................... 83
3.5. Опробование! ........................................................................................... 85
3.5.1. Упражнение ................................................................................................ 86
3.5.2. Решение....................................................................................................... 87
В заключение .................................................................................................. 90
Глава 4. Доставка пиццы: подключение к внешней службе ....................91
4.1. Подключение к внешней службе ............................................................. 91
4.2. Подключение к API компании доставки ................................................ 93
4.2.1. API компании доставки Some Like It Hot .................................................. 93
4.2.2. Создание первой заявки на доставку........................................................ 94
4.3. Типичные проблемы асинхронных взаимодействий.......................... 101
4.3.1. Забыли вернуть Promise ........................................................................... 102
4.3.2. Отсутствие значения, возвращаемого из Promise ................................. 102
4.3.3. Вызов внешней службы не завернут в Promise ...................................... 104
4.3.4. Превышение времени ожидания длительной асинхронной
операцией .................................................................................................. 105
4.4. Опробование! ......................................................................................... 107
4.4.1. Упражнение .............................................................................................. 107
4.4.2. Решение..................................................................................................... 108
В заключение ................................................................................................ 110
Глава 5. Хьюстон, у нас проблема! ..............................................................111
5.1. Отладка бессерверного приложения .................................................... 111
5.2. Отладка функции Lambda ...................................................................... 113
5.3. Рентген для приложения ....................................................................... 116
5.4. Опробование! ......................................................................................... 120
Стр.7
Оглавление 7
5.4.1. Упражнение .............................................................................................. 120
5.4.2. Решение..................................................................................................... 120
В заключение ................................................................................................ 121
Глава 6. Совершенствование API .................................................................122
6.1. Бессерверная аутентификация и авторизация .................................... 122
6.2. Создание пулов пользователей и идентификации .............................. 126
6.2.1. Управление доступом к API с помощью Cognito .................................... 130
6.3. Опробование! ......................................................................................... 134
6.3.1. Упражнение .............................................................................................. 135
6.3.2. Решение..................................................................................................... 136
В заключение ................................................................................................ 137
Глава 7. Работа с файлами ............................................................................138
7.1. Хранение статических файлов в бессерверных приложениях ............ 138
7.2. Создание миниатюр ............................................................................... 143
7.2.1. Развертывание функции обработки файлов в S3 ................................... 150
7.3. Опробование! .......................................................................................... 151
7.3.1. Упражнение ............................................................................................... 152
7.3.2. Решение ..................................................................................................... 152
7.4. Конец первой части: специальное упражнение ................................... 155
7.4.1. Усложненное задание ............................................................................... 155
В заключение ................................................................................................ 155
ЧАСТЬ II. Поболтаем .....................................................................................157
Глава 8. Заказ пиццы одним сообщением: чат-боты ...............................158
8.1. Заказ пиццы без браузера ..................................................................... 158
8.2. Привет из Facebook Messenger .............................................................. 160
8.3. Какие виды пиццы у нас имеются?....................................................... 162
8.4. Ускорение развертывания ..................................................................... 164
8.5. Шаблоны для взаимодействий .............................................................. 167
8.6. Как работает Claudia Bot Builder? .......................................................... 170
8.7. Опробование! .......................................................................................... 172
8.7.1. Упражнение ............................................................................................... 172
8.7.2. Решение ..................................................................................................... 172
В заключение ................................................................................................ 173
Глава 9. Ввод... асинхронные и отложенные ответы ...............................174
9.1. Добавление интерактивности в чат-бот ............................................... 174
9.1.1. Выбор заказа: получение ответа от пользователя ................................. 175
Стр.8
8 Оглавление
9.2. Улучшение масштабируемости чат-бота .............................................. 182
9.3. Подключение чат-бота к базе данных DynamoDB ............................... 186
9.4. Получение адреса доставки
заказа в чат-боте ..................................................................................... 191
9.5. Планирование доставки ........................................................................ 194
9.6. Добавление простой обработки естественного языка ........................ 200
9.7. Опробование! .......................................................................................... 202
9.7.1. Упражнение ............................................................................................... 202
9.7.2. Решение ..................................................................................................... 203
9.7.3. Усложненное задание ............................................................................... 205
В заключение ................................................................................................ 205
Глава 10. Джарвис, то есть Алекса, закажи мне пиццу ............................206
10.1. Не могу сейчас говорить: отправка SMS с помощью службы
Twilio ........................................................................................................ 207
10.1.1. Список пицц в SMS ................................................................................. 209
10.1.2. Оформление заказа ................................................................................ 211
10.2. Эй, Алекса! ............................................................................................ 217
10.2.1. Подготовка сценария ............................................................................. 221
10.2.2. Оформление заказа с помощью Алексы ............................................... 226
10.3. Опробование! ....................................................................................... 230
10.3.1. Упражнение ............................................................................................. 230
10.3.2. Решение ................................................................................................... 231
10.4. Конец второй части: специальное упражнение ................................. 232
В заключение ................................................................................................ 232
ЧАСТЬ III. Дальнейшие шаги .......................................................................233
Глава 11. Тестирование, тестирование и еще раз тестирование............234
11.1. Тестирование обычных и бессерверных приложений ...................... 234
11.2. Подходы к тестированию бессерверных приложений ...................... 236
11.3. Подготовка ............................................................................................ 238
11.4. Модульные тесты .................................................................................. 241
11.5. Использование имитаций для тестирования бессерверных
функций ................................................................................................... 246
11.6. Интеграционные тесты ........................................................................ 253
11.7. Другие типы автоматизированных тестов ......................................... 258
11.8. В дополнение к тестам: приемы разработки бессерверных
функций для упрощения их тестирования ........................................... 259
11.9. Опробование! ....................................................................................... 264
Стр.9
Оглавление 9
11.9.1. Упражнение ............................................................................................. 264
11.9.2. Решение ................................................................................................... 265
В заключение ................................................................................................ 266
Глава 12. Получение платы за пиццу ..........................................................268
12.1. Платежные транзакции ....................................................................... 268
12.1.1. Реализация онлайн-платежей ............................................................... 270
12.2. Реализация платежной службы ........................................................... 274
12.3. Можно ли взломать нашу платежную службу? .................................. 281
12.3.1. Стандарты ............................................................................................... 281
12.3.2. Компетентность ...................................................................................... 282
12.4. Опробование! ....................................................................................... 283
12.4.1. Упражнение ............................................................................................. 283
12.4.2. Решение ................................................................................................... 283
В заключение ................................................................................................ 285
Глава 13. Миграция существующих приложений Express.js
в окружение AWS Lambda ............................................................................286
13.1. Приложение для таксомоторной компании дядюшки Роберто ........ 287
13.2. Запуск приложения Express.js в AWS Lambda ..................................... 287
13.2.1. Интеграция с оберткой .......................................................................... 291
13.2.2. Как работает serverless-express .............................................................. 291
13.3. Обслуживание статического контента ............................................... 292
13.4. Подключение к MongoDB ..................................................................... 295
13.4.1. Использование управляемой базы данных MongoDB
с бессерверным приложением Express.js ................................................. 295
13.5. Ограничения бессерверных приложений Express.js .......................... 300
13.6. Опробование! ....................................................................................... 301
13.6.1 Exercise ..................................................................................................... 301
13.6.2. Решение ................................................................................................... 302
В заключение ................................................................................................ 303
Глава 14. Миграция в бессерверное окружение.......................................304
14.1. Анализ текущего бессерверного приложения .................................... 304
14.2. Миграция существующего приложения в бессерверное окружение .....305
14.3. Общий взгляд на платформу ............................................................... 309
14.3.1. Обслуживание статических файлов ...................................................... 310
14.3.2. Сохранение состояния ........................................................................... 310
14.3.3. Журналы .................................................................................................. 311
14.3.4. Непрерывная интеграция ...................................................................... 313
14.3.5. Управление окружениями: промышленное окружение
и окружение для разработки .................................................................... 314
Стр.10
10 Оглавление
14.3.6. Совместное использование конфиденциальных данных ................... 315
14.3.7. Виртуальное частное облако .................................................................. 318
14.4. Оптимизация приложения .................................................................. 318
14.4.1. Связанные и узкоспециализированные функции ............................... 319
14.4.2. Выбор правильного объема памяти для функции Lambda .................. 319
14.5. Преодоление проблем .......................................................................... 320
14.5.1. Тайм-ауты ............................................................................................... 320
14.5.2. Холодный запуск .................................................................................... 321
14.5.3. Атаки DDoS .............................................................................................. 323
14.5.4. Привязка к производителю ................................................................... 323
14.6. Опробование! ....................................................................................... 325
В заключение ................................................................................................ 325
Глава 15. Примеры из практики ..................................................................327
15.1. CodePen ................................................................................................. 328
15.1.1. До перехода на бессерверные вычисления ........................................... 328
15.1.2. Миграция на бессерверные вычисления .............................................. 329
15.1.3. Затраты на инфраструктуру................................................................... 332
15.1.4. Тестирование и проблемы ..................................................................... 333
15.2. MindMup ................................................................................................ 333
15.2.1. До перехода на бессерверные вычисления ........................................... 334
15.2.2. Миграция на бессерверные вычисления .............................................. 337
15.2.3. Затраты на инфраструктуру................................................................... 338
15.2.4. Тестирование, журналирование и проблемы ....................................... 340
В заключение ................................................................................................ 341
Приложение A. Установка и настройка .......................................................343
A.1. Установка Claudia ................................................................................... 343
A.1.1. Настройка зависимостей Claudia ............................................................ 344
A.1.2. Создание профиля AWS и получение ключей ........................................ 345
A.1.3. Установка Claudia API Builder .................................................................. 348
A.1.4. Установка Claudia Bot Builder .................................................................. 348
A.2. Установка AWS CLI ................................................................................. 348
Приложение B. Настройка Facebook Messenger, Twilio и Alexa..............350
B.1. Настройка Facebook Messenger ............................................................. 350
B.1.1. Создание страницы Facebook .................................................................. 350
B.1.2. Создание приложения Facebook ............................................................. 352
B.1.3. Создание чат-бота Facebook Messenger с использованием
Claudia Bot Builder ..................................................................................... 354
B.1.4. Подключение встроенного механизма NLP ........................................... 361
B.2. Настройка Twilio .................................................................................... 361
B.2.1. Создание учетной записи Twilio ............................................................. 362
Стр.11
Оглавление 11
B.2.2. Получение номера Twilio ......................................................................... 363
B.2.3. Настройка службы Twilio Programmable SMS ......................................... 364
B.3. Настройка Alexa ..................................................................................... 366
Приложение C. Настройка Stripe и MongoDB ............................................373
C.1. Настройка учетной записи Stripe и получение ключей Stripe API ..... 373
C.1.1. Создание учетной записи Stripe ............................................................. 373
C.1.2. Получение ключей Stripe API .................................................................. 373
C.2. Установка и настройка MongoDB .......................................................... 375
C.2.1. Создание учетной записи ........................................................................ 375
C.2.2. Настройка кластера .................................................................................. 377
Приложение D. Рецепт пиццы ......................................................................383
Предметный указатель .................................................................................385
Стр.12