Skip to content

Commit 61a6581

Browse files
docs: adding example
1 parent be743c3 commit 61a6581

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed

docs/core/event_handler/api_gateway.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,18 @@ matches one of the allowed values.
298298
--8<-- "examples/event_handler_rest/src/setting_cors_output.json"
299299
```
300300

301+
=== "setting_cors_extra_origins.py"
302+
303+
```python hl_lines="5 11-12 34"
304+
--8<-- "examples/event_handler_rest/src/setting_cors_extra_origins.py"
305+
```
306+
307+
=== "setting_cors_extra_origins_output.json"
308+
309+
```json
310+
--8<-- "examples/event_handler_rest/src/setting_cors_extra_origins_output.json"
311+
```
312+
301313
#### Pre-flight
302314

303315
Pre-flight (OPTIONS) calls are typically handled at the API Gateway or Lambda Function URL level as per [our sample infrastructure](#required-resources), no Lambda integration is necessary. However, ALB expects you to handle pre-flight requests.

examples/event_handler_rest/src/setting_cors.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88

99
tracer = Tracer()
1010
logger = Logger()
11-
cors_config = CORSConfig(allow_origin="https://example.com", max_age=300)
11+
# CORS will match when Origin is only https://www.example.com
12+
cors_config = CORSConfig(allow_origin="https://www.example.com", max_age=300)
1213
app = APIGatewayRestResolver(cors=cors_config)
1314

1415

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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 APIGatewayRestResolver, CORSConfig
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+
# CORS will match when Origin is https://www.example.com OR https://dev.example.com
12+
cors_config = CORSConfig(allow_origin="https://www.example.com", extra_origins=["https://dev.example.com"], max_age=300)
13+
app = APIGatewayRestResolver(cors=cors_config)
14+
15+
16+
@app.get("/todos")
17+
@tracer.capture_method
18+
def get_todos():
19+
todos: Response = requests.get("https://jsonplaceholder.typicode.com/todos")
20+
todos.raise_for_status()
21+
22+
# for brevity, we'll limit to the first 10 only
23+
return {"todos": todos.json()[:10]}
24+
25+
26+
@app.get("/todos/<todo_id>")
27+
@tracer.capture_method
28+
def get_todo_by_id(todo_id: str): # value come as str
29+
todos: Response = requests.get(f"https://jsonplaceholder.typicode.com/todos/{todo_id}")
30+
todos.raise_for_status()
31+
32+
return {"todos": todos.json()}
33+
34+
35+
@app.get("/healthcheck", cors=False) # optionally removes CORS for a given route
36+
@tracer.capture_method
37+
def am_i_alive():
38+
return {"am_i_alive": "yes"}
39+
40+
41+
# You can continue to use other utilities just as before
42+
@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST)
43+
@tracer.capture_lambda_handler
44+
def lambda_handler(event: dict, context: LambdaContext) -> dict:
45+
return app.resolve(event, context)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"statusCode": 200,
3+
"multiValueHeaders": {
4+
"Content-Type": ["application/json"],
5+
"Access-Control-Allow-Origin": ["https://www.example.com","https://dev.example.com"],
6+
"Access-Control-Allow-Headers": ["Authorization,Content-Type,X-Amz-Date,X-Amz-Security-Token,X-Api-Key"]
7+
},
8+
"body": "{\"todos\":[{\"userId\":1,\"id\":1,\"title\":\"delectus aut autem\",\"completed\":false},{\"userId\":1,\"id\":2,\"title\":\"quis ut nam facilis et officia qui\",\"completed\":false},{\"userId\":1,\"id\":3,\"title\":\"fugiat veniam minus\",\"completed\":false},{\"userId\":1,\"id\":4,\"title\":\"et porro tempora\",\"completed\":true},{\"userId\":1,\"id\":5,\"title\":\"laboriosam mollitia et enim quasi adipisci quia provident illum\",\"completed\":false},{\"userId\":1,\"id\":6,\"title\":\"qui ullam ratione quibusdam voluptatem quia omnis\",\"completed\":false},{\"userId\":1,\"id\":7,\"title\":\"illo expedita consequatur quia in\",\"completed\":false},{\"userId\":1,\"id\":8,\"title\":\"quo adipisci enim quam ut ab\",\"completed\":true},{\"userId\":1,\"id\":9,\"title\":\"molestiae perspiciatis ipsa\",\"completed\":false},{\"userId\":1,\"id\":10,\"title\":\"illo est ratione doloremque quia maiores aut\",\"completed\":true}]}",
9+
"isBase64Encoded": false
10+
}

0 commit comments

Comments
 (0)