Автор оригинала: Ryan J. Peterson.
Обо мне
Я создавал веб-приложения более чем на 15 лет во многих различных отраслях промышленности. От стартапов в финансовых и лотерейных помещениях в Fortune 500 компаний в машинном обучении и полях AI. Я запустил многочисленные компании как основатель, CTO, так и соучредителем и управлял команды более 20 инженеров напрямую. Я SR. Software Engineer, CTO и опытный предприниматель. Знакомство с оперативным, юридическим, бухгалтерским и лидерственным аспектами начала, строительства и проведения успешного бизнеса.
Стабильность, безопасность и масштаб – сейчас.
Мне нужно было построить изолированную систему песочницы для предоставления компании для компании Partner API для партнеров, которые нужно было интегрировать в компанию существующую платформу. Эта платформа является сложной, с 20+ услугами и более значительным количеством вспомогательных систем и инфраструктуры. Некоторые из домен включали использование архитектур, ориентированных на события, а также соскоб и несколько сложных требований.
Задача заключается в том, что расширение внутренней системы необходимо было выполнить в течение очень короткого периода времени, около 1-2 недель от начала до конца. С сложностью нынешней инфраструктуры мне пришлось найти способ построить экосистему, не заблокировавшись ограничениями, которые уже существовали.
Для того, чтобы как быстро двигаться, так и допустить широкую масштабируемую и устойчивую платформу для партнеров, чтобы использовать (в ряде стран мира, где подключение может быть фактором), мне нужно было просто иметь возможность сосредоточиться на создании API на основе GraphQL, который может быть Быстро обновляется и развернута внутри всемирно доступных поставщика IAAS – AWS.
Почему Severless и GraphQl на AWS?
Уже ознакомились с GraphQL и различными лидерами отрасли в этом пространстве, я решил использовать реализацию лямбда Йоги Graphql для быстрого развертывания сервисов без сервеса с конечными точками GraphQL, которые могут быть сшиты вместе в одной конечной точке доступа. Кроме того, учетные данные пользователя и API, которые мы основаны на Gateway AWS API и Cognito, чтобы быстро создавать и управлять пользователями и ключами API, которые могут быть масштабированы глобально и быстро управлять или отключены в случае плохих актеров в пределах экосистемы партнера. На основании всего этого в TypeyctScript допускается для безопасности типа безопасности, чтобы присутствовать на базе данных Backeng в UI.
Процесс построения API Serverless GraphQL API на AWS Первый шаг в процессе состоял в том, чтобы создать монофон, который собирался содержать различные службы без сервеса, а также многие другие пакеты, в том числе реагированные нативное приложение для использования на устройствах, где мы были Требуется предоставление партнеров с концевым инструментами.
Первым шагом было создание грубой модели домена и ожидаемых элементов GraphQL в каждом из услуг. Я использовал этот домен для создания типов и схем, необходимых для обеспечения безопасности типа безопасности из базы данных на UI. Мы применили это через несколько услуг, а затем схема сшиты в одну конечную точку API.
Второй этап настройки APICL GraphQL был затем определяет как резольвенты для запроса, так и для мутации в GraphQL, а также их связанные с использованием реагирования. Каждый из услуг обрабатывается, выполняющий серверный рендеринг SERVER (SSR), который также был прошин в различные внешние контексты с использованием проекта HauloRJS, открытый Zalando. Использование этого подхода позволила каждому элементу и услуги пользовательского интерфейса содержать их соответствующие функциональные возможности без создания грязного перекрытия на стороне UI.
Заключительная часть процесса состояла в том, чтобы создать систему CI/CD, которая могла бы оба запускать тестирование, и развернуть различные сервисы для нескольких пользовательских распределений домена облака на пользовательских доменах в рамках нескольких зон доступности в AWS для Global, низкозащищенной API, предоставляемой Tranke53. Латентно-базовые DNS-правила и шлюзы API пользовательские домены.
Вызовы
Некоторые из проблем с таким подходом способны эффективно поддерживать концепцию пользователя во всех услугах. Использование токенов API и JWT Tookens в сочетании с Cognito, мы могли бы оба разрешить разрешения API против партнера (через ключ API) и пользователь на основе токенов Cognito JWT.
Настройка правильной конфигурации без сервеса было не усердно, но придумала некоторую мысль, чтобы облегчить добавить, обновлять и развертывать изменения и новые слои в систему, не влияя на доступность, как только партнеры начали интеграции.
Вынос
При построении системы безвесочная, которая имеет несколько слоев авторизации, важно получить вашу модель пользователя прямо в начале. При создании пул пользователей в AWS Cognito – вы можете ограничить доступ к чтению/записи к различным свойствам для пользователя только при времени создания этого пользователя, который не может быть обновлен. Мы использовали это, чтобы обеспечить оба зашифрованных элементов API-ключевых элементов, так и некоторые другие данные, которые гарантировали, что пользователи никогда не смогут обходить их среды для песочницы без необходимости создавать новый пользователь.
Кроме того, иметь адаптивный API, вам нужен минимум двух или более зон доступности для AWS развертывания (мы начали с US-East-1 и Eu-Central-1), чтобы гарантировать, что задержка API не влияет на ограничения региональных ограничений. Отказ Использование VPN прокси может значительно улучшить доверие при тестировании глобальной доступности и производительности API. Мы нашли, что это помогло нам много при попытке диагностировать конкретные проблемы реализации с партнерами.
Одна вещь, которую мы были удивлены в развитии, была реализация, которую сухие и серверы не всегда хорошо смешиваются. Мы начали с намерениями поделиться кодом в различных службах, где это необходимо, и могло бы сделать это, используя пакеты NPM, но в конечном итоге решили использовать конвейер Ci/C CD для синхронизации «источника истины» по всему сервисам, копируя файлы в виде сборки. Наш подход разработал в нашу пользу, когда мы поняли, что у нас были различные исключения для правила вокруг нескольких компонентов, которые имели «почти» общую деловую логику.
Некоторые советы
При консультировании любого, кто смотрит в этот стек – один из ключевых преимуществ – это способность быстро двигаться – очень быстро. Не беспокойтесь о том, чтобы получить все в порядке в начале B/C, вы можете в конечном итоге разрыть и повторно построить все с нуля вокруг AWS и Serverless Stacks. До тех пор, пока вы не сделаете свой первый выпуск (а затем даже после без особых усилий), вы можете настроить и полностью повторно развернуть изменения без минут. Получив пару вещей неправильно на наших первоначальных конфигурациях по упулам пользователей Cognito, эта способность позволила нам быстро исправить их, не затрагивая усилия партнеров во время интеграции и сэкономили нас от необходимости делать сложные миграции позже по дороге.
Заключение
В результате мое мнение состоит в том, что этот тип стека и развертывания может быть будущее веб-разработки. Возможность удаления барьеров на обоих dev-ops, так и на фронтах разработчика позволяет легко создавать и отправлять уверенность в доверительности, не теряя способность использовать большое количество услуг, которые вы можете найти в общественных облаках, которые в настоящее время существуют. Кроме того, стоимость эксплуатации этих систем при привязке к выручкованию транзакций, позволяющих затраты на операции никогда не становятся проблемой до вашей оптимизации для получения прибыли в далеком будущем.