Как обработать исключение в AWS Lambda в C# для повторной обработки - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в AWS, и в настоящее время я отправляю данные из DyanmoDB с использованием TTL в AWS Lambda, а затем в конечную точку. Мой менеджер хочет, чтобы я справился с ситуацией, когда Lambda выдает какое-то исключение, поэтому не может доставить события в конечную точку.

В случае исключения из Lambda он хочет, чтобы я отправил запись обратно в таблицу DynamoDB. Я уверен, что это можно сделать с помощью команды Put-Item. Но я хочу знать, есть ли какое-либо готовое решение, которое предоставляет Lambda, с которым я могу обработать состояние сбоя и обработать полученные данные события, и, таким образом, не потерять записи из потока DyanmoDB во время исключения. При этом мне не нужно будет отправлять данные обратно в DynamoDB.

Ниже приведен рабочий код для AWS Lambda

public class Function

    {
        private JsonSerializer _jsonSerializer = new JsonSerializer();
        private readonly IQueueClient client;

        public async Task FunctionHandler(DynamoDBEvent dynamoEvent, ILambdaContext context)
        {
            try
            {
                foreach (var record in dynamoEvent.Records)
                {
                    try
                    {
                        if (record.EventName == OperationType.REMOVE)
                        {
                            context.Logger.LogLine("Calling SerializeStreamRecord function");
                            string streamRecordJson = SerializeStreamRecord(record.Dynamodb);
                            Debug.Write(streamRecordJson);
                            await SendAsync(streamRecordJson, context);
                            context.Logger.LogLine("Data Sent");
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
            }
            catch (Exception ex)
            {
                context.Logger.LogLine("Exception Occurred" + ex.Message);
            }

            context.Logger.LogLine("Stream processing complete.");
        }

        private async Task SendAsync(string stream, ILambdaContext context)
        {
            try
            {
                var message = new Message(Encoding.UTF8.GetBytes(stream));
                await client.SendAsync(message); // SEND MESSAGE
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        private string SerializeStreamRecord(StreamRecord streamRecord)
        {
            try
            {
                using (var writer = new StringWriter())
                {
                    _jsonSerializer.Serialize(writer, streamRecord);
                    return writer.ToString();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
    }
...