From ae986bbed5ed79507905dc8cb18ec1dfaa6cae2e Mon Sep 17 00:00:00 2001 From: Brandon Liu Date: Thu, 21 Jul 2022 23:41:44 +0800 Subject: [PATCH] lambda + API Gateway proper path integration; fix exceptions when archive missing --- serverless/aws/lambda_function.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/serverless/aws/lambda_function.py b/serverless/aws/lambda_function.py index 53c312e..d4b79be 100644 --- a/serverless/aws/lambda_function.py +++ b/serverless/aws/lambda_function.py @@ -34,8 +34,21 @@ def get_object_bytes(key, offset, length): # and returns API Gateway V2 / Lambda Function dict responses # Does not work with CloudFront events/Lambda@Edge; see README def lambda_handler(event, context): - uri = event["rawPath"] - name, tile = parse_tile_path(os.environ.get("TILE_PATH"), uri) + path = None + if event.get("pathParameters"): + # API Gateway (HTTP or REST) + if "tile_path" in event["pathParameters"]: + path = "/" + event["pathParameters"]["tile_path"] + else: + return { + "statusCode": 500, + "body": "Proxy integration missing tile_path parameter", + } + else: + # Lambda Function URL + path = event.get("rawPath") + + name, tile = parse_tile_path(os.environ.get("TILE_PATH"), path) if not tile: return {"statusCode": 400, "body": "Invalid tile URL"} @@ -46,12 +59,12 @@ def lambda_handler(event, context): ) reader = Reader(get_bytes) - minzoom = int(reader.header().metadata["minzoom"]) - maxzoom = int(reader.header().metadata["maxzoom"]) - if tile.z < minzoom or tile.z > maxzoom: - return {"statusCode": 404, "body": "Tile not found"} - try: + minzoom = int(reader.header().metadata["minzoom"]) + maxzoom = int(reader.header().metadata["maxzoom"]) + if tile.z < minzoom or tile.z > maxzoom: + return {"statusCode": 404, "body": "Tile not found"} + tile_data = reader.get(tile.z, tile.x, tile.y) if not tile_data: return {"statusCode": 204}