【问题标题】:Unable to invoke aws lambda locally using sls无法使用 sls 在本地调用 aws lambda
【发布时间】:2021-02-26 08:46:31
【问题描述】:

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

在抛出以下命令后,我的所有 repos 都会出现以下消息: 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)```

【问题讨论】:

    标签: aws-lambda serverless-framework


    【解决方案1】:

    通过指定阶段修复

    我遇到了同样的问题,并通过在执行sls invoke local 时使用-s &lt;STAGE&gt; 指定阶段来解决它。

    为什么这对我有用

    我正在使用serverless-dotenv-plugin,它可以让我按阶段拆分我的 .env 文件,如下所示:

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

    添加阶段有助于指定用于本地调用的 .env 文件。没有它,Serverless 会尝试导入没有附加阶段的 .env,这在我的项目中不存在。

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题。事实证明,最新版本的 Serverless 似乎有 bug。降级到以前版本的 sls 修复了我的。我降级到 1.80 版,现在可以正常使用了。

      【讨论】:

      • 您能否分享或引用您关于 Serverless 存在错误的消息来源?
      【解决方案3】:

      我知道出了什么问题。调用运行时出现警告:

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

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

      【讨论】:

        【解决方案4】:

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

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

        所以我这样做了-

        export <variable>=""
        

        【讨论】:

          猜你喜欢
          • 2018-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-17
          • 1970-01-01
          • 2021-04-01
          • 2017-03-09
          • 2017-11-13
          相关资源
          最近更新 更多