google 无需部署即可打包的云函数命令

google cloud functions command to package without deploying

我一定是遗漏了什么,因为我在这里找不到这个选项:https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploy

我想打包我的函数并将其上传到存储桶:--stage-bucket 但实际上并没有部署函数

我将使用 Deployment Manager 模板从同一个包部署多个函数(不同的处理程序):type: 'gcp-types/cloudfunctions-v1:projects.locations.functions'

gcloud beta functions deploy 坚持打包和部署功能。 gcloud beta functions package 命令在哪里?

这是我计划 运行:

的 DM 模板示例
resources:
  - name: resource-name
    type: 'gcp-types/cloudfunctions-v1:projects.locations.functions'
    properties:
      labels:
        testlabel1: testlabel1value
        testlabel2: testlabel2value
      parent: projects/my-project/locations/us-central1
      location: us-central1
      function: function-name
      sourceArchiveUrl: 'gs://my-bucket/some-zip-i-uploaded.zip'
      environmentVariables:
        test: '123'
      entryPoint: handler
      httpsTrigger: {}
      timeout: 60s
      availableMemoryMb: 256
      runtime: nodejs8

编辑:我意识到我还有一个问题。当我上传一个 zip 文件时,该 zip 文件是否需要包含依赖项?我是否必须先执行 npm install 或 pip install 并将这些包包含在 zip 中,或者云功能是否读取我的 requirements.txt 和 packages.json 并为我执行?

SDK CLI 不提供打包函数的命令。

link 将为您提供有关如何将文件压缩在一起的详细信息。只需遵循两点:

  • 文件类型应为 zip 文件。
  • 文件大小不应超过 100MB 限制。

然后你需要调用一个API,其中returns一个签名URL来上传包。

上传后,您可以指定 URL 减去额外参数作为位置。

"package" 您的部署没有 gcloud functions 命令,大概是因为这相当于创建一个 zip 文件并将其放入正确的位置,然后引用该位置。

可能最简单的方法是生成一个 zip 文件并将其复制到 GCS 存储桶中,然后将模板上的 sourceArchiveUrl 设置到正确的位置。

还有两种方法:

  • 您可以指向源存储库中的源代码(这将使用模板的 sourceRepository 部分)。
  • 您可以直接 url(使用 this API)使用 PUT 请求上传 ZIP 文件,在那里上传代码,然后将相同的 URL 传递给模板上的 signedUploadUrl。这是@John 的回答中讨论的方法。它不需要您自己进行任何签名,同样不需要您创建自己的存储桶来存储代码("Signed URL" 指的是私有云函数位置)。

至少使用这两种 zip 文件方法,您不需要包含(公开可用的)依赖项 -- package.json(或 requirements.txt)文件将由云函数处理以进行安装他们。我不知道 SourceRepository 方法,但我希望它的工作方式类似。有关于 node and python.

的函数部署期间云函数如何安装依赖项的文档