Skip to content

Instantly share code, notes, and snippets.

@tanish-kr
Last active November 20, 2018 09:52
Show Gist options
  • Save tanish-kr/c0f10368c46578290c136c613024ff4e to your computer and use it in GitHub Desktop.
Save tanish-kr/c0f10368c46578290c136c613024ff4e to your computer and use it in GitHub Desktop.
AWS Lambdaで外部ライブラリを使用し、パッケージをS3にアップロードし Lambdaに適用

想定パラメータ

  • s3バケット名 : パッケージング化したzipを格納
  • destinationフォルダ : パッケージ前のソース。ライブラリ込
  • src

提供言語

  • python2.7
  • python3
  • node6
  • node8

とりあえずこんなもん

コマンド引数

  • deploy
  • build
  • init
  • run
  • destroy
  • clean

Sample

# Makefile for cchan dmp
#
# Dependencies
# 	- pip install awscli
# 	- aws configure
#
# Useage
# make target<target name(recommend.py -> recommend)>

VERSION := $(shell date +%Y%m%d%H%M%S)
PKG_NAME = ambda-$(VERSION)
PWD = $(shell pwd)
BUCKET_NAME = bucketname
S3_BUCKET = s3://$(BUCKET_NAME)
# BIN_BUCKET= $(S3_BUCKET)/bin/
# LIB_BUCKET= $(S3_BUCKET)/lib/
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::xxxxx:role/lambda_execute
# LIB_DIR = $(PWD)/lib
# DEST_DIR = $(PWD)/dest

ifdef target
TARGET = $(target)
else
TARGET = line_scraping
endif

ifdef funcname
FANC_NAME = $(funcname)
else
FANC_NAME = sample
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 $(TARGET).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)

これベースにできそう

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment