Руководство по разблокировке потоковой передачи данных для приложений Python с помощью Google Cloud Platform

Python - популярный сегодня язык для всех видов обработки данных. Сценарии использования варьируются от веб-приложений и приложений машинного обучения до аппаратного управления на таких устройствах, как RaspberryPi. Когда дело доходит до этих систем и обработки данных в реальном времени, использование платформ Pub / Sub может добавить модульности и масштабируемости вашим решениям - вы можете узнать больше об этом здесь.

О том, почему я использовал инструменты Google Cloud Platform для своих хобби-проектов, читайте здесь.

Цели

В этой статье я расскажу о настройке приложения Python для публикации и использования данных из Google Pub / Sub.

Требуемое время: 15 минут.

Предпосылки

Чтобы продолжить, у вас должно быть следующее:

  1. Базовое понимание того, как работает Python
  2. Python 3.x установлен на вашем компьютере
  3. Аккаунт Google Cloud Platform и проект

Давай займемся кодированием!

GCP - Настройка учетной записи службы

Перво-наперво, давайте выполним всю настройку в GCP. Учетная запись службы GCP и закрытый ключ необходимы для доступа к службе Pub / Sub из приложения Python.

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

Нажмите создать и добавьте роли Pub/Sub Publisher и Pub/Sub Subscriber, чтобы эта учетная запись могла как использовать данные, так и публиковать данные в ваших темах Pub ​​/ Sub.

Отсюда вы можете нажать готово.

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

Используйте кнопку Добавить ключ, чтобы добавить новый ключ JSON.

При нажатии Создать файл закрытого ключа должен быть загружен в каталог загрузок по умолчанию. Если вы откроете файл, вы должны увидеть что-то вроде этого:

{
 “type”: “service_account”,
 “project_id”: “…”,
 “private_key_id”: “…”,
 “private_key”: “ — — -BEGIN PRIVATE KEY — — -…”,
 “client_email”: “python-tester@…”,
 “client_id”: “…”,
 “auth_uri”: “https://accounts.google.com/o/oauth2/auth",
 “token_uri”: “https://oauth2.googleapis.com/token",
 “auth_provider_x509_cert_url”: “…”,
 “client_x509_cert_url”: “…”
}

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

GCP - Настройка публикации / дополнительной темы

Прежде чем мы сможем отправлять / извлекать данные из Pub / Sub, нам нужно создать тему. Вы можете увидеть все свои активные темы здесь. Создайте новую тему, дайте ей имя и оставьте флажок подписки по умолчанию - я назвал свою тему my-python-topic.

Не забудьте оставить флажок Добавить подписку по умолчанию и нажмите Создать тему - новая тема должна появиться в вашем списке тем. Ваша подписка по умолчанию будет иметь название вашей темы с суффиксом -sub, в моем случае оно называется my-python-topic-sub.

Python - Написание продюсера и потребителя

Перед написанием кода у вас должен быть установлен Python 3.x вместе с библиотеками google-api-python-client и google-cloud-pubsub GCP. Вы можете установить их с помощью pip / pip3, используя следующее:

pip3 install --upgrade google-api-python-client
pip3 install --upgrade google-cloud-pubsub

Где-нибудь на вашем компьютере создайте папку для вашего кода Python.

mkdir pub-sub-test
cd pub-sub-test

Переместите свой закрытый ключ, сгенерированный в разделе GCP - Service Account Setup, в эту новую папку. Если вы потеряли ключ, вы можете сгенерировать новый, используя те же инструкции.

Создайте в этом каталоге свой основной исполняемый файл Python - я называю свой code.py и добавляю следующий контент:

Библиотека GCP ожидает, что переменная среды с именем GOOGLE_APPLICATION_CREDENTIALS будет указывать на закрытый ключ. Мы устанавливаем это значение в строке 2 с помощью:

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="YYYY.json"

Обязательно замените YYYY.json на путь / имя к вашему файлу закрытого ключа.

PUB_SUB_PROJECT в Строке 12 должен быть обновлен идентификатором вашего проекта GCP, вы можете найти идентификатор на странице списка Pub / Sub. Это будет значение между проектами и темами - проекты / ГГГ / themes / my-python-topic.

Теперь ваш проект должен выглядеть так:

├── pub-sub-test
│ ├── code.py
│ ├── YYYY.json

Я изо всех сил старался, чтобы код был как можно более понятным, но по сути:

process_payload: функция обратного вызова, которая обрабатывает события, полученные из Pub / Sub, сюда следует добавить любую логику, которую вы хотите применить к полезной нагрузке.

push_payload: принимает полезные данные (JSON) и помещает их в указанную комбинацию идентификатора темы Pub / Sub / проекта.

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

Остальная часть кода непрерывно отправляет и потребляет данные, пока программа не будет завершена. Вы можете запустить код с python3 code.py и в терминале должны увидеть что-то вроде этого:

Вот и все, простая реализация, но этого должно быть достаточно, чтобы вы начали использовать Pub / Sub GCP с Python.

Вывод

Платформа Google Pub / Sub отлично подходит для обработки больших объемов данных и разделения различных компонентов вашей архитектуры. В этой статье я рассказал вам, как можно использовать Pub / Sub с приложениями Python. Я надеюсь, что вы смогли чему-то научиться из этого поста.

Удачи и удачного программирования!

Первоначально опубликовано на http://www.theappliedarchitect.com 25 апреля 2021 г.