#!/bin/bash ## Usage (from project root): # # ./lambda/headless/deploy [scanner] [--create] # # The --create flag will create a new function. Otherwise, # the function is assumed to exist and will be updated in place. # # Examples: # ./lambda/deploy/headless third_parties --create # ./lambda/deploy/headless third_parties SCANNER_NAME=$1 FUNCTION_NAME="task_$SCANNER_NAME" IS_CREATE=$2 if [ -z "$1" ]; then echo "ERROR: A scanner name is required." fi echo "Building $FUNCTION_NAME from $SCANNER_NAME..." # Go into the lambda/headless dir cd lambda/headless # From the lambda dir - use the build/ dir to assemble a zip # and "publish" it back up to the lambda dir. rm -r build mkdir -p build mkdir -p build/scanners/headless mkdir -p build/utils # Copy & transpile each JS file to Node 6.10-compatible JS. ../../node_modules/.bin/babel lambda_handler.js --out-file build/lambda_handler.js ../../node_modules/.bin/babel ../../scanners/headless/base.js --out-file build/scanners/headless/base.js ../../node_modules/.bin/babel ../../scanners/$SCANNER_NAME.js --out-file build/scanners/$SCANNER_NAME.js # Copy in the known services map. cp ../../utils/known_services.json build/utils/ # Copy Chrome in. cp chrome/headless_shell.tar.gz build # Install npm dependencies in the build directory. cp -r ../../package.json build cd build PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 npm install --production echo "Building zip package for $FUNCTION_NAME..." zip -rq9 $FUNCTION_NAME.zip . cd .. # Create the function using the zipped code. if [ "$IS_CREATE" == "--create" ]; then echo "Creating Lambda function $FUNCTION_NAME..." aws lambda create-function \ --function-name $FUNCTION_NAME \ --zip-file fileb://./build/$FUNCTION_NAME.zip \ --role $AWS_LAMBDA_ROLE \ --handler lambda_handler.handler \ --runtime nodejs6.10 \ --timeout 300 \ --memory-size 1536 # Or, update the function's code with the latest zipped code. else echo "Updating Lambda code file for $FUNCTION_NAME..." aws lambda update-function-code \ --function-name $FUNCTION_NAME \ --zip-file fileb://./build/$FUNCTION_NAME.zip fi