将自定义域用于Google Cloud功能

时间:2017-08-23 22:43:45

标签: google-cloud-platform google-cloud-functions

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

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

5 个答案:

答案 0 :(得分:15)

答案 1 :(得分:3)

如果您不介意url的最终外观,还可以设置CNAME dns记录。

function.yourdomain.com -> us-central1******.cloudfunctions.net

那你可以这样称呼

function.yourdomain.com/function-1/?message=Hello+World

答案 2 :(得分:2)

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

<块引用>

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

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

enter image description here

  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));
});
  1. 最后,打开 Cloudflare Dashboard 中的 Workers 选项卡,并添加一个新路由,将您的域 URL(模式)映射到此工作脚本,例如example.com/* => proxy(脚本)

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

此外,在 GCF 问题跟踪器中为 Allow me to put a Custom Domain on my Cloud Function 投票。

答案 3 :(得分:1)

有一段时间等待这个答案。

是的,现在您可以将自定义域用于Google Cloud功能。

转到firebase并将您的项目与firebase关联。我们对这里感兴趣的是托管。按照firebase documentation-(非常不错的文档)安装Firebase CLI

现在创建您的项目,就像您在文档中可能已经注意到的那样,将Firebase添加到您的项目中,请键入firebase init。选择托管即可。

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

{

  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "myfunction/custom",
        "function": "myfunction"
      },
    ]
  }
}

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

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

要执行的功能> myfunction

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

答案 4 :(得分:0)

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

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

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