Skip to content

Commit 4d6026c

Browse files
Bruno Souzaheitorlessa
Bruno Souza
andauthored
docs(apigateway): add all resolvers in testing your code section for accuracy (#1688)
Co-authored-by: heitorlessa <[email protected]>
1 parent ac20a8d commit 4d6026c

9 files changed

+239
-12
lines changed

Diff for: docs/core/event_handler/api_gateway.md

+53-9
Original file line numberDiff line numberDiff line change
@@ -562,19 +562,63 @@ your development, building, deployment tooling need to accommodate the distinct
562562

563563
## Testing your code
564564

565-
You can test your routes by passing a proxy event request where `path` and `httpMethod`.
565+
You can test your routes by passing a proxy event request with required params.
566566

567-
=== "assert_http_response.py"
567+
=== "API Gateway REST API"
568568

569-
```python hl_lines="21-24"
570-
--8<-- "examples/event_handler_rest/src/assert_http_response.py"
571-
```
569+
=== "assert_rest_api_resolver_response.py"
572570

573-
=== "assert_http_response_module.py"
571+
```python hl_lines="21-24"
572+
--8<-- "examples/event_handler_rest/src/assert_rest_api_resolver_response.py"
573+
```
574574

575-
```python
576-
--8<-- "examples/event_handler_rest/src/assert_http_response_module.py"
577-
```
575+
=== "assert_rest_api_response_module.py"
576+
577+
```python
578+
--8<-- "examples/event_handler_rest/src/assert_rest_api_response_module.py"
579+
```
580+
581+
=== "API Gateway HTTP API"
582+
583+
=== "assert_http_api_resolver_response.py"
584+
585+
```python hl_lines="21-29"
586+
--8<-- "examples/event_handler_rest/src/assert_http_api_resolver_response.py"
587+
```
588+
589+
=== "assert_http_api_response_module.py"
590+
591+
```python
592+
--8<-- "examples/event_handler_rest/src/assert_http_api_response_module.py"
593+
```
594+
595+
=== "Application Load Balancer"
596+
597+
=== "assert_alb_api_resolver_response.py"
598+
599+
```python hl_lines="21-24"
600+
--8<-- "examples/event_handler_rest/src/assert_alb_api_resolver_response.py"
601+
```
602+
603+
=== "assert_alb_api_response_module.py"
604+
605+
```python
606+
--8<-- "examples/event_handler_rest/src/assert_alb_api_response_module.py"
607+
```
608+
609+
=== "Lambda Function URL"
610+
611+
=== "assert_function_url_api_resolver_response.py"
612+
613+
```python hl_lines="21-29"
614+
--8<-- "examples/event_handler_rest/src/assert_function_url_api_resolver_response.py"
615+
```
616+
617+
=== "assert_function_url_api_response_module.py"
618+
619+
```python
620+
--8<-- "examples/event_handler_rest/src/assert_function_url_api_response_module.py"
621+
```
578622

579623
## FAQ
580624

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from dataclasses import dataclass
2+
3+
import assert_alb_api_response_module
4+
import pytest
5+
6+
7+
@pytest.fixture
8+
def lambda_context():
9+
@dataclass
10+
class LambdaContext:
11+
function_name: str = "test"
12+
memory_limit_in_mb: int = 128
13+
invoked_function_arn: str = "arn:aws:lambda:eu-west-1:123456789012:function:test"
14+
aws_request_id: str = "da658bd3-2d6f-4e7b-8ec2-937234644fdc"
15+
16+
return LambdaContext()
17+
18+
19+
def test_lambda_handler(lambda_context):
20+
minimal_event = {
21+
"path": "/todos",
22+
"httpMethod": "GET",
23+
"headers": {"x-amzn-trace-id": "b25827e5-0e30-4d52-85a8-4df449ee4c5a"},
24+
}
25+
# Example of Application Load Balancer request event:
26+
# https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html
27+
28+
ret = assert_alb_api_response_module.lambda_handler(minimal_event, lambda_context)
29+
assert ret["statusCode"] == 200
30+
assert ret["body"] != ""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import requests
2+
from requests import Response
3+
4+
from aws_lambda_powertools import Logger, Tracer
5+
from aws_lambda_powertools.event_handler import ALBResolver
6+
from aws_lambda_powertools.logging import correlation_paths
7+
from aws_lambda_powertools.utilities.typing import LambdaContext
8+
9+
tracer = Tracer()
10+
logger = Logger()
11+
app = ALBResolver()
12+
13+
14+
@app.get("/todos")
15+
@tracer.capture_method
16+
def get_todos():
17+
todos: Response = requests.get("https://jsonplaceholder.typicode.com/todos")
18+
todos.raise_for_status()
19+
20+
return {"todos": todos.json()[:10]}
21+
22+
23+
# You can continue to use other utilities just as before
24+
@logger.inject_lambda_context(correlation_id_path=correlation_paths.APPLICATION_LOAD_BALANCER)
25+
@tracer.capture_lambda_handler
26+
def lambda_handler(event: dict, context: LambdaContext) -> dict:
27+
return app.resolve(event, context)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from dataclasses import dataclass
2+
3+
import assert_function_url_api_response_module
4+
import pytest
5+
6+
7+
@pytest.fixture
8+
def lambda_context():
9+
@dataclass
10+
class LambdaContext:
11+
function_name: str = "test"
12+
memory_limit_in_mb: int = 128
13+
invoked_function_arn: str = "arn:aws:lambda:eu-west-1:123456789012:function:test"
14+
aws_request_id: str = "da658bd3-2d6f-4e7b-8ec2-937234644fdc"
15+
16+
return LambdaContext()
17+
18+
19+
def test_lambda_handler(lambda_context):
20+
minimal_event = {
21+
"rawPath": "/todos",
22+
"requestContext": {
23+
"requestContext": {"requestId": "227b78aa-779d-47d4-a48e-ce62120393b8"}, # correlation ID
24+
"http": {
25+
"method": "GET",
26+
},
27+
"stage": "$default",
28+
},
29+
}
30+
# Example of Lambda Function URL request event:
31+
# https://docs.aws.amazon.com/lambda/latest/dg/urls-invocation.html#urls-payloads
32+
33+
ret = assert_function_url_api_response_module.lambda_handler(minimal_event, lambda_context)
34+
assert ret["statusCode"] == 200
35+
assert ret["body"] != ""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import requests
2+
from requests import Response
3+
4+
from aws_lambda_powertools import Logger, Tracer
5+
from aws_lambda_powertools.event_handler import LambdaFunctionUrlResolver
6+
from aws_lambda_powertools.logging import correlation_paths
7+
from aws_lambda_powertools.utilities.typing import LambdaContext
8+
9+
tracer = Tracer()
10+
logger = Logger()
11+
app = LambdaFunctionUrlResolver()
12+
13+
14+
@app.get("/todos")
15+
@tracer.capture_method
16+
def get_todos():
17+
todos: Response = requests.get("https://jsonplaceholder.typicode.com/todos")
18+
todos.raise_for_status()
19+
20+
return {"todos": todos.json()[:10]}
21+
22+
23+
# You can continue to use other utilities just as before
24+
@logger.inject_lambda_context(correlation_id_path=correlation_paths.LAMBDA_FUNCTION_URL)
25+
@tracer.capture_lambda_handler
26+
def lambda_handler(event: dict, context: LambdaContext) -> dict:
27+
return app.resolve(event, context)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from dataclasses import dataclass
2+
3+
import assert_http_api_response_module
4+
import pytest
5+
6+
7+
@pytest.fixture
8+
def lambda_context():
9+
@dataclass
10+
class LambdaContext:
11+
function_name: str = "test"
12+
memory_limit_in_mb: int = 128
13+
invoked_function_arn: str = "arn:aws:lambda:eu-west-1:123456789012:function:test"
14+
aws_request_id: str = "da658bd3-2d6f-4e7b-8ec2-937234644fdc"
15+
16+
return LambdaContext()
17+
18+
19+
def test_lambda_handler(lambda_context):
20+
minimal_event = {
21+
"rawPath": "/todos",
22+
"requestContext": {
23+
"requestContext": {"requestId": "227b78aa-779d-47d4-a48e-ce62120393b8"}, # correlation ID
24+
"http": {
25+
"method": "GET",
26+
},
27+
"stage": "$default",
28+
},
29+
}
30+
# Example of API Gateway HTTP API request event:
31+
# https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html
32+
33+
ret = assert_http_api_response_module.lambda_handler(minimal_event, lambda_context)
34+
assert ret["statusCode"] == 200
35+
assert ret["body"] != ""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import requests
2+
from requests import Response
3+
4+
from aws_lambda_powertools import Logger, Tracer
5+
from aws_lambda_powertools.event_handler import APIGatewayHttpResolver
6+
from aws_lambda_powertools.logging import correlation_paths
7+
from aws_lambda_powertools.utilities.typing import LambdaContext
8+
9+
tracer = Tracer()
10+
logger = Logger()
11+
app = APIGatewayHttpResolver()
12+
13+
14+
@app.get("/todos")
15+
@tracer.capture_method
16+
def get_todos():
17+
todos: Response = requests.get("https://jsonplaceholder.typicode.com/todos")
18+
todos.raise_for_status()
19+
20+
return {"todos": todos.json()[:10]}
21+
22+
23+
# You can continue to use other utilities just as before
24+
@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_HTTP)
25+
@tracer.capture_lambda_handler
26+
def lambda_handler(event: dict, context: LambdaContext) -> dict:
27+
return app.resolve(event, context)

Diff for: examples/event_handler_rest/src/assert_http_response.py renamed to examples/event_handler_rest/src/assert_rest_api_resolver_response.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dataclasses import dataclass
22

3-
import assert_http_response_module
3+
import assert_rest_api_resolver_response
44
import pytest
55

66

@@ -22,7 +22,9 @@ def test_lambda_handler(lambda_context):
2222
"httpMethod": "GET",
2323
"requestContext": {"requestId": "227b78aa-779d-47d4-a48e-ce62120393b8"}, # correlation ID
2424
}
25-
26-
ret = assert_http_response_module.lambda_handler(minimal_event, lambda_context)
25+
# Example of API Gateway REST API request event:
26+
# https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html#apigateway-example-event
27+
28+
ret = assert_rest_api_resolver_response.lambda_handler(minimal_event, lambda_context)
2729
assert ret["statusCode"] == 200
2830
assert ret["body"] != ""

0 commit comments

Comments
 (0)