当部署云功能时,我认为谷歌执行了一些等效的功能:
pip install -r requirements.txt
假设requirements.txt
文件包含:
google-cloud-pubsub
google-cloud-storage==1.26.0
由于指定了云存储版本,所有现有和未来扩展的功能实例都将安装该版本。
gcloud functions deploy ...
将在所有实例上安装1.26.0存储库。
然而,假设有一个实例已经安装了google-cloud-pubsub
1.0.2版本,并且最新版本是1.3.0。
上面的pip命令将不会加载新版本。
取而代之的是Requirement already satisfied
响应。现有实例将停留在1.0.2版本,而任何新扩展的实例都将退出1.3.0版本。同一个云函数的实例之间的库版本可能不匹配。
- 我是否准确地理解了这个过程?GCP的作用相当于
pip install -r requirements.txt
吗 - 有没有办法在部署期间通过requirements.txt或其他方式强制云函数导入库的最新版本
- 我能准确理解这个过程吗?GCP的作用相当于
pip install -r requirements.txt?
吗
你是对的。在部署时,Cloud Functions会构建一个映像,将您的依赖项和功能安装到其中,并使用它来服务于您的功能。
- 是否有办法在部署期间通过requirements.txt或其他方式强制云函数导入库的最新版本
我不确定我是否准确地遵循了,但你似乎认为重复安装会重用同一个映像。它们不会:每次更改源代码并进行部署时,它都会从头开始并执行上面的步骤。
这意味着,如果取消绑定依赖项(即没有==1.26.0
(,则每次运行部署时,都会获得这些项目的最新兼容版本。
注意:如果您的源文件没有更改,或者您只是在修改或添加环境变量,Cloud Functions将缓存以前的构建,并且不会重新评估您的依赖关系。目前,您必须修改源文件才能强制云函数重新生成您的函数。
- 是否有办法在部署期间通过requirements.txt或其他方式强制云函数导入库的最新版本
我对此进行了测试,发现与https://stackoverflow.com/a/60405672/1803897
您必须在requirements.txt
中指定更新的版本强制使用更新的库。否则将使用现有库。
https://cloud.google.com/functions/docs/concepts/exec#multiple_functions并没有说明在创建新实例时不重用某些文件。他们会复制一些文件,因为他们肯定不会为每个实例进行新的完整安装。那将花费太多时间。关于python库,同样的观点也是有效的。在每次部署时安装所有python库将花费太多时间。