私は、iOS アプリケーションによって提供されるデータを使用して信号処理アルゴリズムを実行する Python で記述されたラムダ関数を持っています。
iOS アプリは関数を正常に呼び出しますが、しばらくするとタイムアウト エラーが発生します。
セッション タスクが次のエラーで失敗しました: エラー 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=LocalDataTaskError.<6>, _NSURLErrorKeyRelatedURLS( "LocalDataTask .<6>" ), NSLocalizedDescription=リクエストがタイムアウトしました., 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 秒間実行されます。
このエラーは、ラムダが呼び出される回数の約半分で発生します。
何か案は?
編集:
appDelegate でこれを行うリクエストの NSURLSession タイムアウトを増やしてみました。
let urlconfig = URLSessionConfiguration.default
urlconfig.timeoutIntervalForRequest = 300
しかし、それでもタイムアウトが発生し、ラムダ関数の最大実行時間は 70 秒だったので、実際には正しい timeoutIntervalForRequest を設定していないと考えています