Skip to content

Commit 55ee400

Browse files
authored
Merge branch 'aws-powertools:main' into improv/metrics-no-override-function-name
2 parents 61cfd8c + 0c26e13 commit 55ee400

40 files changed

+815
-330
lines changed

.github/workflows/bootstrap_region.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
with:
4848
ref: ${{ github.sha }}
4949
- name: Setup Node.js
50-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
50+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
5151
with:
5252
node-version: "22"
5353
- name: Setup dependencies

.github/workflows/make-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
with:
5050
ref: ${{ github.sha }}
5151
- name: Setup NodeJS
52-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
52+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
5353
with:
5454
node-version: "22"
5555
cache: "npm"

.github/workflows/make-version.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
ref: ${{ github.ref }}
2424
fetch-depth: 0 # fetch all history, commits and tags, lerna scans it to the last tag and looks at commits, we need all of it to determine the next version
2525
- name: Setup NodeJS
26-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
26+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
2727
with:
2828
node-version: "22"
2929
cache: "npm"

.github/workflows/publish-package.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
with:
4040
ref: ${{ github.sha }}
4141
- name: Setup NodeJS
42-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
42+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
4343
with:
4444
node-version: "22"
4545
cache: "npm"

.github/workflows/publish_layer.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
with:
3636
ref: ${{ github.sha }}
3737
- name: Setup Node.js
38-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
38+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
3939
with:
4040
node-version: "22"
4141
- name: Setup dependencies

.github/workflows/quality_check.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
- name: Checkout code
3838
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
3939
- name: Setup NodeJS
40-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
40+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
4141
with:
4242
node-version: ${{ matrix.version }}
4343
cache: "npm"
@@ -66,7 +66,7 @@ jobs:
6666
- name: Checkout code
6767
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
6868
- name: Setup NodeJS
69-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
69+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
7070
with:
7171
node-version: 22
7272
cache: "npm"
@@ -84,7 +84,7 @@ jobs:
8484
- name: Checkout code
8585
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
8686
- name: Setup NodeJS
87-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
87+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
8888
with:
8989
node-version: 22
9090
cache: "npm"
@@ -102,7 +102,7 @@ jobs:
102102
- name: Checkout code
103103
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
104104
- name: Setup NodeJS
105-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
105+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
106106
with:
107107
node-version: 22
108108
cache: "npm"
@@ -118,7 +118,7 @@ jobs:
118118
- name: Checkout code
119119
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
120120
- name: Setup NodeJS
121-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
121+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
122122
with:
123123
node-version: 22
124124
cache: "npm"

.github/workflows/reusable-run-linting-check-and-unit-tests.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ jobs:
5858
- name: Checkout code
5959
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
6060
- name: Setup NodeJS
61-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
61+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
6262
with:
6363
node-version: ${{ matrix.version }}
6464
cache: "npm"
@@ -87,7 +87,7 @@ jobs:
8787
- name: Checkout code
8888
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
8989
- name: Setup NodeJS
90-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
90+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
9191
with:
9292
node-version: 22
9393
cache: "npm"
@@ -105,7 +105,7 @@ jobs:
105105
- name: Checkout code
106106
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
107107
- name: Setup NodeJS
108-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
108+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
109109
with:
110110
node-version: 22
111111
cache: "npm"
@@ -123,7 +123,7 @@ jobs:
123123
- name: Checkout code
124124
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
125125
- name: Setup NodeJS
126-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
126+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
127127
with:
128128
node-version: 22
129129
cache: "npm"
@@ -139,7 +139,7 @@ jobs:
139139
- name: Checkout code
140140
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
141141
- name: Setup NodeJS
142-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
142+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
143143
with:
144144
node-version: 22
145145
cache: "npm"

.github/workflows/reusable_deploy_layer_stack.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ jobs:
7575
role-to-assume: ${{ secrets.target-account-role }}
7676
mask-aws-account-id: true
7777
- name: Setup Node.js
78-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
78+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
7979
with:
8080
node-version: "22"
8181
- name: Setup dependencies

