
[英]DynamoDB return the modified document (Old or new) when using TransactWrtieItems
[英]Old connectionId when new web socket connection triggered by DynamoDB
我在 CloudWatch 中看到,新的 web 套接字连接的connectionId
偶尔会由事件成功传送,由新的正确的 DynamoDB 条目触发...
我所做的:
wss://xxxxxx.execute-api.us-east-1.amazonaws.com/production
。 A Connect
lambda function 每次成功将connectionId
存储在DynamoDB表中。 此connectiondId
因连接而异。Broadcast
lambda function。在当前形式下,此Broadcast
function(见下文)仅打印事件中传送的connectionId
(结果打印在 CloudWatch 中) . 问题是:这个connectionId
一直是一样的,而它应该在每个新连接中改变......就像有惰性事件缓存应该被清除?Disconnect
lambda function 从 DynamoDB 表中成功删除了connectionId
。 我想:这有助于防止混淆connectionIds
,但事实并非如此。 问题:如何为不同的 web 套接字connectionId
重复打印相同的 connectionId? (见附图)DynamoDB 表按预期工作,一旦触发应该在事件中传达正确的表条目/值,不是吗?
附带问题:为什么 Cloud Watch 中的一些日志流是集群的,而另一些是分开的?
广播 lambda python 码
import json
import boto3
client = boto3.client('apigatewaymanagementapi', endpoint_url="https://xxxxxx.execute-api.us-east-1.amazonaws.com/production")
def lambda_handler(event, context):
# get connectionId from DynamoDB
print(event['Records'][0]['dynamodb']['Keys']['connectionid']['S'])
此问题已通过过滤发送到Broadcast
脚本的 INSERT 事件得到解决。 由于 MODIFY 和 REMOVE 事件也由 DynamoDB 发送到脚本,一旦被列为触发器,因此记录在 CloudWatch 中。
下面的代码在Broadcast
脚本中完成工作
# only look at INSERT dynamodb events and collect connectionId
if record.get('eventName') in ('INSERT'):
id = record['dynamodb']['Keys']['connectionid']['S']
print("connectionId: ", id)
else:
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.