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 Antwort
0
Akzeptierte Antwort

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
beantwortet vor 4 Jahren
profile picture
EXPERTE
überprüft vor einem Monat

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen