Бессерверная разработка приложений с помощью AWS Chalice в Python

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

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

Некоторые из доступных нам вариантов развертывания включают покупку собственного серверного оборудования и развертывание наших приложений или аренду серверного пространства в других компаниях. Это происходит за счет не только ресурсов, необходимых для их приобретения, но также затрат на обслуживание и персонала для мониторинга ресурсов сервера.

Что, если бы мы могли сделать наше приложение доступным, не беспокоясь о выделении серверов или их обслуживании? Наша маневренность и скорость доставки будут значительно увеличены.

Мы можем добиться этого с помощью платформы бессерверных вычислений, такой как AWS Lambda, которая предоставляется Amazon Web Services.

Что такое бессерверные вычисления?

Поставщики облачных услуг предлагают различные решения для развертывания и запуска приложений, одним из которых являются бессерверные вычисления. В этой архитектуре облачный провайдер размещает ваши приложения и берет на себя обязанности по управлению сервером с точки зрения программного и аппаратного обеспечения.

Облачный провайдер, среди прочего, занимается масштабированием, доступностью, обслуживанием серверов и настройкой, поэтому мы, как разработчики, полностью сосредоточены на нашем коде. Это, в свою очередь, снижает накладные расходы, необходимые для того, чтобы наши приложения работали и были доступны для наших конечных пользователей.

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

AWS – ведущий поставщик облачных услуг, предлагающий бессерверные вычисления через AWS Lambda. Это бессерверная среда выполнения вычислений, которая позволяет разработчикам запускать свой код в ответ на определенные события от пользователей, такие как отправка запроса или загрузка файлов в корзину S3.

Эта услуга также позволяет нам оплачивать только те вычислительные ресурсы, которые мы используем, а не полную стоимость услуг. Это происходит с помощью лямбда-функции, которая масштабируется в соответствии с масштабом и не зависит от базовой инфраструктуры.

Что такое Chalice?

Chalice – это микрофреймворк для создания и быстрого развертывания бессерверных приложений на Python для функций AWS Lambda. Chalice не только помогает нам создавать приложения Python, но и быстро развертывать их, предоставляя инструмент командной строки для создания, управления и развертывания нашего приложения.

Chalice также предоставляет функции интеграции с другими сервисами Amazon, такими как Amazon API Gateway, Amazon Simple Storage Service (S3) и Simple Queue Service (SQS), среди других. Мы можем создавать RESTful API, задачи, которые выполняются по определенному расписанию или интегрироваться в корзину S3 для хранения.

Как настроить?

Настройка AWS

Чтобы начать работу с Chalice, нам необходимо настроить учетную запись AWS для взаимодействия и развертывания нашего кода. Это может быть достигнуто через домашнюю страницу AWS, где мы можем зарегистрироваться или войти в существующую учетную запись. AWS требует, чтобы мы не только предоставляли свои данные, но и свои платежные данные, но для этой демонстрации мы будем использовать уровень бесплатного пользования AWS для целей тестирования и разработки, за которые нам не будет выставляться счет.

После того, как наша учетная запись будет настроена, в раскрывающемся списке профиля появится раздел «Мои учетные данные». Мы сможем создать учетные данные, которые будут использоваться при взаимодействии с консолью AWS, а также будут использоваться инструментом Amazon CLI.

Amazon также предлагает инструмент CLI, который мы можем использовать для взаимодействия с нашими сервисами AWS с помощью команд в нашем терминале. Он доступен для платформ Mac, Linux и Windows и требует Python 2.6+ или Python 3.3 или более поздней версии. Мы можем установить его, выполнив следующую команду pip:

$ pip install awscli

После настройки мы можем протестировать инструмент CLI, запустив:

$ aws --version

При настройке инструмента AWS CLI мы будем использовать учетные данные, т.е. секретный ключ и идентификатор доступа, которые мы создали ранее, чтобы настроить наш инструмент CLI, запустив:

$ aws configure

Нам будет предложено ввести идентификатор ключа доступа, секретный ключ доступа, а также регионы и форматы вывода по умолчанию. Последние два являются необязательными, но нам понадобятся ключ доступа и секрет, которые мы получили на панели инструментов консоли AWS.

Вы также можете настроить разные учетные данные для разных пользователей на AWS.

Настройка проекта

Для этого демонстрационного проекта мы будем создавать приложение Python, и рекомендуется работать в виртуальной среде, чтобы среда нашего проекта была абстрагирована от среды Python системы. Для этого мы будем использовать инструмент Virtualenv, чтобы создать виртуальную среду, в которой мы будем работать.

Если инструмент Virtualenv еще не установлен, мы можем установить его, просто запустив:

$ pip install virtualenv

Установив Virtualenv, давайте перейдем в наш рабочий каталог и создадим среду, выполнив следующую команду:

$ virtualenv --python=python3 venv-chalice

Мы активируем нашу среду, запустив:

