Greengrass StreamManager error: "Unable to read from socket, likely socket is closed or server died"

0

I have a sample lambda that uses the newly introduced StreamManager. The main idea is a device publishes data to a channel and Greengrass lambda is subscribed to that channel. When a data is received, it writes the data to StreamManager. StreamManager exports the data to Kinesis.

Sometimes (after deployments) I get the following error in the lambda log:

ERROR-streammanagerclient.py:177,Unable to read from socket, likely socket is closed or server died

My lambda is pinned (long-running) and the code is (Python 3.7):

import asyncio
import logging
import random
import time

from greengrasssdk.stream_manager import (
    ExportDefinition,
    KinesisConfig,
    MessageStreamDefinition,
    ReadMessagesOptions,
    ResourceNotFoundException,
    StrategyOnFull,
    StreamManagerClient,
)

stream_name = "FarmDataStream"
iot_channel_name = "farmdatachannel"
kinesis_stream_name = "farmDataKinesisStream"

# Create a client for the StreamManager
client = StreamManagerClient()

try:
    client.delete_message_stream(stream_name=stream_name)
except ResourceNotFoundException:
    pass

exports = ExportDefinition(
    kinesis=[KinesisConfig(identifier="KinesisExport" + stream_name, kinesis_stream_name=kinesis_stream_name)]
)
client.create_message_stream(
    MessageStreamDefinition(
        name=stream_name, strategy_on_full=StrategyOnFull.OverwriteOldestData, export_definition=exports
    )
)

# initialize the logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info(event)
    global stream_name
    client.append_message(stream_name, event)

    return
1回答
0
承認された回答

The issue was the object type that I was trying to write to the stream.

This one doesnt work:

client.append_message(stream_name, event)

This works:

client.append_message(stream_name, json.dumps(event).encode("utf-8"))
AWS
回答済み 4年前
profile picture
エキスパート
レビュー済み 1ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