machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Полное руководство по разработке стека: обслуживание торговых данных с помощью REST API без сервера, работающего на AWS Lambda

Дата публикации Nov 11, 2019

Бессерверные вычисленияэтооблачные вычислениямодель исполненияв котором облачный провайдер запускает сервер и динамически управляет распределением ресурсов машины. Ценообразование основано на фактическом объеме ресурсов, потребляемых приложением, а не на предварительно приобретенных единицах мощности. - Википедия

фотоЭнтони КантиннаUnsplash

(Это второй пост из моей серии уроков по разработке стека. Предыдущий пост -Полное руководство по разработке стека: визуализация торговых данных на Angular SPA)

Бессерверные вычисления сияют таким образом, что они выполняются тогда, когда это необходимо. Цена полностью основана на использовании. Разработчикам не нужно поддерживать сервер, исправлять уязвимости безопасности, обновлять программное обеспечение и т. Д.

Амазонка AWSлямбдаявляется серверной вычислительной платформой, управляемой событиями. Он имеет отличную поддержку во время выполнения, включая Node.js, Python, Java, Go, Ruby и C #. Как платформа, управляемая событиями, Lambda идеально подходит для таких сценариев, как обработка изменений событий, таких как «файл загружается на S3», «База данных обновлена», «Данные датчика принимаются в IoT» и т. Д.

В этом уроке мы будем использоватьбезсерверный фреймворксоздать безсерверный REST API для нашего стандартного приложения вэтот урок, Безсерверная платформа - это платформа с открытым исходным кодом, которая помогает разрабатывать и развертывать функции без сервера в нескольких облачных средах, включая AWS Lambda.

Дизайн нашей конечной точки

Следуя практике REST, давайте определим нашу конечную точку / цену? Ticker =, И ответ будет выглядеть следующим образом для подачи диаграммы в пользовательском интерфейсе.

[
{
"name": "Ticker",
"series": [
{
"name": "2018-11-05",
"value": 1
},
{
"name": "2018-11-07",
"value": 1.0784432590958841
}
]
}
]

Установка и настройка

AWS

Для начала вам нужна учетная запись AWS.зарегистрироватьсяесли у вас еще нет аккаунта AWS. затемсоздать пользователя IAM, В конце вы получите учетные данные пользователя IAM. Он понадобится вам для настройки безсерверного клиента, чтобы вы могли развернуть и запустить свою безсерверную службу в AWS.

serverless config credentials --provider aws --key <ACCESS KEY ID> --secret <SECRET KEY>

Бессерверная установка

следитьинструкцииустановить докер для развертывания.

Инициализация проекта без сервера

Создайте файл serverless.yml для службы. Для запуска службы REST необходим плагин wsgi в качестве веб-сервера. Встроенный сервер для разработки колб недостаточно производительный. Обратите внимание, что тонкий флаг в pythonRequirements помогает ограничить размер исходного кода. Существует ограничение размера исходного кода для Lambda. Тонкий флаг помогает уменьшить размер. По этой причине также важно исключить все ненужные файлы, такие как файлы в venv. Флаг zip помогает архивировать исходный код перед загрузкой на S3 для развертывания. Остальная часть конфига не требует пояснений.

Процесс развертывания выглядит следующим образом. Бессерверная структура создает и упаковывает файл как zip-файл. Затем он использует учетные данные IAM для загрузки исходного кода в корзину S3 (эта корзина создается автоматически безсерверной клиентской системой). Затем он использует CloudFormation для развертывания сервиса Lambda. Все происходит за один раз.

Реализация

Реальная реализация проста. Когда приходит запрос исторических данных, он захватывает данные (файл csv) из S3 и считывает их в фрейм данных panda (S3 - сервис хранения AWS). Затем мы переберем кадр данных, чтобы создать ответ, который мы определили выше. Как мы определяем лямбда-точку входа app.app в serverless.yml. Мы напишем наш сервис в app.py.

Перед запуском нашего приложения загрузите исторические данные о запасах из финансов Yahoo и поместите их в каталог данных вызовов.

Затем запустите приложение локально.

(venv) ➜  stock-backend python app.py* Serving Flask app "app" (lazy loading)* Environment: productionWARNING: This is a development server. Do not use it in a production deployment.Use a production WSGI server instead.* Debug mode: on* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)* Restarting with stat* Debugger is active!* Debugger PIN: 248-351-201

Теперь вы можете проверить, работает ли ваша конечная точка REST. Скажем, если у вас есть файл SPY.csv в каталоге данных. Откройте браузер и введитеhttp://127.0.0.1:5000/price?ticker=SPYв строке URL. Результат ответа JSON будет отображен в вашем браузере.

