簡體   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