Примечание 1. Вот размещенная интерактивная демонстрация: demo.saasconstruct.com
Примечание 2. Мой ежемесячный счет за каждую установку SaaS составляет 3–5 долларов США в месяц, и в основном это затраты на CI/CD.
Примечание 3. Шаблон находится здесь: saasconstruct.com.
Я сделал несколько PoC и MVP для ИИ на AWS, и это всегда одно и то же:
Итак, я подумал, что смогу создать простое решение для загрузки таких вещей на AWS. И напишите об этом сообщение в блоге.
Я решил добавить некоторые функции, такие как платежи Stripe (и платежи LemonSqueezy, если вы не хотите беспокоиться о налоге с продаж / НДС), а также управление платежами, аутентификацию, дорожную сигнализацию и другие. Я также считал, что его необходимо настраивать, например, заменять API Gateway и AWS Lambda на ELB и ECS для более длительных задач.
Для начала я выбрал общепризнанную самую простую структуру. Это Vue и, насколько я понял, второй по популярности фреймворк. Я выбрал его, потому что он не только самый простой, но и у меня был некоторый опыт работы с ним.
Веб-сайт представляет собой стандартное SPA-приложение с Vite в качестве инструмента сборки. Для стилизации я использую Bootstrap, потому что с ним очень легко работать, а также потому, что он не вызывает особых хлопот при переходе с одной версии frontend framework на другую.
Есть два варианта:
Я выбрал Amplify Hosting в качестве основного направления AWS в области решений внешнего хостинга, а также потому, что его легко настроить, прикрепить домен и т. д.
Поскольку это оплата по факту использования, я установил сигнал дорожной сигнализации: если количество посещений превышает определенное количество за 10 секунд, я получаю уведомление.
Бэкэнд — это API-шлюз, который ограничивает скорость, и AWS Lambda (Python), который выполняет бизнес-логику и общую логику:
У меня также есть еще одна функция AWS Lambda, которая создает пользователя в базе данных после регистрации в Cognito.
Существуют общие утилиты, в которые я добавляю некоторые общие функции, например, электронную почту. Кроме того, функция регистрации, например, мне отправляется электронное письмо, если произошла ошибка платежа.
Я знаю, что аутентификация — это боль, и я не хотел использовать сторонний сервис. Поэтому я остался с AWS Cognito. Это довольно дешево.
Можно сказать, просто используйте AWS Amplify Auth (оболочка AWS Cognito), но у меня с этим возникли некоторые проблемы. Я даже написал пост на Reddit:
Мой список проблем с Amplify для аутентификации
И есть еще один пост с еще большим списком от какого-то разочарованного пользователя (правда, это старый пост).
здесь
Кроме того, если вы используете только Amplify, вы застреваете во всей экосистеме и не имеете возможности что-то изменить. Например, если вы хотите иметь доступ к дистрибутиву CloudFront (например, если вы хотите геоблокировать определенные регионы), к сожалению, вы не сможете увидеть его с помощью Amplify Hosting. У меня были и другие проблемы: одним из примеров было создание CDK из ресурсов Amplify, что было для меня болевой точкой.
Итак, я использовал гибридный подход (который, согласно Reddit, довольно популярен): Библиотека AWS Amplify JS позволяет вам импортировать облачные ресурсы, которые вы создаете самостоятельно, например пулы пользователей, поэтому я создал их. с CDK, а затем просто использовал библиотеку Amplify JS для аутентификации.
В этом случае я всегда могу изменить все, что захочу, поменять местами облачные ресурсы (например, я могу перейти с хостинга Amplify на CloudFront S3, если мне нужен доступ к дистрибутиву CloudFront).
AWS SES. Это основной сервис электронной почты AWS. Он отправляет все, включая электронные письма для аутентификации Cognito, запросы из контактной формы и т. д. Единственное, что вам нужно понять, это то, что в вашей учетной записи разработчика AWS вам нужно будет сначала создать проверенные личности, чтобы иметь возможность отправлять (я автоматизировал это через IaC), а в рабочей учетной записи AWS вам нужно будет запросить доступ к рабочей среде (это всего лишь пара кликов).
При использовании AWS SES уведомления по электронной почте отправляются в следующих сценариях:
DynamoDB в качестве базы данных. Легко, быстро и управляемо. Да, мне пришлось подумать о шаблонах доступа, но в целом с ними приятно работать, и мне ничего не стоит, пока я проверяю/собираю. Поскольку я планирую работать над несколькими продуктами и хочу держать их изолированными, я не могу разместить RDS/DocumentDB в учетных записях разработчиков и продуктов для каждого проекта (это слишком дорого стоит).
Я добавил две платежные системы, и можно выбрать, какую использовать, поскольку они работают одинаково:
Я написал конечные точки для веб-хуков Stripe/LemonSqueezy, которые обрабатывают всю логику.
Так что есть из чего выбирать:
Я выбрал AWS CDK, и вот мои причины:
Причина, по которой я не выбрал Terraform, заключается в том, что CDK проще; это позволяет создавать ресурсы простым способом, по крайней мере, на мой взгляд. Мне нравится ООП, и я стараюсь построить свою облачную инфраструктуру соответствующим образом. Большим преимуществом является то, что включен CI/CD (конвейеры CDK), поэтому мне не нужно это изобретать.
Я выбрал конвейеры CDK, потому что это, опять же, просто. Просто подключите конвейер к репозиторию GitHub, и все готово. Git push в ветку разработки -> он будет развернут на учетную запись разработки. Git push в главную (или запрос на включение) -> производственное развертывание.
Я настроил ограничение скорости, чтобы предотвратить получение спама через шлюз API. Я установил два будильника CloudWatch:
Я также установил будильник для выставления счетов, чтобы он информировал меня, если я собираюсь потратить слишком много.
CloudWatch регистрирует события, их можно увидеть как в консоли AWS, так и непосредственно в IDE через расширения.
Выбор был между использованием OpenAI (с моделями GPT) или AWS Bedrock (с моделями Claude). Это решение было непростым, поскольку, хотя AWS Bedrock с Claude легко интегрируется с AWS, чаще используется OpenAI. Обе компании предлагают модели искусственного интеллекта высшего уровня. На данный момент я решил придерживаться AWS Bedrock. Возможно, в будущем это изменится, но сейчас я ценю простоту. Для векторной базы данных я использую Pinecone, который имеет бессерверные индексы.
Примером приложения искусственного интеллекта, которое я здесь создал, является система RAG, которая по сути представляет собой чат-бот, который может отвечать на вопросы на основе ваших данных. Вы сохраняете информацию в векторной базе данных и по запросу выполняете поиск по сходству, а затем просто используете LLM, чтобы дать ответ на основе результата этого поиска. В настоящее время я использую простые модели, чтобы избежать затрат, но переключиться на другие модели так же просто, как изменить строку кода.
Изначально я был разработчиком Java, но затем стал разработчиком Python, потому что разработал сервисы машинного и глубокого обучения. Большинство библиотек в этой области разработаны на Python или имеют оболочку Python. Кроме того, Python легко интегрируется с AWS, будь то в AWS Lambda (например, с использованием библиотеки AWS Lambda Powertools) или в CDK. Таким образом, в конечном итоге и серверная часть, и облачная инфраструктура (через CDK) реализованы на Python.
Мой дополнительный язык — TypeScript из-за его популярности во внешних платформах. Раньше я работал с JavaScript, но отсутствие типов сбивало меня с толку по мере того, как кодовая база росла. Статическая типизация TypeScript обеспечивает столь необходимую ясность и безопасность во время разработки, особенно в крупных проектах.
Поскольку у меня нет высокой нагрузки на трафик, мои расходы на AWS очень низкие, обычно 3-5 долларов в месяц, в основном за счет расходов на CI/CD.
Установка включает в себя CDN (предоставленную Amplify Hosting) и небольшой уровень кэширования в AWS Lambda. Кроме того, некоторые сервисы подпадают под действие Уровня бесплатного пользования AWS, что еще больше снижает мои расходы.
По мере масштабирования продукта и привлечения большего числа пользователей мне, возможно, придется оптимизировать ресурсы, перейдя на подготовленную DynamoDB и внедрив DAX (DynamoDB Accelerator). Однако на данный момент эта настройка работает отлично.
Это решение эффективно отвечает моим текущим потребностям.
Я включил весь этот набор технологий в качестве шаблона (который я активно разрабатываю и обновляю) в свой шаблон AWS на SaaSConstruct.
Я продолжу изучать дополнительные функции, которые можно включить в эту установку для расширения ее возможностей...
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3