.github/workflows/reusable_publish_docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
- name: Checkout code
5353
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
5454
- name: Setup NodeJS
55-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
55+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
5656
with:
5757
node-version: "22"
5858
cache: "npm"

.github/workflows/run-e2e-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ jobs:
5555
with:
5656
ref: ${{ steps.extract_PR_details.outputs.headSHA }}
5757
- name: Setup NodeJS
58-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
58+
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
5959
with:
6060
node-version: '22'
6161
- name: Setup dependencies

docs/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# version 9.5.35
2-
FROM squidfunk/mkdocs-material@sha256:047452c6641137c9caa3647d050ddb7fa67b59ed48cc67ec3a4995f3d360ab32
2+
FROM squidfunk/mkdocs-material@sha256:f226a2d2d5983643cab401491fc40e8a5711a50e90c21433f80e91c014cff1f5
33

44
# Install Node.js
55
RUN apk add --no-cache nodejs=20.15.1-r0 npm

docs/core/logger.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,76 @@ When debugging in non-production environments, you can log the incoming event us
207207

208208
Use `POWERTOOLS_LOGGER_LOG_EVENT` environment variable to enable or disable (`true`/`false`) this feature. When using Middy.js middleware or class method decorator, the `logEvent` option will take precedence over the environment variable.
209209

210+
### Setting a Correlation ID
211+
212+
To get started, install the `@aws-lambda-powertools/jmespath` package, and pass the search function using the `correlationIdSearchFn` constructor parameter:
213+
214+
=== "Setup the Logger to use JMESPath search"
215+
216+
```typescript hl_lines="5"
217+
--8<-- "examples/snippets/logger/correlationIdLogger.ts"
218+
```
219+
220+
???+ tip
221+
You can retrieve correlation IDs via `getCorrelationId` method.
222+
223+
You can set a correlation ID using `correlationIdPath` parameter by passing a JMESPath expression, including our custom JMESPath functions or set it manually by calling `setCorrelationId` function.
224+
225+
=== "Setting correlation ID manually"
226+
227+
```typescript hl_lines="7"
228+
--8<-- "examples/snippets/logger/correlationIdManual.ts"
229+
```
230+
231+
1. Alternatively, if the payload is more complex you can use a JMESPath expression as second parameter when prividing a search function in the constructor.
232+
233+
=== "Middy.js"
234+
235+
```typescript hl_lines="13"
236+
--8<-- "examples/snippets/logger/correlationIdMiddy.ts"
237+
```
238+
239+
=== "Decorator"
240+
241+
```typescript hl_lines="11"
242+
--8<-- "examples/snippets/logger/correlationIdDecorator.ts"
243+
```
244+
245+
=== "payload.json"
246+
247+
```typescript
248+
--8<-- "examples/snippets/logger/samples/correlationIdPayload.json"
249+
```
250+
251+
=== "log-output.json"
252+
253+
```json hl_lines="6"
254+
--8<-- "examples/snippets/logger/samples/correlationIdOutput.json"
255+
```
256+
257+
To ease routine tasks like extracting correlation ID from popular event sources, we provide built-in JMESPath expressions.
258+
259+
=== "Decorator"
260+
261+
```typescript hl_lines="4 14"
262+
--8<-- "examples/snippets/logger/correlationIdPaths.ts"
263+
```
264+
265+
???+ note "Note: Any object key named with `-` must be escaped"
266+
For example, **`request.headers."x-amzn-trace-id"`**.
267+
268+
| Name | Expression | Description |
269+
| ----------------------------- | ------------------------------------- | ------------------------------- |
270+
| **API_GATEWAY_REST** | `'requestContext.requestId'` | API Gateway REST API request ID |
271+
| **API_GATEWAY_HTTP** | `'requestContext.requestId'` | API Gateway HTTP API request ID |
272+
| **APPSYNC_AUTHORIZER** | `'requestContext.requestId'` | AppSync resolver request ID |
273+
| **APPSYNC_RESOLVER** | `'request.headers."x-amzn-trace-id"'` | AppSync X-Ray Trace ID |
274+
| **APPLICATION_LOAD_BALANCER** | `'headers."x-amzn-trace-id"'` | ALB X-Ray Trace ID |
275+
| **EVENT_BRIDGE** | `'id'` | EventBridge Event ID |
276+
| **LAMBDA_FUNCTION_URL** | `'requestContext.requestId'` | Lambda Function URL request ID |
277+
| **S3_OBJECT_LAMBDA** | `'xAmzRequestId'` | S3 Object trigger request ID |
278+
| **VPC_LATTICE** | `'headers."x-amzn-trace-id'` | VPC Lattice X-Ray Trace ID |
279+
210280
### Appending additional keys
211281

