konokenj.cdk-api-mcp-server 0.34.0__py3-none-any.whl → 0.36.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.

Potentially problematic release.


This version of konokenj.cdk-api-mcp-server might be problematic. Click here for more details.

Files changed (23) hide show
  1. cdk_api_mcp_server/__about__.py +1 -1
  2. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md +201 -0
  3. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-lt.ts +7 -0
  4. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/README.md +19 -11
  5. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.search-expression.ts +51 -0
  6. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md +87 -1
  7. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.blue-green-deployment-strategy.ts +205 -0
  8. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-windows-server-ami.ts +5 -6
  9. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md +65 -1
  10. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-transformer.ts +37 -0
  11. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.save-logs-insights-query-definition.ts +7 -2
  12. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.transformer.ts +27 -0
  13. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/README.md +14 -1
  14. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-database-insights.ts +43 -0
  15. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/README.md +24 -1
  16. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/README.md +3 -0
  17. {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/METADATA +2 -2
  18. {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/RECORD +21 -18
  19. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.expose-metric-with-dimensions.ts +0 -47
  20. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-signcontent.d.ts +0 -1
  21. {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/WHEEL +0 -0
  22. {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/entry_points.txt +0 -0
  23. {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2025-present Kenji Kono <konoken@amazon.co.jp>
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "0.34.0"
4
+ __version__ = "0.36.0"
@@ -35,6 +35,14 @@ This construct library facilitates the deployment of Bedrock Agents, enabling yo
35
35
  - [Agent Collaboration](#agent-collaboration)
36
36
  - [Custom Orchestration](#custom-orchestration)
37
37
  - [Agent Alias](#agent-alias)
38
+ - [Prompts](#prompts)
39
+ - [Prompt Variants](#prompt-variants)
40
+ - [Basic Text Prompt](#basic-text-prompt)
41
+ - [Chat Prompt](#chat-prompt)
42
+ - [Agent Prompt](#agent-prompt)
43
+ - [Prompt Properties](#prompt-properties)
44
+ - [Prompt Version](#prompt-version)
45
+ - [Import Methods](#import-methods)
38
46
 
39
47
  ## Agents
40
48
 
@@ -606,3 +614,196 @@ const agentAlias = new bedrock.AgentAlias(this, 'myAlias', {
606
614
  description: `Production version of my agent. Created at ${agent.lastUpdated}` // ensure the version update
607
615
  });
608
616
  ```
617
+
618
+ ## Prompts
619
+
620
+ Amazon Bedrock provides the ability to create and save prompts using Prompt management so that you can save time by applying the same prompt to different workflows. You can include variables in the prompt so that you can adjust the prompt for different use case.
621
+
622
+ The `Prompt` resource allows you to create a new prompt.
623
+
624
+ ### Prompt Variants
625
+
626
+ Prompt variants in the context of Amazon Bedrock refer to alternative configurations of a prompt, including its message or the model and inference configurations used. Prompt variants are the building blocks of prompts - you must create at least one prompt variant to create a prompt. Prompt variants allow you to create different versions of a prompt, test them, and save the variant that works best for your use case.
627
+
628
+ There are three types of prompt variants:
629
+
630
+ - **Basic Text Prompt**: Simple text-based prompts for straightforward interactions
631
+ - **Chat variant**: Conversational prompts that support system messages, user/assistant message history, and tools
632
+ - **Agent variant**: Prompts designed to work with Bedrock Agents
633
+
634
+ ### Basic Text Prompt
635
+
636
+ Text prompts are the simplest form of prompts, consisting of plain text instructions with optional variables. They are ideal for straightforward tasks like summarization, content generation, or question answering where you need a direct text-based interaction with the model.
637
+
638
+ ```ts fixture=default
639
+ const cmk = new kms.Key(this, 'cmk', {});
640
+ const claudeModel = bedrock.BedrockFoundationModel.ANTHROPIC_CLAUDE_SONNET_V1_0;
641
+
642
+ const variant1 = bedrock.PromptVariant.text({
643
+ variantName: 'variant1',
644
+ model: claudeModel,
645
+ promptVariables: ['topic'],
646
+ promptText: 'This is my first text prompt. Please summarize our conversation on: {{topic}}.',
647
+ inferenceConfiguration: bedrock.PromptInferenceConfiguration.text({
648
+ temperature: 1.0,
649
+ topP: 0.999,
650
+ maxTokens: 2000,
651
+ }),
652
+ });
653
+
654
+ const prompt1 = new bedrock.Prompt(this, 'prompt1', {
655
+ promptName: 'prompt1',
656
+ description: 'my first prompt',
657
+ defaultVariant: variant1,
658
+ variants: [variant1],
659
+ kmsKey: cmk,
660
+ });
661
+ ```
662
+
663
+ ### Chat Prompt
664
+
665
+ Use this template type when the model supports the Converse API or the Anthropic Claude Messages API. This allows you to include a System prompt and previous User messages and Assistant messages for context.
666
+
667
+ ```ts fixture=default
668
+ const cmk = new kms.Key(this, 'cmk', {});
669
+
670
+ const variantChat = bedrock.PromptVariant.chat({
671
+ variantName: 'variant1',
672
+ model: bedrock.BedrockFoundationModel.ANTHROPIC_CLAUDE_3_5_SONNET_V1_0,
673
+ messages: [
674
+ bedrock.ChatMessage.user('From now on, you speak Japanese!'),
675
+ bedrock.ChatMessage.assistant('Konnichiwa!'),
676
+ bedrock.ChatMessage.user('From now on, you speak {{language}}!'),
677
+ ],
678
+ system: 'You are a helpful assistant that only speaks the language you`re told.',
679
+ promptVariables: ['language'],
680
+ toolConfiguration: {
681
+ toolChoice: bedrock.ToolChoice.AUTO,
682
+ tools: [
683
+ bedrock.Tool.function({
684
+ name: 'top_song',
685
+ description: 'Get the most popular song played on a radio station.',
686
+ inputSchema: {
687
+ type: 'object',
688
+ properties: {
689
+ sign: {
690
+ type: 'string',
691
+ description: 'The call sign for the radio station for which you want the most popular song. Example calls signs are WZPZ and WKR.',
692
+ },
693
+ },
694
+ required: ['sign'],
695
+ },
696
+ }),
697
+ ],
698
+ },
699
+ });
700
+
701
+ new bedrock.Prompt(this, 'prompt1', {
702
+ promptName: 'prompt-chat',
703
+ description: 'my first chat prompt',
704
+ defaultVariant: variantChat,
705
+ variants: [variantChat],
706
+ kmsKey: cmk,
707
+ });
708
+ ```
709
+
710
+ ### Agent Prompt
711
+
712
+ Agent prompts are designed to work with Bedrock Agents, allowing you to create prompts that can be used by agents to perform specific tasks. Agent prompts use text prompts as their foundation and can reference agent aliases and include custom instructions for how the agent should behave.
713
+
714
+ ```ts fixture=default
715
+ const cmk = new kms.Key(this, 'cmk', {});
716
+
717
+ // Assuming you have an existing agent and alias
718
+ const agent = bedrock.Agent.fromAgentAttributes(this, 'ImportedAgent', {
719
+ agentArn: 'arn:aws:bedrock:region:account:agent/agent-id',
720
+ roleArn: 'arn:aws:iam::account:role/agent-role',
721
+ });
722
+
723
+ const agentAlias = bedrock.AgentAlias.fromAttributes(this, 'ImportedAlias', {
724
+ aliasId: 'alias-id',
725
+ aliasName: 'my-alias',
726
+ agentVersion: '1',
727
+ agent: agent,
728
+ });
729
+
730
+ const agentVariant = bedrock.PromptVariant.agent({
731
+ variantName: 'agent-variant',
732
+ model: bedrock.BedrockFoundationModel.ANTHROPIC_CLAUDE_3_5_SONNET_V1_0,
733
+ agentAlias: agentAlias,
734
+ promptText: 'Use the agent to help with: {{task}}. Please be thorough and provide detailed explanations.',
735
+ promptVariables: ['task'],
736
+ });
737
+
738
+ new bedrock.Prompt(this, 'agentPrompt', {
739
+ promptName: 'agent-prompt',
740
+ description: 'Prompt for agent interactions',
741
+ defaultVariant: agentVariant,
742
+ variants: [agentVariant],
743
+ kmsKey: cmk,
744
+ });
745
+ ```
746
+
747
+ ### Prompt Properties
748
+
749
+ | Property | Type | Required | Description |
750
+ |----------|------|----------|-------------|
751
+ | promptName | string | Yes | The name of the prompt |
752
+ | description | string | No | A description of the prompt |
753
+ | defaultVariant | PromptVariant | Yes | The default variant to use for the prompt |
754
+ | variants | PromptVariant[] | No | Additional variants for the prompt |
755
+ | kmsKey | kms.IKey | No | The KMS key to use for encrypting the prompt. Defaults to AWS managed key |
756
+ | tags | Record<string, string> | No | Tags to apply to the prompt |
757
+
758
+ ### Prompt Version
759
+
760
+ A prompt version is a snapshot of a prompt at a specific point in time that you create when you are satisfied with a set of configurations. Versions allow you to deploy your prompt and easily switch between different configurations for your prompt and update your application with the most appropriate version for your use-case.
761
+
762
+ You can create a Prompt version by using the PromptVersion class or by using the .createVersion(..) on a Prompt object. It is recommended to use the .createVersion(..) method. It uses a hash based mechanism to update the version whenever a certain configuration property changes.
763
+
764
+ ```ts fixture=default
765
+ const cmk = new kms.Key(this, 'cmk', {});
766
+ const claudeModel = bedrock.BedrockFoundationModel.ANTHROPIC_CLAUDE_SONNET_V1_0;
767
+
768
+ const variant1 = bedrock.PromptVariant.text({
769
+ variantName: 'variant1',
770
+ model: claudeModel,
771
+ promptVariables: ['topic'],
772
+ promptText: 'This is my first text prompt. Please summarize our conversation on: {{topic}}.',
773
+ inferenceConfiguration: bedrock.PromptInferenceConfiguration.text({
774
+ temperature: 1.0,
775
+ topP: 0.999,
776
+ maxTokens: 2000,
777
+ }),
778
+ });
779
+
780
+ const prompt1 = new bedrock.Prompt(this, 'prompt1', {
781
+ promptName: 'prompt1',
782
+ description: 'my first prompt',
783
+ defaultVariant: variant1,
784
+ variants: [variant1],
785
+ kmsKey: cmk,
786
+ });
787
+
788
+ const promptVersion = new bedrock.PromptVersion(this, 'MyPromptVersion', {
789
+ prompt: prompt1,
790
+ description: 'my first version',
791
+ });
792
+ //or alternatively:
793
+ // const promptVersion = prompt1.createVersion('my first version');
794
+ const versionString = promptVersion.version;
795
+
796
+ ```
797
+
798
+ ### Import Methods
799
+
800
+ You can use the `fromPromptAttributes` method to import an existing Bedrock Prompt into your CDK application.
801
+
802
+ ```ts fixture=default
803
+ // Import an existing prompt by ARN
804
+ const importedPrompt = bedrock.Prompt.fromPromptAttributes(this, 'ImportedPrompt', {
805
+ promptArn: 'arn:aws:bedrock:region:account:prompt/prompt-id',
806
+ kmsKey: kms.Key.fromKeyArn(this, 'ImportedKey', 'arn:aws:kms:region:account:key/key-id'), // optional
807
+ promptVersion: '1', // optional, defaults to 'DRAFT'
808
+ });
809
+ ```
@@ -129,4 +129,11 @@ new autoscaling.AutoScalingGroup(stack, 'AsgWithIMDSv2', {
129
129
  vpc,
130
130
  });
131
131
 
132
+ new autoscaling.AutoScalingGroup(stack, 'AsgFromMigrationToLT', {
133
+ vpc,
134
+ launchTemplate: lt,
135
+ migrateToLaunchTemplate: true,
136
+ updatePolicy: autoscaling.UpdatePolicy.rollingUpdate(),
137
+ });
138
+
132
139
  app.synth();
@@ -146,19 +146,18 @@ const errorRate = new cloudwatch.MathExpression({
146
146
 
147
147
  ### Search Expressions
148
148
 
149
- Math expressions also support search expressions. For example, the following
150
- search expression returns all CPUUtilization metrics that it finds, with the
151
- graph showing the Average statistic with an aggregation period of 5 minutes:
149
+ Search expressions allow you to dynamically discover and display metrics that match specific criteria, making them ideal for monitoring dynamic infrastructure where the exact metrics aren't known in advance. A single search expression can return up to 500 time series.
150
+
151
+
152
+ #### Using SearchExpression Class
153
+
154
+ Following is an example of a search expression that returns all CPUUtilization metrics with the graph showing the Average statistic with an aggregation period of 5 minutes:
152
155
 
153
156
  ```ts
154
- const cpuUtilization = new cloudwatch.MathExpression({
155
- expression: "SEARCH('{AWS/EC2,InstanceId} MetricName=\"CPUUtilization\"', 'Average', 300)",
156
-
157
- // Specifying '' as the label suppresses the default behavior
158
- // of using the expression as metric label. This is especially appropriate
159
- // when using expressions that return multiple time series (like SEARCH()
160
- // or METRICS()), to show the labels of the retrieved metrics only.
161
- label: '',
157
+ const cpuUtilization = new cloudwatch.SearchExpression({
158
+ expression: "SEARCH('{AWS/EC2,InstanceId} MetricName=\"CPUUtilization\"', 'Average', 900)",
159
+ label: 'EC2 CPU Utilization',
160
+ color: '#ff7f0e',
162
161
  });
163
162
  ```
164
163
 
@@ -166,6 +165,15 @@ Cross-account and cross-region search expressions are also supported. Use
166
165
  the `searchAccount` and `searchRegion` properties to specify the account
167
166
  and/or region to evaluate the search expression against.
168
167
 
168
+ ```ts
169
+ const crossAccountSearch = new cloudwatch.SearchExpression({
170
+ expression: "SEARCH('{AWS/Lambda,FunctionName} MetricName=\"Invocations\"', 'Sum', 300)",
171
+ searchAccount: '123456789012',
172
+ searchRegion: 'us-west-2',
173
+ label: 'Production Lambda Invocations',
174
+ });
175
+ ```
176
+
169
177
  ### Aggregation
170
178
 
171
179
  To graph or alarm on metrics you must aggregate them first, using a function
@@ -0,0 +1,51 @@
1
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
2
+ import * as cdk from 'aws-cdk-lib';
3
+ import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
4
+
5
+ class SearchExpressionStack extends cdk.Stack {
6
+ constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
7
+ super(scope, id, props);
8
+
9
+ const minimalSearchExpression = new cloudwatch.SearchExpression({
10
+ expression: "SEARCH('{AWS/EC2,InstanceId} CPUUtilization', 'Average', 300)",
11
+ });
12
+
13
+ const customSearchExpression = new cloudwatch.SearchExpression({
14
+ expression: "SEARCH('{AWS/Lambda,FunctionName} Duration', 'Average', 300)",
15
+ label: 'Custom Lambda Duration',
16
+ color: '#e377c2',
17
+ period: cdk.Duration.minutes(10),
18
+ searchAccount: '123456789012',
19
+ searchRegion: 'us-west-2',
20
+ });
21
+
22
+ const crossAccountRegionSearchExpression = new cloudwatch.SearchExpression({
23
+ expression: "SEARCH('{AWS/S3,BucketName} BucketSizeBytes', 'Average', 86400)",
24
+ label: 'Cross-Account Cross-Region S3',
25
+ color: '#9467bd',
26
+ period: cdk.Duration.hours(1),
27
+ searchAccount: '123456789012',
28
+ searchRegion: 'ap-southeast-1',
29
+ });
30
+
31
+ const dashboard = new cloudwatch.Dashboard(this, 'SearchExpressionDashboard', {
32
+ dashboardName: 'SearchExpressionTestDashboard',
33
+ });
34
+
35
+ const searchExpressionWidget = new cloudwatch.GraphWidget({
36
+ title: 'Minimal vs Custom Properties',
37
+ width: 24,
38
+ height: 6,
39
+ left: [minimalSearchExpression],
40
+ right: [customSearchExpression, crossAccountRegionSearchExpression],
41
+ });
42
+
43
+ dashboard.addWidgets(searchExpressionWidget);
44
+ }
45
+ }
46
+
47
+ const app = new cdk.App();
48
+
49
+ new IntegTest(app, 'SearchExpressionIntegTest', {
50
+ testCases: [new SearchExpressionStack(app, 'SearchExpressionStack')],
51
+ });
@@ -2070,7 +2070,93 @@ const service = new ecs.FargateService(this, 'FargateService', {
2070
2070
  });
2071
2071
  ```
2072
2072
 
2073
- ## Daemon scheduling strategy
2073
+ ## ECS Native Blue/Green Deployment
2074
+
2075
+ Amazon ECS supports native blue/green deployments that allow you to deploy new versions of your services with zero downtime. This deployment strategy creates a new set of tasks (green) alongside the existing tasks (blue), then shifts traffic from the old version to the new version.
2076
+
2077
+ [Amazon ECS blue/green deployments](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-blue-green.html)
2078
+
2079
+ ### Using Escape Hatches for Blue/Green Features
2080
+
2081
+ The new blue/green deployment features are added to CloudFormation but not yet available in the CDK L2 constructs, you can use escape hatches to access them through the L1 (CfnService) construct.
2082
+
2083
+ #### Load Balancer Advanced Configuration
2084
+
2085
+ Configure advanced load balancer settings for blue/green deployments with alternate target groups and listener rules:
2086
+
2087
+ ```ts
2088
+ declare const service: ecs.FargateService;
2089
+
2090
+ const cfnService = service.node.defaultChild as ecs.CfnService;
2091
+ cfnService.loadBalancers = [{
2092
+ containerName: 'web',
2093
+ containerPort: 80,
2094
+ targetGroupArn: 'arn:aws:elasticloadbalancing:region:account:targetgroup/production',
2095
+ advancedConfiguration: {
2096
+ alternateTargetGroupArn: 'arn:aws:elasticloadbalancing:region:account:targetgroup/test',
2097
+ productionListenerRule: 'arn:aws:elasticloadbalancing:region:account:listener-rule/production-rule',
2098
+ testListenerRule: 'arn:aws:elasticloadbalancing:region:account:listener-rule/test-rule',
2099
+ roleArn: 'arn:aws:iam::account:role/ecs-blue-green-role'
2100
+ }
2101
+ }];
2102
+ ```
2103
+
2104
+ #### Blue/Green Deployment Configuration
2105
+
2106
+ Configure deployment strategy with bake time and lifecycle hooks:
2107
+
2108
+ ```ts
2109
+ declare const service: ecs.FargateService;
2110
+
2111
+ const cfnService = service.node.defaultChild as ecs.CfnService;
2112
+ cfnService.deploymentConfiguration = {
2113
+ maximumPercent: 200,
2114
+ minimumHealthyPercent: 100,
2115
+ strategy: 'BLUE_GREEN',
2116
+ bakeTimeInMinutes: 15,
2117
+ lifecycleHooks: [{
2118
+ hookTargetArn: 'arn:aws:lambda:region:account:function:pre-deployment-hook',
2119
+ roleArn: 'arn:aws:iam::account:role/deployment-hook-role',
2120
+ lifecycleStages: ['PRE_STOP', 'POST_START']
2121
+ }]
2122
+ };
2123
+ ```
2124
+
2125
+ #### Service Connect Test Traffic Rules
2126
+
2127
+ Configure test traffic routing for Service Connect during blue/green deployments:
2128
+
2129
+ ```ts
2130
+ declare const cluster: ecs.Cluster;
2131
+ declare const taskDefinition: ecs.TaskDefinition;
2132
+
2133
+ const service = new ecs.FargateService(this, 'Service', {
2134
+ cluster,
2135
+ taskDefinition,
2136
+ });
2137
+
2138
+ const cfnService = service.node.defaultChild as ecs.CfnService;
2139
+ cfnService.serviceConnectConfiguration = {
2140
+ enabled: true,
2141
+ services: [{
2142
+ portName: 'api',
2143
+ clientAliases: [{
2144
+ port: 80,
2145
+ dnsName: 'my-service',
2146
+ testTrafficRules: {
2147
+ header: {
2148
+ name: 'x-canary-test',
2149
+ value: {
2150
+ exact: 'beta-version'
2151
+ }
2152
+ }
2153
+ }
2154
+ }]
2155
+ }]
2156
+ };
2157
+ ```
2158
+
2159
+ ## Daemon Scheduling Strategy
2074
2160
  You can specify whether service use Daemon scheduling strategy by specifying `daemon` option in Service constructs. See [differences between Daemon and Replica scheduling strategy](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html)
2075
2161
 
2076
2162
  ```ts
@@ -0,0 +1,205 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
3
+ import * as iam from 'aws-cdk-lib/aws-iam';
4
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
5
+ import * as cdk from 'aws-cdk-lib';
6
+ import * as ecs from 'aws-cdk-lib/aws-ecs';
7
+ import * as integ from '@aws-cdk/integ-tests-alpha';
8
+
9
+ const app = new cdk.App();
10
+ const stack = new cdk.Stack(app, 'aws-ecs-blue-green-deployment');
11
+
12
+ // Create VPC and Cluster
13
+ const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 2, restrictDefaultSecurityGroup: false });
14
+ const cluster = new ecs.Cluster(stack, 'FargateCluster', {
15
+ vpc,
16
+ defaultCloudMapNamespace: {
17
+ name: 'bluegreendeployment.com',
18
+ useForServiceConnect: true,
19
+ },
20
+ });
21
+
22
+ // Create Blue target group for B/G deployment
23
+ const blueTargetGroup = new elbv2.ApplicationTargetGroup(stack, 'BlueTG', {
24
+ vpc: cluster.vpc,
25
+ port: 80,
26
+ protocol: elbv2.ApplicationProtocol.HTTP,
27
+ targetType: elbv2.TargetType.IP,
28
+ healthCheck: {
29
+ path: '/',
30
+ healthyHttpCodes: '200',
31
+ },
32
+ });
33
+
34
+ // Create Green target group for B/G deployment
35
+ const greenTargetGroup = new elbv2.ApplicationTargetGroup(stack, 'GreenTG', {
36
+ vpc: cluster.vpc,
37
+ port: 80,
38
+ protocol: elbv2.ApplicationProtocol.HTTP,
39
+ targetType: elbv2.TargetType.IP,
40
+ healthCheck: {
41
+ path: '/',
42
+ healthyHttpCodes: '200',
43
+ },
44
+ });
45
+
46
+ // Create security groups
47
+ const lbSecurityGroup = new ec2.SecurityGroup(stack, 'LBSecurityGroup', {
48
+ vpc: cluster.vpc,
49
+ allowAllOutbound: true,
50
+ });
51
+ lbSecurityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(80));
52
+
53
+ const ecsSecurityGroup = new ec2.SecurityGroup(stack, 'ECSSecurityGroup', {
54
+ vpc: cluster.vpc,
55
+ allowAllOutbound: true,
56
+ });
57
+ ecsSecurityGroup.addIngressRule(lbSecurityGroup, ec2.Port.tcp(80));
58
+
59
+ // Create ALB
60
+ const alb = new elbv2.ApplicationLoadBalancer(stack, 'ALB', {
61
+ vpc: cluster.vpc,
62
+ internetFacing: true,
63
+ securityGroup: lbSecurityGroup,
64
+ idleTimeout: cdk.Duration.seconds(60),
65
+ });
66
+
67
+ // Create ALB listener with default 404 response
68
+ const listener = alb.addListener('ALBListenerHTTP', {
69
+ port: 80,
70
+ defaultAction: elbv2.ListenerAction.fixedResponse(404),
71
+ });
72
+
73
+ // Create Prod listener rule
74
+ const prodListenerRule = new elbv2.ApplicationListenerRule(stack, 'ALBProductionListenerRule', {
75
+ listener: listener,
76
+ priority: 1,
77
+ conditions: [
78
+ elbv2.ListenerCondition.pathPatterns(['/*']),
79
+ ],
80
+ action: elbv2.ListenerAction.weightedForward([
81
+ {
82
+ targetGroup: blueTargetGroup,
83
+ weight: 100,
84
+ },
85
+ {
86
+ targetGroup: greenTargetGroup,
87
+ weight: 0,
88
+ },
89
+ ]),
90
+ });
91
+
92
+ // Create granular IAM roles
93
+ const ecsTaskExecutionRole = new iam.Role(stack, 'EcsTaskExecutionRole', {
94
+ assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'),
95
+ managedPolicies: [
96
+ iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonECSTaskExecutionRolePolicy'),
97
+ ],
98
+ });
99
+
100
+ // Create Blue/Green deployment service role
101
+ const ecsServiceRole = new iam.Role(stack, 'ServiceRole', {
102
+ assumedBy: new iam.CompositePrincipal(
103
+ new iam.ServicePrincipal('ecs.amazonaws.com'),
104
+ ),
105
+ managedPolicies: [
106
+ iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonEC2ContainerServiceRole'),
107
+ ],
108
+ inlinePolicies: {
109
+ LambdaInvokePolicy: new iam.PolicyDocument({
110
+ statements: [
111
+ new iam.PolicyStatement({
112
+ actions: ['lambda:InvokeFunction'],
113
+ resources: ['*'],
114
+ }),
115
+ ],
116
+ }),
117
+ ELBPolicy: new iam.PolicyDocument({
118
+ statements: [
119
+ new iam.PolicyStatement({
120
+ actions: [
121
+ 'elasticloadbalancing:ModifyRule',
122
+ 'elasticloadbalancing:ModifyListener',
123
+ ],
124
+ resources: [prodListenerRule.listenerRuleArn],
125
+ }),
126
+ ],
127
+ }),
128
+ },
129
+ });
130
+
131
+ // Create Lambda hook
132
+ const lambdaHook = new lambda.Function(stack, 'LambdaHook', {
133
+ handler: 'index.handler',
134
+ runtime: lambda.Runtime.NODEJS_22_X,
135
+ code: lambda.Code.fromInline(`exports.handler = async (event, context) => {
136
+ console.log('Event received:', JSON.stringify(event));
137
+ return { hookStatus: 'SUCCEEDED' };
138
+ };`),
139
+ });
140
+
141
+ lambdaHook.grantInvoke(ecsServiceRole);
142
+
143
+ // Create task definition
144
+ const taskDefinition = new ecs.FargateTaskDefinition(stack, 'TaskDef', {
145
+ memoryLimitMiB: 512,
146
+ cpu: 256,
147
+ executionRole: ecsTaskExecutionRole,
148
+ });
149
+
150
+ // Add container to task definition
151
+ taskDefinition.addContainer('container', {
152
+ containerName: 'nginx',
153
+ image: ecs.ContainerImage.fromRegistry('public.ecr.aws/nginx/nginx:latest'),
154
+ portMappings: [{
155
+ name: 'api',
156
+ containerPort: 80,
157
+ appProtocol: ecs.AppProtocol.http,
158
+ }],
159
+ });
160
+
161
+ // Create Fargate service with escape hatching for B/G deployment
162
+ const service = new ecs.FargateService(stack, 'Service', {
163
+ cluster,
164
+ taskDefinition,
165
+ securityGroups: [ecsSecurityGroup],
166
+ });
167
+
168
+ service.attachToApplicationTargetGroup(blueTargetGroup);
169
+
170
+ // Use escape hatching to set B/G deployment properties
171
+ const cfnService = service.node.defaultChild as ecs.CfnService;
172
+ cfnService.addPropertyOverride('DeploymentController', {
173
+ Type: 'ECS',
174
+ });
175
+
176
+ cfnService.addPropertyOverride('DeploymentConfiguration', {
177
+ DeploymentCircuitBreaker: {
178
+ Enable: false,
179
+ Rollback: false,
180
+ },
181
+ MaximumPercent: 200,
182
+ MinimumHealthyPercent: 100,
183
+ Strategy: 'BLUE_GREEN',
184
+ BakeTimeInMinutes: 0,
185
+ LifecycleHooks: [{
186
+ HookTargetArn: lambdaHook.functionArn,
187
+ RoleArn: ecsServiceRole.roleArn,
188
+ LifecycleStages: ['POST_TEST_TRAFFIC_SHIFT'],
189
+ }],
190
+ });
191
+
192
+ cfnService.addPropertyOverride('LoadBalancers.0', {
193
+ AdvancedConfiguration: {
194
+ AlternateTargetGroupArn: greenTargetGroup.targetGroupArn,
195
+ RoleArn: ecsServiceRole.roleArn,
196
+ ProductionListenerRule: prodListenerRule.listenerRuleArn,
197
+ },
198
+ });
199
+
200
+ // Create integration test
201
+ new integ.IntegTest(app, 'aws-ecs-blue-green', {
202
+ testCases: [stack],
203
+ });
204
+
205
+ app.synth();
@@ -32,8 +32,8 @@ insRole.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
32
32
  const autoScalingGroup = new autoscaling.AutoScalingGroup(stack, 'ASG', {
33
33
  vpc,
34
34
  role: insRole,
35
- instanceType: ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.LARGE),
36
- machineImage: ecs.EcsOptimizedImage.windows(ecs.WindowsOptimizedVersion.SERVER_2022),
35
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.SMALL),
36
+ machineImage: ecs.EcsOptimizedImage.windows(ecs.WindowsOptimizedVersion.SERVER_2025),
37
37
  minCapacity: 1,
38
38
  });
39
39
 
@@ -46,10 +46,9 @@ cluster.addAsgCapacityProvider(cp);
46
46
 
47
47
  const taskDefinition = new ecs.Ec2TaskDefinition(stack, 'TaskDef', {});
48
48
 
49
- taskDefinition.addContainer('fluent-bit', {
50
- image: ecs.ContainerImage.fromRegistry('public.ecr.aws/aws-observability/aws-for-fluent-bit:windowsservercore-stable'),
51
- memoryLimitMiB: 2096,
52
- cpu: 1024,
49
+ taskDefinition.addContainer('main', {
50
+ image: ecs.ContainerImage.fromRegistry('hello-world'),
51
+ memoryLimitMiB: 256,
53
52
  });
54
53
 
55
54
  new ecs.Ec2Service(stack, 'EC2Service', {
@@ -199,7 +199,6 @@ the name `Namespace/MetricName`.
199
199
 
200
200
  You can expose a metric on a metric filter by calling the `MetricFilter.metric()` API.
201
201
  This has a default of `statistic = 'avg'` if the statistic is not set in the `props`.
202
- Additionally, if the metric filter was created with a dimension map, those dimensions will be included in the metric.
203
202
 
204
203
  ```ts
205
204
  declare const logGroup: logs.LogGroup;
@@ -403,6 +402,10 @@ new logs.QueryDefinition(this, 'QueryDefinition', {
403
402
  'loggingType = "ERROR"',
404
403
  'loggingMessage = "A very strange error occurred!"',
405
404
  ],
405
+ statsStatements: [
406
+ 'count(loggingMessage) as loggingErrors',
407
+ 'count(differentLoggingMessage) as differentLoggingErrors',
408
+ ],
406
409
  sort: '@timestamp desc',
407
410
  limit: 20,
408
411
  }),
@@ -481,6 +484,67 @@ new logs.LogGroup(this, 'LogGroup', {
481
484
  });
482
485
  ```
483
486
 
487
+ ## Transformer
488
+
489
+ A log transformer enables transforming log events into a different format, making them easier
490
+ to process and analyze. You can transform logs from different sources into standardized formats
491
+ that contain relevant, source-specific information. Transformations are performed at the time of log ingestion.
492
+ Transformers support several types of processors which can be chained into a processing pipeline (subject to some restrictions, see [Usage Limits](#usage-limits)).
493
+
494
+ ### Processor Types
495
+
496
+ 1. **Parser Processors**: Parse string log events into structured log events. These are configurable parsers created using `ParserProcessor`, and support conversion to a format like Json, extracting fields from CSV input, converting vended sources to [OCSF](https://schema.ocsf.io/1.1.0/) format, regex parsing using Grok patterns or key-value parsing. Refer [configurable parsers](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#CloudWatch-Logs-Transformation-Configurable) for more examples.
497
+
498
+ 2. **Vended Log Parsers**: Parse log events from vended sources into structured log events. These are created using `VendedLogParser`, and support conversion from sources such as AWS WAF, PostGres, Route53, CloudFront and VPC. These parsers are not configurable, meaning these can be added to the pipeline but do not accept any properties or configurations. Refer [vended log parsers](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#CloudWatch-Logs-Transformation-BuiltIn) for more examples.
499
+
500
+ 3. **String Mutators**: Perform operations on string values in a field of a log event and are created using `StringMutatorProcessor`. These can be used to format string values in the log event such as changing case, removing trailing whitespaces or extracting values from a string field by splitting the string or regex backreferences. Refer [string mutators](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#CloudWatch-Logs-Transformation-StringMutate) for more examples.
501
+
502
+ 4. **JSON Mutators**: Perform operation on JSON log events and are created using `JsonMutatorProcessor`. These processors can be used to enrich log events by adding new fields, deleting, moving, renaming fields, copying values to other fields or converting a list of key-value pairs to a map. Refer [JSON mutators](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#CloudWatch-Logs-Transformation-JSONMutate) for more examples.
503
+
504
+ 5. **Data Converters**: Convert the data into different formats and are created using `DataConverterProcessor`. These can be used to convert values in a field to datatypes such as integers, string, double and boolean or to convert dates and times to different formats. Refer [datatype processors](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#CloudWatch-Logs-Transformation-Datatype) for more examples.
505
+
506
+ ### Usage Limits
507
+
508
+ - A transformer can have a maximum of 20 processors
509
+ - At least one parser-type processor is required
510
+ - Maximum of 5 parser-type processors allowed
511
+ - AWS vended log parser (if used) must be the first processor
512
+ - Only one parseToOcsf processor, one grok processor, one addKeys processor, and one copyValue processor allowed per transformer
513
+ - Transformers can only be used with log groups in the Standard log class
514
+
515
+ Example:
516
+
517
+ ```ts
518
+
519
+ // Create a log group
520
+ const logGroup = new logs.LogGroup(this, 'MyLogGroup');
521
+
522
+ // Create a JSON parser processor
523
+ const jsonParser = new logs.ParserProcessor({
524
+ type: logs.ParserProcessorType.JSON
525
+ });
526
+
527
+ // Create a processor to add keys
528
+ const addKeysProcessor = new logs.JsonMutatorProcessor({
529
+ type: logs.JsonMutatorType.ADD_KEYS,
530
+ addKeysOptions: {
531
+ entries: [{
532
+ key: 'metadata.transformed_in',
533
+ value: 'CloudWatchLogs'
534
+ }]
535
+ }
536
+ });
537
+
538
+ // Create a transformer with these processors
539
+ new logs.Transformer(this, 'Transformer', {
540
+ transformerName: 'MyTransformer',
541
+ logGroup: logGroup,
542
+ transformerConfig: [jsonParser, addKeysProcessor]
543
+ });
544
+ ```
545
+
546
+ For more details on CloudWatch Logs transformation processors, refer to the [AWS documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html).
547
+
484
548
  ## Notes
485
549
 
486
550
  Be aware that Log Group ARNs will always have the string `:*` appended to
@@ -0,0 +1,37 @@
1
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
2
+ import { App, Stack, StackProps } from 'aws-cdk-lib';
3
+ import { JsonMutatorType, LogGroup, ParserProcessorType, ParserProcessor, JsonMutatorProcessor } from 'aws-cdk-lib/aws-logs';
4
+
5
+ class TransformerIntegStack extends Stack {
6
+ constructor(scope: App, id: string, props?: StackProps) {
7
+ super(scope, id, props);
8
+
9
+ const logGroup = new LogGroup(this, 'MyLogGroup');
10
+ const jsonParser = new ParserProcessor({
11
+ type: ParserProcessorType.JSON,
12
+ jsonOptions: { source: 'customField' },
13
+ });
14
+
15
+ const addKeysProcesor = new JsonMutatorProcessor({
16
+ type: JsonMutatorType.ADD_KEYS,
17
+ addKeysOptions: {
18
+ entries: [
19
+ { key: 'test_key1', value: 'test_value1', overwriteIfExists: true },
20
+ { key: 'test_key2', value: 'test_value2' },
21
+ { key: 'test_key3', value: 'test_value3', overwriteIfExists: false },
22
+ ],
23
+ },
24
+ });
25
+
26
+ logGroup.addTransformer('Transformer', {
27
+ transformerName: 'MyTransformer',
28
+ transformerConfig: [jsonParser, addKeysProcesor],
29
+ });
30
+ }
31
+ }
32
+
33
+ const app = new App();
34
+ const testCase = new TransformerIntegStack(app, 'aws-cdk-transformer-integ');
35
+ new IntegTest(app, 'transformer-create', {
36
+ testCases: [testCase],
37
+ });
@@ -11,13 +11,14 @@ class LogsInsightsQueryDefinitionIntegStack extends Stack {
11
11
  removalPolicy: RemovalPolicy.DESTROY,
12
12
  });
13
13
 
14
- // Test query creation with single parse and filter statements
14
+ // Test query creation with single parse, filter, and sort statements
15
15
  new QueryDefinition(this, 'QueryDefinition', {
16
16
  queryDefinitionName: 'QueryDefinition',
17
17
  queryString: new QueryString({
18
18
  fields: ['@timestamp', '@message'],
19
19
  parse: '@message "[*] *" as loggingType, loggingMessage',
20
20
  filter: 'loggingType = "ERROR"',
21
+ stats: 'count(loggingMessage) as loggingErrors',
21
22
  sort: '@timestamp desc',
22
23
  limit: 20,
23
24
  display: 'loggingMessage',
@@ -25,7 +26,7 @@ class LogsInsightsQueryDefinitionIntegStack extends Stack {
25
26
  logGroups: [logGroup],
26
27
  });
27
28
 
28
- // Test query creation with multiple parse and filter statements
29
+ // Test query creation with multiple parse, filter, and stats statements
29
30
  new QueryDefinition(this, 'QueryDefinitionWithMultipleStatements', {
30
31
  queryDefinitionName: 'QueryDefinitionWithMultipleStatements',
31
32
  queryString: new QueryString({
@@ -38,6 +39,10 @@ class LogsInsightsQueryDefinitionIntegStack extends Stack {
38
39
  'loggingType = "ERROR"',
39
40
  'loggingMessage = "A very strange error occurred!"',
40
41
  ],
42
+ statsStatements: [
43
+ 'count(loggingMessage) as loggingErrors',
44
+ 'count(differentLoggingMessage) as differentLoggingErrors',
45
+ ],
41
46
  sort: '@timestamp desc',
42
47
  limit: 20,
43
48
  display: 'loggingMessage',
@@ -0,0 +1,27 @@
1
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
2
+ import { App, Stack, StackProps } from 'aws-cdk-lib';
3
+ import { LogGroup, ParserProcessorType, ParserProcessor, Transformer } from 'aws-cdk-lib/aws-logs';
4
+
5
+ class TransformerIntegStack extends Stack {
6
+ constructor(scope: App, id: string, props?: StackProps) {
7
+ super(scope, id, props);
8
+
9
+ const logGroup = new LogGroup(this, 'MyLogGroup');
10
+ const jsonParser = new ParserProcessor({
11
+ type: ParserProcessorType.JSON,
12
+ jsonOptions: { source: 'customField' },
13
+ });
14
+
15
+ new Transformer(this, 'Transformer', {
16
+ transformerName: 'MyTransformer',
17
+ logGroup: logGroup,
18
+ transformerConfig: [jsonParser],
19
+ });
20
+ }
21
+ }
22
+
23
+ const app = new App();
24
+ const testCase = new TransformerIntegStack(app, 'aws-cdk-transformer-integ');
25
+ new IntegTest(app, 'transformer-create', {
26
+ testCases: [testCase],
27
+ });
@@ -1514,7 +1514,20 @@ new rds.DatabaseCluster(this, 'Database', {
1514
1514
  });
1515
1515
  ```
1516
1516
 
1517
- Note: Database Insights are only supported for Amazon Aurora MySQL and Amazon Aurora PostgreSQL clusters.
1517
+ Database Insights is also supported for RDS instances:
1518
+
1519
+ ```ts
1520
+ declare const vpc: ec2.Vpc;
1521
+ new rds.DatabaseInstance(this, 'PostgresInstance', {
1522
+ engine: rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_17_5 }),
1523
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.R5, ec2.InstanceSize.LARGE),
1524
+ vpc,
1525
+ // If you enable the advanced mode of Database Insights,
1526
+ // Performance Insights is enabled and you must set the `performanceInsightRetention` to 465(15 months).
1527
+ databaseInsightsMode: rds.DatabaseInsightsMode.ADVANCED,
1528
+ performanceInsightRetention: rds.PerformanceInsightRetention.MONTHS_15,
1529
+ });
1530
+ ```
1518
1531
 
1519
1532
  > Visit [CloudWatch Database Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Database-Insights.html) for more details.
1520
1533
 
@@ -0,0 +1,43 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as cdk from 'aws-cdk-lib';
3
+ import {
4
+ DatabaseInstance,
5
+ DatabaseInsightsMode,
6
+ PerformanceInsightRetention,
7
+ PostgresEngineVersion,
8
+ DatabaseInstanceEngine,
9
+ } from 'aws-cdk-lib/aws-rds';
10
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
11
+
12
+ class TestStack extends cdk.Stack {
13
+ constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
14
+ super(scope, id, props);
15
+
16
+ const vpc = new ec2.Vpc(this, 'VPC', { maxAzs: 2, restrictDefaultSecurityGroup: false });
17
+
18
+ new DatabaseInstance(this, 'PostgresInstanceAdvanced', {
19
+ engine: DatabaseInstanceEngine.postgres({ version: PostgresEngineVersion.VER_16_9 }),
20
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.R5, ec2.InstanceSize.LARGE),
21
+ vpc,
22
+ allocatedStorage: 100,
23
+ databaseInsightsMode: DatabaseInsightsMode.ADVANCED,
24
+ performanceInsightRetention: PerformanceInsightRetention.MONTHS_15,
25
+ });
26
+
27
+ new DatabaseInstance(this, 'PostgresInstanceStandard', {
28
+ engine: DatabaseInstanceEngine.postgres({ version: PostgresEngineVersion.VER_16_9 }),
29
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.R5, ec2.InstanceSize.LARGE),
30
+ vpc,
31
+ allocatedStorage: 100,
32
+ databaseInsightsMode: DatabaseInsightsMode.STANDARD,
33
+ enablePerformanceInsights: true,
34
+ });
35
+ }
36
+ }
37
+
38
+ const app = new cdk.App();
39
+ const stack = new TestStack(app, 'aws-cdk-rds-integ-instance-database-insights');
40
+
41
+ new IntegTest(app, 'integ-instance-database-insights', {
42
+ testCases: [stack],
43
+ });
@@ -1545,7 +1545,7 @@ validation.
1545
1545
  > etc. It's your responsibility as the consumer of a plugin to verify that it is
1546
1546
  > secure to use.
1547
1547
 
1548
- By default, the report will be printed in a human readable format. If you want a
1548
+ By default, the report will be printed in a human-readable format. If you want a
1549
1549
  report in JSON format, enable it using the `@aws-cdk/core:validationReportJson`
1550
1550
  context passing it directly to the application:
1551
1551
 
@@ -1559,6 +1559,18 @@ Alternatively, you can set this context key-value pair using the `cdk.json` or
1559
1559
  `cdk.context.json` files in your project directory (see
1560
1560
  [Runtime context](https://docs.aws.amazon.com/cdk/v2/guide/context.html)).
1561
1561
 
1562
+ It is also possible to enable both JSON and human-readable formats by setting
1563
+ `@aws-cdk/core:validationReportPrettyPrint` context key explicitly:
1564
+
1565
+ ```ts
1566
+ const app = new App({
1567
+ context: {
1568
+ '@aws-cdk/core:validationReportJson': true,
1569
+ '@aws-cdk/core:validationReportPrettyPrint': true,
1570
+ },
1571
+ });
1572
+ ```
1573
+
1562
1574
  If you choose the JSON format, the CDK will print the policy validation report
1563
1575
  to a file called `policy-validation-report.json` in the cloud assembly
1564
1576
  directory. For the default, human-readable format, the report will be printed to
@@ -1800,6 +1812,17 @@ warning by the `id`.
1800
1812
  Annotations.of(this).acknowledgeWarning('IAM:Group:MaxPoliciesExceeded', 'Account has quota increased to 20');
1801
1813
  ```
1802
1814
 
1815
+ ### Acknowledging Infos
1816
+
1817
+ Informational messages can also be emitted and acknowledged. Use `addInfoV2()`
1818
+ to add an info message that can later be suppressed with `acknowledgeInfo()`.
1819
+ Unlike warnings, info messages are not affected by the `--strict` mode and will never cause synthesis to fail.
1820
+
1821
+ ```ts
1822
+ Annotations.of(this).addInfoV2('my-lib:Construct.someInfo', 'Some message explaining the info');
1823
+ Annotations.of(this).acknowledgeInfo('my-lib:Construct.someInfo', 'This info can be ignored');
1824
+ ```
1825
+
1803
1826
  ## RemovalPolicies
1804
1827
 
1805
1828
  The `RemovalPolicies` class provides a convenient way to manage removal policies for AWS CDK resources within a construct scope. It allows you to apply removal policies to multiple resources at once, with options to include or exclude specific resource types.
@@ -121,6 +121,9 @@ def is_complete(event, context):
121
121
  > Do not use this library if your threat model requires that you cannot trust actors who are able
122
122
  > to list StepFunction executions in your account.
123
123
 
124
+
125
+ > **Default behaviour change Note**: the Custom Resource Provider doesn't log anything by default. To enable logging for the Provider framework, toggle `disableWaiterStateMachineLogging` and `disableFrameworkLambdaLogging` depending on you requirement to see waiter state machine logs or provider framework lambda logs
126
+
124
127
  ### Handling Lifecycle Events: onEvent
125
128
 
126
129
  The user-defined `onEvent` AWS Lambda function is invoked whenever a resource
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: konokenj.cdk-api-mcp-server
3
- Version: 0.34.0
3
+ Version: 0.36.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
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/konokenj.cdk-api-mcp-server.svg)](https://pypi.org/project/konokenj.cdk-api-mcp-server)
27
27
 
28
28
  <!-- DEP-VERSIONS-START -->
29
- [![aws-cdk](https://img.shields.io/badge/aws%20cdk-v2.205.0-blue.svg)](https://github.com/konokenj/cdk-api-mcp-server/blob/main/current-versions/aws-cdk.txt)
29
+ [![aws-cdk](https://img.shields.io/badge/aws%20cdk-v2.207.0-blue.svg)](https://github.com/konokenj/cdk-api-mcp-server/blob/main/current-versions/aws-cdk.txt)
30
30
  <!-- DEP-VERSIONS-END -->
31
31
 
32
32
  ---
@@ -1,4 +1,4 @@
1
- cdk_api_mcp_server/__about__.py,sha256=DkySg6QhlLyWzOX74Z70qNIQcs9Fy__PLI7JCGZO2Ns,129
1
+ cdk_api_mcp_server/__about__.py,sha256=wPffbt0lgP4NHwkTa838Q3ug9ITiNvkXiFdCSx90qiM,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
@@ -9,7 +9,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/app-staging-synthesizer
9
9
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-amplify-alpha/README.md,sha256=gwkmgfklAjRLDG8uegSV68kxNKvG9YW1Ym8ZH5V9ezE,12236
10
10
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-applicationsignals-alpha/README.md,sha256=6nqc-WbHB1iFE3vXDr6hyQs8tYS6wwnWutXePY4EF4w,10873
11
11
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-apprunner-alpha/README.md,sha256=Jtm3RbnP4jQy8BYXwHvaRbMKizUjr4SqvimVMYhu6WQ,11982
12
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md,sha256=vdiDc1bjueXbwQp3h_1xCrk6eCiOFZ74oIAMug43QVY,26658
12
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md,sha256=RGOW5Z03zqi95lnM5IUjmXlRnJNz0YIo1htyCaaLrww,34529
13
13
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-cloud9-alpha/README.md,sha256=0N8kldvHAKsNQHKtsj8PaQywiDUVrd6rEwVNQV0equY,7718
14
14
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-codestar-alpha/README.md,sha256=J-c-thqWwZFQT3Exjr_AY95BBgTA14Wb9aJ32gmEizQ,1509
15
15
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-custom-resource-sdk-adapter/README.md,sha256=FepYs6-FkeqX8jOohrPByOvzecIOBjd1c1AegNpRYNc,6310
@@ -179,7 +179,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/inte
179
179
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-instance-termination-policy.ts,sha256=gFMYmh-bcTBGEniGpJHU8qy0qe4v5txjgTeJOua0o7o,1983
180
180
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-keypair.ts,sha256=wuBJf9PTuStQY4D8Qn2iirPhhalzNtlvwvgB6xXxZYQ,854
181
181
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-lc.ts,sha256=hb_vFSGjkyQcDDffQvgtmZiiLCI6vxy9rbfzi5Did1g,2951
182
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-lt.ts,sha256=tnDccOGJNrcgO6M1TjdJbpu2trs8xw8YtQOR5wbkEio,3674
182
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-lt.ts,sha256=dIxGv1Ofdu18TiL1C2LzQ2Y536hwrEU81bdIsME7FUQ,3865
183
183
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-step-scaling.ts,sha256=Ldh1iH8F00Xpy-24EswZnCBXyNwyhCVFndSeB4qVUpE,1771
184
184
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-update-policy.ts,sha256=5ntPuSF36CruCeZHV-suLGDAJOyit2CUXKylDGO21gY,777
185
185
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-w-classic-loadbalancer.ts,sha256=CRScQXAG5bcLr2QJFKRShTlt1EwBue86bhDueIF16gg,802
@@ -297,7 +297,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudtrail/integ
297
297
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudtrail/integ.cloudtrail-insight.ts,sha256=gI_tHyK2Cet3u-uGSCuoZ1_K4gRXszK0a-G2K8UWIqg,1296
298
298
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudtrail/integ.cloudtrail-supplied-bucket.lit.ts,sha256=-aIb9umhzoWXVSjS5bfg03U-2BnapIEPYYMcGircXwA,1786
299
299
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudtrail/integ.cloudtrail.lit.ts,sha256=wx23AzFPcH68LnBwge7yKFAomCGYM1KhDhX4XkombVY,994
300
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/README.md,sha256=ENkR1bUCa4TmAQyL64yPvELB2T_Sz0_0o86zuMYE2JM,36002
300
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/README.md,sha256=pZgST4oVrDH62bEtgKlNYDqwbObNkDfgVTB7jz8CSas,36275
301
301
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.alarm-and-dashboard.ts,sha256=N0eDCVBXmj-p6L8iBFSeKZVtk_yGMZgdDmjQSrgeiUg,4450
302
302
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.alarm-with-label.ts,sha256=JW5Ttjku2_AEpxHjIrV2F9vp301DEU5nMPlZKyIHs1A,863
303
303
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.anomaly-detection-alarm.ts,sha256=53vEDKVY2bhOQNPd_Ci328X-ujHto6ML0-9JsExwD_A,3900
@@ -313,6 +313,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ
313
313
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.math-alarm-and-dashboard.ts,sha256=875waD7JBvOqbrlpoBj4qx238E2MvrZWVx5gkjgEM2Q,2438
314
314
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.metric-with-dimensions.ts,sha256=x3RY8qmG9Mogl-eXl3GGY4tKioNkHtmFz5HrwN2vQW4,1202
315
315
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.period-singlevaluewidget-and-dashboard.ts,sha256=GDAMkFxU4Uubaf1ZoJb2rz7ui9wsashvlAuSUMVXYOE,838
316
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.search-expression.ts,sha256=T-9KjNrwl2izUHBF5JrlMMv1biVi32lETZQPF9hh0xc,1773
316
317
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.sparkline-singlevaluewidget-and-dashboard.ts,sha256=G0vXLvQD4DzEF3Od3V-GIQ4gvNj42DA_sB1VJ6Fwo18,821
317
318
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.table-widget.ts,sha256=0iXCxCzTfMN8JN4oc9GnolIdQ7CeQnPdwYV2rvztdX0,973
318
319
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch-actions/README.md,sha256=ltFPA9aA3cLv4i6LjifOBCO0JDWXAnUrWdnxCU03pYE,1709
@@ -572,12 +573,13 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ
572
573
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ.assets-tarball.ts,sha256=pSbNMWSorKT7lUTXxnzkxpcRumKPYWUmcbqRSwwWOgI,937
573
574
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ.nested-stacks-docker.ts,sha256=4hDobse34oIG2r0mjbYXzsEXXLEqv077jUh3pjoYmcc,981
574
575
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/CONTRIBUTING.md,sha256=TlNwpeYemLdYq4jdo24v7nwDIj3RmZ7u2j_LCQiQR74,2634
575
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md,sha256=lJxuN-zQ8D8SUZxH5sV9nNpiO4UfxGxLyaykgEwZLcY,73908
576
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md,sha256=d7VyFe8b29capdMf8zgAMHSkmdBxgYBpUdoDysRrKUM,76745
576
577
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.add-docker-label.ts,sha256=avHktilCBVPuVelquVaY2ylRkSLraWn7vUIIIFPsbyI,1375
577
578
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.add-environment-variable.ts,sha256=sIdwJl7LYh5wlv_EDLPSGCavC2OF6W8IBwZ_hMOnCfw,1143
578
579
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.app-mesh-proxy-config.ts,sha256=vWr45An7W7lgW9Ws_yPFhapf9DXyJP-D0fhTNg5fZC0,1717
579
580
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.availability-zone-rebalancing.ts,sha256=2rO7qkkCZx48az2nZ4hoQ4iSsWY2UJtPyaOgCOonlgE,1142
580
581
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.awslogs-driver.ts,sha256=js3ZnGoPKDVQl5NhZqF-acS5BTNeRkKWBjHUYVJkV0Q,1322
582
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.blue-green-deployment-strategy.ts,sha256=A-zek2dkUOB3yoEOr3rN9FRWYgaA7W-Ww0nPFHlARko,5802
581
583
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.bottlerocket.ts,sha256=pio8vLSNlFeokyocKepVUq1ZJXhhrC7iH2ZVJiJxatg,728
582
584
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.capacity-provider-managed-draining.ts,sha256=pfy9F4i_-hgJYzN48HTEx0KOKLmKuMFSqtaVZb_V7Z4,2028
583
585
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.capacity-provider.ts,sha256=k02McTBE0sFY8A2rxK6HSen6JjCVKpTD1Om9JBunfR0,1635
@@ -591,7 +593,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluste
591
593
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-enhanced-container-insights.ts,sha256=BwlUsWIKROE5ro1yA7Xk_gBMIrxf8I7bMTi2R5-VWlg,1060
592
594
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-grant-task-protection.ts,sha256=rLCMquXcPfZHUq49kg0xw8STRRB6NMtCMzeVMC16KPY,720
593
595
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-imported.ts,sha256=KgGgs_6tQ-ZVAaw4eQaQ7ptNPJ6fGw1Id_y82PS69DI,1409
594
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-windows-server-ami.ts,sha256=D6_4qaNDFog7L4QvARi2ojUd2MzdzSXp8WrQYjRsAxs,2090
596
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-windows-server-ami.ts,sha256=EHEpYjbYlP64BFY0E-JWU-W4tsy4xaiXUHSh_KoFIWo,2005
595
597
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster.amazonlinux2023-ami.ts,sha256=8CiIIkgoFL07j14crtZl89FT6sTpmllyciFQj7EPZXY,2732
596
598
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.container-port-range.ts,sha256=82Gw2g8iB_Uzm3pp7wvyI48FBfU0WTftb-_u3ti6lEE,1064
597
599
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.custom-task-revision.ts,sha256=DmaZEHR34V3UtxU7XW_uBV1Si9rdSoTLxLdpCe65MEg,1071
@@ -933,8 +935,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/in
933
935
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.modules.ts,sha256=etsjdg80JJb_gag1tC0I2DgOcARVOCrRZsQYr46sQv0,2323
934
936
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.nodejs.build.images.ts,sha256=ws9WjuRf3nTKpTnZXNRheCwkQTDjf_UV9KwinnOHzVw,1742
935
937
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.specifycode.ts,sha256=JdlBTKpPf5xlQlfTYlXUMbMVwGD0a-heEYPx0ZNFO9U,1938
936
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md,sha256=uIieCf8zGzvPapmWqYrRyzqhKKDLnrVbObTfrPDUBS8,19904
937
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.expose-metric-with-dimensions.ts,sha256=zqTcmUokT9JEUxcJkTKsAfxN9Nph-7Xwv7xACXZXyxg,1348
938
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md,sha256=FzQOveAjIxAfW0neEE2NrKSRNLTX5uYx4pYfAKycfWc,24319
938
939
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.expose-metric.ts,sha256=nHHNSRyq2eGVZkZe1_UWwdr7vWnBDqdMWoiArzJleHI,1256
939
940
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-group-metrics.ts,sha256=3t37idu5s4B6dxhZWD_7pNeue7eJCume6MdEgtc1TTs,707
940
941
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-group.ts,sha256=ffml_7GAfXAFSr_qqzrBZ08eG_ZhLS1T-8d-hdsxNf4,1312
@@ -942,13 +943,15 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-r
942
943
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-retention-retries.ts,sha256=b3uLWuEZZeOOkwno6y3yBFVT6AbcX9z1VITcyupKnfQ,1336
943
944
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-retention.ts,sha256=KPWCfAezyRQ9KZR88gbnsIb9TUrjjUYLDMDjFc54XvU,900
944
945
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-grantread.ts,sha256=3Gjcq80bm6qeqjTmq_rbVVYvbWDTLkGWFclh3_XLY2Q,491
946
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-transformer.ts,sha256=2DmUNPzqW5FOnYRckyW74XKJwbubhc2gdIT2YhUoi9E,1271
945
947
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroupclass.ts,sha256=ZiJznICcvepDPf97FzReAD5l9FTnWtL6RsNw1cQABgg,2001
946
948
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.metricfilter-dimensions.ts,sha256=XAqWm-eyYcmifgZnB4soQEYFBIAbPpkzvnm1Uzng828,913
947
949
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.metricfilter-unit.ts,sha256=1g5XU59COeVHj4kL8GuNGnse_Kx0gMHboew4RGR1zyM,983
948
950
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.metricfilter.lit.ts,sha256=fH_QY-X6Qs3nuNbhaiqM-4DbMm2G1AE8I-1a5QWO_OY,896
949
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.save-logs-insights-query-definition.ts,sha256=Kl3AfL3Dui8zFHEjYJJpF8FS1wZA2TqmdK9rHJD66AA,1930
951
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.save-logs-insights-query-definition.ts,sha256=Y7y_sR9ERLoSLna7rtMchbiUvpbfY4tkEL1cqHZN5_Q,2162
950
952
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.subscriptionfilter-distribution.ts,sha256=bJuViz_6LEdWKFmZd5_Bt_tz3ecJOoFcnZ-LX_GfFpE,1048
951
953
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.subscriptionfilter.ts,sha256=59XLDCR4RhlW15aBhK4wFoOycBPfAQSgEhk277kyUEQ,1164
954
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.transformer.ts,sha256=8XEyt5s-yyGwL152EB_1xapUG44MWoMPv_Wtm86iYF0,874
952
955
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs-destinations/README.md,sha256=jRol_s0IWY2iC6lcpvHSwMOfBGHEbnaZnRRqbx-CS6w,265
953
956
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs-destinations/integ.firehose.ts,sha256=Gdtm0GoW-RozF_9eEbScyjk_4CLi01Rrr6tLy_V8tcs,1576
954
957
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs-destinations/integ.kinesis.ts,sha256=o3rBgalluFInomW7D0U6Q-mBKSFR5oEnQXTlRm8ZxOE,1306
@@ -972,7 +975,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-opensearchservic
972
975
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-opensearchservice/integ.opensearch.unsignedbasicauth.ts,sha256=B13diAjHunM-L1w1FHgpDRup-j4Xnnb-rpn171bbjpw,925
973
976
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-opensearchservice/integ.opensearch.vpc.ts,sha256=92FvTQd0U190KN53A8UU4eV3ggwm1GeVn4f3nRE56T0,1400
974
977
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-opensearchservice/integ.opensearch.without-logs-resource-policy.ts,sha256=CTj7BjTXc_Q4J_NnK8C62vXGl3ZIWMbmcuPHjvW01vU,1971
975
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/README.md,sha256=-vQK73ysc3BQ_o6JCTH2TT0WaWu3kiDco8JZrBdC6UI,66074
978
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/README.md,sha256=sJzFSQFJ0CVBOGWIJ-BEFJzYBh3j866WSk9iJOwdrqw,66604
976
979
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/aurora-serverless-v2.md,sha256=D4_EKB6d62nNN0LwL3XGX0YFjwdSBXE8namaBUqU9qw,10484
977
980
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.cluster-applyimmediately.ts,sha256=UB7bdVX6UD63SYroZRXs5V493f1lUX_3lD5W7EeU5AQ,1135
978
981
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.cluster-availability-zone.ts,sha256=59DvW_-fFQ2NPddJdbayEu7V-NVBAPvm3A05IvbBOAA,1765
@@ -1006,6 +1009,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.cluste
1006
1009
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-applyimmediately.ts,sha256=l5SXf5yZ1gMOA-kFdY9f2TKRyGufmVJuWG2rEpuo1Ps,931
1007
1010
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-ca-certificate.ts,sha256=t0IwouXqbtdmyu6-hwMyai_uex_aenGKXAvg4-q8x9k,864
1008
1011
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-create-grant.ts,sha256=Y25LqPowUqSoYx2Xuw21Flegu15xUlwR_cKj2ewcsKg,1114
1012
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-database-insights.ts,sha256=ZfjIh_Sy60Ldo2rHLOR8ju4F9uwQ4KEsGstXD85lHx8,1539
1009
1013
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-dual.ts,sha256=kf6SnT5IHl16CVXPwCDE1gGbfyh79qYMT3YbGTXLKM0,1998
1010
1014
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-engine-lifecycle-support.ts,sha256=phHmFqX3O6cRhApY4ezncv0SfWgWLOSXpgaVTAx81ac,1876
1011
1015
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-from-cluster-snapshot.ts,sha256=huTf_WsbZ1UaLkLEGzUYIvgE-n8yHr9sFtqpToJMVY4,958
@@ -1109,7 +1113,6 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/in
1109
1113
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-deployed-bucket.ts,sha256=Ungrlfwdl5cSb7fd-lTqZoekkXL3M0KGMY6dvD4Kv_A,1383
1110
1114
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-large-file.ts,sha256=x5QZTMytSGxd2s65AWI3PVNN9fMWkEDEH91NGR_HXWs,8835
1111
1115
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-loggroup.ts,sha256=yGteHgbEF-EudhxLc0O5stH7rCQN-KKLKXSNybWIBZU,1412
1112
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-signcontent.d.ts,sha256=jmCbtxwguFjHfw6fkLsTGduEd7E_n5ZfGh4YUkv1CIE,11
1113
1116
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-signcontent.ts,sha256=hzIOMnjVDh04OHQc37Gm82-w6bajVJ6jlOjIhCl3s3Q,2210
1114
1117
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-substitution-with-destination-key.ts,sha256=G4YZ01yfYqsKgf7xxQn0FrbMHmoMoGE4enPyoBPGT7U,2173
1115
1118
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-substitution-with-role.ts,sha256=NgSrDsca6p7o4H9WKIclL9tqQ34N23rYDtYA-v9eDQ0,947
@@ -1319,7 +1322,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cloudformation-inclu
1319
1322
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cloudformation-include/integ.intrinsic-deletion-policy.ts,sha256=429Cz_kNp9aRs2TzK3nKyPLqKDF1UqD4PdkMmMEFL40,402
1320
1323
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cloudformation-include/integ.nested-stacks.ts,sha256=wA07P5nJM0CfW90QE14JvE_RYSkDqH-wthivd69nsPE,427
1321
1324
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cloudformation-include/integ.resource-tags-wtih-intrinsics.ts,sha256=48jFRaICLD-sTyaGEtcJ2fxc9qh5CZxtITonnBC_b6U,408
1322
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/README.md,sha256=ck8kk0ZbPW5399A8hstboiBPeF3efjqLDuePuQBk7LM,71745
1325
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/README.md,sha256=IBivHrPr6iBrM304zecNLL-3ODOqMjIKVVHWij1G4nk,72547
1323
1326
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/acknowledge-warnings.md,sha256=KjQ8of5npUmUUhQh0xGCyaKQElM5GB0njxdPC0AXg_8,5616
1324
1327
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/cross-region-stack-references.md,sha256=1bKMe3s3fIvHiUFtTYeNvpwFS5CLKD8p9BAUFJipwfY,10552
1325
1328
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/integ.cfn-mappings-find-in-map.ts,sha256=JcoWpn92_hMrdLyE5LNDrgPu2jn4Y4ScgPsQXXUKlUQ,1725
@@ -1330,7 +1333,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/integ.prop-inje
1330
1333
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/integ.removal-policies.ts,sha256=b6ePZkMn5IyTizPV2VnxSR2X8RP2Obh8i7P1b7-S68o,1541
1331
1334
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/integ.stack.ts,sha256=xf24TLT1li9lQtn7LMTd0hPfiWPpBym8OMYD4cTiw-o,666
1332
1335
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/integ.token-aware-stringify-logical-ids.ts,sha256=Nb1IrrTzMyuhwAmcZyHLVmLjpC0qM2JrTnw392f3C64,1122
1333
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/README.md,sha256=kactkdh4EZ-Nt3VVHZXTBij6ZgUDmDeQhnS1AaSoYpE,44923
1336
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/README.md,sha256=yd8jCCwHI7up_t7g1E0x1FazXxjI6bmKpdUeXEYocHM,45244
1334
1337
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.aws-custom-resource-assumeRole.ts,sha256=McBeN37e6mNkmcHPb5kgdsTRPMY9pxzH8SwHmdDaRHA,1436
1335
1338
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.aws-custom-resource-athena.ts,sha256=sv7NmgJ-7rzxZIqVJdQXdAiuFLaa3Te_c3z-VwJ_lQo,5120
1336
1339
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.aws-custom-resource-cloudwatch.ts,sha256=vunS7eZnfupDnwKACQVccX1WxhwoATaNOxYdG20lWgc,1393
@@ -1384,8 +1387,8 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.pipe
1384
1387
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/region-info/README.md,sha256=vewWkV3ds9o9iyyYaJBNTkaKJ2XA6K2yF17tAxUnujg,2718
1385
1388
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/README.md,sha256=hYIx7DbG_7p4LYLUfxDwgIQjw9UNdz1GLrqDe8_Dbko,4132
1386
1389
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/integ.triggers.ts,sha256=4OHplMoBOgHGkktAzoU-TuNmJQS5wGAUvBfj5bGSe_Y,2807
1387
- konokenj_cdk_api_mcp_server-0.34.0.dist-info/METADATA,sha256=VP3rNcB6rucxM-2YJNZBYtizeEUpbq0Gt2HIWkgvsr0,2646
1388
- konokenj_cdk_api_mcp_server-0.34.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1389
- konokenj_cdk_api_mcp_server-0.34.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1390
- konokenj_cdk_api_mcp_server-0.34.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1391
- konokenj_cdk_api_mcp_server-0.34.0.dist-info/RECORD,,
1390
+ konokenj_cdk_api_mcp_server-0.36.0.dist-info/METADATA,sha256=3qtMC0GoiTTdqmNuDlEtvjFIJ-qHpclojI5AAlpULtI,2646
1391
+ konokenj_cdk_api_mcp_server-0.36.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1392
+ konokenj_cdk_api_mcp_server-0.36.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1393
+ konokenj_cdk_api_mcp_server-0.36.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1394
+ konokenj_cdk_api_mcp_server-0.36.0.dist-info/RECORD,,
@@ -1,47 +0,0 @@
1
- import { App, Stack, StackProps } from 'aws-cdk-lib';
2
- import { FilterPattern, LogGroup, MetricFilter } from 'aws-cdk-lib/aws-logs';
3
- import { Dashboard, GraphWidget } from 'aws-cdk-lib/aws-cloudwatch';
4
- import { IntegTest } from '@aws-cdk/integ-tests-alpha';
5
-
6
- class ExposeMetricWithDimensions extends Stack {
7
- constructor(scope: App, id: string, props?: StackProps) {
8
- super(scope, id, props);
9
-
10
- const logGroup = new LogGroup(this, 'LogGroup');
11
-
12
- // Create a metric filter with dimensions
13
- const mf = new MetricFilter(this, 'MetricFilter', {
14
- logGroup,
15
- metricName: 'testName',
16
- metricNamespace: 'testNamespace',
17
- filterPattern: FilterPattern.exists('$.latency'),
18
- metricValue: '$.latency',
19
- dimensions: {
20
- Foo: 'Bar',
21
- Bar: 'Baz',
22
- },
23
- });
24
-
25
- // Expose the metric with dimensions
26
- const metric = mf.metric();
27
-
28
- new Dashboard(this, 'Dashboard', {
29
- dashboardName: 'ExposeMetricWithDimensionsDashboard',
30
- widgets: [[
31
- new GraphWidget({
32
- title: 'Latency with Dimensions',
33
- left: [metric],
34
- }),
35
- ]],
36
- });
37
- }
38
- }
39
-
40
- const app = new App();
41
- const stack = new ExposeMetricWithDimensions(app, 'aws-cdk-expose-metric-with-dimensions-integ');
42
-
43
- new IntegTest(stack, 'ExposeMetricWithDimensionsTest', {
44
- testCases: [stack],
45
- });
46
-
47
- app.synth();