$ source venv-chalice/bin/activate

Теперь наша среда настроена, и мы можем установить Chalice и проверить установку, выполнив следующие команды:

$ pip install chalice
$ chalice --help

Вторая команда просто используется для проверки установки Chalice.

Выполнение

Теперь у нас есть учетная запись AWS, установлен инструмент AWS CLI, настроена среда и установлена Chalice. Теперь мы можем использовать Chalice для создания нашего простого RESTful API следующим образом:

$ chalice new-project demoapp

Эта команда создает простой проект Chalice в папке, имеющей следующую структуру:

$ tree demoapp
demoapp
├── app.py
└── requirements.txt

Любые другие требования, которые потребуются нашему приложению Chalice при развертывании на AWS Lambda, будут помещены в файл requirements.txt в папке demoapp, а наши новые функции будут в основном находиться в файле app.py. Мы можем создавать другие файлы и импортировать их в файл app.py, который является нашим основным файлом проекта.

Для нашего простого API мы создадим API, который возвращает список общедоступных репозиториев GitHub пользователя, языки, используемые в каждом, и количество звездочек, которые имеет репозиторий. Эта информация общедоступна в API GitHub, поэтому нам не нужны учетные данные для взаимодействия с API. Мы создадим функцию, которая получает имя пользователя и возвращает необходимые нам детали. Если указанное имя пользователя не существует, мы получим пустую полезную нагрузку ответа.

Создадим функцию github_repos, которая будет отвечать за взаимодействие с GitHub API:

import requests

def github_repos(username):
    # Final list to contain our repository objects
    formatted_repos = []

    if username:
        # Format the url by insterting the passed username
        url = "https://api.github.com/users/{}/repos".format(username)

        r = requests.get(url)

        # Get the JSON containing the list of repositories
        list_of_repos = r.json()

        for repo in list_of_repos:
            repo_object = {
              "name": repo["name"],
              "stars": repo["watchers"],
              "language": repo["language"],
            }

            formatted_repos.append(repo_object)

    return formatted_repos

Функция github_repos получает имя пользователя и вставляет его в URL-адрес API GitHub перед выполнением запроса. Полученный ответ содержит много информации, которая нам сейчас не нужна, поэтому мы извлекаем детали репозитория, которые нам нужны, создаем новый объект и добавляем его в список formatted_repos, который мы отправим обратно пользователю через Приложение «Chalice».

Давайте сначала запустим несколько локальных тестов для нашей функции, и вот результат:

Результаты локального тестирования

Теперь функция готова к интеграции в наше приложение Chalice в файле app.py, и это последняя версия нашего приложения:

import requests
from chalice import Chalice

def github_repos(username):
    # Function implementation above

app = Chalice(app_name='demoapp')

@app.route('/')
def index():
    return {'hello': 'world'}

# Create our new route to handle github repos functionality
@app.route('/user/{username}')
def github(username):
    return {"repos": github_repos(username)}

Теперь наше приложение готово к использованию пользователями, давайте теперь развернем его в AWS Lambda.

Развертывание приложения

Развернуть приложение Chalice в AWS Lambda так же просто, как запустить следующую команду в нашем рабочем каталоге:

$ chalice deploy

Chalice выполнит для нас процесс развертывания и вернет ссылку, по которой мы сможем взаимодействовать с только что созданным RESTful API:

Процесс развертывания

Чтобы протестировать наш API, мы можем использовать Postman, веб-браузер или любой другой инструмент взаимодействия с API, чтобы делать запросы к конечной точке /user /<github-username> по «URL-адресу REST API» из приведенного выше снимка экрана. Я передал свое имя пользователя GitHub, и вот результат:

Ответ Postman

Если мы внесем какие-либо изменения в наш код, мы просто снова запустим команду развертывания, и Chalice повторно развернет наше приложение с изменениями, которые мы только что сделали.

Когда мы переходим в Консоль AWS и щелкаем раздел «Функции» на складной боковой панели слева, мы видим функцию Lambda, которая в настоящее время запускает наше приложение:

Лямбда на консоли AWS

Когда мы нажимаем на нашу функцию, мы получаем более подробную информацию о ней, такую как текущая конфигурация, переменные среды, установленные для нашего приложения, роли выполнения и конфигурация памяти.

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

Это вид панели мониторинга для нашего приложения:

Мониторинг облачных часов

Мы получаем статистику о количестве вызовов пользователей, продолжительности запросов, обслуживаемых нашим API, об успехах и ошибках.

Мы даже можем просматривать отдельные запросы на одной панели инструментов, хотя на скриншоте выше это не видно.

Заключение

В этой статье мы создали бессерверный API в Python с использованием микрофреймворка Chalice и развернули его на AWS Lambda. Интерфейс командной строки AWS вместе с инструментами интерфейса командной строки Chalice помог нам быстро запустить наш проект, и мы развернули его в AWS Lambda, используя всего одну команду.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *