src/Runtime/LambdaRuntime.php
private function waitNextInvocation(): array
    {
        if ($this->handler === null) {
            $this->handler = curl_init("http://{$this->apiUrl}/2018-06-01/runtime/invocation/next");
            curl_setopt($this->handler, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($this->handler, CURLOPT_FAILONERROR, true);
        }

        // Retrieve invocation ID
        $contextBuilder = new ContextBuilder;
        curl_setopt($this->handler, CURLOPT_HEADERFUNCTION, function ($ch, $header) use ($contextBuilder) {
            if (! preg_match('/:\s*/', $header)) {
                return strlen($header);
            }
            [$name, $value] = preg_split('/:\s*/', $header, 2);
            $name = strtolower($name);
            $value = trim($value);
            if ($name === 'lambda-runtime-aws-request-id') {
                $contextBuilder->setAwsRequestId($value);
            }
            if ($name === 'lambda-runtime-deadline-ms') {
                $contextBuilder->setDeadlineMs(intval($value));
            }
            if ($name === 'lambda-runtime-invoked-function-arn') {
                $contextBuilder->setInvokedFunctionArn($value);
            }
            if ($name === 'lambda-runtime-trace-id') {
                $contextBuilder->setTraceId($value);
            }

            return strlen($header);
        });

        // Retrieve body
        $body = '';
        curl_setopt($this->handler, CURLOPT_WRITEFUNCTION, function ($ch, $chunk) use (&$body) {
            $body .= $chunk;

            return strlen($chunk);
        });

        curl_exec($this->handler);
        if (curl_errno($this->handler) > 0) {
            $message = curl_error($this->handler);
            $this->closeHandler();
            throw new \Exception('Failed to fetch next Lambda invocation: ' . $message);
        }
        if ($body === '') {
            throw new \Exception('Empty Lambda runtime API response');
        }

        $context = $contextBuilder->buildContext();

        if ($context->getAwsRequestId() === '') {
            throw new \Exception('Failed to determine the Lambda invocation ID');
        }

        $event = json_decode($body, true);

        return [$event, $context];
    }
private function waitNextInvocation(): array
    {
        if ($this->handler === null) {
            $this->handler = curl_init("http://{$this->apiUrl}/2018-06-01/runtime/invocation/next");
            curl_setopt($this->handler, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($this->handler, CURLOPT_FAILONERROR, true);
        }

        // Retrieve invocation ID
        $contextBuilder = new ContextBuilder;
        curl_setopt($this->handler, CURLOPT_HEADERFUNCTION, function ($ch, $header) use ($contextBuilder) {
            if (! preg_match('/:\s*/', $header)) {
                return strlen($header);
            }
            [$name, $value] = preg_split('/:\s*/', $header, 2);
            $name = strtolower($name);
            $value = trim($value);
            if ($name === 'lambda-runtime-aws-request-id') {
                $contextBuilder->setAwsRequestId($value);
            }
            if ($name === 'lambda-runtime-deadline-ms') {
                $contextBuilder->setDeadlineMs(intval($value));
            }
            if ($name === 'lambda-runtime-invoked-function-arn') {
                $contextBuilder->setInvokedFunctionArn($value);
            }
            if ($name === 'lambda-runtime-trace-id') {
                $contextBuilder->setTraceId($value);
            }

            return strlen($header);
        });

        // Retrieve body
        $body = '';
        curl_setopt($this->handler, CURLOPT_WRITEFUNCTION, function ($ch, $chunk) use (&$body) {
            $body .= $chunk;

            return strlen($chunk);
        });

        curl_exec($this->handler);
        if (curl_errno($this->handler) > 0) {
            $message = curl_error($this->handler);
            $this->closeHandler();
            throw new \Exception('Failed to fetch next Lambda invocation: ' . $message);
        }
        if ($body === '') {
            throw new \Exception('Empty Lambda runtime API response');
        }

        $context = $contextBuilder->buildContext();

        if ($context->getAwsRequestId() === '') {
            throw new \Exception('Failed to determine the Lambda invocation ID');
        }

        $event = json_decode($body, true);

        return [$event, $context];
    }
private function waitNextInvocation ( ) : array { if ( $ this -> handler === null ) { $ this -> handler = curl_init ( "http://{$this->apiUrl}/2018-06-01/runtime/invocation/next" ) ; curl_setopt ( $ this -> handler , CURLOPT_FOLLOWLOCATION , true ) ; curl_setopt ( $ this -> handler , CURLOPT_FAILONERROR , true ) ; } // Retrieve invocation ID $ contextBuilder = new ContextBuilder ; curl_setopt ( $ this -> handler , CURLOPT_HEADERFUNCTION , function ( $ ch , $ header ) use ( $ contextBuilder ) { if ( ! preg_match ( '/:\s*/' , $ header ) ) { return strlen ( $ header ) ; } [ $ name , $ value ] = preg_split ( '/:\s*/' , $ header , 2 ) ; $ name = strtolower ( $ name ) ; $ value = trim ( $ value ) ; if ( $ name === 'lambda-runtime-aws-request-id' ) { $ contextBuilder -> setAwsRequestId ( $ value ) ; } if ( $ name === 'lambda-runtime-deadline-ms' ) { $ contextBuilder -> setDeadlineMs ( intval ( $ value ) ) ; } if ( $ name === 'lambda-runtime-invoked-function-arn' ) { $ contextBuilder -> setInvokedFunctionArn ( $ value ) ; } if ( $ name === 'lambda-runtime-trace-id' ) { $ contextBuilder -> setTraceId ( $ value ) ; } return strlen ( $ header ) ; } ) ; // Retrieve body $ body = '' ; curl_setopt ( $ this -> handler , CURLOPT_WRITEFUNCTION , function ( $ ch , $ chunk ) use ( & $ body ) { $ body .= $ chunk ; return strlen ( $ chunk ) ; } ) ; curl_exec ( $ this -> handler ) ; if ( curl_errno ( $ this -> handler ) > 0 ) { $ message = curl_error ( $ this -> handler ) ; $ this -> closeHandler ( ) ; throw new \ Exception ( 'Failed to fetch next Lambda invocation: ' . $ message ) ; } if ( $ body === '' ) { throw new \ Exception ( 'Empty Lambda runtime API response' ) ; } $ context = $ contextBuilder -> buildContext ( ) ; if ( $ context -> getAwsRequestId ( ) === '' ) { throw new \ Exception ( 'Failed to determine the Lambda invocation ID' ) ; } $ event = json_decode ( $ body , true ) ; return [ $ event , $ context ] ; }
Wait for the next lambda invocation and retrieve its data.

This call is blocking because the Lambda runtime API is blocking.

@see https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html#runtimes-api-next
Wait for the next lambda invocation and retrieve its data .