I am trying to run a simple TagUI flow as a Lambda function using container images. I have made a Dockerfile using the bootstrap and function.sh from this tutorial:
FROM amazon/aws-lambda-provided:al2
RUN yum install -y wget nano php java-1.8.0-openjdk unzip procps
RUN curl https://intoli.com/install-google-chrome.sh | bash
RUN wget https://github.com/kelaberetiv/TagUI/releases/download/v6.46.0/TagUI_Linux.zip \
&& unzip TagUI_Linux.zip \
&& rm TagUI_Linux.zip \
&& ln -sf /var/task/tagui/src/tagui /usr/local/bin/tagui \
&& tagui update
RUN sed -i 's/no_sandbox_switch=""/no_sandbox_switch="--no-sandbox"/' /var/task/tagui/src/tagui
ADD tr.tag /var/task/tagui/src/tr.tag
WORKDIR /var/runtime/
COPY bootstrap bootstrap
RUN chmod 755 bootstrap
WORKDIR /var/task/
COPY function.sh function.sh
RUN chmod 755 function.sh
CMD [ "function.sh.handler" ]
My function.sh:
function handler () {
cp -r /var/task/tagui/src/* /tmp;
chmod 755 /tmp/tagui;
OUTPUT=$(/tmp/tagui /tmp/tr.tag -h);
echo "${OUTPUT}";
}
Notes:
- the sed line is required to get TagUI running in docker images.
- tr.tag is just a simple flow to do a password reset on a webapp so I can confirm the container has run.
- everything has to be run in /tmp as that is the only folder Lambda can write to in the container and TagUI creates a load of temporary files during execution.
When I run as a Lambda I get the error:
./tmp/tagui/src/tagui: line 398: 56 Trace/breakpoint trap (core dumped) $chrome_command --user-data-dir="$TAGUI_DIR/chrome/tagui_user_profile" $chrome_switches $window_size $headless_switch $no_sandbox_switch > /dev/null 2>&1
When I run the container from Docker it runs perfectly. I have tried increasing both the memory and timeout of the function.
The end goal I am trying to achieve is to have a Lambda function triggered by an API gateway that can receive a TagUI RPA flow and run it.