首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘'serverless -f hello’给KeyError

‘'serverless -f hello’给KeyError
EN

Stack Overflow用户
提问于 2020-09-14 17:22:51
回答 1查看 135关注 0票数 0

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

serverless.yml:

代码语言:javascript
复制
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

variables.yml:

代码语言:javascript
复制
THE_ANSWER: 42

handler.py:

代码语言:javascript
复制
import os

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

我的终端中的错误:

代码语言:javascript
复制
{
    "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 hello -f hello‘。命令'sls deploy‘已成功执行。

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

EN

回答 1

Stack Overflow用户

发布于 2020-09-15 12:44:25

首先,yml脚本中有一个错误:

无服务器错误

环境变量0中的无效字符

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

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

sls调用--f hello

{ "statusCode":200,"body":“答案是: 42”}

serverless.yml

代码语言:javascript
复制
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

variables.yml

代码语言:javascript
复制
THE_ANSWER: 42
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63881532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档