![](/img/trans.png)
[英]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.