[
{
"name": "SPY",
"series": [
{
"name": "2014-10-20",
"value": 190.300003
},
{
"name": "2014-10-21",
"value": 194.070007
},
{
"name": "2014-10-22",
"value": 192.690002
},
{
"name": "2014-10-23",
"value": 194.929993
}...
]

Или вы можете использовать команду curl для того же теста

curl http://127.0.0.1:5000/price?ticker=SPY

Используйте S3 для хранения исторических данных о запасах

Приведенная выше реализация опирается на локальное хранилище для хранения исторических данных о запасах. Мы можем использовать AWS S3 для размещения данных. Перейдите на консоль AWS и выберите S3. Создайте ведро S3 и дайте ему имя. Убедитесь, что имя уникально во всем мире.

Теперь мы можем загрузить наш CSV-файл в корзину.

Затем, чтобы Lambda могла получить доступ к этому сегменту S3, нам нужно назначить политику S3 только для чтения на роль Lambda. Да, это можно сделать с помощью файла конфигурации serverless.yml без взаимодействия с консолью AWS. Обновленный провайдер в serverless.yml будет выглядеть следующим образом

provider:
name: aws
runtime: python3.7
stage: prod
region: us-west-2
iamRoleStatements:
- Effect: 'Allow'
Action
:
- 's3:ListBucket'
Resource
: { 'Fn::Join': ['', ['arn:aws:s3:::<YOUR_S3_BUCKET_NAME>']] }
- Effect: 'Allow'
Action
:
- 's3:getObject'
Resource
:
Fn::Join:
- ''
- - 'arn:aws:s3:::<YOUR_S3_BUCKET_NAME>'
- '/*'

В app.py убедитесь, что мы загружаем данные из S3 вместо чтения с локального диска.

# path = '{}/data/{}.csv'.format(os.path.dirname(os.path.realpath(__file__)), ticker)
# df = pd.read_csv(path, index_col='Date', parse_dates=True, usecols=['Date', 'Close'],
# na_values=['nan'])

df = pd.read_csv('s3://<YOUR_S3_BUCKET_NAME>/{}.csv'.format(ticker), index_col='Date', parse_dates=True,
usecols=['Date', 'Close'], na_values=['nan'])

Развертывание в AWS Lambda

Теперь дело доходит до захватывающей части. Давайте развернем наш сервис в Lambda.

(venv) ➜  stock-backend sls deployServerless: Adding Python requirements helper.......Service Informationservice: stock-backendstage: prodregion: us-west-2stack: stock-backend-prodresources: 11api keys:Noneendpoints:ANY - https://9rn0mg6p6b.execute-api.us-west-2.amazonaws.com/prodANY - https://9rn0mg6p6b.execute-api.us-west-2.amazonaws.com/prod/{proxy+}functions:app: stock-backend-prod-applayers:NoneServerless: Run the "serverless" command to setup monitoring, troubleshooting and testing.

В конце вы получите конечную точку вашего нового API. Это URL-адрес от шлюза API. Вы можете проверить это в своем браузере. Обратите внимание, что ваш URL будет другим. Давайте использовать браузер или curl для тестирования. Ниже приводится результат Теперь у нас есть наш серверный сервис, работающий на AWS Lambda. Развертывание легко.

Если вас интересует, что создал AWS, вы можете войти в свою консоль AWS и узнать. Он создает ресурсы S3 Bucket и Cloudformation для развертывания. Лямбда-функция создается с новой ролью IAM для Лямбда-исполнения. Также роль имеет пользовательскую роль для доступа к хранилищу данных S3.

Что дальше?

Я подключу интерфейс отпредыдущий постс бэкэндом, работающим в lambda, затем разверните пользовательский интерфейс в AWS. Следите за обновлениями!

Полное руководство по разработке стека: визуализация торговых данных на Angular SPA (1)

Как выбор тысячелетних инвестиций сравнивается с Motley Fool Stock Advisor

Как я могу leetcode на 6 месяцев и получить работу в Amazon

Глубокий взгляд на то, какие технологии являются горячими для рабочих мест в банках

Торговая стратегия: бэк-тестирование с Backtrader

Усиление обучения: введение в Q обучения

Торговая стратегия: технический анализ с Python TA-Lib

Оптимизация портфеля для минимального риска с Scipy - объяснил эффективную границу

Снижение риска путем создания портфолио

Торговля: Рассчитать индикаторы технического анализа с помощью панд 🐼

Собирайте торговые данные с помощью панд

Сбор торговых данных с помощью библиотеки Pandas as

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map