【问题标题】:GCF Node10 deploy failed: "Function failed on loading user code. Error message: Provided code is not a loadable module."GCF Node10 部署失败:“加载用户代码时功能失败。错误消息:提供的代码不是可加载的模块。”
【发布时间】:2019-09-20 01:45:19
【问题描述】:

在做了一些调整(一个相当大的 PR)之后,基本上将 Google Cloud Storage 连接添加到此功能,部署开始失败。不幸的是,错误消息非常不清楚,因此没有给我太多提示。在本地和测试中一切正常,所以我现在有点迷失方向。日志也不提供洞察力。

不幸的是,不能很容易地分享 PR 中的更改。最坏的情况是我会从那里恢复并逐个进行,但这是一个乏味的过程。

部署中使用的服务帐户可以访问已使用的存储桶(通过写入),但我也不认为此错误提示权限,否则我希望错误消息更具洞察力。

使用的命令:

gcloud beta functions deploy eventStreamPostEvent --runtime nodejs10 --memory 128MB --trigger-http --source ./dist --service-account $DEPLOY_SERVICE_ACCOUNT --verbosity debug

Deploying function (may take a while - up to 2 minutes)...
..............................failed.
DEBUG: (gcloud.beta.functions.deploy) OperationError: code=3, message=Function failed on loading user code. Error message: Provided code is not a loadable module.
Could not load the function, shutting down.
Traceback (most recent call last):
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/calliope/cli.py", line 985, in Execute
    resources = calliope_command.Run(cli=self, args=args)
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/calliope/backend.py", line 795, in Run
    resources = command_instance.Run(args)
  File "/usr/lib/google-cloud-sdk/lib/surface/functions/deploy.py", line 231, in Run
    enable_vpc_connector=True)
  File "/usr/lib/google-cloud-sdk/lib/surface/functions/deploy.py", line 175, in _Run
    return api_util.PatchFunction(function, updated_fields)
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/api_lib/functions/util.py", line 300, in CatchHTTPErrorRaiseHTTPExceptionFn
    return func(*args, **kwargs)
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/api_lib/functions/util.py", line 356, in PatchFunction
    operations.Wait(op, messages, client, _DEPLOY_WAIT_NOTICE)
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/api_lib/functions/operations.py", line 126, in Wait
    _WaitForOperation(client, request, notice)
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/api_lib/functions/operations.py", line 101, in _WaitForOperation
    sleep_ms=SLEEP_MS)
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/core/util/retry.py", line 219, in RetryOnResult
    result = func(*args, **kwargs)
  File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/api_lib/functions/operations.py", line 65, in _GetOperationStatus
    raise exceptions.FunctionsError(OperationErrorToString(op.error))
FunctionsError: OperationError: code=3, message=Function failed on loading user code. Error message: Provided code is not a loadable module.
Could not load the function, shutting down.

ERROR: (gcloud.beta.functions.deploy) OperationError: code=3, message=Function failed on loading user code. Error message: Provided code is not a loadable module.
Could not load the function, shutting down.

我希望任何人都知道是什么导致了这个错误。

Stackdriver 日志只显示:

 protoPayload: {
  @type:  "type.googleapis.com/google.cloud.audit.AuditLog"   
  authenticationInfo: {…}   
  methodName:  "google.cloud.functions.v1.CloudFunctionsService.UpdateFunction"   
  requestMetadata: {
   destinationAttributes: {…}    
   requestAttributes: {…}    
  }
  resourceName:  "projects/<projectName>/locations/europe-west1/functions/eventStreamPostEvent"   
  serviceName:  "cloudfunctions.googleapis.com"   
  status: {
   code:  3    
   message:  "INVALID_ARGUMENT"    
  }
 }

【问题讨论】:

  • 1) 指定 --entry-point 以便 Cloud Functions 知道从哪里开始您的代码。 2) 使用 gcloud 的 beta 功能需要什么功能?意思是如果非测试版支持该功能,则不要调用测试版功能。 3) 编辑您的问题并包含您的代码。
  • 1) 入口点与以前相似(也可以使用)并且与函数名称相同。 2) 节点 10 + 指定运行该功能的服务帐户是一个 beta 功能。 3)变更日志很大,所以希望有人能认识到这个错误。否则我会很明显地分解它以进行更深入的调试。如果错误信息明显更具描述性,那就太好了。
  • 进一步调试让我认为从临时云存储位置下载 CF 时出错,它在部署前存放文件。虽然这是 Google 内部的事情,但我会尝试调试它。
  • 尝试压缩包并复制到 gs://。然后使用 Cloud Storage 作为源重试。
  • 您能否按照@JohnHanley 评论中的建议成功部署?

标签: node.js google-cloud-platform google-cloud-functions google-cloud-storage


【解决方案1】:

通常(或对我而言)OperationError: code=3 的原因是导入您定义的模块时出错。

通过以下方式修复此问题:

  1. 删除节点模块 rm -r .\node_modules\

  2. 可选:您可以在删除 node_modules 后执行npm i,并在部署之前在本地测试您的功能。

  3. 然后删除.gcloudignore 并照常部署。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,似乎消息来自here

    当你的函数根文件夹中有多个 .js 文件和一些子文件夹时,默认情况下没有任何规范,你需要将入口模块命名为 index.js 或 function.js。

    我发现通过使用 node8 部署该功能。错误信息应该更清楚...

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2020-10-31
      • 2019-12-24
      相关资源
      最近更新 更多