AWS Serverless + Cloud Formation:单一功能部署错误 - Windows 10 Env

AWS Serverless + Cloud Formation: Error on single function deploy - Windows 10 Env

关于使用 ServerlessCloud FormationAWS 中部署单个函数,我遇到了问题。我正在使用 Windows 10 - 64 bit 作为 OS.

环境:

 Your Environment Information ---------------------------
     Operating System:          win32
     Node Version:              10.16.3
     Framework Version:         1.52.1
     Plugin Version:            3.0.0
     SDK Version:               2.1.1

基本上,当我运行 经典部署我所有的 AWS 环境 (sls deploy -s dev) 时,一切正常。但是当我尝试部署单个 Lambda 函数时,我对其进行了更改,使用此命令:

sls deploy function -f MyLambdaFunc -s dev

我收到这个错误:

TypeError: Cannot read property 'artifact' of undefined
      at ServerlessPythonRequirements.BbPromise.bind.then.then.then (C:\Users\user\Documents\company\client\AWS_environment\deployment\node_modules\serverless-python-requirements\index.js:176:48)
  From previous event:
      at PluginManager.invoke (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:505:22)
      at getHooks.reduce.then (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:540:24)
  From previous event:
      at PluginManager.run (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:540:8)
      at variables.populateService.then (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\lib\Serverless.js:115:33)
      at runCallback (timers.js:705:18)
      at tryOnImmediate (timers.js:676:5)
      at processImmediate (timers.js:658:5)
      at process.topLevelDomainCallback (domain.js:126:23)
  From previous event:
      at Serverless.run (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\lib\Serverless.js:102:74)
      at serverless.init.then (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\bin\serverless.js:67:28)
      at C:\Users\user\AppData\Roaming\npm\node_modules\serverless\node_modules\graceful-fs\graceful-fs.js:136:16
      at C:\Users\user\AppData\Roaming\npm\node_modules\serverless\node_modules\graceful-fs\graceful-fs.js:57:14
      at FSReqWrap.args [as oncomplete] (fs.js:140:20)
  From previous event:
      at initializeErrorReporter.then (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\bin\serverless.js:67:6)
      at runCallback (timers.js:705:18)
      at tryOnImmediate (timers.js:676:5)
      at processImmediate (timers.js:658:5)
      at process.topLevelDomainCallback (domain.js:126:23)
  From previous event:
      at Object.<anonymous> (C:\Users\user\AppData\Roaming\npm\node_modules\serverless\bin\serverless.js:53:39)
      at Module._compile (internal/modules/cjs/loader.js:778:30)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
      at Module.load (internal/modules/cjs/loader.js:653:32)
      at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
      at Function.Module._load (internal/modules/cjs/loader.js:585:3)
      at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
      at startup (internal/bootstrap/node.js:283:19)
      at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

有人知道为什么吗?也许我在 Windows 10 上的 npm 安装有问题?

所以我发现新版本的Serverless(来自1.52)有问题,所以用户无法部署单个lambda函数。

现在基本上没有办法解决这个问题,只能回滚到1.51版本。

这里有一些细节:

https://github.com/serverless/serverless/issues/6752

我找到了解决方法,但不确定副作用。

问题出在 serverless-python-requirements/index.js 文件中的以下行(在我的版本中为第 176 行):

arguments[1].functionObj && 
    arguments[1].functionObj.package.artifact.

它只是假设 serverless.yml 中的函数定义中存在 package.artifact 路径。

作为解决方法,我按如下方式将 "package: artifact:" 添加到我的函数中并且它起作用了:

hello:
    handler: hello.handler
    package:
      artifact:
    events:
      - http:
          path: hello
          method: get

同样,我不确定这是否会破坏其他任何东西。我刚刚尝试了一个单独的功能部署并且它有效。但是我没有做详细的测试。

serverless.yml 中更新您的功能:

your_function:
  # ...
  package: {}

然后sls deploysls deploy function -f your_function