@@ -93,9 +93,10 @@ func (rw *responseWrapper) WriteHeader(statusCode int) {
9393 rw .StatusCode = statusCode
9494}
9595
96- func setupEnv () error {
96+ func ( s * Specification ) setupEnv () error {
9797 environment ["_HANDLER" ], _ = os .LookupEnv ("_HANDLER" )
9898 environment ["LAMBDA_TASK_ROOT" ], _ = os .LookupEnv ("LAMBDA_TASK_ROOT" )
99+ environment ["AWS_LAMBDA_RUNTIME_API" ] += ":" + s .InternalAPIport
99100
100101 for k , v := range environment {
101102 if err := os .Setenv (k , v ); err != nil {
@@ -245,13 +246,23 @@ func ping(w http.ResponseWriter, r *http.Request) {
245246 return
246247}
247248
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+
249255 apiRouter := http .NewServeMux ()
250256 apiRouter .HandleFunc (awsEndpoint + "/init/error" , initError )
251257 apiRouter .HandleFunc (awsEndpoint + "/invocation/next" , getTask )
252258 apiRouter .HandleFunc (awsEndpoint + "/invocation/" , responseHandler )
253259 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
255266}
256267
257268func main () {
@@ -263,18 +274,20 @@ func main() {
263274
264275 err := envconfig .Process ("" , & spec )
265276 if err != nil {
266- log .Fatal ( err )
277+ log .Fatalf ( "Cannot process env variables: %v" , err )
267278 }
268279 log .Printf ("%+v\n " , spec )
269280
270281 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 )
273284 }
274285
275286 log .Println ("Starting API" )
276287 go func () {
277- log .Fatalln (spec .api ())
288+ if err := api (); err != nil {
289+ log .Fatalf ("Runtime internal API error: %v" , err )
290+ }
278291 }()
279292
280293 for i := 0 ; i < spec .NumberOfinvokers ; i ++ {
@@ -285,7 +298,7 @@ func main() {
285298 cmd .Stdout = os .Stdout
286299 cmd .Stderr = os .Stderr
287300 if err := cmd .Run (); err != nil {
288- log .Fatalln ( err )
301+ log .Fatalf ( "Cannot start bootstrap process: %v" , err )
289302 }
290303 }(i )
291304 }
@@ -294,5 +307,8 @@ func main() {
294307 taskHandler := http .HandlerFunc (spec .newTask )
295308 taskRouter .Handle ("/" , spec .mapEvent (taskHandler ))
296309 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+ }
298314}
0 commit comments