【问题标题】:AWS Serverless + Cloud Formation: Error on single function deploy - Windows 10 EnvAWS Serverless + Cloud Formation:单一功能部署时出错 - Windows 10 Env
【发布时间】:2020-02-02 15:06:12
【问题描述】:

我在使用ServerlessCloud FormationAWS 中部署单个函数时遇到问题。我使用Windows 10 - 64 bit 作为操作系统。

环境:

 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 安装有问题?

【问题讨论】:

    标签: node.js amazon-web-services npm amazon-cloudformation serverless


    【解决方案1】:

    更新serverless.yml中的函数:

    your_function:
      # ...
      package: {}
    

    然后是sls deploysls deploy function -f your_function

    【讨论】:

      【解决方案2】:

      于是发现新版Serverless(来自1.52)存在问题,导致用户无法部署单个lambda函数。

      除了回滚到1.51版本之外,现在基本上没有解决问题的办法。

      这里有一些细节:

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

      【讨论】:

        【解决方案3】:

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

        问题是 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
        

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

        【讨论】:

          猜你喜欢
          • 2022-08-19
          • 2018-01-24
          • 2021-07-15
          • 2021-02-24
          • 2018-08-20
          • 2021-04-26
          • 2018-12-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多