Home > Software design >  Setting up AWS Lambda With PHP - what is the entrypoint?
Setting up AWS Lambda With PHP - what is the entrypoint?

Time:06-18

I am working to set up AWS Lambda with a PHP application. I have been able to set up the basic functionality as documented here: https://aws.amazon.com/blogs/compute/building-php-lambda-functions-with-docker-container-images/

I have the following Dockerfile:

FROM bref/php-80-fpm
RUN curl -s https://getcomposer.org/installer | php
RUN php composer.phar require bref/bref
COPY . /var/task
CMD _HANDLER=index.php /opt/bootstrap

When I run a test on Lambda I get an error: entrypoint requires the handler name to be the first argument

I see in the linked post above there is a comment in the Dockerfile stating that this line sets the entry point:

#set the function handler entry point
CMD _HANDLER=index.php /opt/bootstrap

But I'm not sure what that line means. The index.php file should be used as an entrypoint for my app but I don't know what /opt/bootstrap does.

Is someone able to explain what the entrypoint here is and how I would troubleshoot it?

CodePudding user response:

LAMBDA_TASK_ROOT is Lambda’s predefined env variable for the code runtime.

The image will look for it in the LAMBDA_TASK_ROOT so you need to make sure that your code is copied to that folder when the image is built.

CodePudding user response:

I was able to resolve the issue by updating my Dockerfile to the following:

FROM bref/php-80-fpm
RUN curl -s https://getcomposer.org/installer | php
RUN php composer.phar require bref/bref
COPY . /var/task
ENTRYPOINT php index.php $CONTROLLER $FUNCTION

And then set environment variables to serve as $CONTROLLER and $FUNCTION

Note that you can test this without setting environment variables for example if I want to run a function called profile_update within my customers controller then I could use ENTRYPOINT php index.php customers profile_update

As far as I understand it the ENTRYPOINT here is equivalent to a command line function for running a script on my app, or the equivalent of what I would use for a cron command. In my app it follows the above format and this worked to resolve my error.

  • Related