serverless-framework - '无服务器调用 -f hello' 给出 KeyError
问题描述
我正在按照教程学习如何使用无服务器框架。目标是部署一个 Django 应用程序。本教程建议将必要的环境变量放在单独的 yml 文件中。不幸的是,按照教程让我得到了一个 KeyError。我有一个 serverless.yml、variables.yml 和一个 handler.py。我将 incert 下面的所有代码以及给定的错误。
无服务器.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
处理程序.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”已成功执行。
我是无服务器的新手,所以请让我知道如何解决这个问题,或者是否需要更多信息。
解决方案
首先yml脚本有错误:
无服务器错误 ----------------------------------------
环境变量 0 中的无效字符
然后在部署之后,一切顺利(sls deploy -v)
sls 调用 --f 你好
{ "statusCode": 200, "body": "答案是:42" }
无服务器.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
推荐阅读
- bluetooth-lowenergy - 间歇性出现连接错误:使用 gatttool 连接时未实现功能 (38)
- loops - 用于遍历以特定字符串开头的目录的批处理脚本
- spring-boot - Flyway 未运行迁移脚本
- javascript - 获取请求返回 html 代码而不是真实数据
- python - 如何将返回字典的函数中的一些键值分配给另一个字典?
- python - tkinter 上的 Checkbutton 无论如何都保留它的价值
- python - 使用 pxssh 时 prompt() 为 False
- git - 解压缩存储库文件夹后 git status 卡住
- ios - Swift iOS将字符串“Hello”屏蔽为“Hxxxo”
- typescript - 如果不允许调用者,则在 TypeScript 中阻止方法调用