kitaro-tn
1/4/2018 - 9:13 AM

AWS lambda python build #AWS #Lambda #python

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)