Firebase 托管是否支持将规则重写到 Python 非 Firebase 部署的云功能?

Does Firebase Hosting support rewrite rule to Python Cloud Function not deployed by Firebase?

Firebase 托管可以配置为 direct requests 云函数:

这是否适用于直接部署到 Cloud Functions 的 Python Cloud Functions,即不使用 firebase deploy?这与 Python 函数特别相关,因为 Firebase 只能部署 Node.js 函数。

我已确认此用例受支持。

您可以使用 gcloud cli 部署 python 云函数,然后将 url 部署到重写此 python 函数的 firebase 托管目标。

这里是一个例子 firebase.json 文件:

{
  "hosting": [
    {
      "target": "optional_target",
      "public": "public",
      "ignore": [
        "*"
      ],
      "rewrites": [
        {
          "source": "**",
          "function": "my_python_function"
        }
      ]
    }
  ]
}

Firebase 需要一个 public 目录,即使在这种情况下未使用它。因此,您可以创建一个带有 .gitkeep 文件的简单 public 目录,以确保它保存在您的源代码存储库中。 firebase.json 文件中的 ignore 属性确保 .gitkeep 文件不会上传到 firebase 托管。

为方便起见,这里有一个简单的 bash 脚本,用于在一个命令中同时部署函数和托管配置:

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ORGINAL_PWD=$PWD

PROJECT_ID=

cd $DIR/../functions

gcloud functions deploy my_python_function \
  --project "$PROJECT_ID" \
  --runtime python37 \
  --trigger-http

firebase use $PROJECT
firebase deploy

cd $ORGINAL_PWD

在这种情况下,子目录 functions 包含一个 main.py 模块,其中定义了 my_python_function

另外需要说明的是,使用 firebase use $PROJECT 以及在 firebase.json 中定义 target,需要使用 .firebaserc 配置文件 project/target映射。