【问题标题】:firebase deploy to custom region (eu-central1)firebase 部署到自定义区域(eu-central1)
【发布时间】:2017-09-20 01:02:22
【问题描述】:

有没有办法指定将部署我的 Firebase 功能的区域/区域。

实际上我在文档中没有找到任何相关内容,我的功能总是部署到 us-central1,但我想将它放在 eu-central1...

是否可以在 Firebase - Config - File 中设置?

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "public",
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

我还查看了 cli 选项,但没有找到任何内容。

Firebase 项目本身已正确设置为欧洲区域 o.O

提前致谢

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    firebaser 在这里

    更新(2018-07-25):

    现在可以在 Firebase 中为您的 Cloud Functions 指定区域,您可以在代码中指定该区域并部署更改。例如:

    exports.myStorageFunction = functions
        .region('europe-west1')
        .storage
        .object()
        .onFinalize((object) => {
          // ...
        });
    

    有关详细信息,请参阅Firebase documentation on Cloud Functions locations(我从那里获得上述 sn-p)和modifying the region of a deployed function

    【讨论】:

    • @FrankvanPuffelen 将来是否有可能指明 Firebase 的云功能将在哪个区域运行?
    • @FrankvanPuffelen 对于甜蜜的区域间延迟。当使用谷歌云服务构建复杂的设置时,如果数据存储和计算位于同一位置,事情会更快。所以重申一下这个问题,将来有可能吗?
    • 多个区域即将到来。 GCF 不与您的用户交谈;它与您的其他服务对话。我很好奇您正在使用哪些功能。例如。 Firebase 实时数据库仅在美国可用,而 Cloud Storage 存储分区可以部署在多个区域之一。如果将数据库功能移至欧洲,则可能会增加延迟,但如果将存储功能移至欧洲,则可能会减少延迟。对于 HTTP 函数,将它们放在 Firebase 托管之后以进行全局 CDN 缓存(尽管区域性将有助于缓存未命中)
    • 有什么消息吗,我们什么时候可以期待在 firebase 函数上具有更改区域的功能?
    • 这个问题有更新吗?我看到官方文档提到谷歌云功能确实支持选择位置cloud.google.com/functions/docs/locations。但是,我仍然没有弄清楚如何通过 CLI 或 firebase.json 选择区域
    【解决方案2】:

    来自文档:https://firebase.google.com/docs/functions/locations

    现已在以下地区推出:

    • us-central1(爱荷华州)
    • us-east1(南卡罗来纳州)
    • 欧洲西部1(比利时)
    • asia-northeast1(东京)

    更改区域的最佳做法

    // before
    const functions = require('firebase-functions');
    
    exports.webhook = functions
        .https.onRequest((req, res) => {
                res.send("Hello");
        });
    
    // after
    const functions = require('firebase-functions');
    
    exports.webhookEurope = functions
        .region('europe-west1')
        .https.onRequest((req, res) => {
                res.send("Hello");
        });
    

    【讨论】:

    • 你在哪里添加这个?我想使用当前托管选项中的go 函数我只在firebase.json 中定义路由,但它们总是转到us-central1
    • 顺便说一句。所以理想的设置是:比利时的云功能(EU1)和法兰克福的数据中心(EU3)?我想知道他们为什么不在同一个数据中心提供功能和数据库?
    • @nbari 在这里相同。关于它的文档还不清楚
    • 您可以在gcloud中设置默认值:$gcloud config set functions/region REGION cloud.google.com/functions/docs/locations
    • @IanWarner,让我来挑选你的大脑。我有一个托管快速服务器的功能。这适用吗?只能是美国?
    【解决方案3】:

    要对所有函数使用相同的自定义区域,请执行以下操作。

    import * as functions from 'firebase-functions';
    
    const regionalFunctions = functions.region('europe-west1');
    
    export const helloWorld = regionalFunctions.https.onRequest((request, response) => {
     response.send("Hello from Firebase!");
    });
    
    export const helloWorld2 = regionalFunctions.https.onRequest((request, response) => {
     response.send("Hello from Firebase 2!");
    });
    

    【讨论】:

    • 不适合我。出现错误 > 部署错误。加载用户代码时函数失败。这可能是由于用户代码中的错误。错误消息:错误:请检查您的函数日志以查看错误原因
    【解决方案4】:

    要将 Firebase 功能部署到一个区域也可以在本地模拟中工作,必须这样初始化客户端:

    const functions = LOCAL ? firebase.app().functions(/*functionsRegion*/) :  
      firebase.app().functions(functionsRegion);
    
    const fun = functions.httpsCallable('your_function_name');
    

    即代码相同。在模拟案例中添加区域会使调用丢失,而不会出现错误。

    LOCAL 是我知道的客户端值,无论后端是在云中运行,还是设置为本地模拟。

    当然,这是 Firebase 将解决的极端案例?

    firebase 工具 8.6.0,firebase7.16.1


    附录:

    以上内容适用于浏览器(未说明)。我已经停止使用httpsCallables,因为它们需要在线连接。另一方面,通过 Firebase 数据库进行接口是离线友好的,因此会产生更强大的系统。

    【讨论】:

    • 您可以使用process.env.FUNCTIONS_EMULATOR 来检查函数是否在本地运行
    • @Nick 在浏览器中,您无法访问process.env.FUNCTIONS_EMULATOR。示例代码适用于浏览器。
    • firebase-tools 9.12.0 起,模拟器现在可以识别区域,这个答案不再有效。
    【解决方案5】:
    "rewrites": [
      {
        "source": "**",
        "run": {
          "serviceId": "<service id>",
          "region": "europe-west1"
        }
      }
    ]
    },
    

    【讨论】:

    • 你能解释一下你的答案吗?
    • 我在 firebase.json 文件中的 rewrites 中配置了区域,你可以添加区域设置
    • 此重写规则适用于 Cloud-Run。不适用于云函数!
    猜你喜欢
    • 2023-02-18
    • 2019-12-08
    • 2022-01-05
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2021-01-24
    相关资源
    最近更新 更多