@@ -33,20 +33,23 @@ import (
3333const (
3434 initErrPath = "/2018-06-01/runtime/init/error"
3535 invokePath = "/2018-06-01/runtime/invocation"
36- lambdaPort = "5432"
3736)
3837
38+ var lambdaPort = 5432
39+
3940func main () {
4041 apiURL := "http://" + os .Getenv ("AWS_LAMBDA_RUNTIME_API" )
4142 handler := os .Getenv ("_HANDLER" )
4243 os .Setenv ("PATH" , os .Getenv ("PATH" )+ ":/opt" )
4344
45+ lambdaPort = rpcPortFromEnv ()
46+
4447 cmd := exec .Command (handler )
45- cmd .Stdout = os .Stderr
48+ cmd .Stdout = os .Stdout
4649 cmd .Stderr = os .Stderr
4750 cmd .SysProcAttr = & syscall.SysProcAttr {Setpgid : true }
4851 cmd .Env = append (os .Environ (),
49- "_LAMBDA_SERVER_PORT=" + lambdaPort ,
52+ fmt . Sprintf ( "_LAMBDA_SERVER_PORT=%d" , lambdaPort ) ,
5053 )
5154
5255 fmt .Println ("Starting handler" )
@@ -59,7 +62,7 @@ func main() {
5962 var conn net.Conn
6063 var err error
6164 for {
62- if conn , err = net .Dial ("tcp" , ":" + lambdaPort ); err == nil {
65+ if conn , err = net .Dial ("tcp" , fmt . Sprintf ( ":%d" , lambdaPort ) ); err == nil {
6366 break
6467 }
6568 if oerr , ok := err .(* net.OpError ); ok {
@@ -142,3 +145,16 @@ func sendResponse(url, message string) {
142145 os .Exit (1 )
143146 }
144147}
148+
149+ func rpcPortFromEnv () int {
150+ index , ok := os .LookupEnv ("BOOTSTRAP_INDEX" )
151+ if ! ok {
152+ return lambdaPort
153+ }
154+ i , err := strconv .Atoi (index )
155+ if err != nil {
156+ fmt .Printf ("Can't convert \" BOOTSTRAP_INDEX\" env variable to integer: %s\n " , err )
157+ return lambdaPort
158+ }
159+ return lambdaPort + i
160+ }
0 commit comments