【问题标题】:Docker issue with python script in Azure logic app not connecting to current Azure blob storageAzure 逻辑应用程序中 Python 脚本的 Docker 问题未连接到当前 Azure Blob 存储
【发布时间】:2020-02-14 11:03:36
【问题描述】:

每天,Excel 文件都会自动上传到我的 Azure blob 存储帐户。我有一个 Python 脚本,它读取 Excel 文件,提取必要的信息,并将输出保存为 Azure 存储帐户中的新 blob。我设置了一个运行这个 Python 脚本的 Docker 容器。在本地运行时可以正常工作。

我将 Docker 映像推送到 Azure 容器注册表,并尝试设置一个 Azure 逻辑应用程序,该应用程序每天在同一时间使用此 Docker 映像启动一个容器。它运行,但是,它似乎不适用于我的 Azure 存储帐户的最新版本。

例如,我昨晚推送了 Docker 镜像的更新版本。今天早上向 Azure 存储帐户添加了一个新的 Excel 文件,逻辑应用在一小时后运行。但是,带有 Docker 映像的容器仅找到了昨天存在于 Azure 存储帐户中的文件(因此它丢失了最新的文件,这是我需要分析的文件)。

我确认问题不在于逻辑应用,因为我在逻辑应用中添加了一个步骤来列出 Azure 存储帐户中的文件,并且此列表包含最新的文件。

更新:我已确认我正在访问正确版本的环境变量。问题仍然存在:Docker 容器似乎可以访问 Azure blob 存储,就像我最近将 Docker 映像推送到容器注册表时一样。我目前的工作是每天将相同的图像推送到注册表,但这很烦人。

另一个更新:这是获取最新 blob(Excel 文件)的代码。日期始终包含在 blob 的名称中。理论上,它会找到日期最近的 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 似乎没有更新。它返回截至我上次将图像推送到注册表之日的最新 blob。

我还在同一个脚本中检查了print(date.today()),它按预期工作(它打印当前日期)。

【问题讨论】:

  • 您如何确定您拥有哪些现有文件?
  • 用 Python 代码更新了问题

标签: python-3.x docker azure-logic-apps azure-blob-storage


【解决方案1】:

发现我只需要在我的 .env 文件中创建所有变量,并将它们作为环境变量添加到上图的“容器环境”部分中,并具有适当的值。这个https://docs.microsoft.com/en-us/azure/container-instances/container-instances-environment-variables 是一个有用的资源。

还需要将容器组作为逻辑应用中的最后一个操作删除。我命名了错误的容器组,所以当逻辑应用每天运行时,它使用了容器的缓存版本。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2022-08-03
    • 2015-08-10
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多