【问题标题】:GCF deploy with local dependency本地依赖的 GCF 部署
【发布时间】:2021-01-14 19:26:37
【问题描述】:

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

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。 v1/pkg 的总和、.gcloudignore 和 vendor/

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/pkgv1/api/pets/create

一样被供应到每个 CRUD 函数/目录中

问题: 项目在生产应用程序上是巨大的,它包含(当然)更多的方法和更多的代码,一切都滞后,因为那些供应商目录是 ~4MB

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

我们尝试了什么

  • 使用私有仓库而不是本地路径 -> 部署时不工作

  • 在 root 中使用 functions.go,所有函数都在那里定义 -> 为每个函数上传完整的源代码,我们显然不希望这样

  • 将 /pkg 中的代码分别用于每个函数 (c/p),这是不可维护且没有任何意义的

  • How can I use a sub-packages with Go on Google Cloud Functions? -> 这不是我们的用例,“helperpackage”应该在树的上层

【问题讨论】:

  • 你如何部署你的功能?
  • 定位到v1/api/pets/create,然后:gcloud functions deploy --trigger-http --runtime=go113 --entry-point=

标签: rest go google-cloud-platform google-cloud-functions go-modules


【解决方案1】:

没有什么神奇的事情可以做。像你的第二次尝试是最好的,但没有在根目录使用 function.go

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

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

但是,如果你真的想限制上传的代码,你可以使用--ignore-file= parameter

【讨论】:

  • 但这正是问题所在,不可能部署依赖于树中上部内容的代码...部署功能(可能需要一段时间 - 最多 2 分钟).. 。失败的。错误: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: src/server/function.go:12:2: 在任何地方都找不到包“bitbucket.org/company/project/pkg/model”来自:/usr/local/go/src/bitbucket.org/company/project/pkg/model(来自 $GOROOT)/workspace/src/bitbucket.org/company/project/pkg/model(来自 $GOPATH)跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 2020-05-31
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2020-08-02
相关资源
最近更新 更多