212282
You can append additional keys using either mechanism:

docs/requirements.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mike==1.1.2
2-
mkdocs-material==9.6.7
2+
mkdocs-material==9.6.9
33
mkdocs-git-revision-date-plugin==0.3.2
44
mkdocs-exclude==1.0.2
55
mkdocs-typedoc==1.0.4

docs/requirements.txt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ mergedeep==1.3.4 \
224224
mike==1.1.2 \
225225
--hash=sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca \
226226
--hash=sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b
227-
# via -r docs/requirements.in
227+
# via -r requirements.in
228228
mkdocs==1.6.1 \
229229
--hash=sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2 \
230230
--hash=sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e
@@ -236,26 +236,26 @@ mkdocs==1.6.1 \
236236
# mkdocs-typedoc
237237
mkdocs-exclude==1.0.2 \
238238
--hash=sha256:ba6fab3c80ddbe3fd31d3e579861fd3124513708271180a5f81846da8c7e2a51
239-
# via -r docs/requirements.in
239+
# via -r requirements.in
240240
mkdocs-get-deps==0.2.0 \
241241
--hash=sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c \
242242
--hash=sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134
243243
# via mkdocs
244244
mkdocs-git-revision-date-plugin==0.3.2 \
245245
--hash=sha256:2e67956cb01823dd2418e2833f3623dee8604cdf223bddd005fe36226a56f6ef
246-
# via -r docs/requirements.in
247-
mkdocs-material==9.6.7 \
248-
--hash=sha256:3e2c1fceb9410056c2d91f334a00cdea3215c28750e00c691c1e46b2a33309b4 \
249-
--hash=sha256:8a159e45e80fcaadd9fbeef62cbf928569b93df954d4dc5ba76d46820caf7b47
250-
# via -r docs/requirements.in
246+
# via -r requirements.in
247+
mkdocs-material==9.6.9 \
248+
--hash=sha256:6e61b7fb623ce2aa4622056592b155a9eea56ff3487d0835075360be45a4c8d1 \
249+
--hash=sha256:a4872139715a1f27b2aa3f3dc31a9794b7bbf36333c0ba4607cf04786c94f89c
250+
# via -r requirements.in
251251
mkdocs-material-extensions==1.3.1 \
252252
--hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \
253253
--hash=sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31
254254
# via mkdocs-material
255255
mkdocs-typedoc==1.0.4 \
256256
--hash=sha256:839b54c51a64bbb77c1c253eb81baad12462ea5cf38d361e262f5cfa8a45567a \
257257
--hash=sha256:a9601d6b04ed4fd5658c7170c58a3a52f584357be2a3c1e39995c6eed3712b1e
258-
# via -r docs/requirements.in
258+
# via -r requirements.in
259259
packaging==24.1 \
260260
--hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \
261261
--hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124

