Проблема Docker со скриптом Python в приложении логики Azure, не подключающемся к текущему хранилищу BLOB-объектов Azure - PullRequest
0 голосов
/ 17 октября 2019

Каждый день файл Excel автоматически загружается в мою учетную запись хранения BLOB-объектов Azure. У меня есть сценарий Python, который читает файл Excel, извлекает необходимую информацию и сохраняет выходные данные в виде нового большого двоичного объекта в учетной записи хранения Azure. Я установил Docker-контейнер, который запускает этот скрипт Python. Он работает правильно при локальном запуске.

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

Например, прошлой ночью я отправил обновленную версию образа Docker. Сегодня утром в учетную запись хранения Azure был добавлен новый файл Excel, а приложение логики запустилось через час. Однако контейнер с изображением Docker обнаружил только те файлы, которые присутствовали вчера в учетной записи хранения Azure (поэтому в нем отсутствовал самый последний файл, который я проанализировал).

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

ОБНОВЛЕНИЕ: я подтвердил, что у меня есть доступ к правильной версии переменных среды. Проблема остается: кажется, что контейнер Docker обращается к хранилищу BLOB-объектов Azure, как это было в то время, когда я в последний раз помещал образ Docker в реестр контейнера. Моя текущая работа заключается в том, чтобы ежедневно помещать одно и то же изображение в реестр, но это раздражает.

ДРУГОЕ ОБНОВЛЕНИЕ: Вот код для получения самого последнего большого двоичного объекта (файл Excel). Дата всегда содержится в названии блоба. Теоретически, он находит BLOB-объект с самой последней датой:

blobs = blob_service.list_blobs(container_name=os.environ.get("CONTAINERNAME"))

blobstring = blob_service.get_blob_to_text(os.environ.get("CONTAINERNAME"),
                                           backup_csv).content
current_df = pd.read_csv(StringIO(blobstring))

add_n = 1

blob_string = re.compile("sales.xls")
for b in blobs:
    if blob_string.search(b.name):
        dt = b.name[14:24]
        dt = datetime.strptime(dt, "%Y-%m-%d").date()
        date_list.append(dt)

today = max(date_list)
print(today)

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

Я также проверил print(date.today()) в том же сценарии, и это работает, как и ожидалось (печатает текущую дату).

1 Ответ

0 голосов
/ 20 октября 2019

Выяснилось, что мне просто нужно было сделать все переменные в моем файле .env и добавить их в качестве переменных среды с соответствующими значениями в разделе «контейнеры среды» на рисунке выше. Этот https://docs.microsoft.com/en-us/azure/container-instances/container-instances-environment-variables был полезным ресурсом.

ТАКЖЕ группа контейнеров должна быть удалена как последнее действие в приложении логики. Я назвал неправильную группу контейнеров, поэтому, когда приложение логики запускалось каждый день, оно использовало кэшированную версию контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...