Невозможно публиковать сообщения в GCP Pub / Sub с помощью Python SDK при выполнении через Cron внутри GKE POD. - PullRequest
0 голосов
/ 30 августа 2018

Использование PYthon SDK для публикации сообщений в GCP Pub / SUb. Код выполняется внутри POD Kubernetes на GKE.

import pymysql
import os
import argparse
import time
from google.cloud import pubsub_v1

entries = ['jelly']

def publish_messages(project, topic_name):

  publisher = pubsub_v1.PublisherClient()
  topic_path = publisher.topic_path(project, topic_name)

  for n in entries:
    data = u'Message number {}'.format(n)
    data = data.encode('utf-8')
    publisher.publish(topic_path, data=data)
    print "Message %s sent to queue" % n

Скрипт отлично работает при выполнении вручную. Тем не менее, это происходит сбой при запуске через Crontab.

Ошибка: не удалось найти обработчики для регистратора google.cloud.pubsub_v1.publisher._batch.thread "

1 Ответ

0 голосов
/ 03 сентября 2018

Нашел решение. Crontab по умолчанию не читает системные переменные среды. И этот код Python выше нуждается в переменной env "GOOGLE_APPLICATION_CREDENTIALS", которая содержит ключ учетной записи службы (в данном случае ConfigMap). Для достижения этого все переменные env должны быть распечатаны в файл / etc / environment контейнера во время выполнения. Примерно так:

FROM ubuntu:latest
ADD send.py Jelly/send.py
COPY jellycron /etc/cron.d/jellycron
RUN apt-get update && apt-get install -y cron vim mysql-server curl python python-pip 
    && pip install --upgrade pymysql google-api-python-client google-cloud google- 
    cloud-pubsub && touch /var/log/cron.log && chmod 0644 /etc/cron.d/jellycron && 
    crontab /etc/cron.d/jellycron
CMD printenv >> /etc/environment && cron && tail -f /var/log/cron.log
...