我有一个用Node.JS编写的无服务器lambda函数.
返回错误代码的最佳/正确方法是什么?
我现在使用的模式(它的工作原理!)是:
module.exports.endpoint = (event, context, callback) => {
const response = {
statusCode: 404,
body: JSON.stringify({ message: 'Hello World!' })
};
callback(null, response);
}
Run Code Online (Sandbox Code Playgroud)
当我拨打电话时,例如从POSTMAN到我的终端,我得到:
Status: 404 Not Found 这正是我所期待的.
而且,在日志中我可以看到:
Serverless: GET / (?: get)
Serverless: [404] {"statusCode":404,"body":"{\"message\":\"Hello World!\"}"}
Run Code Online (Sandbox Code Playgroud)
这很好用.
令我困扰的是,我正在传递null错误.看看其他一些教程/示例我发现了以下模式:
https://aws.amazon.com/blogs/compute/error-handling-patterns-in-amazon-api-gateway-and-aws-lambda/
https://serverless.com/framework/docs/providers/aws/events/apigateway/
callback ("the sky is falling!");
callback("[BadRequest] Validation error: Missing field 'name'");
callback("[404] Not Found");
callback(new Error('[404] Not found'));
callback(JSON.stringify(myErrorObj));
所有这些都很有意义,你可以指定HTTP状态代码 - 但我最终获得的是HTTP状态代码200.当我查看日志时,我可以看到错误是在200之后:
Serverless: GET / (?: get)
Serverless: …Run Code Online (Sandbox Code Playgroud) node.js aws-lambda aws-api-gateway serverless-framework serverless
django-filter允许您轻松声明模型的可过滤字段。
例如,
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = ['username']
Run Code Online (Sandbox Code Playgroud)
提供与此等效的字段exact的查找...username
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = {
'username': ['exact']
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种支持给定字段的所有可能的查找过滤器的方法,这样我就不必这样做:
class UserFilter(django_filters.FilterSet):
class Meta:
model = User
fields = {
"username": ["exact", "iexact", "contains", "icontains", "startswith", ..., etc.]
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读有关如何编写Node Restful App的教程
https://github.com/mjhea0/node-postgres-promises
我想将此应用程序作为lambda函数运行。我担心的是依赖管理。
如何将所有npm依赖项告诉lambda?
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var pug = require('pug');
var routes = require('./routes/index');
Run Code Online (Sandbox Code Playgroud)
在本教程中,它们确实做到了npm install,而aws毫无用处,我们没有像这样的cli命令的概念。
我正在使用无服务器,并且试图弄清楚如何重写此 serverless.yml 文件,这样我就不会重复每个函数的环境变量。有没有办法全局设置环境变量?
service: test-api
frameworkVersion: ">=1.2.0 <2.0.0"
provider:
name: aws
runtime: nodejs12.x
timeout: 30
stage: dev
memorysize: 2048
region: us-east-2
logRetentionInDays: 21
functions:
doCreate:
handler: functions/do-create.handler
environment:
DB_PORT: ${ssm:/${self:custom.stage}/db_port}
DB_URL: ${ssm:/${self:custom.stage}/db_url}
API_KEY: ${ssm:/${self:custom.stage}/api_key}
ENV: "${self:custom.stage}"
SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
doUpdate:
handler: functions/do-update.handler
environment:
DB_PORT: ${ssm:/${self:custom.stage}/db_port}
DB_URL: ${ssm:/${self:custom.stage}/db_url}
API_KEY: ${ssm:/${self:custom.stage}/api_key}
ENV: "${self:custom.stage}"
SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda serverless-framework serverless
我试图使用 Dynamodb 流和 ProcessPoolExecutor 同时触发 lambda。这是我收到的错误。
场景是当一堆记录(例如 1000 条记录)落入 dynamodb(批量大小 10)时,流会触发 lambda。我之前使用过 ThreadPoolExecutor,它可以工作,但是在一个批次的 10 个进程中,只有 5-8 条记录被处理,剩下的就剩下了。每条记录大约需要 50 秒才能完成。AWS lambda 的 5 分钟限制是否跳过了 ThreadPoolExecutor 中的其他记录。另外,使用 ProcessPoolExecutor 将帮助我解决 ThreadPoolExecutor 的问题???
[Errno 38] Function not implemented: OSError
Traceback (most recent call last):
File "/var/task/ycf_calculator.py", line 464, in main
with ProcessPoolExecutor(max_workers=25) as executor:
File "/var/lang/lib/python3.6/concurrent/futures/process.py", line 390, in __init__
EXTRA_QUEUED_CALLS)
File "/var/lang/lib/python3.6/multiprocessing/context.py", line 102, in Queue
return Queue(maxsize, ctx=self.get_context())
File "/var/lang/lib/python3.6/multiprocessing/queues.py", line 42,in __init__
self._rlock = ctx.Lock()
File "/var/lang/lib/python3.6/multiprocessing/context.py", line 67, in Lock …Run Code Online (Sandbox Code Playgroud) 我正在研究aws lambda-lex,我发现用node.js编写了咖啡机器人示例代码。
// --------------- Main handler -----------------------
// --------------- in node.js -----------------------
// Route the incoming request based on intent.
// The JSON body of the request is provided in the event slot.
exports.handler = (event, context, callback) => {
try {
dispatch(event, (response) => callback(null, response));
} catch (err) {
callback(err);
}
};
Run Code Online (Sandbox Code Playgroud)
我想使用回调参数,但在python中找不到
// --------------- Main handler -----------------------
// --------------- in python -----------------------
def lambda_handler(event, context):
dispatch(event)
# >>> this handler doesn't include callback <<<
Run Code Online (Sandbox Code Playgroud)
如果需要,将两者进行比较
python文档 vs …
aws-lambda ×5
node.js ×3
python ×2
serverless ×2
angularjs ×1
django ×1
ng-grid ×1
python-3.x ×1