如果发生超时,Lambda 会自动调用相同的事件
Lambda Called Automatically With Same Event If Timeout Occurs
当通过另一个 API.
在 DynamoDB 中插入 url 时,我正在使用 AWS lambda(Java 运行时)处理一些文件
当lamda因超时而死亡时。 lambda 被同一个事件触发,同一个进程再次开始。进程再次超时死亡,进程再次启动
如何在超时时停止触发?
日志如下:
10:53:25 START RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda Version: $LATEST
10:53:25
Received event: com.amazonaws.services.lambda.runtime.events.DynamodbEvent@1e4a7dd4
10:53:25
Got an INSERT EVENT
10:53:25
KEY IS 3c39f7ea-76cf-484f-8a11-39bc2d7c1fd8/aws_dummy.pdf
10:55:25
END RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda
10:55:25
REPORT RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda Duration: 120035.00 ms Billed Duration: 120000 ms Memory Size: 512 MB Max Memory Used: 362 MB Init Duration: 2179.60 ms
10:55:25
2019-09-21T10:55:25.761Z 494ec72d-45bb-409f-bdd4-7653033eefda Task timed out after 120.03 seconds
10:55:28
START RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda Version: $LATEST
10:55:28
Received event: com.amazonaws.services.lambda.runtime.events.DynamodbEvent@1e4a7dd4
10:55:28
Got an INSERT EVENT
10:55:28
KEY IS 3c39f7ea-76cf-484f-8a11-39bc2d7c1fd8/aws_dummy.pdf
public Integer handleRequest(DynamodbEvent event, Context context) {
for (DynamodbStreamRecord record : event.getRecords()) {
if (record.getEventName().equals("INSERT")) {
// DO SOME WORK
}
}
return (SOME_INTEGER)
}
我觉得
DynamoDBStream -> Lambda(新 Lambda)-> SNS -> SQS -> 现在你的 lambda。并有捕获失败的死信队列。
我的求婚想法有几个原因
1. SNS -> SQS 模式是发送事件和稍后扩展通信功能的最佳实践
2. 有DLQ来处理你的失败,你可以控制如何处理失败的。
谢谢,
如果我正确理解了您的要求,那么您希望您的应用始终在 lambda 上启动并避免冷启动。
我建议,如果您要求让您的应用程序保持 24 小时运行,请使用 EC2 或 ELb,因为您的 aws lambda 成本相同并且您不需要任何修改。
现在来到你的问题鞠躬做到这一点。
配置 CloudWatch。
从那里,转到“事件”并单击“创建规则”。将事件类型设置为“计划”,我们将每 1 分钟 运行 此事件。
Select 您要从目标列表中定位的 Lambda 函数并保存。然后你需要创建一个名称和描述。
现在根据您的需要每 1 或 5 或 10 或 15 分钟对 Lambda 函数执行一次 ping 操作。
当通过另一个 API.
在 DynamoDB 中插入 url 时,我正在使用 AWS lambda(Java 运行时)处理一些文件当lamda因超时而死亡时。 lambda 被同一个事件触发,同一个进程再次开始。进程再次超时死亡,进程再次启动
如何在超时时停止触发?
日志如下:
10:53:25 START RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda Version: $LATEST
10:53:25
Received event: com.amazonaws.services.lambda.runtime.events.DynamodbEvent@1e4a7dd4
10:53:25
Got an INSERT EVENT
10:53:25
KEY IS 3c39f7ea-76cf-484f-8a11-39bc2d7c1fd8/aws_dummy.pdf
10:55:25
END RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda
10:55:25
REPORT RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda Duration: 120035.00 ms Billed Duration: 120000 ms Memory Size: 512 MB Max Memory Used: 362 MB Init Duration: 2179.60 ms
10:55:25
2019-09-21T10:55:25.761Z 494ec72d-45bb-409f-bdd4-7653033eefda Task timed out after 120.03 seconds
10:55:28
START RequestId: 494ec72d-45bb-409f-bdd4-7653033eefda Version: $LATEST
10:55:28
Received event: com.amazonaws.services.lambda.runtime.events.DynamodbEvent@1e4a7dd4
10:55:28
Got an INSERT EVENT
10:55:28
KEY IS 3c39f7ea-76cf-484f-8a11-39bc2d7c1fd8/aws_dummy.pdf
public Integer handleRequest(DynamodbEvent event, Context context) {
for (DynamodbStreamRecord record : event.getRecords()) {
if (record.getEventName().equals("INSERT")) {
// DO SOME WORK
}
}
return (SOME_INTEGER)
}
我觉得 DynamoDBStream -> Lambda(新 Lambda)-> SNS -> SQS -> 现在你的 lambda。并有捕获失败的死信队列。
我的求婚想法有几个原因 1. SNS -> SQS 模式是发送事件和稍后扩展通信功能的最佳实践 2. 有DLQ来处理你的失败,你可以控制如何处理失败的。
谢谢,
如果我正确理解了您的要求,那么您希望您的应用始终在 lambda 上启动并避免冷启动。
我建议,如果您要求让您的应用程序保持 24 小时运行,请使用 EC2 或 ELb,因为您的 aws lambda 成本相同并且您不需要任何修改。
现在来到你的问题鞠躬做到这一点。
配置 CloudWatch。
从那里,转到“事件”并单击“创建规则”。将事件类型设置为“计划”,我们将每 1 分钟 运行 此事件。
Select 您要从目标列表中定位的 Lambda 函数并保存。然后你需要创建一个名称和描述。
现在根据您的需要每 1 或 5 或 10 或 15 分钟对 Lambda 函数执行一次 ping 操作。