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.
的函数部署期间云函数如何安装依赖项的文档
我一定是遗漏了什么,因为我在这里找不到这个选项: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.
的函数部署期间云函数如何安装依赖项的文档