添加python模块google-cloud-storage导致正在工作的Azure Function应用程序中断

qacovj5a  于 2023-06-24  发布在  Python
关注(0)|答案(1)|浏览(120)

我将使用VS-code azure extension auto创建的测试函数作为这个问题的“简单”案例。
我可以在requirements.txt中添加任何模块(pandas,requests,facebook),它工作正常。然而,当我添加google-cloud-storage时,我的函数中断了,只返回500。
我应该注意到它只在Azure上测试时会中断,当在本地运行时它工作正常
此外,如果该函数是在Azure Portal中创建的(而不是连接到Github),并且google-cloud-storage是使用ssh pip安装的,那么该函数也可以正常工作。
似乎是当VS代码被用于在requirements.txt中使用'google-cloud-storage'部署函数时,我们遇到了问题。不管怎样,这就是我所发现的,任何帮助将不胜感激

**如何复制:****第一步:**已创建函数应用

此函数应用程序使用:App Service Plan,Basic B1(总共100个ACU,1.75 GB内存,1个vCPU)enter image description here只能运行Linux,因为选择python时不支持windows

**第二步:**默认创建函数,VS-code azure扩展名为https://i.stack.imgur.com/XBLpV.png

函数如下所示:enter image description here
步骤3:我现在将其添加到我的github存储库中,然后Azure应用程序服务将其作为函数进行部署。使用函数应用程序连接到存储库enter image description here
我们在requirements.txt enter image description here中没有使用google-cloud-storage也取得了成功
现在我们添加google-cloud-storage:enter image description here然后我们将其git推送到我们的存储库,Azure将创建我们的部署
当我们现在尝试测试函数时,我们得到了一致的500个结果,没有日志。enter image description here
我想继续使用Git-hub的方法,所以一个我们保持相同流程的解决方案会很棒,但任何建议都会很棒。提前感谢各位。
尝试pip使用ssh手动安装google-cloud-storage,然后使用VS-code部署,这破坏了整个功能应用程序。

pes8fvy9

pes8fvy91#

我已经在我的requirements.txt中添加了google-cloud-storage,我的azure函数Http存储库位于如下文件夹结构中:

  • Init.py和function.json在HttpTrigger文件夹中,其余文件在HttpTrigger文件夹外的根目录中,包括requirements.txt:-*

现在,我使用Functions Premium计划创建了Azure Function应用程序,并选择了Python 3.10:

在我的函数应用部署之后,我去了部署中心,将我的函数连接到上面的github存储库,并启动了github工作流:

我的Github工作流程:-

你可以在这里找到我的Github工作流程

name: Build and deploy Python project to Azure Function App - siliconfunc1

on:
  push:
    branches:
      - main
  workflow_dispatch:

env:
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root
  PYTHON_VERSION: '3.10' # set this to the python version to use (supports 3.6, 3.7, 3.8)

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Setup Python version
        uses: actions/setup-python@v1
        with:
          python-version: ${{ env.PYTHON_VERSION }}

      - name: Create and start virtual environment
        run: |
          python -m venv venv
          source venv/bin/activate
      - name: Install dependencies
        run: pip install -r requirements.txt
        
      # Optional: Add step to run tests here

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: python-app
          path: |
            . 
            !venv/
  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-function.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: python-app
          path: .

      - name: 'Deploy to Azure Functions'
        uses: Azure/functions-action@v1
        id: deploy-to-function
        with:
          app-name: 'siliconfunc1'
          slot-name: 'Production'
          package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_D29DD8E1DA1B41A68C550903EEF23B74 }}
          scm-do-build-during-deployment: true
          enable-oryx-build: true

输出:-

  • HttpTrigger成功部署,当我运行该函数时,我收到了与您相同的错误代码。但是,当我检查日志时,我看到了一个与protobuf包相关的错误,该错误限制了Azure Function HttpTrigger成功运行,请参阅以下内容:-***
    错误:-

2023-06-15T08:21:20.763 [Error] TypeError: Descriptors cannot not be created directly.
2023-06-15T08:21:20.826 [Information] If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
2023-06-15T08:21:20.827 [Information] If you cannot immediately regenerate your protos, some other possible workarounds are:
2023-06-15T08:21:20.827 [Information] 1. Downgrade the protobuf package to 3.20.x or lower.
2023-06-15T08:21:20.827 [Information] 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

我引用了Kushan Gunasekara的SO thread answer,并在requirements.txt中添加了protobuf==3.20. 沿着google-cloud-storage,并再次运行了部署,HttpTrigger部署后成功运行,参考如下:-*
我的更新需求.txt:-

azure-functions
protobuf==3.20.*
google-cloud-storage

相关问题