example_self_tested_lambda/Makefile

69 lines
1.6 KiB
Makefile

.PHONY: help all install lint clean test deploy integration-test delete
ifdef $(env)
include environments/$(env).env
endif
CFN := cloudformation
CFN_NAME := example-cloud-function
BUCKET := $(shell aws s3 ls | grep templates | cut -c 24-)
TEST_DATA := 100
TEST_RESULT := "2,4,5,10,20,25,50"
EMAIL := "cv@juancanham.com"
help:
@echo 'Targets:'
@echo ' * all [install clean lint test deploy integration-test]'
@echo ' * delete'
@echo ' - optionally you can specify an env to load overrides'
all: install clean lint test deploy integration-test
install:
pip install -r requirements.txt
clean:
rm -f */**/*.pyc
rm -f $(CFN)/.*-generated.yaml
rm -f test-response.txt
lint:
yamllint .
black .
pylint --disable line-too-long src/ tests/
cfn-lint $(CFN)/*.yaml
shellcheck ci/*.sh
test:
pytest
deploy:
aws cloudformation package \
--template-file $(CFN)/lambda-sam-template.yaml \
--s3-bucket $(BUCKET) \
--output-template-file $(CFN)/.$(CFN_NAME)-generated.yaml
aws cloudformation deploy \
--stack-name $(CFN_NAME) \
--template-file $(CFN)/.$(CFN_NAME)-generated.yaml \
--capabilities CAPABILITY_IAM \
--parameter-overrides \
NotificationEmail=$(EMAIL) \
TestData=$(TEST_DATA) \
TestExpected=$(TEST_RESULT)
delete:
aws cloudformation delete-stack --stack-name $(CFN_NAME)
integration-test:
aws lambda invoke \
--payload $(TEST_DATA)
--log-type Tail \
--function-name $$(aws cloudformation describe-stacks \
--stack-name $(CFN_NAME) \
--output text \
--query 'Stacks[0].Outputs[?OutputKey==`LambdaArn`].OutputValue' \
) \
test-response.txt
grep $(TEST_RESULT) test-response.txt