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.
- cdk_api_mcp_server/__about__.py +1 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md +201 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling/integ.asg-lt.ts +7 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/README.md +19 -11
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch/integ.search-expression.ts +51 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md +87 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.blue-green-deployment-strategy.ts +205 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-windows-server-ami.ts +5 -6
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md +65 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-transformer.ts +37 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.save-logs-insights-query-definition.ts +7 -2
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.transformer.ts +27 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/README.md +14 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.instance-database-insights.ts +43 -0
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/core/README.md +24 -1
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/README.md +3 -0
- {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/METADATA +2 -2
- {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/RECORD +21 -18
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.expose-metric-with-dimensions.ts +0 -47
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3-deployment/integ.bucket-deployment-signcontent.d.ts +0 -1
- {konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/WHEEL +0 -0
- {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
- {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
cdk_api_mcp_server/__about__.py
CHANGED
|
@@ -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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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.
|
|
155
|
-
expression: "SEARCH('{AWS/EC2,InstanceId} MetricName=\"CPUUtilization\"', 'Average',
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
##
|
|
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.
|
|
36
|
-
machineImage: ecs.EcsOptimizedImage.windows(ecs.WindowsOptimizedVersion.
|
|
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('
|
|
50
|
-
image: ecs.ContainerImage.fromRegistry('
|
|
51
|
-
memoryLimitMiB:
|
|
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
|
cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-transformer.ts
ADDED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
[](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.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.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=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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
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.
|
|
1388
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1389
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1390
|
-
konokenj_cdk_api_mcp_server-0.
|
|
1391
|
-
konokenj_cdk_api_mcp_server-0.
|
|
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();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
{konokenj_cdk_api_mcp_server-0.34.0.dist-info → konokenj_cdk_api_mcp_server-0.36.0.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|