将自定义域用于Google Cloud功能

aba*_*haw 35 google-cloud-platform google-cloud-functions

在使用HTTP触发器时,我无法在任何地方看到为我的Google云功能设置自定义域的任何选项.似乎是一个相当重大的遗漏.有没有办法使用自定义域而不是他们的location-project.cloudfunctions.net域或某些解决方法达到相同的效果?

我读了一篇文章,建议在函数前面使用CDN,并将功能URL指定为拉区.这可行,但会带来不必要的成本 - 在我的场景中,没有任何内容能够被缓存,因此使用CDN远非理想.

Fra*_*len 17

如果您将Cloud项目与Firebase 连接,则可以将HTTP触发的云功能连接到Firebase托管以获取虚URL.

  • 谢谢 - 我确实记得在某处看过Google Cloud Functions for Firebase支持此功能.Upvoted,但不会标记为答案,希望有一天这个功能将得到本地支持或解决方案的出现. (8认同)
  • @abagshaw对此有任何2019年更新吗? (5认同)
  • 请注意,这只能使用“us-central1”才能正常工作,请参阅:/sf/ask/3421227001/登录页面 (5认同)
  • @FrankvanPuffelen 我能够在 Cloud Run 服务上获得一个自定义域,而无需与 Firebase 交互。该过程涉及在 GCP 控制台的 Cloud Run 区域中单击“自定义域”,然后按照步骤添加 DNS 记录以证明域所有权。然后它会自动为我的域生成 TLS 证书并进行设置。我不需要将任何 DNS 功能委托给 GCP 来执行此操作,我能够在非 GCP DNS 提供商中设置所需的记录。 (3认同)

zo.*_*.ol 13

另一种避免 Firebase 的方法是将负载均衡器放在 Cloud Function 或 Cloud Run 前面,并使用“无服务器网络端点组”作为负载均衡器的后端。

设置负载均衡器后,只需修改域的 DNS 记录以指向负载均衡器即可。

https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless


Luc*_*cem 8

这个答案已经有一段时间了。

是的,现在您可以为您的 GCP 功能使用自定义域。

转到 firebase 并将您的项目与 firebase 相关联。我们在这里感兴趣的是托管。按照 firebase文档安装 Firebase CLI - (这里是非常好的和甜蜜的文档)

现在创建您的项目,正如您可能在文档中注意到的那样,要将 firebase 添加到您的项目中,请键入firebase init. 选择托管,就是这样。

完成后,查找firebase.json文件。然后像这样自定义

{

  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "myfunction/custom",
        "function": "myfunction"
      },
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,您会获得一个类似的域,https://project-name.web.app但您可以在控制台上添加自己的域。

现在部署您的站点。由于您对网络托管不感兴趣,因此您可以按原样离开。现在你的函数将像这样执行

要执行的函数 > myfunction

自定义网址 > https://example.com/myfunction/custom


Kon*_*kus 5

使用 Cloudflare Workers(CDN、反向代理)

为什么?因为它不仅允许您通过 Cloud Function 设置反向代理,还允许您配置诸如 - CDN 边缘位置的服务器端渲染 (SSR)、初始 (SPA) 网页加载的 API 响应、CSRF保护、DDoS 保护、高级缓存策略等。

  1. 将您的域添加到 Cloudflare;然后转到DNS设置,添加A指向192.0.2.1该记录启用 Cloudflare 代理的记录(橙色图标)。例如:

在此处输入图片说明

  1. 创建一个类似于以下内容的Cloudflare Worker脚本:
function handleRequest(request) {
  const url = new URL(request.url);

  url.protocol = "https:";
  url.hostname = "us-central1-example.cloudfunctions.net";
  url.pathname = `/app${url.pathname}`;
  
  return fetch(new Request(url.toString(), request));
}

addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event.request));
});
Run Code Online (Sandbox Code Playgroud)
  1. 最后,Workers在 Cloudflare 仪表板中打开选项卡,并添加一个新路由,将您的域 URL(模式)映射到此工作脚本,例如example.com/*=> proxy(脚本)

有关完整示例,请参阅GraphQL API Starter Kit(参见参考资料web/proxy)。

此外,投票支持允许我在 GCF 问题跟踪器中的云函数上放置自定义域