首页 > 解决方案 > Firebase 托管是否支持将规则重写为 Firebase 未部署的 Python Cloud Function?

问题描述

Firebase 托管可以配置为将请求定向到 Cloud Function:

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

标签: firebasegoogle-cloud-platformgoogle-cloud-functionsfirebase-hosting

解决方案


我已验证支持此用例。

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

这是一个示例firebase.json文件:

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

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

为方便起见,这是一个简单的 bash 脚本,用于在一个命令中部署功能和托管配置:

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

PROJECT_ID=$1

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以及target在 firebase.json 中定义 a 需要.firebaserc使用项目/目标映射配置文件。


推荐阅读