无法使用sls在本地调用aws lambda

Unable to invoke aws lambda locally using sls

我使用 sls 框架来启动我的代码,直到今天它都运行良好。 serverless.yml 的配置没有修改,我尝试重新安装 sls,但似乎没有任何效果。

在抛出以下命令后,我的所有存储库都会出现以下消息: sls invoke local -f function_name --accountId $accountId

错误信息:

 
  TypeError: Cannot read property 'Fn::ImportValue' of undefined
      at /usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:188:22
      at Array.map (<anonymous>)
      at /usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:187:53
      at tryCatcher (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/util.js:16:23)
      at Function.Promise.attempt.Promise.try (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/method.js:39:29)
      at AwsInvokeLocal.loadEnvVars (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:154:25)
      at AwsInvokeLocal.tryCatcher (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:547:31)
      at Promise._settlePromise (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:604:18)
      at Promise._settlePromise0 (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:649:10)
      at Promise._settlePromises (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:729:18)
      at _drainQueueStep (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:93:12)
      at _drainQueue (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:86:9)
      at Async._drainQueues (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:15:14)
      at processImmediate (internal/timers.js:456:21)
      at process.topLevelDomainCallback (domain.js:137:15)```

我也遇到了同样的问题。原来最新版本的Serverless好像有bug。降级到以前版本的 sls 修复了我的问题。我降级到1.80版本,现在可以正常使用了。

我知道出了什么问题。调用 运行:

时出现警告
 Serverless Warning --------------------------------------
  A valid environment variable to satisfy the declaration 'env:MY_API_KEY' could not be found.

由于这是一个警告,我只是忽略了它并且它以前有效,但显然框架现在不喜欢它。通过删除变量或定义它来处理警告解决了我的问题。

对我来说,所有环境变量都必须初始化才能解决错误。

 Serverless Warning --------------------------------------
 
  A valid environment variable to satisfy the declaration 'env:<variable>' could not be found.

所以我这样做了 -

export <variable>=""

通过指定阶段修复

我遇到了同样的问题,通过在执行sls invoke local.

时指定阶段-s <STAGE>解决了这个问题

为什么这对我有用

我正在使用 serverless-dotenv-plugin,它让我可以像这样按阶段拆分我的 .env 文件:

  • .env.dev
  • .env.test
  • .env.prod

添加阶段有助于指定要用于本地调用的 .env 文件。没有它,无服务器试图导入没有附加阶段的 .env,这在我的项目中不存在。