Skip to content

Commit 71b9447

Browse files
committed
Add implementation and test for SFN -> SNS -> SQS -> Lambda
Run code formatting
1 parent 46cc9a9 commit 71b9447

6 files changed

Lines changed: 162 additions & 62 deletions

File tree

src/trace/context/extractors/event-bridge-sqs.spec.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -133,24 +133,25 @@ describe("EventBridgeSQSEventTraceExtractor", () => {
133133
const tracerWrapper = new TracerWrapper();
134134

135135
const payload = {
136-
"Records": [
136+
Records: [
137137
{
138-
"messageId": "0fc0e02f-ab25-4fde-b5ff-22aba9a9f20e",
139-
"receiptHandle": "AQEBROlXUgqqRdo/j0GcfxBNldIKy8FO6Ee0ZnP5YeAp4pwQ+v9XovX47vSzNHAZooCa0r8D7Uoow0y4bhGiH/Tt5HXAseDUlvWHB6bULonzAdvRmLd1W1OCY9D1uH3TpHZYn6JdoQd6Koxndx5wDwhv5UKxcbOwDjlc6X/30OKkTm4gcr7Otzu4GxCt6N/FmDxcRIDogZk80UE1kN6Q5EHI9LB6V+oleqqCbQwg5FYmbVc+DjwPBY4/5NI6x1/XZLFZA0TdezOdOuNq4+4DGK8e35Bafg4hXp+06zg8E5XPdMQV5V4iDzJhenPEdXusGL36byBHyC4aDunTSpeIND0/0ctqyH1vEJHo09LJ1jztPj05hBQeDU5QXCIKRpuo5+nEHE+Jm1ZLrUWUoIg1uAIamDzQ0CWNtPjGkNn3POiTGpD2e0aqrE5VpXZ8N30HKKFM",
140-
"body": "{\"version\":\"0\",\"id\":\"1aec4f0c-35e7-934c-9928-a5db3e526bca\",\"detail-type\":\"ProcessEvent\",\"source\":\"demo.stepfunction\",\"account\":\"123456123456\",\"time\":\"2025-07-14T19:33:03Z\",\"region\":\"sa-east-1\",\"resources\":[\"arn:aws:states:sa-east-1:123456123456:stateMachine:rstrat-sfn-evb-sqs-demo-dev-state-machine\",\"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-evb-sqs-demo-dev-state-machine:aa2f4ded-196f-4d6b-b41d-aa64f3193f2d\"],\"detail\":{\"message\":\"Event from Step Functions\",\"timestamp\":\"2025-07-14T19:33:03.483Z\",\"executionName\":\"aa2f4ded-196f-4d6b-b41d-aa64f3193f2d\",\"stateMachineName\":\"rstrat-sfn-evb-sqs-demo-dev-state-machine\",\"input\":{\"testData\":\"Hello with SQS integration\"},\"_datadog\":{\"Execution\":{\"Id\":\"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-evb-sqs-demo-dev-state-machine:aa2f4ded-196f-4d6b-b41d-aa64f3193f2d\",\"StartTime\":\"2025-07-14T19:33:03.446Z\",\"Name\":\"aa2f4ded-196f-4d6b-b41d-aa64f3193f2d\",\"RoleArn\":\"arn:aws:iam::123456123456:role/rstrat-sfn-evb-sqs-demo-d-StepFunctionsExecutionRol-mAumgN9x07FQ\",\"RedriveCount\":0},\"StateMachine\":{\"Id\":\"arn:aws:states:sa-east-1:123456123456:stateMachine:rstrat-sfn-evb-sqs-demo-dev-state-machine\",\"Name\":\"rstrat-sfn-evb-sqs-demo-dev-state-machine\"},\"State\":{\"Name\":\"PublishToEventBridge\",\"EnteredTime\":\"2025-07-14T19:33:03.483Z\",\"RetryCount\":0},\"RootExecutionId\":\"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-evb-sqs-demo-dev-state-machine:aa2f4ded-196f-4d6b-b41d-aa64f3193f2d\",\"serverless-version\":\"v1\"}}}",
141-
"attributes": {
142-
"ApproximateReceiveCount": "1",
143-
"SentTimestamp": "1752521583745",
144-
"SenderId": "AIDAIELDKKY42PBA6I2NG",
145-
"ApproximateFirstReceiveTimestamp": "1752521583758"
138+
messageId: "0fc0e02f-ab25-4fde-b5ff-22aba9a9f20e",
139+
receiptHandle:
140+
"AQEBROlXUgqqRdo/j0GcfxBNldIKy8FO6Ee0ZnP5YeAp4pwQ+v9XovX47vSzNHAZooCa0r8D7Uoow0y4bhGiH/Tt5HXAseDUlvWHB6bULonzAdvRmLd1W1OCY9D1uH3TpHZYn6JdoQd6Koxndx5wDwhv5UKxcbOwDjlc6X/30OKkTm4gcr7Otzu4GxCt6N/FmDxcRIDogZk80UE1kN6Q5EHI9LB6V+oleqqCbQwg5FYmbVc+DjwPBY4/5NI6x1/XZLFZA0TdezOdOuNq4+4DGK8e35Bafg4hXp+06zg8E5XPdMQV5V4iDzJhenPEdXusGL36byBHyC4aDunTSpeIND0/0ctqyH1vEJHo09LJ1jztPj05hBQeDU5QXCIKRpuo5+nEHE+Jm1ZLrUWUoIg1uAIamDzQ0CWNtPjGkNn3POiTGpD2e0aqrE5VpXZ8N30HKKFM",
141+
body: '{"version":"0","id":"1aec4f0c-35e7-934c-9928-a5db3e526bca","detail-type":"ProcessEvent","source":"demo.stepfunction","account":"123456123456","time":"2025-07-14T19:33:03Z","region":"sa-east-1","resources":["arn:aws:states:sa-east-1:123456123456:stateMachine:rstrat-sfn-evb-sqs-demo-dev-state-machine","arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-evb-sqs-demo-dev-state-machine:aa2f4ded-196f-4d6b-b41d-aa64f3193f2d"],"detail":{"message":"Event from Step Functions","timestamp":"2025-07-14T19:33:03.483Z","executionName":"aa2f4ded-196f-4d6b-b41d-aa64f3193f2d","stateMachineName":"rstrat-sfn-evb-sqs-demo-dev-state-machine","input":{"testData":"Hello with SQS integration"},"_datadog":{"Execution":{"Id":"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-evb-sqs-demo-dev-state-machine:aa2f4ded-196f-4d6b-b41d-aa64f3193f2d","StartTime":"2025-07-14T19:33:03.446Z","Name":"aa2f4ded-196f-4d6b-b41d-aa64f3193f2d","RoleArn":"arn:aws:iam::123456123456:role/rstrat-sfn-evb-sqs-demo-d-StepFunctionsExecutionRol-mAumgN9x07FQ","RedriveCount":0},"StateMachine":{"Id":"arn:aws:states:sa-east-1:123456123456:stateMachine:rstrat-sfn-evb-sqs-demo-dev-state-machine","Name":"rstrat-sfn-evb-sqs-demo-dev-state-machine"},"State":{"Name":"PublishToEventBridge","EnteredTime":"2025-07-14T19:33:03.483Z","RetryCount":0},"RootExecutionId":"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-evb-sqs-demo-dev-state-machine:aa2f4ded-196f-4d6b-b41d-aa64f3193f2d","serverless-version":"v1"}}}',
142+
attributes: {
143+
ApproximateReceiveCount: "1",
144+
SentTimestamp: "1752521583745",
145+
SenderId: "AIDAIELDKKY42PBA6I2NG",
146+
ApproximateFirstReceiveTimestamp: "1752521583758",
146147
},
147-
"messageAttributes": {},
148-
"md5OfBody": "957cded00b7b10a6e1b79864f24a7b5f",
149-
"eventSource": "aws:sqs",
150-
"eventSourceARN": "arn:aws:sqs:sa-east-1:123456123456:rstrat-sfn-evb-sqs-demo-dev-process-event-queue",
151-
"awsRegion": "sa-east-1"
152-
}
153-
]
148+
messageAttributes: {},
149+
md5OfBody: "957cded00b7b10a6e1b79864f24a7b5f",
150+
eventSource: "aws:sqs",
151+
eventSourceARN: "arn:aws:sqs:sa-east-1:123456123456:rstrat-sfn-evb-sqs-demo-dev-process-event-queue",
152+
awsRegion: "sa-east-1",
153+
},
154+
],
154155
};
155156

156157
const extractor = new EventBridgeSQSEventTraceExtractor(tracerWrapper);

src/trace/context/extractors/event-bridge.spec.ts

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -124,36 +124,37 @@ describe("EventBridgeEventTraceExtractor", () => {
124124
region: "us-east-2",
125125
resources: [
126126
"arn:aws:states:us-east-2:123456123456:stateMachine:rstrat-sfn-evb-demo-dev-state-machine",
127-
"arn:aws:states:us-east-2:123456123456:execution:rstrat-sfn-evb-demo-dev-state-machine:6c190e7b-eb77-46db-af26-9066d353b105"
127+
"arn:aws:states:us-east-2:123456123456:execution:rstrat-sfn-evb-demo-dev-state-machine:6c190e7b-eb77-46db-af26-9066d353b105",
128128
],
129129
detail: {
130-
"message": "Event from Step Functions",
131-
"timestamp": "2025-07-11T14:59:35.830Z",
132-
"executionName": "6c190e7b-eb77-46db-af26-9066d353b105",
133-
"stateMachineName": "rstrat-sfn-evb-demo-dev-state-machine",
134-
"input": {
135-
"testData": "Hello with Datadog tracing"
130+
message: "Event from Step Functions",
131+
timestamp: "2025-07-11T14:59:35.830Z",
132+
executionName: "6c190e7b-eb77-46db-af26-9066d353b105",
133+
stateMachineName: "rstrat-sfn-evb-demo-dev-state-machine",
134+
input: {
135+
testData: "Hello with Datadog tracing",
136136
},
137-
"_datadog": {
138-
"Execution": {
139-
"Id": "arn:aws:states:us-east-2:123456123456:execution:rstrat-sfn-evb-demo-dev-state-machine:6c190e7b-eb77-46db-af26-9066d353b105",
140-
"StartTime": "2025-07-11T14:59:35.806Z",
141-
"Name": "6c190e7b-eb77-46db-af26-9066d353b105",
142-
"RoleArn": "arn:aws:iam::123456123456:role/rstrat-sfn-evb-demo-dev-StepFunctionsExecutionRole-8maJHu01fhZZ",
143-
"RedriveCount": 0
137+
_datadog: {
138+
Execution: {
139+
Id: "arn:aws:states:us-east-2:123456123456:execution:rstrat-sfn-evb-demo-dev-state-machine:6c190e7b-eb77-46db-af26-9066d353b105",
140+
StartTime: "2025-07-11T14:59:35.806Z",
141+
Name: "6c190e7b-eb77-46db-af26-9066d353b105",
142+
RoleArn: "arn:aws:iam::123456123456:role/rstrat-sfn-evb-demo-dev-StepFunctionsExecutionRole-8maJHu01fhZZ",
143+
RedriveCount: 0,
144144
},
145-
"StateMachine": {
146-
"Id": "arn:aws:states:us-east-2:123456123456:stateMachine:rstrat-sfn-evb-demo-dev-state-machine",
147-
"Name": "rstrat-sfn-evb-demo-dev-state-machine"
145+
StateMachine: {
146+
Id: "arn:aws:states:us-east-2:123456123456:stateMachine:rstrat-sfn-evb-demo-dev-state-machine",
147+
Name: "rstrat-sfn-evb-demo-dev-state-machine",
148148
},
149-
"State": {
150-
"Name": "PublishToEventBridge",
151-
"EnteredTime": "2025-07-11T14:59:35.830Z",
152-
"RetryCount": 0
149+
State: {
150+
Name: "PublishToEventBridge",
151+
EnteredTime: "2025-07-11T14:59:35.830Z",
152+
RetryCount: 0,
153153
},
154-
"RootExecutionId": "arn:aws:states:us-east-2:123456123456:execution:rstrat-sfn-evb-demo-dev-state-machine:6c190e7b-eb77-46db-af26-9066d353b105",
155-
"serverless-version": "v1"
156-
}
154+
RootExecutionId:
155+
"arn:aws:states:us-east-2:123456123456:execution:rstrat-sfn-evb-demo-dev-state-machine:6c190e7b-eb77-46db-af26-9066d353b105",
156+
"serverless-version": "v1",
157+
},
157158
},
158159
};
159160

src/trace/context/extractors/sns-sqs.spec.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TracerWrapper } from "../../tracer-wrapper";
22
import { SNSSQSEventTraceExtractor } from "./sns-sqs";
3+
import { StepFunctionContextService } from "../../step-function-service";
34

45
let mockSpanContext: any = null;
56

@@ -212,5 +213,54 @@ describe("SNSSQSEventTraceExtractor", () => {
212213
expect(traceContext?.sampleMode()).toBe("1");
213214
expect(traceContext?.source).toBe("event");
214215
});
216+
217+
it("extracts trace context from Step Function SNS-SQS event", () => {
218+
// Reset StepFunctionContextService instance
219+
StepFunctionContextService["_instance"] = undefined as any;
220+
221+
const tracerWrapper = new TracerWrapper();
222+
223+
const payload = {
224+
Records: [
225+
{
226+
messageId: "43a5f138-f166-40f1-b7e4-a7e0af9d633d",
227+
receiptHandle:
228+
"AQEBrhzl4RiITHp/ui07Y0DlDIdrmYHveKjqDIsx2gG7Z3fvrDohnfnpy/r4esh/ZsilJUR/C3uohYe6HUqvixymhx+io9S/MYNoA1zjmSVd1V4ZKe6saMs6L7aSW5TgrLpuxOtNGWvmNijdlQlOoYW1xRlkzkBywFkELfazExJHrThbxpxXcHbcAoh1Vz77EvlcAQNbc11vTccoUcMcdczvoLd/wgyrsIf0z8qdUQHaspWYoWOlZOsoflDMddYwqWO3LNRphAGMp5ISTDVbVqo1/U+wOqBj+b3dOYP9k0vS9Mj+36t+EJ8+KETFXRPNk4mZ+7hvG+UCYBN582gT502MnQitxylHKWOlH77nIokfk43FjhjsybLE48KdWdO49O2WKslXwCpPLQWnbKWlUl05/12tIk41MolVyfiWywW9R/S7hgcSr51tEBcjZTW8GR8r",
229+
body: '{"testData":"Hello from SQS integration test","timestamp":"2025-07-15T18:16:27Z"}',
230+
attributes: {
231+
ApproximateReceiveCount: "1",
232+
SentTimestamp: "1752603390964",
233+
SenderId: "AIDAIOA2GYWSHW4E2VXIO",
234+
ApproximateFirstReceiveTimestamp: "1752603390980",
235+
},
236+
messageAttributes: {
237+
_datadog: {
238+
stringValue:
239+
'{"Execution":{"Id":"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-sns-sqs-demo-dev-state-machine:c363b975-c342-4e40-815a-8dd2496f5e81","StartTime":"2025-07-15T18:16:30.746Z","Name":"c363b975-c342-4e40-815a-8dd2496f5e81","RoleArn":"arn:aws:iam::123456123456:role/rstrat-sfn-sns-sqs-demo-d-StepFunctionsExecutionRol-T2O3igeuSihu","RedriveCount":0},"StateMachine":{"Id":"arn:aws:states:sa-east-1:123456123456:stateMachine:rstrat-sfn-sns-sqs-demo-dev-state-machine","Name":"rstrat-sfn-sns-sqs-demo-dev-state-machine"},"State":{"Name":"PublishToSNS","EnteredTime":"2025-07-15T18:16:30.776Z","RetryCount":0},"RootExecutionId":"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-sns-sqs-demo-dev-state-machine:c363b975-c342-4e40-815a-8dd2496f5e81","serverless-version":"v1"}',
240+
stringListValues: [],
241+
binaryListValues: [],
242+
dataType: "String",
243+
},
244+
},
245+
md5OfBody: "1e832c0d0aa5188dc5e3f2e85c9cb5e7",
246+
md5OfMessageAttributes: "64e36d01aec95ca5a2160c13299e9c3b",
247+
eventSource: "aws:sqs",
248+
eventSourceARN: "arn:aws:sqs:sa-east-1:123456123456:rstrat-sfn-sns-sqs-demo-dev-process-event-queue",
249+
awsRegion: "sa-east-1",
250+
},
251+
],
252+
};
253+
254+
const extractor = new SNSSQSEventTraceExtractor(tracerWrapper);
255+
256+
const traceContext = extractor.extract(payload);
257+
expect(traceContext).not.toBeNull();
258+
259+
// The StepFunctionContextService generates deterministic trace IDs
260+
expect(traceContext?.toTraceId()).toBe("1657966791618574655");
261+
expect(traceContext?.toSpanId()).toBe("5100002956473485303");
262+
expect(traceContext?.sampleMode()).toBe("1");
263+
expect(traceContext?.source).toBe("event");
264+
});
215265
});
216266
});

src/trace/context/extractors/sns-sqs.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { TracerWrapper } from "../../tracer-wrapper";
44
import { logDebug } from "../../../utils";
55
import { SpanContextWrapper } from "../../span-context-wrapper";
66
import { XrayService } from "../../xray-service";
7+
import { StepFunctionContextService } from "../../step-function-service";
78

89
export class SNSSQSEventTraceExtractor implements EventTraceExtractor {
910
constructor(private tracerWrapper: TracerWrapper) {}
@@ -23,15 +24,54 @@ export class SNSSQSEventTraceExtractor implements EventTraceExtractor {
2324
headers = JSON.parse(decodedValue);
2425
}
2526

27+
// First try to extract as regular trace headers
2628
const traceContext = this.tracerWrapper.extract(headers);
2729
if (traceContext) {
2830
logDebug("Extracted trace context from SNS-SQS event");
2931
return traceContext;
30-
} else {
31-
logDebug("Failed to extract trace context from SNS-SQS event");
32+
}
33+
34+
// If that fails, check if this is a Step Function context
35+
const stepFunctionInstance = StepFunctionContextService.instance(headers);
36+
const stepFunctionContext = stepFunctionInstance.context;
37+
38+
if (stepFunctionContext !== undefined) {
39+
const spanContext = stepFunctionInstance.spanContext;
40+
if (spanContext !== null) {
41+
logDebug("Extracted Step Function trace context from SNS-SQS event", { spanContext, event });
42+
return spanContext;
43+
}
44+
}
45+
46+
logDebug("Failed to extract trace context from SNS-SQS event");
47+
}
48+
}
49+
50+
// Check SQS message attributes for Step Function context
51+
const sqsMessageAttribute = event?.Records?.[0]?.messageAttributes?._datadog?.stringValue;
52+
if (sqsMessageAttribute) {
53+
const parsedHeaders = JSON.parse(sqsMessageAttribute);
54+
55+
// First try to extract as regular trace headers
56+
const traceContext = this.tracerWrapper.extract(parsedHeaders);
57+
if (traceContext) {
58+
logDebug("Extracted trace context from SQS messageAttributes");
59+
return traceContext;
60+
}
61+
62+
// If that fails, check if this is a Step Function context
63+
const stepFunctionInstance = StepFunctionContextService.instance(parsedHeaders);
64+
const stepFunctionContext = stepFunctionInstance.context;
65+
66+
if (stepFunctionContext !== undefined) {
67+
const spanContext = stepFunctionInstance.spanContext;
68+
if (spanContext !== null) {
69+
logDebug("Extracted Step Function trace context from SQS messageAttributes", { spanContext, event });
70+
return spanContext;
3271
}
3372
}
3473
}
74+
3575
// Then try to extract trace context from attributes.AWSTraceHeader. (Upstream Java apps can
3676
// pass down Datadog trace context in the attributes.AWSTraceHeader in SQS case)
3777
if (event?.Records?.[0]?.attributes?.AWSTraceHeader !== undefined) {

src/trace/context/extractors/sns.spec.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -269,27 +269,33 @@ describe("SNSEventTraceExtractor", () => {
269269
{
270270
EventSource: "aws:sns",
271271
EventVersion: "1.0",
272-
EventSubscriptionArn: "arn:aws:sns:sa-east-1:123456123456:rstrat-sfn-sns-demo-dev-process-event-topic:f18241f8-a4f7-4586-80db-97bd1939a557",
272+
EventSubscriptionArn:
273+
"arn:aws:sns:sa-east-1:123456123456:rstrat-sfn-sns-demo-dev-process-event-topic:f18241f8-a4f7-4586-80db-97bd1939a557",
273274
Sns: {
274275
Type: "Notification",
275276
MessageId: "46d2665c-7ee2-50ba-a4cd-06acf35f5d5f",
276277
TopicArn: "arn:aws:sns:sa-east-1:123456123456:rstrat-sfn-sns-demo-dev-process-event-topic",
277-
Message: "{\"source\":\"demo.stepfunction\",\"detailType\":\"ProcessEvent\",\"message\":\"Test event from Step Functions\",\"customData\":{\"userId\":\"12345\",\"action\":\"test\"}}",
278+
Message:
279+
'{"source":"demo.stepfunction","detailType":"ProcessEvent","message":"Test event from Step Functions","customData":{"userId":"12345","action":"test"}}',
278280
Timestamp: "2025-07-15T17:10:21.503Z",
279281
SignatureVersion: "1",
280-
Signature: "fHeJta0GWCs/lHhI6wesXiT+66i1SZ+XH58pyd8mKHKD8bepXsnWvfQdDsOkO2AVv2CqPBF58sAWQae6yob2aMawe/vo8eeahJCaguK8a/3HLj7kP+nXGjgSGvzQm4CdYEyAUco453/mfE/BSf0SkdctxW0rjMs27T2l964Lt2Y/vJeiXVibs/AqEIu3ImekbM8+EIfNMOLBdRBVE47650vawazMkcpPtg5o/8LCA/jNUNj9VCTJrvzep8/vVJEcuHbZ3pcmajA9UJmP3000G0+to0cXwZ5YaakOxQTv81I+cfC99yQJoogLklbgiu+4bqEeNWbwW9KdQz1U+79NgA==",
281-
SigningCertUrl: "https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-9c6465fa7f48f5cacd23014631ec1136.pem",
282+
Signature:
283+
"fHeJta0GWCs/lHhI6wesXiT+66i1SZ+XH58pyd8mKHKD8bepXsnWvfQdDsOkO2AVv2CqPBF58sAWQae6yob2aMawe/vo8eeahJCaguK8a/3HLj7kP+nXGjgSGvzQm4CdYEyAUco453/mfE/BSf0SkdctxW0rjMs27T2l964Lt2Y/vJeiXVibs/AqEIu3ImekbM8+EIfNMOLBdRBVE47650vawazMkcpPtg5o/8LCA/jNUNj9VCTJrvzep8/vVJEcuHbZ3pcmajA9UJmP3000G0+to0cXwZ5YaakOxQTv81I+cfC99yQJoogLklbgiu+4bqEeNWbwW9KdQz1U+79NgA==",
284+
SigningCertUrl:
285+
"https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-9c6465fa7f48f5cacd23014631ec1136.pem",
282286
Subject: "Event from Step Functions",
283-
UnsubscribeUrl: "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:123456123456:rstrat-sfn-sns-demo-dev-process-event-topic:f18241f8-a4f7-4586-80db-97bd1939a557",
287+
UnsubscribeUrl:
288+
"https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:123456123456:rstrat-sfn-sns-demo-dev-process-event-topic:f18241f8-a4f7-4586-80db-97bd1939a557",
284289
MessageAttributes: {
285290
_datadog: {
286291
Type: "String",
287-
Value: "{\"Execution\":{\"Id\":\"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-sns-demo-dev-state-machine:79049e80-5cc6-49da-9dc0-f19ba2921772\",\"StartTime\":\"2025-07-15T17:10:21.328Z\",\"Name\":\"79049e80-5cc6-49da-9dc0-f19ba2921772\",\"RoleArn\":\"arn:aws:iam::123456123456:role/rstrat-sfn-sns-demo-dev-StepFunctionsExecutionRole-LrsdDm6wMmBh\",\"RedriveCount\":0},\"StateMachine\":{\"Id\":\"arn:aws:states:sa-east-1:123456123456:stateMachine:rstrat-sfn-sns-demo-dev-state-machine\",\"Name\":\"rstrat-sfn-sns-demo-dev-state-machine\"},\"State\":{\"Name\":\"PublishToSNS\",\"EnteredTime\":\"2025-07-15T17:10:21.354Z\",\"RetryCount\":0},\"RootExecutionId\":\"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-sns-demo-dev-state-machine:79049e80-5cc6-49da-9dc0-f19ba2921772\",\"serverless-version\":\"v1\"}"
288-
}
289-
}
290-
}
291-
}
292-
]
292+
Value:
293+
'{"Execution":{"Id":"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-sns-demo-dev-state-machine:79049e80-5cc6-49da-9dc0-f19ba2921772","StartTime":"2025-07-15T17:10:21.328Z","Name":"79049e80-5cc6-49da-9dc0-f19ba2921772","RoleArn":"arn:aws:iam::123456123456:role/rstrat-sfn-sns-demo-dev-StepFunctionsExecutionRole-LrsdDm6wMmBh","RedriveCount":0},"StateMachine":{"Id":"arn:aws:states:sa-east-1:123456123456:stateMachine:rstrat-sfn-sns-demo-dev-state-machine","Name":"rstrat-sfn-sns-demo-dev-state-machine"},"State":{"Name":"PublishToSNS","EnteredTime":"2025-07-15T17:10:21.354Z","RetryCount":0},"RootExecutionId":"arn:aws:states:sa-east-1:123456123456:execution:rstrat-sfn-sns-demo-dev-state-machine:79049e80-5cc6-49da-9dc0-f19ba2921772","serverless-version":"v1"}',
294+
},
295+
},
296+
},
297+
},
298+
],
293299
};
294300

295301
const extractor = new SNSEventTraceExtractor(tracerWrapper);

0 commit comments

Comments
 (0)