AWS lambda python build #AWS #Lambda #python
# Makefile for python lambda function package
#
# Package
# - src/main/python
#
# Dependencies
# - pip install awscli
# - aws configure
#
# Useage
#
# - new New function
# - run Execute function
VERSION := $(shell date +%Y%m%d%H%M%S)
PKG_NAME = lambda-func-$(VERSION)
PWD = $(shell pwd)
BUCKET_NAME = bucket
S3_BUCKET = s3://$(BUCKET_NAME)
SRC_BUCKET= src/
DEST_BUCKET= $(S3_BUCKET)/$(SRC_BUCKET)
SRC_DIR = $(PWD)/src/main/python
BIN_DIR = $(PWD)/bin
RESOURCE_DIR = $(PWD)/src/main/resources
DEST_DIR = $(PWD)/dest/
PKG_DIR = $(PWD)/pkg/$(PKG_NAME)
ROLE_NAME = arn:aws:iam::<role_name>
# LIB_DIR = $(PWD)/lib
# DEST_DIR = $(PWD)/dest
ifdef target
TARGET = $(target)
else
TARGET = target_file_name
endif
ifdef funcname
FANC_NAME = $(funcname)
else
FANC_NAME = func_name
endif
ifdef argfile
LAMBDA_ARGS = $(argfile)
else
LAMBDA_ARGS = $(RESOURCE_DIR)/test_args.json
endif
all: clean build deploy
build:
@echo "######### Build python package #########"
mkdir -p $(PKG_DIR)
pip install -r requirements_lambda.txt -t $(PKG_DIR)
cp -R $(SRC_DIR)/* $(PKG_DIR)
cp -R $(BIN_DIR)/* $(PKG_DIR)
# cp -R $(RESOURCE_DIR)/* $(PKG_NAME)
cd $(PKG_DIR) && zip -ry $(DEST_DIR)$(PKG_NAME).zip . -x .gitkeep .DS_Store *.py[co] *.swp *.swo
deploy:
@echo "######### Deploy to lambda package #########"
aws s3 cp $(DEST_DIR)$(PKG_NAME).zip $(DEST_BUCKET)
aws lambda update-function-code --function-name $(FANC_NAME) --s3-bucket $(BUCKET_NAME) --s3-key $(SRC_BUCKET)$(PKG_NAME).zip --publish
new: clean build
@echo "######### Create lambda function #########"
aws s3 cp $(DEST_DIR)$(PKG_NAME).zip $(DEST_BUCKET)
aws lambda create-function --function-name $(FANC_NAME) --runtime python3.6 --role $(ROLE_NAME) --handler $(FANC_NAME).lambda_handler --code S3Bucket=$(BUCKET_NAME),S3Key=$(SRC_BUCKET)$(PKG_NAME).zip
clean:
@echo "######### Clean project #########"
find . -name "*.py[co]" | xargs rm -rf
cd $(DEST_DIR) && ls | egrep -v ".gitkeep|\.|\.\." | xargs rm -rf
cd $(PWD)/pkg && ls | egrep -v ".gitkeep|\.|\.\." | xargs rm -rf
run:
@echo "######### Run project #########"
aws lambda invoke-async --function-name $(FANC_NAME) --invoke-args $(LAMBDA_ARGS)