@@ -36,11 +36,12 @@ import play.api.{ Configuration, Logger }
36
36
import software .amazon .awssdk .core .SdkBytes
37
37
import software .amazon .awssdk .regions .Region
38
38
import software .amazon .awssdk .services .lambda .LambdaAsyncClient
39
- import software .amazon .awssdk .services .lambda .model .{ InvokeRequest , InvokeResponse }
39
+ import software .amazon .awssdk .services .lambda .model .{ InvokeRequest , InvokeResponse , ResourceNotFoundException }
40
40
import software .amazon .awssdk .auth .credentials .DefaultCredentialsProvider
41
41
42
42
import javax .inject .Inject
43
43
import scala .concurrent .{ ExecutionContext , Future }
44
+ import java .util .concurrent .CompletableFuture
44
45
45
46
class LambdaFunctionExecutable (
46
47
id : String ,
@@ -174,31 +175,43 @@ class AwsLambdaExecutor @Inject() (
174
175
)(implicit jsonFormatter : Format [T ]): Future [T ] =
175
176
if (mock) Future .successful(null .asInstanceOf [T ])
176
177
else {
177
- lambdaClient.invoke{request}.get match {
178
- case r : InvokeResponse if r.functionError() == null =>
179
- logger.debug(s """ Function responded with:
180
- | Status: ${r.statusCode()}
181
- | Body: ${r.payload().asUtf8String()}
182
- | Logs: ${Option (r.logResult()).map(log => java.util.Base64 .getDecoder.decode(log))}
183
- """ .stripMargin)
184
- val jsResponse =
185
- Json .parse(r.payload().asUtf8String()).validate[T ] recover {
186
- case e =>
187
- val message = s " Error parsing lambda response: $e"
188
- logger.error(message)
189
- logger.error(s " Unable to parse: ${r.payload().asUtf8String()}" )
190
- throw DataFormatException (message)
191
- }
192
- Future (jsResponse.get)
193
- case r : InvokeResponse if r.functionError() != null =>
178
+ try {
179
+ val invokeRequestF : CompletableFuture [InvokeResponse ] = lambdaClient.invoke{request}
180
+ invokeRequestF.get match {
181
+ case r : InvokeResponse if r.functionError() == null =>
182
+ logger.debug(s """ Function responded with:
183
+ | Status: ${r.statusCode()}
184
+ | Body: ${r.payload().asUtf8String()}
185
+ | Logs: ${Option (r.logResult()).map(log => java.util.Base64 .getDecoder.decode(log))}
186
+ """ .stripMargin)
187
+ val jsResponse =
188
+ Json .parse(r.payload().asUtf8String()).validate[T ] recover {
189
+ case e =>
190
+ val message = s " Error parsing lambda response: $e"
191
+ logger.error(message)
192
+ logger.error(s " Unable to parse: ${r.payload().asUtf8String()}" )
193
+ throw DataFormatException (message)
194
+ }
195
+ Future (jsResponse.get)
196
+ case r : InvokeResponse if r.functionError() != null =>
197
+ val message =
198
+ s " Retrieving SHE function Response Error: ${r.functionError()}"
199
+ logger.error(message)
200
+ throw new ApiException (message)
201
+ case r =>
202
+ val message =
203
+ s " Retrieving SHE function Response FAILED: $r, ${r.payload().asUtf8String()}"
204
+ logger.error(message)
205
+ throw new ApiException (message)
206
+ }
207
+ } catch {
208
+ case e : ResourceNotFoundException =>
194
209
val message =
195
- s " Retrieving SHE function Response Error : ${r.functionError ()}"
210
+ s " Retrieving SHE function Response ResourceNotFoundException : $e , ${request.toString ()}"
196
211
logger.error(message)
197
- logger.error(r.payload().asUtf8String())
198
212
throw new ApiException (message)
199
- case r =>
200
- val message =
201
- s " Retrieving SHE function Response FAILED: $r, ${r.payload().asUtf8String()}"
213
+ case e : Exception =>
214
+ val message = s " Retrieving SHE function Response Unknown Exception: $e, ${request.toString()}"
202
215
logger.error(message)
203
216
throw new ApiException (message)
204
217
}
0 commit comments