我不小心将一些 Java 代码部署到 AWS Lambda 中,其中包含以下明显有缺陷的 getter:
public String getLocation() {
return this.getLocation();
}
Run Code Online (Sandbox Code Playgroud)
Lambda 函数配置了 15 秒和 320 个月的限制。它由 DynamoDB 流触发。部署有问题的代码后,我在 22 点 17 分左右修改了我的 DynamoDB 表,因此执行了代码。我查看了日志,正如您从前一个函数中所期望的那样,我遇到了一个带有很长堆栈跟踪的经典 StackOverflowError。然而,我惊讶地发现这并没有停止继续执行并报告更多堆栈溢出错误(在 CloudWatch 中记录)的函数。当我意识到即使在 15 秒限制之后该功能也不会停止时,我更加担心。我找不到任何手动停止它的方法,所以我只是在 22 点 30 分左右从 Lambda 控制台中删除了它,最终将它杀死了。
此外,我确信我没有接触过我的 DynamoDB 表(并且没有其他人可以访问它),也没有尝试以任何其他方式执行 Lambda 函数。为什么它会一直执行几分钟直到我删除它?我当然应该更加小心并首先进行一些本地预测试,但是持续时间限制是否应该保证一旦达到就不会执行任何操作?
感谢您的帮助。
iam使用Web控制台在amazon dynamoDB中创建了一个表.添加一些数据后,这是我的表结构.
101 | manaf | haaaai
102 | manaf | 你好
我需要在两个res限制之间获取数据.
这是我在js中的代码.
var AWS = require("aws-sdk");
AWS.config.update({
region: "regionName",
});
var docClient = new AWS.DynamoDB.DocumentClient()
var table = "testTable";
var params = {
TableName: table,
FilterExpression :['userid = :id','res >= :val1','res <= :val2'],
ExpressionAttributeValues : {':id' : 'manaf','res':101, 'res':102}
};
docClient.scan(params, function(err, data) {
if (err) console.log(err);
else console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
但我得到这样的错误.
{ [InvalidParameterType: Expected params.FilterExpression to be a string]
message: 'Expected params.FilterExpression to be …Run Code Online (Sandbox Code Playgroud) javascript amazon-web-services amazon-dynamodb amazon-dynamodb-streams
我正在使用DynamoDB Streams + Kinesis客户端库(KCL).如何衡量在流中创建事件和在KCL端处理事件之间的延迟?
据我所知,KCL的MillisBehindLatest度量标准特定于Kinesis Streams(不是DynamoDB流).
approximateCreationDateTime记录属性具有分钟级近似值,这对于亚秒级延迟系统中的监视是不可接受的.
您能否帮助我们了解一些监控DynamoDB Streams延迟的有用指标?
streaming amazon-dynamodb amazon-kinesis amazon-kcl amazon-dynamodb-streams
我们正在试验一种新的无服务器解决方案,其中外部提供程序写入 DynamoDB,DynamoDB Stream 对新的写入事件做出反应,并触发 AWS Lambda 函数来传播更改?
到目前为止,它运行良好,但是,有时我们会注意到数据被延迟,例如 Lambda 几分钟内没有更新。
在查阅了大量 DynamoDB Stream 文档后,他们使用的唯一术语是“近实时流记录”,但通常什么是“近实时”?我们在这里看到的可能的延迟是什么?
real-time amazon-web-services amazon-dynamodb aws-lambda amazon-dynamodb-streams
我正在尝试从dynamodb控制台界面导入数据,但无法成功。
数据是
{"_id":{"s":"d9922db0-83ac-11e6-9263-cd3ebf92dec3"},"applicationId":{"S":"2"},"applicationName":{"S":"Paperclip"},"ip":{"S":"127.0.0.1"},"objectInfo":{"S":"elearning_2699"},"referalUrl":{"S":"backported data"},"url":{"S":""},"userAgent":{"S":""},"userEmail":{"S":"karthick.shivanna@test.com"},"userId":{"S":"508521"},"userName":{"S":"Karthik"},"created":{"S":"1486983137000"},"verb":{"S":"submitproject"},"dataVals":{"S":"{\"projectid\":5,\"name\":\"Test 1\",\"domain\":\"apparel\",\"submittype\":[\"Writeup\",\"Screenshots\"],\"passcriteria\":\"Percentage\",\"taemail\":\"bhargava.gade@test.com\",\"attemptNo\":1,\"submitDate\":1467784988}"},"eventTime":{"S":"1467784988000"}}
Run Code Online (Sandbox Code Playgroud)
我低于错误
错误:java.lang.RuntimeException:com.amazonaws.AmazonServiceException:提供的AttributeValue为空,必须完全包含一种受支持的数据类型(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4JQQSO5AEMVJF)。 apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.handleException(DynamoDBFibonacciRetryer.java:107)位于org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.runWithRetry(DynamoDBFiamoaccoop.atch.dy.dy.dy.dy.dy org.apache.hadoop.dynamodb.DynamoDBClient.putBatch(DynamoDBClient.java:170)处org.apache.hadoop.dynamodb.write.AbstractDynamoDBRecordWriter.write(AbstractDynamoDBRecordWriter.java:91)处org.apache.hadoop .mapred。org.apache.hadoop.mapred.MapTask $ OldOutputCollector.collect(MapTask.java:596)的org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper)的MapTask $ DirectMapOutputCollector.collect(MapTask.java:844)。 j errorStackTrace amazonaws.datapipeline.taskrunner.TaskExecutionException:无法完成amazonaws.datapipeline.activity.EmrActivity.runActivActivity(EmrActivity.java:67)上的EMR转换,位于amazonaws.datapipeline.objects.AbstractActivity.run(AbstractActivity.java:16)上在amazonaws.datapipeline.taskrunner.TaskPoller.executeRemoteRunner(TaskPoller.java:136)在amazonaws.datapipeline.taskrunner.TaskPoller.executeTask(TaskPoller.java:105)在amazonaws.datapipeline.taskrunner.TaskPoller $ 1.run(TaskPoller.java: 81),网址为private.com.amazonaws.services.datapipeline.poller.PollWorker.executeWork(PollWorker.java:76)at private.com.amazonaws.services.datapipeline.poller.PollWorker.run(PollWorker.java:53)at java.lang.Thread.run(Thread.java:745)原因:amazonaws.datapipeline.taskrunner.TaskExecutionException :错误:java.lang.RuntimeException:com.amazonaws.AmazonServiceException:提供的AttributeValue为空,必须完全包含一种受支持的数据类型(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVA .org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.handleException(DynamoDBFibonacciRetryer.java:107)位于org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.runWithRetry(DynamoDBFiamoamooop.atch.dy.dy.dy.dy.dy .java:220),请访问org.apache.hadoop.dynamodb。org.apache.hadoop.dynamodb.write.AbstractDynamoDBRecordWriter.write(AbstractDynamoDBRecordWriter.java:91)处的DynamoDBClient.putBatch(DynamoDBClient.java:170)在org.apache.hadoop.mapred.MapTask $ DirectMapOutputCollector.collect(MapTask.java: 844),位于org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.java:26),位于org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.java:26),位于org.apache.hadoop.mapred.MapTask $ OldOutputCollector.collect(MapTask.java:596) .dynamodb.tools.ImportMapper.map(ImportMapper.java:13)位于org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:65)位于org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java) :432),位于org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:175),位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:343),位于java.security.AccessController.doPrivileged (本机方法)位于javax.security.auth.Subject。org.apache.hadoop.security.UserGroupInformation.doAs(Subject.java:415)在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:170)处的doAs(UserGroupInformation.java:1548) .amazonaws.AmazonServiceException:提供的AttributeValue为空,必须准确包含其中一种受支持的数据类型(Service:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUamaJResponseHttp。 .java:1182)com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)com.amazonaws.http.AmazonHttpClient.execute( com.amazonaws.services.dynamodbv2上的AmazonHttpClient.java:310)。com.amazonaws.services.dynamodbv2上的AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1772).AmazonDynamoDBClient.batchWriteItem(AmazonDynamoDBClient.java:730)位于amazonaws.datapipeline.cluster.EmrUtil.runSteps(EmrUtil.java) .activity.EmrActivity.runActivity(EmrActivity.java:63)
我做错什么了吗?
我有一个触发Lambda函数的DynamoDB流.我注意到,对DynamoDB表的一千次写入的爆发可能需要花费很多分钟(我看到的最长时间是30分钟)才能被Lambda处理.批量大小为3的每个Lambda调用的平均持续时间约为2秒.这些Lambdas执行I/O繁重的任务,因此小批量和更多并行调用是有利的.但是,这些Lambdas的并行性与DynamoDB Stream分片的数量挂钩,但我找不到一种扩展分片数量的方法.
除了使用更大的批量大小和更优化的代码之外,有没有办法提高这些Lambda的吞吐量?
scalability amazon-dynamodb aws-lambda amazon-dynamodb-streams
根据文档:
DynamoDB 通常会在过期后 48 小时内删除过期项目。项目在到期后真正被删除的确切持续时间特定于工作负载的性质和表的大小
有什么方法可以估计在某个表中删除过期项目需要多长时间?我希望基于带有 TTL 的 DynamoDB 表和处理 DynamoDB Streams 的 Lambda 函数实现某种调度程序,但我需要在项目过期后一小时内删除才能生效。如果桌子不大(少于 1.000 个项目),这可能吗?
ttl amazon-web-services amazon-dynamodb amazon-dynamodb-streams
我正在创建无服务器框架项目。
DynamoDB 表是由其他 CloudFormation Stack 创建的。
我如何在中引用现有 dynamodb 表的 StreamArnserverless.yml
我的配置如下
resources:
Resources:
MyDbTable: //'arn:aws:dynamodb:us-east-2:xxxx:table/MyTable'
provider:
name: aws
...
onDBUpdate:
handler: handler.onDBUpdate
events:
- stream:
type: dynamodb
arn:
Fn::GetAtt:
- MyDbTable
- StreamArn
Run Code Online (Sandbox Code Playgroud) amazon-dynamodb serverless-framework amazon-dynamodb-streams
我正在编写一个 Lambda 函数来处理来自 DynamoDB 流的项目。
我认为 Lambda 背后的部分观点是,如果我有大量事件爆发,它会启动足够多的实例来同时处理它们,而不是通过单个实例按顺序提供它们。只要两个事件有不同的键,我就可以处理它们的乱序。
但是,我刚刚阅读了有关“了解重试行为”的页面,其中说:
对于基于流的事件源(Amazon Kinesis Data Streams 和 DynamoDB 流),AWS Lambda 轮询您的流并调用您的 Lambda 函数。因此,如果 Lambda 函数失败,AWS Lambda 会尝试处理出错的记录批次,直到数据过期为止,对于 Amazon Kinesis Data Streams 来说,最长可能需要 7 天。该异常被视为阻塞,并且 AWS Lambda 不会从流中读取任何新记录,直到失败的记录批次过期或成功处理。这可确保 AWS Lambda 按顺序处理流事件。
“AWS Lambda 按顺序处理流事件”是否意味着 Lambda 无法同时处理多个事件?有没有办法让它同时处理来自不同键的事件?
amazon-web-services amazon-dynamodb aws-lambda amazon-dynamodb-streams
AWS 最近推出了 GlobalTable,以实现跨不同区域的多主、容错设置。限制之一似乎是“表必须为空”才能设置 GlobalTable。
问题是 - 我可以从美国的 2 个区域开始,然后随着我们的发展扩展到其他区域吗?如果是,则上述约束就不成立。
有人尝试过 GlobalTable 吗?有什么想法吗?