$ docker run --rm -v $PWD:/remote-workspace -it my-lambda-build-image /remote-workspace/build.sh
$ docker run --rm -v $PWD:/var/task --entrypoint=bash -it lambci/lambda:nodejs8.10
#!/bin/bash | |
# Build Configuration | |
MECAB_VERSION="mecab-0.996-ko-0.9.2" | |
MECAB_KO_DIC_VERSION="mecab-ko-dic-2.1.1-20180720" | |
MECAB_SOURCE_URL="https://bitbucket.org/eunjeon/mecab-ko/downloads/${MECAB_VERSION}.tar.gz" | |
MECAB_KO_DIC_SOURCE_URL="https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/${MECAB_KO_DIC_VERSION}.tar.gz" | |
# Variables | |
DIRNAME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | |
NUM_CPU_CORES="$(cat /proc/cpuinfo | grep processor | wc -l)" | |
WORKSPACE_DIR="/tmp/workspace" | |
# DIST_DIR="${DIRNAME}/dist/${MECAB_VERSION}_with_${MECAB_KO_DIC_VERSION}_amazonlinux_x86_64" | |
DIST_DIR="${DIRNAME}/dist/" | |
MECAB_WORKSPACE_DIR="${WORKSPACE_DIR}/mecab-ko" | |
echo "${NUM_CPU_CORES} cores detected." | |
# Setup compilation flags | |
export MAKEFLAGS="-j${NUM_CPU_CORES}" | |
# Prepare mecab Workspace | |
MECAB_SOURCE_DIR="${MECAB_WORKSPACE_DIR}/mecab_sources" | |
MECAB_BUILD_DIR="${MECAB_WORKSPACE_DIR}/mecab_build" | |
MECAB_BIN_DIR="${MECAB_BUILD_DIR}/bin" | |
# If any command exited without code 0, Fire ERR signal and stop executing remaining lines | |
set -e | |
# Setup signal traps | |
trap 'echo "Line ${BASH_LINENO}: ${BASH_COMMAND} failed with exit code $?"; cleanup failed; exit 1' ERR | |
trap 'echo "received signal to stop"; cleanup interrupted; exit 1' SIGQUIT SIGTERM SIGINT | |
function cleanup() { | |
rm -rf ${WORKSPACE_DIR} | |
rm -rf ${DIST_DIR} | |
} | |
echo "Cleaning workspace" | |
cleanup | |
echo "Creating mecab-ko workspace directory" | |
mkdir -p ${MECAB_SOURCE_DIR} ${MECAB_BUILD_DIR} ${MECAB_BIN_DIR} | |
echo "Created mecab-ko workspace directories." | |
cd ${WORKSPACE_DIR} | |
# Build mecab-ko | |
pushd ${MECAB_SOURCE_DIR} | |
echo "Fetching mecab-ko source code..." | |
curl -O -L ${MECAB_SOURCE_URL} | |
tar xvfz $(basename ${MECAB_SOURCE_URL}) | |
echo "Building mecab-ko..." | |
cd ${MECAB_VERSION} | |
./configure --prefix="${MECAB_BUILD_DIR}" --bindir="${MECAB_BUILD_DIR}/bin" | |
make | |
make install | |
echo "Successfully built mecab-ko" | |
popd | |
# Update PATH | |
export PATH="${MECAB_BIN_DIR}:${PATH}" | |
echo "PATH: $PATH" | |
# Build mecab-ko-dic | |
pushd ${MECAB_SOURCE_DIR} | |
curl -O -L ${MECAB_KO_DIC_SOURCE_URL} | |
tar xvfz $(basename ${MECAB_KO_DIC_SOURCE_URL}) | |
cd ${MECAB_KO_DIC_VERSION} | |
./autogen.sh | |
./configure --prefix="${MECAB_BUILD_DIR}" --bindir="${MECAB_BUILD_DIR}/bin" | |
make | |
make install | |
popd | |
hash -r | |
# Package built library | |
mkdir -p ${DIST_DIR} | |
pushd ${MECAB_BUILD_DIR} | |
tar cvfz ${DIST_DIR}/${MECAB_VERSION}_with_${MECAB_KO_DIC_VERSION}_amazonlinux_x86_64.tar.gz . | |
popd | |
echo "Done!" | |
FROM amazonlinux:2017.03.1.20170812 | |
MAINTAINER MooYeol Lee "mooyoul.lee@vingle.net" | |
# Pin Openssl Version for Lambda runtime comaptiblity | |
RUN yum localinstall -y http://packages.us-east-1.amazonaws.com/2016.09/updates/15aa5a441a1b/x86_64/Packages/openssl-devel-1.0.1k-15.99.amzn1.x86_64.rpm && \ | |
yum localinstall -y http://packages.us-east-1.amazonaws.com/2016.09/updates/15aa5a441a1b/x86_64/Packages/openssh-6.6.1p1-33.66.amzn1.x86_64.rpm && \ | |
yum localinstall -y http://packages.us-east-1.amazonaws.com/2016.09/updates/15aa5a441a1b/x86_64/Packages/openssh-clients-6.6.1p1-33.66.amzn1.x86_64.rpm && \ | |
yum install -y yum-plugin-versionlock && \ | |
yum versionlock openssl* openssh* python* && \ | |
yum clean all | |
# Prepare build envrionment | |
RUN yum -y update && \ | |
yum -y -x openssh* groupinstall "Development Tools" && \ | |
yum clean all | |
# Prepare build tools | |
RUN yum update -y && \ | |
yum install -y autoconf automake bzip2 cmake gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel libcurl-devel && \ | |
yum clean all | |