无法使用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,这在我的项目中不存在。
我使用 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,这在我的项目中不存在。