konokenj.cdk-api-mcp-server 0.58.0__py3-none-any.whl → 0.59.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cdk_api_mcp_server/__about__.py +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/README.md +101 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-dlq.ts +92 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-poller-group-name.ts +78 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-selfmanaged-error-handling.ts +83 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-jsonata.ts +6 -4
- {konokenj_cdk_api_mcp_server-0.58.0.dist-info → konokenj_cdk_api_mcp_server-0.59.0.dist-info}/METADATA +2 -2
- {konokenj_cdk_api_mcp_server-0.58.0.dist-info → konokenj_cdk_api_mcp_server-0.59.0.dist-info}/RECORD +11 -8
- {konokenj_cdk_api_mcp_server-0.58.0.dist-info → konokenj_cdk_api_mcp_server-0.59.0.dist-info}/WHEEL +0 -0
- {konokenj_cdk_api_mcp_server-0.58.0.dist-info → konokenj_cdk_api_mcp_server-0.59.0.dist-info}/entry_points.txt +0 -0
- {konokenj_cdk_api_mcp_server-0.58.0.dist-info → konokenj_cdk_api_mcp_server-0.59.0.dist-info}/licenses/LICENSE.txt +0 -0
cdk_api_mcp_server/__about__.py
CHANGED
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/README.md
CHANGED
|
@@ -279,6 +279,10 @@ You can write Lambda functions to process data either from [Amazon MSK](https://
|
|
|
279
279
|
* __maxBatchingWindow__: The maximum amount of time to gather records before invoking the lambda. This increases the likelihood of a full batch at the cost of possibly delaying processing.
|
|
280
280
|
* __onFailure__: In the event a record fails and consumes all retries, the record will be sent to SQS queue or SNS topic that is specified here
|
|
281
281
|
* __enabled__: If the Kafka event source mapping should be enabled. The default is true.
|
|
282
|
+
* __bisectBatchOnError__: If a batch encounters an error, this will cause the batch to be split in two and have each new smaller batch retried, allowing the records in error to be isolated. Available in provisioned mode only.
|
|
283
|
+
* __reportBatchItemFailures__: Allow functions to return partially successful responses for a batch of records. Available in provisioned mode only.
|
|
284
|
+
* __retryAttempts__: The maximum number of times a record should be retried in the event of failure. Available in provisioned mode only.
|
|
285
|
+
* __maxRecordAge__: The maximum age of a record that will be sent to the function for processing. Records that exceed the max age will be treated as failures. Available in provisioned mode only.
|
|
282
286
|
|
|
283
287
|
The following code sets up Amazon MSK as an event source for a lambda function. Credentials will need to be configured to access the
|
|
284
288
|
MSK cluster, as described in [Username/Password authentication](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html).
|
|
@@ -294,7 +298,6 @@ const clusterArn = 'arn:aws:kafka:us-east-1:0123456789019:cluster/SalesCluster/a
|
|
|
294
298
|
const topic = 'some-cool-topic';
|
|
295
299
|
|
|
296
300
|
// The secret that allows access to your MSK cluster
|
|
297
|
-
// You still have to make sure that it is associated with your cluster as described in the documentation
|
|
298
301
|
const secret = new Secret(this, 'Secret', { secretName: 'AmazonMSK_KafkaSecret' });
|
|
299
302
|
|
|
300
303
|
declare const myFunction: lambda.Function;
|
|
@@ -304,6 +307,14 @@ myFunction.addEventSource(new ManagedKafkaEventSource({
|
|
|
304
307
|
secret: secret,
|
|
305
308
|
batchSize: 100, // default
|
|
306
309
|
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
|
|
310
|
+
bisectBatchOnError: true,
|
|
311
|
+
reportBatchItemFailures: true,
|
|
312
|
+
retryAttempts: 3,
|
|
313
|
+
maxRecordAge: Duration.hours(24),
|
|
314
|
+
provisionedPollerConfig: {
|
|
315
|
+
minimumPollers: 1,
|
|
316
|
+
maximumPollers: 3,
|
|
317
|
+
},
|
|
307
318
|
}));
|
|
308
319
|
```
|
|
309
320
|
|
|
@@ -334,6 +345,14 @@ myFunction.addEventSource(new SelfManagedKafkaEventSource({
|
|
|
334
345
|
secret: secret,
|
|
335
346
|
batchSize: 100, // default
|
|
336
347
|
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
|
|
348
|
+
bisectBatchOnError: true,
|
|
349
|
+
reportBatchItemFailures: true,
|
|
350
|
+
retryAttempts: 3,
|
|
351
|
+
maxRecordAge: Duration.hours(24),
|
|
352
|
+
provisionedPollerConfig: {
|
|
353
|
+
minimumPollers: 1,
|
|
354
|
+
maximumPollers: 3,
|
|
355
|
+
},
|
|
337
356
|
}));
|
|
338
357
|
```
|
|
339
358
|
|
|
@@ -397,6 +416,64 @@ myFunction.addEventSource(new ManagedKafkaEventSource({
|
|
|
397
416
|
}));
|
|
398
417
|
```
|
|
399
418
|
|
|
419
|
+
### Failure Destinations
|
|
420
|
+
|
|
421
|
+
You can specify failure destinations for records that fail processing. Kafka event sources support Kafka Topic Destinations, S3 Bucket Destinations, SQS Queue and SNS topic:
|
|
422
|
+
|
|
423
|
+
#### Kafka Topic Destination
|
|
424
|
+
|
|
425
|
+
For Kafka event sources, you can send failed records to another Kafka topic using `KafkaDlq`:
|
|
426
|
+
|
|
427
|
+
```ts
|
|
428
|
+
import { ManagedKafkaEventSource, KafkaDlq } from 'aws-cdk-lib/aws-lambda-event-sources';
|
|
429
|
+
|
|
430
|
+
// Your MSK cluster arn
|
|
431
|
+
const clusterArn = 'arn:aws:kafka:us-east-1:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4';
|
|
432
|
+
|
|
433
|
+
// The Kafka topic you want to subscribe to
|
|
434
|
+
const topic = 'some-cool-topic';
|
|
435
|
+
|
|
436
|
+
declare const myFunction: lambda.Function;
|
|
437
|
+
|
|
438
|
+
// Create a Kafka DLQ destination
|
|
439
|
+
const kafkaDlq = new KafkaDlq('failure-topic');
|
|
440
|
+
|
|
441
|
+
myFunction.addEventSource(new ManagedKafkaEventSource({
|
|
442
|
+
clusterArn,
|
|
443
|
+
topic,
|
|
444
|
+
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
|
|
445
|
+
onFailure: kafkaDlq,
|
|
446
|
+
provisionedPollerConfig: {
|
|
447
|
+
minimumPollers: 1,
|
|
448
|
+
maximumPollers: 1,
|
|
449
|
+
},
|
|
450
|
+
}));
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
The same approach works with self-managed Kafka:
|
|
454
|
+
|
|
455
|
+
```ts
|
|
456
|
+
import { SelfManagedKafkaEventSource, KafkaDlq } from 'aws-cdk-lib/aws-lambda-event-sources';
|
|
457
|
+
|
|
458
|
+
const bootstrapServers = ['kafka-broker:9092'];
|
|
459
|
+
const topic = 'some-cool-topic';
|
|
460
|
+
|
|
461
|
+
declare const myFunction: lambda.Function;
|
|
462
|
+
|
|
463
|
+
myFunction.addEventSource(new SelfManagedKafkaEventSource({
|
|
464
|
+
bootstrapServers,
|
|
465
|
+
topic,
|
|
466
|
+
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
|
|
467
|
+
onFailure: new KafkaDlq('error-topic'),
|
|
468
|
+
provisionedPollerConfig: {
|
|
469
|
+
minimumPollers: 1,
|
|
470
|
+
maximumPollers: 1,
|
|
471
|
+
},
|
|
472
|
+
}));
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
#### S3 Bucket Destination
|
|
476
|
+
|
|
400
477
|
You can also specify an S3 bucket as an "on failure" destination:
|
|
401
478
|
|
|
402
479
|
```ts
|
|
@@ -428,7 +505,7 @@ Set configuration for provisioned pollers that read from the event source.
|
|
|
428
505
|
import { ManagedKafkaEventSource } from 'aws-cdk-lib/aws-lambda-event-sources';
|
|
429
506
|
|
|
430
507
|
// Your MSK cluster arn
|
|
431
|
-
declare const clusterArn: string
|
|
508
|
+
declare const clusterArn: string;
|
|
432
509
|
|
|
433
510
|
// The Kafka topic you want to subscribe to
|
|
434
511
|
const topic = 'some-cool-topic';
|
|
@@ -445,6 +522,28 @@ myFunction.addEventSource(new ManagedKafkaEventSource({
|
|
|
445
522
|
}));
|
|
446
523
|
```
|
|
447
524
|
|
|
525
|
+
You can reduce costs by sharing provisioned pollers across multiple Kafka event sources using the `pollerGroupName` property. This is particularly useful when you have multiple Kafka topics that don't require dedicated polling capacity.
|
|
526
|
+
|
|
527
|
+
```ts
|
|
528
|
+
import { ManagedKafkaEventSource } from 'aws-cdk-lib/aws-lambda-event-sources';
|
|
529
|
+
|
|
530
|
+
declare const clusterArn: string;
|
|
531
|
+
declare const ordersFunction: lambda.Function;
|
|
532
|
+
|
|
533
|
+
// Orders processing function
|
|
534
|
+
ordersFunction.addEventSource(new ManagedKafkaEventSource({
|
|
535
|
+
clusterArn,
|
|
536
|
+
topic: 'orders-topic',
|
|
537
|
+
startingPosition: lambda.StartingPosition.LATEST,
|
|
538
|
+
provisionedPollerConfig: {
|
|
539
|
+
minimumPollers: 2,
|
|
540
|
+
maximumPollers: 10,
|
|
541
|
+
pollerGroupName: 'shared-kafka-pollers',
|
|
542
|
+
},
|
|
543
|
+
}));
|
|
544
|
+
|
|
545
|
+
```
|
|
546
|
+
|
|
448
547
|
Set a confluent or self-managed schema registry to de-serialize events from the event source. Note, this will similarly work for `SelfManagedKafkaEventSource` but the example only shows setup for `ManagedKafkaEventSource`.
|
|
449
548
|
|
|
450
549
|
```ts
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
2
|
+
import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
|
|
3
|
+
import * as cdk from 'aws-cdk-lib';
|
|
4
|
+
import * as integ from '@aws-cdk/integ-tests-alpha';
|
|
5
|
+
import { TestFunction } from './test-function';
|
|
6
|
+
import {
|
|
7
|
+
AuthenticationMethod,
|
|
8
|
+
SelfManagedKafkaEventSource,
|
|
9
|
+
KafkaDlq,
|
|
10
|
+
} from 'aws-cdk-lib/aws-lambda-event-sources';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Integration test stack for SelfManagedKafka with KafkaDlq destination
|
|
14
|
+
*/
|
|
15
|
+
class SelfManagedKafkaWithKafkaDlqStack extends cdk.Stack {
|
|
16
|
+
constructor(scope: cdk.App, id: string) {
|
|
17
|
+
super(scope, id);
|
|
18
|
+
|
|
19
|
+
const dummyCertString = `-----BEGIN CERTIFICATE-----
|
|
20
|
+
MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw
|
|
21
|
+
cmUuaAii9R0=
|
|
22
|
+
-----END CERTIFICATE-----
|
|
23
|
+
-----BEGIN CERTIFICATE-----
|
|
24
|
+
MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb
|
|
25
|
+
c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg==
|
|
26
|
+
-----END CERTIFICATE-----`;
|
|
27
|
+
|
|
28
|
+
const dummyPrivateKey = `-----BEGIN ENCRYPTED PRIVATE KEY-----
|
|
29
|
+
zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA==
|
|
30
|
+
-----END ENCRYPTED PRIVATE KEY-----`;
|
|
31
|
+
|
|
32
|
+
const fn = new TestFunction(this, 'SelfManagedKafkaFunction');
|
|
33
|
+
|
|
34
|
+
const rootCASecret = new secretsmanager.Secret(this, 'RootCASecret', {
|
|
35
|
+
secretObjectValue: {
|
|
36
|
+
certificate: cdk.SecretValue.unsafePlainText(dummyCertString),
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const clientCertificatesSecret = new secretsmanager.Secret(this, 'ClientCertSecret', {
|
|
41
|
+
secretObjectValue: {
|
|
42
|
+
certificate: cdk.SecretValue.unsafePlainText(dummyCertString),
|
|
43
|
+
privateKey: cdk.SecretValue.unsafePlainText(dummyPrivateKey),
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
rootCASecret.grantRead(fn);
|
|
48
|
+
clientCertificatesSecret.grantRead(fn);
|
|
49
|
+
|
|
50
|
+
const bootstrapServers = [
|
|
51
|
+
'self-managed-kafka-broker-1:9092',
|
|
52
|
+
'self-managed-kafka-broker-2:9092',
|
|
53
|
+
'self-managed-kafka-broker-3:9092',
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
// Create KafkaDlq destination
|
|
57
|
+
const kafkaDlq = new KafkaDlq('self-managed-kafka-failure-topic');
|
|
58
|
+
|
|
59
|
+
// Add SelfManagedKafka event source with KafkaDlq destination
|
|
60
|
+
fn.addEventSource(new SelfManagedKafkaEventSource({
|
|
61
|
+
bootstrapServers,
|
|
62
|
+
topic: 'self-managed-test-topic',
|
|
63
|
+
consumerGroupId: 'self-managed-test-consumer-group',
|
|
64
|
+
secret: clientCertificatesSecret,
|
|
65
|
+
authenticationMethod: AuthenticationMethod.CLIENT_CERTIFICATE_TLS_AUTH,
|
|
66
|
+
rootCACertificate: rootCASecret,
|
|
67
|
+
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
|
|
68
|
+
onFailure: kafkaDlq,
|
|
69
|
+
provisionedPollerConfig: {
|
|
70
|
+
minimumPollers: 1,
|
|
71
|
+
maximumPollers: 1,
|
|
72
|
+
},
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const app = new cdk.App({
|
|
78
|
+
postCliContext: {
|
|
79
|
+
'@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
const selfManagedKafkaStack = new SelfManagedKafkaWithKafkaDlqStack(
|
|
84
|
+
app,
|
|
85
|
+
'lambda-event-source-self-managed-kafka-dlq',
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
new integ.IntegTest(app, 'LambdaEventSourceKafkaDlqTest', {
|
|
89
|
+
testCases: [selfManagedKafkaStack],
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
app.synth();
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
2
|
+
import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
|
|
3
|
+
import * as cdk from 'aws-cdk-lib';
|
|
4
|
+
import * as integ from '@aws-cdk/integ-tests-alpha';
|
|
5
|
+
import { TestFunction } from './test-function';
|
|
6
|
+
import { AuthenticationMethod, SelfManagedKafkaEventSource } from 'aws-cdk-lib/aws-lambda-event-sources';
|
|
7
|
+
|
|
8
|
+
class KafkaPollerGroupNameTest extends cdk.Stack {
|
|
9
|
+
constructor(scope: cdk.App, id: string) {
|
|
10
|
+
super(scope, id);
|
|
11
|
+
|
|
12
|
+
const dummyCertString = `-----BEGIN CERTIFICATE-----
|
|
13
|
+
MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw
|
|
14
|
+
cmUuaAii9R0=
|
|
15
|
+
-----END CERTIFICATE-----
|
|
16
|
+
-----BEGIN CERTIFICATE-----
|
|
17
|
+
MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb
|
|
18
|
+
c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg==
|
|
19
|
+
-----END CERTIFICATE-----"
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
const dummyPrivateKey = `-----BEGIN ENCRYPTED PRIVATE KEY-----
|
|
23
|
+
zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA==
|
|
24
|
+
-----END ENCRYPTED PRIVATE KEY-----`;
|
|
25
|
+
|
|
26
|
+
const fn1 = new TestFunction(this, 'SelfManagedFunction');
|
|
27
|
+
const rootCASecret = new secretsmanager.Secret(this, 'RootCASecret', {
|
|
28
|
+
secretObjectValue: {
|
|
29
|
+
certificate: cdk.SecretValue.unsafePlainText(dummyCertString),
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const clientCertificatesSecret = new secretsmanager.Secret(this, 'ClientCertSecret', {
|
|
33
|
+
secretObjectValue: {
|
|
34
|
+
certificate: cdk.SecretValue.unsafePlainText(dummyCertString),
|
|
35
|
+
privateKey: cdk.SecretValue.unsafePlainText(dummyPrivateKey),
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
rootCASecret.grantRead(fn1);
|
|
39
|
+
clientCertificatesSecret.grantRead(fn1);
|
|
40
|
+
|
|
41
|
+
const bootstrapServers = [
|
|
42
|
+
'my-self-hosted-kafka-broker-1:9092',
|
|
43
|
+
'my-self-hosted-kafka-broker-2:9092',
|
|
44
|
+
'my-self-hosted-kafka-broker-3:9092',
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
fn1.addEventSource(
|
|
48
|
+
new SelfManagedKafkaEventSource({
|
|
49
|
+
bootstrapServers,
|
|
50
|
+
topic: 'my-test-topic-with-poller-group',
|
|
51
|
+
consumerGroupId: 'myTestConsumerGroupWithPollerGroup',
|
|
52
|
+
secret: clientCertificatesSecret,
|
|
53
|
+
authenticationMethod: AuthenticationMethod.CLIENT_CERTIFICATE_TLS_AUTH,
|
|
54
|
+
rootCACertificate: rootCASecret,
|
|
55
|
+
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
|
|
56
|
+
provisionedPollerConfig: {
|
|
57
|
+
minimumPollers: 1,
|
|
58
|
+
maximumPollers: 3,
|
|
59
|
+
pollerGroupName: 'test-poller-group-self-managed',
|
|
60
|
+
},
|
|
61
|
+
}),
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const app = new cdk.App({
|
|
67
|
+
postCliContext: {
|
|
68
|
+
'@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
const stack = new KafkaPollerGroupNameTest(
|
|
72
|
+
app,
|
|
73
|
+
'lambda-event-source-kafka-poller-group-name',
|
|
74
|
+
);
|
|
75
|
+
new integ.IntegTest(app, 'LambdaEventSourceKafkaPollerGroupNameTest', {
|
|
76
|
+
testCases: [stack],
|
|
77
|
+
});
|
|
78
|
+
app.synth();
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
2
|
+
import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
|
|
3
|
+
import * as cdk from 'aws-cdk-lib';
|
|
4
|
+
import * as integ from '@aws-cdk/integ-tests-alpha';
|
|
5
|
+
import { TestFunction } from './test-function';
|
|
6
|
+
import { AuthenticationMethod, SelfManagedKafkaEventSource } from 'aws-cdk-lib/aws-lambda-event-sources';
|
|
7
|
+
|
|
8
|
+
class KafkaSelfManagedErrorHandlingTest extends cdk.Stack {
|
|
9
|
+
constructor(scope: cdk.App, id: string) {
|
|
10
|
+
super(scope, id);
|
|
11
|
+
|
|
12
|
+
const dummyCertString = `-----BEGIN CERTIFICATE-----
|
|
13
|
+
MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw
|
|
14
|
+
cmUuiAii9R0=
|
|
15
|
+
-----END CERTIFICATE-----
|
|
16
|
+
-----BEGIN CERTIFICATE-----
|
|
17
|
+
MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb
|
|
18
|
+
c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg==
|
|
19
|
+
-----END CERTIFICATE-----"
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
const dummyPrivateKey = `-----BEGIN ENCRYPTED PRIVATE KEY-----
|
|
23
|
+
zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA==
|
|
24
|
+
-----END ENCRYPTED PRIVATE KEY-----`;
|
|
25
|
+
|
|
26
|
+
const rootCASecret = new secretsmanager.Secret(this, 'RootCASecret', {
|
|
27
|
+
secretObjectValue: {
|
|
28
|
+
certificate: cdk.SecretValue.unsafePlainText(dummyCertString),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const clientCertificatesSecret = new secretsmanager.Secret(this, 'ClientCertSecret', {
|
|
33
|
+
secretObjectValue: {
|
|
34
|
+
certificate: cdk.SecretValue.unsafePlainText(dummyCertString),
|
|
35
|
+
privateKey: cdk.SecretValue.unsafePlainText(dummyPrivateKey),
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const bootstrapServers = [
|
|
40
|
+
'my-self-hosted-kafka-broker-1:9092',
|
|
41
|
+
'my-self-hosted-kafka-broker-2:9092',
|
|
42
|
+
'my-self-hosted-kafka-broker-3:9092',
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
// Test with function response type and retry configuration
|
|
46
|
+
const fn = new TestFunction(this, 'ErrorHandlingFunction');
|
|
47
|
+
rootCASecret.grantRead(fn);
|
|
48
|
+
clientCertificatesSecret.grantRead(fn);
|
|
49
|
+
|
|
50
|
+
fn.addEventSource(new SelfManagedKafkaEventSource({
|
|
51
|
+
bootstrapServers,
|
|
52
|
+
topic: 'error-handling-topic',
|
|
53
|
+
consumerGroupId: 'errorHandlingConsumerGroup',
|
|
54
|
+
secret: clientCertificatesSecret,
|
|
55
|
+
authenticationMethod: AuthenticationMethod.CLIENT_CERTIFICATE_TLS_AUTH,
|
|
56
|
+
rootCACertificate: rootCASecret,
|
|
57
|
+
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
|
|
58
|
+
retryAttempts: 3,
|
|
59
|
+
maxBatchingWindow: cdk.Duration.seconds(10),
|
|
60
|
+
batchSize: 50,
|
|
61
|
+
maxRecordAge: cdk.Duration.hours(24),
|
|
62
|
+
reportBatchItemFailures: true,
|
|
63
|
+
provisionedPollerConfig: {
|
|
64
|
+
minimumPollers: 1,
|
|
65
|
+
maximumPollers: 1,
|
|
66
|
+
},
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const app = new cdk.App({
|
|
72
|
+
postCliContext: {
|
|
73
|
+
'@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
const stack = new KafkaSelfManagedErrorHandlingTest(
|
|
77
|
+
app,
|
|
78
|
+
'lambda-event-source-kafka-error-handling',
|
|
79
|
+
);
|
|
80
|
+
new integ.IntegTest(app, 'LambdaEventSourceKafkaErrorHandlingTest', {
|
|
81
|
+
testCases: [stack],
|
|
82
|
+
});
|
|
83
|
+
app.synth();
|
|
@@ -39,10 +39,12 @@ const stateMachine = new sfn.StateMachine(stack, 'StateMachine', {
|
|
|
39
39
|
jsonPathPass // 1 -> 2
|
|
40
40
|
.next(jsonataPass) // 2 -> 3
|
|
41
41
|
.next(choice
|
|
42
|
-
.when(sfn.Condition.jsonata(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
.when(sfn.Condition.jsonata(`{%
|
|
43
|
+
$states.input.count % 2 = 1
|
|
44
|
+
%}`),
|
|
45
|
+
wait // 3 -> 4
|
|
46
|
+
.next(succeed),
|
|
47
|
+
increment, // 4 -> 5
|
|
46
48
|
)
|
|
47
49
|
.otherwise(succeed), // 5 -> 6
|
|
48
50
|
),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: konokenj.cdk-api-mcp-server
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.59.0
|
|
4
4
|
Summary: An MCP server provides AWS CDK API Reference
|
|
5
5
|
Project-URL: Documentation, https://github.com/konokenj/cdk-api-mcp-server#readme
|
|
6
6
|
Project-URL: Issues, https://github.com/konokenj/cdk-api-mcp-server/issues
|
|
@@ -26,7 +26,7 @@ Description-Content-Type: text/markdown
|
|
|
26
26
|
[](https://pypi.org/project/konokenj.cdk-api-mcp-server)
|
|
27
27
|
|
|
28
28
|
<!-- DEP-VERSIONS-START -->
|
|
29
|
-
[](https://github.com/konokenj/cdk-api-mcp-server/blob/main/current-versions/aws-cdk.txt)
|
|
30
30
|
<!-- DEP-VERSIONS-END -->
|
|
31
31
|
|
|
32
32
|
---
|
{konokenj_cdk_api_mcp_server-0.58.0.dist-info → konokenj_cdk_api_mcp_server-0.59.0.dist-info}/RECORD
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
cdk_api_mcp_server/__about__.py,sha256=
|
|
1
|
+
cdk_api_mcp_server/__about__.py,sha256=6tAVjUoxyJ1sl_ooRw_IAkmmUSZme7of4ivq8gy7e4s,129
|
|
2
2
|
cdk_api_mcp_server/__init__.py,sha256=yJA6yIEhJviC-qNlB-nC6UR1JblQci_d84i-viHZkc0,187
|
|
3
3
|
cdk_api_mcp_server/models.py,sha256=cMS1Hi29M41YjuBxqqrzNrNvyG3MgnUBb1SqYpMCJ30,692
|
|
4
4
|
cdk_api_mcp_server/resources.py,sha256=R7LVwn29I4BJzU5XAwKbX8j6uy-3ZxcB1b0HzZ_Z2PI,6689
|
|
@@ -939,12 +939,15 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.vpc
|
|
|
939
939
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-destinations/README.md,sha256=_6ZqM3kbkZCmN-9BtU3FbERs82Shv4D2QiWuq47T_VI,5453
|
|
940
940
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-destinations/integ.destinations.ts,sha256=bCxe7DTOSIRyxe2iStWRdl0_J-tQZ8n-715uo9gMHvE,4187
|
|
941
941
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-destinations/integ.lambda-chain.ts,sha256=vqRxTBuBaAZqeN1AQ4l0Z9b4dsOVTkYMXKIlil_yyCg,3381
|
|
942
|
-
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/README.md,sha256
|
|
942
|
+
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/README.md,sha256=AC1foN2OcEPMPuLsIxecdDJgY_fG1p9aZmazw4_FRvI,27199
|
|
943
943
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb-with-boolean-filter.ts,sha256=bGvfF5RgMbK9W2DO0HsKVoAK5KV5a0kLKYZKeOOFcx0,1217
|
|
944
944
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb-with-filter-criteria.ts,sha256=7RrxbpLll7YIY-sNFp4reML6mA5ptC05K6DRmww32rY,1897
|
|
945
945
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb-with-metrics-config.ts,sha256=_HEgmdb8iDBNWqDWo8RJHbbRtacdPp4V8LkS2U3DkI8,1286
|
|
946
946
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb.ts,sha256=5Qas_PPDvTb8sHl3AiNnv-k7XaazG5nDNVNbmJ6Wwfo,1205
|
|
947
|
+
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-dlq.ts,sha256=PSv9cxqyEMq2Sa6WxhaD2Qq_OrBpZR07ePjG8sYmTrM,2897
|
|
948
|
+
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-poller-group-name.ts,sha256=_skHFN8P5MSzdgGF9pGQU1MOBPsz9rlr_pt7MMkHfTs,2670
|
|
947
949
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-schema-registry.ts,sha256=mN1-eMpDDvEjqRqFB3WwDMAWtr1JhFt61ndeYMw3XlI,6640
|
|
950
|
+
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-selfmanaged-error-handling.ts,sha256=nO4Q2SJx2JQdPlLE93icXYWfTp6NphKUzjuadZsZBXg,2807
|
|
948
951
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-selfmanaged.ts,sha256=B85zVhxNs9IVcWHnxlYi9knhEPwfxKHmCpXigjk0xJs,4805
|
|
949
952
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kinesis-at-timestamp.ts,sha256=coNqlm5wKzy4jViKmzto6umHXcKzqVQFoosqgO_kaEI,832
|
|
950
953
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kinesis-stream-consumer.ts,sha256=-wWHWes3tTpArZIzVKBPS-MFyQc5ZHJjMzG_2BnGAZ0,1199
|
|
@@ -1292,7 +1295,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/in
|
|
|
1292
1295
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-cmk-with-cwl-encryption.ts,sha256=C_i-uCFHEbHN250pKHrYCxVEkWtplnn1QXoceNVzpsQ,2839
|
|
1293
1296
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-credentials.ts,sha256=MXRGlYvodgYQuE4A4lcf1WfvNGRcHWpB8VZLADlQusk,1552
|
|
1294
1297
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-disable-xray.ts,sha256=1XSpdVEobuV-cQ5GhtCy9HRvVCaEukZFABu9hSH58So,473
|
|
1295
|
-
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-jsonata.ts,sha256=
|
|
1298
|
+
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-jsonata.ts,sha256=aH0m0zYrRxwzdVp08DXyk-EoQp88bTXTwdIc1waHSls,1860
|
|
1296
1299
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-logging.ts,sha256=md0pY4Gd9OXvAq28Sc4opzyWJB3_7JijeLlvtEMlnJE,1172
|
|
1297
1300
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-string.ts,sha256=SyMS-NCYiG438NnMDgT6NyGzGBYb3IWNPex6FEhr28I,652
|
|
1298
1301
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions/integ.state-machine-variables.ts,sha256=pwYfPpS-BYl-rj8raj4e2MDFLhxneEqXRZa1XyoK86g,1592
|
|
@@ -1462,8 +1465,8 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.pipe
|
|
|
1462
1465
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/region-info/README.md,sha256=vewWkV3ds9o9iyyYaJBNTkaKJ2XA6K2yF17tAxUnujg,2718
|
|
1463
1466
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/README.md,sha256=hYIx7DbG_7p4LYLUfxDwgIQjw9UNdz1GLrqDe8_Dbko,4132
|
|
1464
1467
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/integ.triggers.ts,sha256=LfeVru_CggiFXKPVa8vwt6Uv43SV3oAioDGmd8PyMHc,2859
|
|
1465
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1466
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1467
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1468
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1469
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1468
|
+
konokenj_cdk_api_mcp_server-0.59.0.dist-info/METADATA,sha256=WJvhP1DDG-9-aXQVRVMgIuPpIRJzuxEqyIwVnxj8PuA,2646
|
|
1469
|
+
konokenj_cdk_api_mcp_server-0.59.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
1470
|
+
konokenj_cdk_api_mcp_server-0.59.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
|
|
1471
|
+
konokenj_cdk_api_mcp_server-0.59.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
|
|
1472
|
+
konokenj_cdk_api_mcp_server-0.59.0.dist-info/RECORD,,
|
{konokenj_cdk_api_mcp_server-0.58.0.dist-info → konokenj_cdk_api_mcp_server-0.59.0.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|