examples/app/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"devDependencies": {
3131
"@types/aws-lambda": "^8.10.147",
3232
"@types/node": "22.13.10",
33-
"aws-cdk-lib": "^2.183.0",
33+
"aws-cdk-lib": "^2.184.1",
3434
"constructs": "^10.4.2",
3535
"source-map-support": "^0.5.21",
3636
"tsx": "^4.19.3",
@@ -45,11 +45,11 @@
4545
"@aws-lambda-powertools/parameters": "^2.16.0",
4646
"@aws-lambda-powertools/tracer": "^2.16.0",
4747
"@aws-sdk/client-ssm": "^3.759.0",
48-
"@aws-sdk/lib-dynamodb": "^3.758.0",
48+
"@aws-sdk/lib-dynamodb": "^3.767.0",
4949
"@middy/core": "^4.7.0",
5050
"@types/aws-lambda": "^8.10.147",
5151
"@types/node": "22.13.10",
52-
"aws-cdk": "^2.1003.0",
52+
"aws-cdk": "^2.1004.0",
5353
"constructs": "^10.4.2",
5454
"esbuild": "^0.25.1",
5555
"typescript": "^5.8.2"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { LambdaInterface } from '@aws-lambda-powertools/commons/types';
2+
import { Logger } from '@aws-lambda-powertools/logger';
3+
import { search } from '@aws-lambda-powertools/logger/correlationId';
4+
5+
const logger = new Logger({
6+
correlationIdSearchFn: search,
7+
});
8+
9+
class Lambda implements LambdaInterface {
10+
@logger.injectLambdaContext({
11+
correlationIdPath: 'headers.my_request_id_header',
12+
})
13+
public async handler(_event: unknown, _context: unknown): Promise<void> {
14+
logger.info('This is an INFO log with some context');
15+
}
16+
}
17+
18+
const myFunction = new Lambda();
19+
export const handler = myFunction.handler.bind(myFunction);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { Logger } from '@aws-lambda-powertools/logger';
2+
import { search } from '@aws-lambda-powertools/logger/correlationId';
3+
4+
const logger = new Logger({
5+
correlationIdSearchFn: search,
6+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Logger } from '@aws-lambda-powertools/logger';
2+
import type { APIGatewayProxyEvent } from 'aws-lambda';
3+
4+
const logger = new Logger();
5+
6+
export const handler = async (event: APIGatewayProxyEvent) => {
7+
logger.setCorrelationId(event.requestContext.requestId); // (1)!
8+
9+
logger.info('log with correlation_id');
10+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Logger } from '@aws-lambda-powertools/logger';
2+
import { search } from '@aws-lambda-powertools/logger/correlationId';
3+
import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware';
4+
import middy from '@middy/core';
5+
6+
const logger = new Logger({
7+
correlationIdSearchFn: search,
8+
});
9+
10+
export const handler = middy()
11+
.use(
12+
injectLambdaContext(logger, {
13+
correlationIdPath: 'headers.my_request_id_header',
14+
})
15+
)
16+
.handler(async () => {
17+
logger.info('log with correlation_id');
18+
});
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { LambdaInterface } from '@aws-lambda-powertools/commons/types';
2+
import { Logger } from '@aws-lambda-powertools/logger';
3+
import {
4+
correlationPaths,
5+
search,
6+
} from '@aws-lambda-powertools/logger/correlationId';
7+
8+
const logger = new Logger({
9+
correlationIdSearchFn: search,
10+
});
11+
12+
class Lambda implements LambdaInterface {
13+
@logger.injectLambdaContext({
14+
correlationIdPath: correlationPaths.API_GATEWAY_REST,
15+
})
16+
public async handler(_event: unknown, _context: unknown): Promise<void> {
17+
logger.info('This is an INFO log with some context');
18+
}
19+
}
20+
21+
const myFunction = new Lambda();
22+
export const handler = myFunction.handler.bind(myFunction);

0 commit comments

Comments
 (0)