Тайм-аут ответа Python Lambda в быстром приложении истекает, но функция работает без проблем

У меня есть лямбда-функция, написанная на питоне, которая запускает алгоритм обработки сигналов с данными, предоставленными приложением iOS.

Приложение iOS успешно вызывает функцию, но через некоторое время получает ошибку тайм-аута:

Session task failed with error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo = {_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x282711350 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo = {_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<6>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask .<6>" ), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=https://mylambdaURL/invocations, NSErrorFailingURLKey=https://mylambdaURL/invocations, _kCFStreamErrorDomainKey=4}

Я вызываю функцию следующим образом:

lambdaInvoker.invokeFunction("myLambdaName", jsonObject: jsonObject)
            .continueWith(block: {(task:AWSTask<AnyObject>) -> Any? in

                if ( task.error != nil) {
                    print("Error: \(task.error!)")
                    lambdaLogs.errors += 1
                    return nil
                }
                if let JSONDictionary = task.result as? NSDictionary {
                    lambdaLogs.responses += 1
                }
                return nil
            })

Однако журналы функции Lambda не показывают никаких ошибок, функция работает успешно и даже без проблем записывает данные в таблицу DynamoDB. Таким образом, Lambda не истекает, однако функция работает около 60 секунд.

Эта ошибка возникает примерно в половине случаев вызова лямбды.

Любые идеи?

Обновлено:

Я попытался увеличить время ожидания NSURLSession для запроса, выполнив это в appDelegate:

let urlconfig = URLSessionConfiguration.default
urlconfig.timeoutIntervalForRequest = 300

но я все еще получаю тайм-ауты, и максимальное время выполнения лямбда-функции было 70 с, поэтому я думаю, что на самом деле я не устанавливаю правильный timeoutIntervalForRequest

Итак, вы говорите, что ваша Lambda успешно работает все время, верно? Тогда он не достигает выделенного тайм-аута времени выполнения? Как ваше приложение вызывает функцию Lambda? Он находится за шлюзом API?

Milan Cermak 29.01.2019 14:15

Да, функция работает успешно все время без тайм-аута. И я делаю прямой вызов, я добавлю это к вопросу!

Danf 29.01.2019 14:17

Тогда я бы сказал, что это просто ваша NSURLSession, время ожидания которой истекло. Вы пытались увеличить время ожидания запроса?

Milan Cermak 29.01.2019 14:21

Нет, я не знаю, я не знаю, как это сделать, я узнаю и попробую!

Danf 29.01.2019 16:47

@MilanCermak, я пытался это сделать, но, как я указываю в редактировании, я думаю, что делаю это неправильно...

Danf 29.01.2019 17:48

Вы используете общий URLSession? Тот не настраивается. Вы должны либо создать собственный сеанс с вашей конфигурацией, либо, в качестве альтернативы, установить время ожидания в URLRequest. См., например. stackoverflow.com/questions/23428793/… о том, как сделать первое.

Milan Cermak 29.01.2019 22:38

Дело в том, что я не знаю, как вызвать лямбда-функцию с помощью пользовательского сеанса. Как вы видите в приведенном выше коде, для этого нет параметра, и я не смог найти способ инициализировать lambdaInvoker с другой конфигурацией, чем "по умолчанию"...

Danf 30.01.2019 12:52

Мой Swift несколько заржавел, но попробуйте что-то вроде этого gist.github.com/milancermak/3b5ddb77feaa454a51b3d66dc29793f8 Вам нужно настроить тайм-аут в конфигурации службы, которая наследуется от сетевой конфигурации; см. github.com/aws-amplify/aws-sdk-ios/blob/master/AWSCore/Service‌​ce/… и github.com/aws-amplify/aws-sdk-ios/blob/…, если я не совсем правильно понял.

Milan Cermak 30.01.2019 14:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
85
0

Другие вопросы по теме