【问题标题】:'serverless invoke -f hello' gives KeyError'无服务器调用 -f hello' 给出 KeyError
【发布时间】:2020-09-14 09:22:51
【问题描述】:

我正在学习如何使用无服务器框架的教程。目标是部署一个 Django 应用程序。本教程建议将必要的环境变量放在单独的 yml 文件中。不幸的是,按照教程让我得到了一个 KeyError。 我有一个 serverless.yml、variables.yml 和一个 handler.py。我将 incert 下面的所有代码以及给定的错误。

serverless.yml:

service: serverless-django
custom: ${file(./variables.yml)}
provider:
  name: aws
  runtime: python3.8
functions:
  hello:
    environment: 
      - THE_ANSWER: ${self:custom.THE_ANSWER}
    handler: handler.hello

变量.yml:

THE_ANSWER: 42

handler.py:

import os

def hello(event, context):
    return {
        "statusCode": 200,
        "body": "The answer is: " + os.environ["THE_ANSWER"]
    }

我的终端中的错误:

{
    "errorMessage": "'THE_ANSWER'",
    "errorType": "KeyError",
    "stackTrace": [
        "  File \"/var/task/handler.py\", line 7, in hello\n    \"body\": \"The answer is: \" + os.environ[\"THE_ANSWER\"]\n",
        "  File \"/var/lang/lib/python3.8/os.py\", line 675, in __getitem__\n    raise KeyError(key) from None\n"
    ]
}
 
  Error --------------------------------------------------
 
  Error: Invoked function failed
      at AwsInvoke.log (/snapshot/serverless/lib/plugins/aws/invoke/index.js:105:31)
      at AwsInvoke.tryCatcher (/snapshot/serverless/node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (/snapshot/serverless/node_modules/bluebird/js/release/promise.js:547:31)
      at Promise._settlePromise (/snapshot/serverless/node_modules/bluebird/js/release/promise.js:604:18)
      at Promise._settlePromise0 (/snapshot/serverless/node_modules/bluebird/js/release/promise.js:649:10)
      at Promise._settlePromises (/snapshot/serverless/node_modules/bluebird/js/release/promise.js:729:18)
      at _drainQueueStep (/snapshot/serverless/node_modules/bluebird/js/release/async.js:93:12)
      at _drainQueue (/snapshot/serverless/node_modules/bluebird/js/release/async.js:86:9)
      at Async._drainQueues (/snapshot/serverless/node_modules/bluebird/js/release/async.js:102:5)
      at Immediate._onImmediate (/snapshot/serverless/node_modules/bluebird/js/release/async.js:15:14)
      at processImmediate (internal/timers.js:456:21)
      at process.topLevelDomainCallback (domain.js:137:15)
 
     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
 
  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com
 
  Your Environment Information ---------------------------
     Operating System:          linux
     Node Version:              12.18.1
     Framework Version:         2.0.0 (standalone)
     Plugin Version:            4.0.2
     SDK Version:               2.3.1
     Components Version:        3.1.2

我正在尝试的命令是“sls invoke -f hello”。 'sls deploy' 命令已经成功执行。

我是无服务器的新手,所以请告诉我如何解决这个问题,或者是否需要更多信息。

【问题讨论】:

    标签: serverless-framework serverless aws-serverless


    【解决方案1】:

    首先yml脚本有错误:

    无服务器错误 ----------------------------------------

    环境变量 0 中有无效字符

    The error is defining environment variables as an array instead of key-value pairs

    然后在部署之后,一切顺利(sls deploy -v

    sls 调用 --f hello

    { “状态码”:200, “body”:“答案是:42” }


    serverless.yml

    service: sls-example
    
    custom: ${file(./variables.yml)}
    
    provider:
      name: aws
      runtime: python3.8
    
    functions:
      hello:
        environment:
            THE_ANSWER: ${self:custom.THE_ANSWER}
        handler: handler.hello
    

    变量.yml

    THE_ANSWER: 42
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-13
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多