-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathlambda_loader.sh
More file actions
executable file
·57 lines (42 loc) · 2.27 KB
/
Copy pathlambda_loader.sh
File metadata and controls
executable file
·57 lines (42 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/sh
set -e
eval "$(jq -er '@sh "VERSION=\(.version)
ENABLED_FUNCTION=\(.enabled_function)
ARCHITECTURE=\(.architecture)
CACHE_DIR=\(.cache_dir)
FUNCTIONBEAT_YML=\(.functionbeat_yml)"')"
SYSTEM="$(uname | awk '{print tolower($0)}')"
FUNCTION_BEAT_URL=https://artifacts.elastic.co/downloads/beats/functionbeat/functionbeat-"${VERSION}"-"${SYSTEM}"-"${ARCHITECTURE}".tar.gz
DESTINATION=functionbeat-"${VERSION}"-"${SYSTEM}"-"${ARCHITECTURE}"
export BEAT_STRICT_PERMS=false
export ENABLED_FUNCTION="${ENABLED_FUNCTION}"
mkdir -p "${CACHE_DIR}/${ENABLED_FUNCTION}"
ABSOLUTE_CACHE_DIR="$(cd "${CACHE_DIR}" && pwd -P)"
# download functionbeat if not already in cache
if [ ! -f "${CACHE_DIR}/${DESTINATION}.tar.gz" ]; then
mkdir -p "${CACHE_DIR}"
curl -s -o "${CACHE_DIR}/${ENABLED_FUNCTION}/${DESTINATION}.tar.gz.tmp" "${FUNCTION_BEAT_URL}"
mv "${CACHE_DIR}/${ENABLED_FUNCTION}/${DESTINATION}.tar.gz.tmp" "${CACHE_DIR}/${DESTINATION}.tar.gz"
fi
cd "${CACHE_DIR}/${ENABLED_FUNCTION}"
tar xzvf "../${DESTINATION}".tar.gz > /dev/null
echo "${FUNCTIONBEAT_YML}" | base64 -d > "${DESTINATION}"/functionbeat.yml
cd "${DESTINATION}"
./functionbeat -v -e package --output ./../"${DESTINATION}-release".zip
cd ..
rm -rf "${DESTINATION}"
unzip -o -qq -a "${DESTINATION}"-release.zip -d "${DESTINATION}"-release
rm -rf "${DESTINATION}"-release.zip
cd "${DESTINATION}"-release
# custom runtime requires the executable to be named bootstrap
mv functionbeat-aws bootstrap
# replace absolute local path baked in by libbeat with the Lambda runtime path
sed "s|${ABSOLUTE_CACHE_DIR}/${ENABLED_FUNCTION}/${DESTINATION}|/var/task|g" functionbeat.yml > functionbeat.yml.tmp && mv functionbeat.yml.tmp functionbeat.yml
touch -r bootstrap functionbeat.yml
chmod 644 functionbeat.yml
cd ..
# zip destination contents and with deterministic file order
find "${DESTINATION}"-release/* -type f | LC_ALL=C sort | zip -j -q -X -@ "${DESTINATION}"-release.zip
rm -rf "${DESTINATION}"-release
FILEHASH=$(openssl dgst -binary -sha256 "${DESTINATION}-release.zip" | openssl base64)
jq -M -c -n --arg filehash "$FILEHASH" --arg destination "${CACHE_DIR}/${ENABLED_FUNCTION}/${DESTINATION}-release.zip" '{"filename": $destination, "filehash": $filehash}'