繁体   English   中英

DynamoDB 触发新的 web 套接字连接时的旧 connectionId

[英]Old connectionId when new web socket connection triggered by DynamoDB

我在 CloudWatch 中看到,新的 web 套接字连接的connectionId偶尔会由事件成功传送,由新的正确的 DynamoDB 条目触发...

我所做的:

  • 连接。 从本地主机前端,我连接到 web 套接字wss://xxxxxx.execute-api.us-east-1.amazonaws.com/production A Connect lambda function 每次成功将connectionId存储在DynamoDB表中。 connectiondId因连接而异。
  • 扳机。 创建新的 DynamoDB 条目时,触发器将事件发送到Broadcast lambda function。在当前形式下,此Broadcast function(见下文)仅打印事件中传送的connectionId (结果打印在 CloudWatch 中) . 问题是:这个connectionId一直是一样的,而它应该在每个新连接中改变......就像有惰性事件缓存应该被清除?
  • 断开。 当在前端 web 套接字连接结束时, 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'])

不同 web 套接字连接的 CloudWatch 日志在此处输入图像描述 在此处输入图像描述

此问题已通过过滤发送到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM