@@ -34,10 +34,12 @@ LAMBDA_HANDLER?=$(SWIFT_EXECUTABLE).helloWorld
3434LAMBDA_ZIP =lambda.zip
3535SHARED_LIBS_FOLDER =swift-shared-libs
3636LAYER_ZIP =swift-lambda-runtime-$(LAYER_VERSION ) .zip
37- LAMBDA_BUILD_PATH =./.build
37+ ROOT_BUILD_PATH =./.build
38+ LAYER_BUILD_PATH =$(ROOT_BUILD_PATH ) /layer
39+ LAMBDA_BUILD_PATH =$(ROOT_BUILD_PATH ) /lambda
40+ TMP_BUILD_PATH =$(ROOT_BUILD_PATH ) /tmp
3841IAM_ROLE_NAME =lambda_sprinter_basic_execution
3942DATETIME =$(shell date +'% y% m% d-% H% M% S')
40- AWS_LAYER_BUCKET =aws-lambda-swift-sprinter-layers
4143
4244# use this for local development
4345MOUNT_ROOT =$(shell pwd) /..
@@ -112,13 +114,18 @@ test_package:
112114 swift test
113115
114116create_build_directory :
115- if [ ! -d " $( LAMBDA_BUILD_PATH) " ]; then mkdir $( LAMBDA_BUILD_PATH) ; fi
117+ if [ ! -d " $( LAMBDA_BUILD_PATH) " ]; then mkdir -p $( LAMBDA_BUILD_PATH) ; fi
118+ if [ ! -d " $( LAYER_BUILD_PATH) " ]; then mkdir -p $( LAYER_BUILD_PATH) ; fi
119+ if [ ! -d " $( TMP_BUILD_PATH) " ]; then mkdir -p $( TMP_BUILD_PATH) ; fi
116120
117121package_lambda : clean_lambda create_build_directory build_lambda
118122 zip -r -j $(LAMBDA_BUILD_PATH ) /$(LAMBDA_ZIP ) $(SWIFT_PROJECT_PATH ) /.build/$(SWIFT_CONFIGURATION ) /$(SWIFT_EXECUTABLE )
119123
124+ clean_all : clean_layer clean_lambda
125+ rm -r $(ROOT_BUILD_PATH )
126+
120127clean_layer :
121- rm $(LAMBDA_BUILD_PATH ) /$(LAYER_ZIP ) || true
128+ rm $(LAYER_BUILD_PATH ) /$(LAYER_ZIP ) || true
122129 rm -r $(SHARED_LIBS_FOLDER ) || true
123130
124131package_layer : create_build_directory clean_layer
@@ -136,38 +143,38 @@ package_layer: create_build_directory clean_layer
136143 --workdir " /src" \
137144 $(SWIFT_DOCKER_IMAGE ) \
138145 cp -t $(SHARED_LIBS_FOLDER ) /lib $(SHARED_LIBRARIES )
139- zip -r $(LAMBDA_BUILD_PATH ) /$(LAYER_ZIP ) bootstrap $(SHARED_LIBS_FOLDER )
146+ zip -r $(LAYER_BUILD_PATH ) /$(LAYER_ZIP ) bootstrap $(SHARED_LIBS_FOLDER )
140147
141- upload_build_to_s3 : create_lambda_s3_key create_s3_buckets_if_not_existing
142- aws s3 cp --acl public-read " $( LAMBDA_BUILD_PATH) / $( LAMBDA_ZIP ) " s3://$(AWS_BUCKET ) /$(LAMBDA_S3_UPLOAD_PATH ) / $( LAMBDA_ZIP ) --profile $(AWS_PROFILE )
148+ upload_build_to_s3 : create_lambda_s3_key create_s3_bucket_if_not_existing
149+ aws s3 sync --acl public-read " $( LAMBDA_BUILD_PATH) " s3://$(AWS_BUCKET ) /$(LAMBDA_S3_UPLOAD_PATH ) --profile $(AWS_PROFILE )
143150
144151create_layer_s3_key :
145- $(eval LAYER_S3_UPLOAD_PATH := $( SWIFT_LAMBDA_LIBRARY ) /$(DATETIME ) )
152+ $(eval LAYER_S3_UPLOAD_PATH := layers /$(SWIFT_LAMBDA_LIBRARY ) )
146153
147- upload_lambda_layer_with_s3 : create_s3_buckets_if_not_existing create_layer_s3_key
148- aws s3 cp --acl public-read " $( LAMBDA_BUILD_PATH ) / $( LAYER_ZIP ) " s3://$(AWS_LAYER_BUCKET ) /$(LAYER_S3_UPLOAD_PATH ) / $( LAYER_ZIP ) --profile $(AWS_PROFILE )
149- aws lambda publish-layer-version --layer-name $(SWIFT_LAMBDA_LIBRARY ) --description " AWS Custom Runtime Swift Shared Libraries with NIO" --content " S3Bucket=$( AWS_LAYER_BUCKET ) ,S3Key=$( LAYER_S3_UPLOAD_PATH) /$( LAYER_ZIP) " --output text --query LayerVersionArn --profile $(AWS_PROFILE ) > $(LAMBDA_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
150- cat $(LAMBDA_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
154+ upload_lambda_layer_with_s3 : create_s3_bucket_if_not_existing create_layer_s3_key
155+ aws s3 sync --acl public-read " $( LAYER_BUILD_PATH ) " s3://$(AWS_BUCKET ) /$(LAYER_S3_UPLOAD_PATH ) --profile $(AWS_PROFILE )
156+ aws lambda publish-layer-version --layer-name $(SWIFT_LAMBDA_LIBRARY ) --description " AWS Custom Runtime Swift Shared Libraries with NIO" --content " S3Bucket=$( AWS_BUCKET ) ,S3Key=$( LAYER_S3_UPLOAD_PATH) /$( LAYER_ZIP) " --output text --query LayerVersionArn --profile $(AWS_PROFILE ) > $(TMP_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
157+ cat $(TMP_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
151158
152159upload_lambda_layer :
153- aws lambda publish-layer-version --layer-name $(SWIFT_LAMBDA_LIBRARY ) --description " AWS Custom Runtime Swift Shared Libraries with NIO" --zip-file fileb://$(LAMBDA_BUILD_PATH ) /$(LAYER_ZIP ) --output text --query LayerVersionArn --profile $(AWS_PROFILE ) > $(LAMBDA_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
154- cat $(LAMBDA_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
160+ aws lambda publish-layer-version --layer-name $(SWIFT_LAMBDA_LIBRARY ) --description " AWS Custom Runtime Swift Shared Libraries with NIO" --zip-file fileb://$(LAYER_BUILD_PATH ) /$(LAYER_ZIP ) --output text --query LayerVersionArn --profile $(AWS_PROFILE ) > $(TMP_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
161+ cat $(TMP_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt
155162
156163create_role :
157164 aws iam create-role --role-name $(IAM_ROLE_NAME ) --description " Allows Lambda functions to call AWS services on your behalf." --assume-role-policy-document ' {"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["sts:AssumeRole"],"Principal":{"Service":["lambda.amazonaws.com"]}}]}' --profile $(AWS_PROFILE ) || true
158165 aws iam attach-role-policy --role-name $(IAM_ROLE_NAME ) --policy-arn " arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" --profile $(AWS_PROFILE ) || true
159166 $(eval IAM_ROLE_ARN := $(shell aws iam list-roles --query "Roles[? RoleName == '$(IAM_ROLE_NAME)'].Arn" --output text --profile $(AWS_PROFILE)))
160167
161168create_lambda : create_role package_lambda
162- $(eval LAMBDA_LAYER_ARN := $(shell cat $(LAMBDA_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt) )
169+ $(eval LAMBDA_LAYER_ARN := $(shell cat $(TMP_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt) )
163170 $(info "$(LAMBDA_LAYER_ARN ) ")
164171 aws lambda create-function --function-name $(LAMBDA_FUNCTION_NAME ) --runtime provided --handler $(LAMBDA_HANDLER ) --role " $( IAM_ROLE_ARN) " --zip-file fileb://$(LAMBDA_BUILD_PATH ) /$(LAMBDA_ZIP ) --layers $(LAMBDA_LAYER_ARN ) --profile $(AWS_PROFILE )
165172
166173create_lambda_s3_key :
167- $(eval LAMBDA_S3_UPLOAD_PATH := $(LAMBDA_FUNCTION_NAME ) /$(DATETIME ) )
174+ $(eval LAMBDA_S3_UPLOAD_PATH := lambdas/ $(LAMBDA_FUNCTION_NAME ) /$(DATETIME ) )
168175
169176create_lambda_with_s3 : create_role package_lambda upload_build_to_s3
170- $(eval LAMBDA_LAYER_ARN := $(shell cat $(LAMBDA_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt) )
177+ $(eval LAMBDA_LAYER_ARN := $(shell cat $(TMP_BUILD_PATH ) /$(SWIFT_LAMBDA_LIBRARY ) -arn.txt) )
171178 $(info "$(LAMBDA_LAYER_ARN ) ")
172179 aws lambda create-function --function-name $(LAMBDA_FUNCTION_NAME ) --runtime provided --handler $(LAMBDA_HANDLER ) --role " $( IAM_ROLE_ARN) " --code " S3Bucket=$( AWS_BUCKET) ,S3Key=$( LAMBDA_S3_UPLOAD_PATH) /$( LAMBDA_ZIP) " --layers $(LAMBDA_LAYER_ARN ) --profile $(AWS_PROFILE )
173180
@@ -178,15 +185,14 @@ update_lambda_with_s3: package_lambda upload_build_to_s3
178185 aws lambda update-function-code --function-name $(LAMBDA_FUNCTION_NAME ) --s3-bucket $(AWS_BUCKET ) --s3-key " $( LAMBDA_S3_UPLOAD_PATH) /$( LAMBDA_ZIP) " --profile $(AWS_PROFILE )
179186
180187invoke_lambda :
181- aws lambda invoke --function-name $(LAMBDA_FUNCTION_NAME ) --profile $(AWS_PROFILE ) --payload " fileb://$( SWIFT_PROJECT_PATH) /event.json" $(LAMBDA_BUILD_PATH ) /outfile && echo " \nResult:" && cat $(LAMBDA_BUILD_PATH ) /outfile && echo " \n"
188+ aws lambda invoke --function-name $(LAMBDA_FUNCTION_NAME ) --profile $(AWS_PROFILE ) --payload " fileb://$( SWIFT_PROJECT_PATH) /event.json" $(TMP_BUILD_PATH ) /outfile && echo " \nResult:" && cat $(TMP_BUILD_PATH ) /outfile && echo " \n"
182189
183- create_s3_buckets_if_not_existing :
190+ create_s3_bucket_if_not_existing :
184191 aws s3 ls " s3://$( AWS_BUCKET) " || aws s3 mb " s3://$( AWS_BUCKET) "
185- aws s3 ls " s3://$( AWS_LAYER_BUCKET) " || aws s3 mb " s3://$( AWS_LAYER_BUCKET) "
186192
187193# quick commands - no clean
188194quick_build_lambda : build_lambda create_build_directory
189195 zip -r -j $(LAMBDA_BUILD_PATH ) /$(LAMBDA_ZIP ) $(SWIFT_PROJECT_PATH ) /.build/$(SWIFT_CONFIGURATION ) /$(SWIFT_EXECUTABLE )
190196
191197quick_deploy_lambda : quick_build_lambda create_build_directory
192- aws lambda update-function-code --function-name $(LAMBDA_FUNCTION_NAME ) --zip-file fileb://$(LAMBDA_BUILD_PATH ) /lambda.zip --profile $(AWS_PROFILE )
198+ aws lambda update-function-code --function-name $(LAMBDA_FUNCTION_NAME ) --zip-file fileb://$(LAMBDA_BUILD_PATH ) /lambda.zip --profile $(AWS_PROFILE )
0 commit comments