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
전문가
검토됨 한 달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