GCF部署时具有本地依赖性

问题描述

假设我们有这样的代码结构:

v1/
---api/
------pets/
---------create/
------------server.go
------------cmd/
---------------main.go
------------go.mod
------------go.sum
------------.gcloudignore
------------vendor/
---------get/
---------update/
---------delete/
------food/
---------create/
---------get/
---pkg/
------constants/
---------constants.go
------model/
---------pet.go
---------food.go
------store/
---------firestore.go
------validate/
---------header.go
------go.mod
------go.sum

每个CRUD函数目录(pets / get,food / create等)都与pets / create相同,因此它们都包含:用于测试的server.go,cmd / main.go,go.mod,go。总和,.gcloudignore和v1 / pkg的供应商/

v1 / api / pets / create / go.mod 包含:

module bitbucket.org/company/project/v1/api/pets/create

go 1.14

replace bitbucket.org/company/project/v1/pkg => ../../../pkg

require (
    bitbucket.org/company/project/v1/pkg v0.0.0-00010101000000-000000000000
    github.com/GoogleCloudplatform/functions-framework-go v1.1.0
)

v1 / api / pets / create / server.go 包含将部署到GCF的方法

.gcloudignore 包含go.mod和go.sum以在部署时忽略它们

v1 / pkg 被提供给每个CRUD函数/目录,就像 v1 / api / pets / create

问题: 该项目在生产应用程序上非常庞大,它(当然)包含更多的方法和更多的代码,所有这些东西都滞后了,因为这些供应商目录约为4MB

如何将v1 / pkg包含在每个CRUD文件夹中?你们最简单的方法是什么?

我们尝试的内容

解决方法

没有魔术可以做。像您第二次尝试那样的东西是最好的选择,但是不要在根目录下使用function.go

gcloud functions deploy --source=v1/api/pets/create <function_name> --trigger-http --runtime=go113 --entry-point=<method-name>

上传整个项目不是一个真正的问题,因为在Go中,仅保留编译的二进制文件,而所有源文件都被丢弃。因此,二进制文件旁边将没有多余的文件。

但是,如果您确实想限制上传的代码,则可以使用--ignore-file= parameter