我对Amazon Kinesis很新,所以也许这只是我理解中的一个问题,但在AWS Lambda FAQ中它说:
每个分片严格序列化发送到您的AWS Lambda函数的Amazon Kinesis和DynamoDB Streams记录.这意味着如果将两个记录放在同一个分片中,Lambda保证在使用第二个记录调用Lambda函数之前,将使用第一个记录成功调用它.如果一个记录的调用超时,受到限制或遇到任何其他错误,Lambda将重试直到成功(或记录达到其24小时到期),然后再转到下一个记录.不保证跨不同分片的记录顺序,并且每个分片的处理并行发生.
我的问题是,如果由于某种原因某些格式错误的数据被生产者放入一个分片并且当Lambda函数选择它时它会出错,然后只是不断重试会发生什么?这意味着该特定分片的处理将被错误阻止24小时.
处理应用程序错误的最佳做法是将问题包装在自定义错误中,并将此错误与所有成功处理的记录一起发送到下游并让消费者处理它?当然,在一个不可恢复的错误导致程序像空指针一样崩溃的情况下,这仍然无济于事:我们将在接下来的24小时内再次回到阻塞重试循环.
我有一个简单的lambda函数,它返回一个dict响应,另一个lambda函数调用该函数并打印响应.
lambda函数A.
def handler(event,context):
params = event['list']
return {"params" : params + ["abc"]}
Run Code Online (Sandbox Code Playgroud)
lambda函数B调用A
a=[1,2,3]
x = {"list" : a}
invoke_response = lambda_client.invoke(FunctionName="monitor-workspaces-status",
InvocationType='Event',
Payload=json.dumps(x))
print (invoke_response)
Run Code Online (Sandbox Code Playgroud)
invoke_response
{u'Payload': <botocore.response.StreamingBody object at 0x7f47c58a1e90>, 'ResponseMetadata': {'HTTPStatusCode': 202, 'RequestId': '9a6a6820-0841-11e6-ba22-ad11a929daea'}, u'StatusCode': 202}
Run Code Online (Sandbox Code Playgroud)
为什么响应状态为202?另外,如何从invoke_response获取响应数据?我找不到如何做到这一点的明确文件.
编辑代码内联显示"正在加载您的功能...",从不实际加载该功能.
而且由于函数没有加载,你显然无法编辑它.
我觉得有某种更新的今天(2017年11月30日)与λ,因为当你点击进行编辑的功能,有在显示配置和说添加触发器这是不是昨天有上一个新的部分.
当您向下滚动到"功能代码"部分时,它只会显示"正在加载您的功能......"并且从不执行任何其他操作.
还有其他人看到这种奇怪的行为吗?
编辑:在Windows 10上使用Firefox 57.当我检查Firefox控制台时,我收到以下警告/错误:
警告:
不推荐使用window.controllers/Controllers.不要将它用于UA检测.ace.js:1:18479
不推荐使用getPreventDefault().请改用defaultPrevented.globalnav-fe3b9e5995ba8d342d395cb57493ce54ac2b40bb.gz.js:2:39229
不推荐使用window.controllers/Controllers.不要将它用于UA检测.环境default.js:5987
不推荐使用Window对象的'content'属性.请改用'window.top'.家
错误:
未处理的承诺排斥抛出:DOMException {} polyfill.js:4326:11 onUnhandled/HTTPS://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:4326:11 [90] https://d3ifj4k507k5fs.cloudfront.net/ide -164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:1786:27 onUnhandled/< https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:4320:16 [46] https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c /polyfill.js:993:25 https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:2154:7 运行 https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:2140: 5 监听 https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:2144:3
未处理的承诺排斥抛出:DOMException {} polyfill.js:4326:11 onUnhandled/HTTPS://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:4326:11 [90] https://d3ifj4k507k5fs.cloudfront.net/ide -164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:1786:27 onUnhandled/< https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:4320:16 [46] https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c /polyfill.js:993:25 https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:2154:7 运行 https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:2140: 5 监听 https://d3ifj4k507k5fs.cloudfront.net/ide-164cb54be56918ce7c55af08ee13c6339e8ebc5c/polyfill.js:2144:3
我试图触发lambda执行来执行FIFO队列上的项目.除了民意调查,我们还有什么方法可以实现这一目标?我们刚刚了解到,我们无法直接从FIFO队列触发lambda执行,而FIFO队列目前仅支持标准队列.我还了解到我们不能将SNS主题订阅到FIFO队列 - 这也仅在标准队列上受支持.
在亚马逊发布更新之前,有没有人为此找到解决方法?
我在cdk 研讨会上创建了一个小型 lambda 函数。我正在打字稿中编写 lambda 函数,通过管道进行部署,该管道创建包含 lambda 函数的云形成堆栈。
我正在尝试在 lambda 中使用 sdk v3,如此处演示的那样。但后来我在这里看到了相互矛盾的文档。
这些错误是因为我尝试使用 V3 而我不应该使用,还是因为其他原因?处理程序设置正确,函数运行但失败并出现错误:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@aws-sdk/client-sns'\nRequire stack:\n- /var/task/ReceiveMessageLoraThing.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@aws-sdk/client-sns'",
"Require stack:",
"- /var/task/ReceiveMessageLoraThing.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:999:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
" at Module.load (internal/modules/cjs/loader.js:863:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
" at …Run Code Online (Sandbox Code Playgroud) 如何获取调用AWS Lambda函数的用户的身份ID(由AWS Cognito登录)?我是否必须在Lambda函数上使用SDK来获取身份标识?
有没有人拥有与AWS Lambda兼容的完全编译的pandas版本?
在搜索了几个小时之后,我似乎无法找到我正在寻找的内容并且关于此主题的文档不存在.
我需要在lambda函数中访问包,但是我没有成功地使包正确编译以便在Lambda函数中使用.
代替编译,任何人都可以提供可重现的步骤来创建二进制文件吗?
不幸的是,我无法成功复制任何关于主题的指南,因为它们大多数将大熊猫与我不需要的scipy结合起来并增加了额外的负担.
我试图从现有的lambda函数调用另一个lambda函数,如下所示(python 2.7)
from __future__ import print_function
import boto3
import json
lambda_client = boto3.client('lambda')
def lambda_handler(event, context):
invoke_response = lambda_client.invoke(FunctionName="teststack",
InvocationType='RequestResponse'
)
print(invoke_response)
return str(invoke_response)
Run Code Online (Sandbox Code Playgroud)
我得到的是以下的响应而不是实际的结果.当我运行teststack lambda时,它运行正常,但得到低于响应而不是teststackLambda函数返回的"test" .
{u'Payload': <botocore.response.StreamingBody object at ****>, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '******', 'HTTPHeaders': {'x-amzn-requestid': '******', 'content-length': '155', 'x-amzn-remapped-content-length': '0', 'connection': 'keep-alive', 'date': 'Sun, 17 Jul 2016 21:02:01 GMT', 'content-type': 'application/json'}}, u'StatusCode': 200}
Run Code Online (Sandbox Code Playgroud) 我正在使用gmNode.js 的包以及AWS Lambda上提供的默认ImageMagick安装.
const gm = require('gm').subClass({ imageMagick: true });
出于某种原因,某些图像的调整大小功能失败.
我使用Amazon Linux AMI(ami-hvm-2016.03.3.x86_64-gp2)创建了一个EC2实例.我安装了可用的(旧)6.x版ImageMagick yum.当我在EC2实例上使用该安装运行我的脚本时,它会再现我在Lambda上运行代码时看到的失败,确认这是导致失败的此版本IM的问题.
如果我安装GrpahicsMagick sudo yum install GraphicsMagick.这允许我的脚本无错误地执行调整大小.
const gm = require('gm').subClass({ imageMagick: false });
但是,我不确定如何在无服务器的部署中捆绑这个.如果我将GraphicsMagick安装到与脚本相同的文件夹中sudo yum --installroot=/var/task install GraphicsMagick,并使用此require语句运行我的脚本:
const gm = require('gm').subClass({ imageMagick: false, appPath: './usr/bin/' });
当我在EC2实例上运行脚本时,调整大小工作.但是,当我使用无服务器进行部署,并且脚本在Lambda中运行时,可执行文件似乎已损坏. gm在调用时失败并出现以下错误gm(buffer).size(/*...*/).
could not get the image size: ERR:
{"code":"EPIPE","errno":"EPIPE","syscall":"write"}
如何构建可以无服务器部署的ImageMagick或GraphicsMagick版本?
imagemagick node.js graphicsmagick aws-lambda serverless-framework
这个问题已经存在,但我认为它会对SO产生更大的影响.
我创建了一个AWS Lambda @ Edge函数,以便在Cloudfront URL到达Origin之前重写它.
AWS Lambda @ Edge函数在发布时会自动复制到所有区域,因此我对每个区域都看到这一点并不感到惊讶:
这里开始出现问题:
我删除了Lambda @ Edge,因为它是一个测试,我想开始一个全新的,但复制品不会同时被删除.
当时没什么大不了的,我以为我可以创建一个新的Lambda @ Edge功能.
但你不能,因为Cloudfront触发器一次只能使用一个函数(因为副本使用它,你不能创建一个新函数).
而且,触发器也不能删除.
所以现在我无法在任何地方使用Lambda @ Edge复制品,我无法删除,也无法创建类似的复制品.
TL; DR
我很感激能得到这个
弗朗索瓦的 帮助
编辑:
我绝对认为这是一个错误,因为在我的副本页面中,主ARN的链接以404响应.
lambda amazon-web-services amazon-cloudfront aws-lambda aws-lambda-edge
aws-lambda ×10
python-2.7 ×2
amazon-sqs ×1
aws-sdk-js ×1
imagemagick ×1
lambda ×1
node.js ×1
pandas ×1
python ×1