在谷歌应用引擎灵活的python中有效地提供静态文件

Serving static files efficiently in google app engine flexible python

我在 Google app engine flexible 中有一个应用程序,它是用 Python 编写的。它使用 Flask 框架作为后端。目前,flask 框架使用以下代码为静态文件提供服务。

1
2
3
@app.route('/<path:path>') #Catch All urls, enabling copy-paste url
def home(path):
    return send_from_directory(CLIENT_APP_FOLDER, path)

这会占用我用 Angular 编写的网站服务的资源。

我一直在阅读如何在不使用我的应用引擎应用的情况下提供静态文件。一个建议是使用 Google Cloud Storage 来提供静态文件,但我无法理解如何设置我的 DNS 以便
www.example.com 服务于 Google Cloud Storage,www.example.com/api 服务于应用引擎应用程序。

另一个建议是使用 dispatch.yaml 并部署两个服务,一个指向应用引擎应用程序,另一个提供静态文件,但我还是无法弄清楚静态文件服务服务会是什么样子。它是在同一个实例上部署两个服务还是创建两个实例?我想优化成本而不是启动另一个实例。


有两种方法可以最大限度地降低成本。

第一个是使用 Cloud Run 而不是 appengine flex。您可以部署相同的容器,但您只需在服务请求时付费。它处于测试阶段,但非常稳定。您可以使用自定义域

如果您保持应用引擎的灵活性,则第二种解决方案是部署第二个服务。第二个服务将为静态资源提供服务。使用标准 appengine,并自定义您的 app.yaml 以仅提供静态资源。这里是 python 2 的文档,但配置与语言无关
提供静态资源不会创建实例。无论如何,您每天都可以免费使用 28 小时的标准实例。