@@ -93,9 +93,10 @@ func (rw *responseWrapper) WriteHeader(statusCode int) {
93
93
rw .StatusCode = statusCode
94
94
}
95
95
96
- func setupEnv () error {
96
+ func ( s * Specification ) setupEnv () error {
97
97
environment ["_HANDLER" ], _ = os .LookupEnv ("_HANDLER" )
98
98
environment ["LAMBDA_TASK_ROOT" ], _ = os .LookupEnv ("LAMBDA_TASK_ROOT" )
99
+ environment ["AWS_LAMBDA_RUNTIME_API" ] += ":" + s .InternalAPIport
99
100
100
101
for k , v := range environment {
101
102
if err := os .Setenv (k , v ); err != nil {
@@ -245,13 +246,23 @@ func ping(w http.ResponseWriter, r *http.Request) {
245
246
return
246
247
}
247
248
248
- func (s * Specification ) api () error {
249
+ func api () error {
250
+ internalSocket , _ := os .LookupEnv ("AWS_LAMBDA_RUNTIME_API" )
251
+ if internalSocket == "" {
252
+ return fmt .Errorf ("AWS_LAMBDA_RUNTIME_API is not set" )
253
+ }
254
+
249
255
apiRouter := http .NewServeMux ()
250
256
apiRouter .HandleFunc (awsEndpoint + "/init/error" , initError )
251
257
apiRouter .HandleFunc (awsEndpoint + "/invocation/next" , getTask )
252
258
apiRouter .HandleFunc (awsEndpoint + "/invocation/" , responseHandler )
253
259
apiRouter .HandleFunc ("/2018-06-01/ping" , ping )
254
- return http .ListenAndServe (":" + s .InternalAPIport , apiRouter )
260
+
261
+ err := http .ListenAndServe (internalSocket , apiRouter )
262
+ if err != nil && err != http .ErrServerClosed {
263
+ return err
264
+ }
265
+ return nil
255
266
}
256
267
257
268
func main () {
@@ -263,18 +274,20 @@ func main() {
263
274
264
275
err := envconfig .Process ("" , & spec )
265
276
if err != nil {
266
- log .Fatal ( err )
277
+ log .Fatalf ( "Cannot process env variables: %v" , err )
267
278
}
268
279
log .Printf ("%+v\n " , spec )
269
280
270
281
log .Println ("Setup app env" )
271
- if err := setupEnv (); err != nil {
272
- log .Fatalln ( err )
282
+ if err := spec . setupEnv (); err != nil {
283
+ log .Fatalf ( "Cannot setup runime env: %v" , err )
273
284
}
274
285
275
286
log .Println ("Starting API" )
276
287
go func () {
277
- log .Fatalln (spec .api ())
288
+ if err := api (); err != nil {
289
+ log .Fatalf ("Runtime internal API error: %v" , err )
290
+ }
278
291
}()
279
292
280
293
for i := 0 ; i < spec .NumberOfinvokers ; i ++ {
@@ -285,7 +298,7 @@ func main() {
285
298
cmd .Stdout = os .Stdout
286
299
cmd .Stderr = os .Stderr
287
300
if err := cmd .Run (); err != nil {
288
- log .Fatalln ( err )
301
+ log .Fatalf ( "Cannot start bootstrap process: %v" , err )
289
302
}
290
303
}(i )
291
304
}
@@ -294,5 +307,8 @@ func main() {
294
307
taskHandler := http .HandlerFunc (spec .newTask )
295
308
taskRouter .Handle ("/" , spec .mapEvent (taskHandler ))
296
309
log .Println ("Listening..." )
297
- log .Fatalln (http .ListenAndServe (":" + spec .ExternalAPIport , taskRouter ))
310
+ err = http .ListenAndServe (":" + spec .ExternalAPIport , taskRouter )
311
+ if err != nil && err != http .ErrServerClosed {
312
+ log .Fatalf ("Runtime external API error: %v" , err )
313
+ }
298
314
}
0 commit comments