如何使用CloudBuild的--cache-from特性为CloudFunctions共享依赖基础
问题解答
完全可以使用Cloud Build的--cache-from特性让多个Cloud Function共用相同的依赖基础,能有效避免重复下载安装公共依赖,大幅缩短整体构建部署耗时。
你当前的流程是每次部署单个函数时,都会把当前函数代码、公共工具模块、公共依赖声明合并后直接部署,没有复用已构建好的依赖内容。我们可以通过预构建公共依赖缓存、改造构建流程拉取缓存复用两个环节实现目标。
具体改造步骤
第一步:首次构建公共依赖基础镜像并推送至容器镜像仓库,作为后续所有构建的缓存源
你可以先跑一次构建,把包含所有公共依赖(类库+localpackage工具模块)的镜像推到你项目的Artifact Registry或者Container Registry里,镜像地址示例为gcr.io/你的项目ID/gcf-common-cache:latest第二步:改造你的Cloud Build yaml配置,增加依赖安装环节并启用缓存
改造后的配置示例如下:
steps: # 1. 拼接函数源码包(和原有逻辑一致) - name: 'bash' args: - '-c' - | echo 'Creating gcf_source directory for ${_GCF_NAME}' mkdir _gcf_source cp -r cloudfuncs/${_GCF_NAME}/. _gcf_source rm -f _gcf_source/readme.md mkdir _gcf_source/localpackage touch _gcf_source/localpackage/__init__.py cp cloudfuncs/localpackage/gcf_utils.py _gcf_source/localpackage echo "" >> _gcf_source/requirements.txt cat cloudfuncs/localpackage/requirements.txt >> _gcf_source/requirements.txt # 2. 复用缓存安装依赖 - name: 'python:3.10-slim' # 替换为和你Cloud Function运行时一致的Python版本 args: - '-c' - | pip install -r _gcf_source/requirements.txt -t _gcf_source/lib volumes: - name: 'pip_cache' path: '/root/.cache/pip' # 这里指定从你预存的公共缓存镜像拉取缓存 cache_from: - 'gcr.io/你的项目ID/gcf-common-cache:latest' # 3. 部署Cloud Function,指定lib目录为依赖路径 - name: 'gcr.io/cloud-builders/gcloud' args: - functions - deploy - ${_GCF_NAME} - --source=./_gcf_source - --runtime=python310 # 替换成你的运行时版本 # 全局指定缓存镜像,构建完成后更新缓存镜像方便后续复用 images: - 'gcr.io/你的项目ID/gcf-common-cache:latest' options: cache_from: - 'gcr.io/你的项目ID/gcf-common-cache:latest'
- 第三步:触发构建时加上
--cache-from参数
执行构建的命令调整为:
gcloud builds submit --cache-from=gcr.io/你的项目ID/gcf-common-cache:latest --config=你的配置文件.yaml
注意事项
- 公共依赖更新时,你只需要重新跑一次缓存镜像的构建,所有后续的函数部署都会自动使用新的依赖缓存
- 如果你的不同函数还有额外的私有依赖,只需要在对应函数自己的requirements.txt里声明即可,不会影响公共缓存的复用
- 缓存镜像的Python版本必须和你Cloud Function使用的运行时版本保持一致,避免出现依赖兼容性问题
内容的提问来源于stack exchange,提问作者syldman
相关产品推荐
相关产品推荐

