From 5eca5fe05cf9545c456d76450e8071d3dfc5e382 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Tue, 28 Jan 2025 17:20:49 -0500 Subject: [PATCH 1/7] chore(toolkit): introduce cloudwatchlogsmonitor to deploy and watch --- .../toolkit/lib/actions/deploy/index.ts | 10 +++++- packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts | 2 ++ .../@aws-cdk/toolkit/lib/toolkit/toolkit.ts | 34 +++++++++---------- .../toolkit/test/actions/deploy.test.ts | 17 ++++++++++ 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts index 03c3291b8cc8a..957ca6535cf4d 100644 --- a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts +++ b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts @@ -1,4 +1,4 @@ -import { StackActivityProgress } from '../../api/aws-cdk'; +import { CloudWatchLogEventMonitor, StackActivityProgress } from '../../api/aws-cdk'; import type { StackSelector } from '../../api/cloud-assembly'; export type DeploymentMethod = DirectDeploymentMethod | ChangeSetDeploymentMethod; @@ -260,4 +260,12 @@ export interface DeployOptions extends BaseDeployOptions { * @deprecated Implement in IoHost instead */ readonly progress?: StackActivityProgress; + + /** + * Allows adding CloudWatch log groups to the log monitor via + * cloudWatchLogMonitor.setLogGroups(); + * + * @default - not monitoring CloudWatch logs + */ + readonly cloudWatchLogMonitor?: CloudWatchLogEventMonitor; } diff --git a/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts b/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts index ffe6951f8bd3e..8fbe595712688 100644 --- a/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts +++ b/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts @@ -28,6 +28,8 @@ export { WorkGraph } from '../../../../aws-cdk/lib/util/work-graph'; export type { Concurrency } from '../../../../aws-cdk/lib/util/work-graph'; export { WorkGraphBuilder } from '../../../../aws-cdk/lib/util/work-graph-builder'; export type { AssetBuildNode, AssetPublishNode, StackNode } from '../../../../aws-cdk/lib/util/work-graph-types'; +export { CloudWatchLogEventMonitor } from '../../../../aws-cdk/lib/api/logs/logs-monitor'; +export { findCloudWatchLogGroups } from '../../../../aws-cdk/lib/api/logs/find-cloudwatch-logs'; // @todo Cloud Assembly and Executable - this is a messy API right now export { CloudAssembly, sanitizePatterns, StackCollection, ExtendedStackSelection } from '../../../../aws-cdk/lib/api/cxapp/cloud-assembly'; diff --git a/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts b/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts index 0ff40672df826..9bf2cfa55d2d5 100644 --- a/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts +++ b/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts @@ -14,7 +14,7 @@ import { RollbackOptions } from '../actions/rollback'; import { SynthOptions } from '../actions/synth'; import { patternsArrayForWatch, WatchOptions } from '../actions/watch'; import { SdkOptions } from '../api/aws-auth'; -import { DEFAULT_TOOLKIT_STACK_NAME, SdkProvider, SuccessfulDeployStackResult, StackCollection, Deployments, HotswapMode, StackActivityProgress, ResourceMigrator, obscureTemplate, serializeStructure, tagsForStack, CliIoHost, validateSnsTopicArn, Concurrency, WorkGraphBuilder, AssetBuildNode, AssetPublishNode, StackNode, formatErrorMessage } from '../api/aws-cdk'; +import { DEFAULT_TOOLKIT_STACK_NAME, SdkProvider, SuccessfulDeployStackResult, StackCollection, Deployments, HotswapMode, StackActivityProgress, ResourceMigrator, obscureTemplate, serializeStructure, tagsForStack, CliIoHost, validateSnsTopicArn, Concurrency, WorkGraphBuilder, AssetBuildNode, AssetPublishNode, StackNode, formatErrorMessage, CloudWatchLogEventMonitor, findCloudWatchLogGroups } from '../api/aws-cdk'; import { CachedCloudAssemblySource, IdentityCloudAssemblySource, StackAssembly, ICloudAssemblySource, StackSelectionStrategy } from '../api/cloud-assembly'; import { ALL_STACKS, CloudAssemblySourceBuilder } from '../api/cloud-assembly/private'; import { ToolkitError } from '../api/errors'; @@ -455,15 +455,15 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab [`❌ ${chalk.bold(stack.stackName)} failed:`, ...(e.name ? [`${e.name}:`] : []), e.message].join(' '), ); } finally { - // @todo - // if (options.cloudWatchLogMonitor) { - // const foundLogGroupsResult = await findCloudWatchLogGroups(await this.sdkProvider('deploy'), stack); - // options.cloudWatchLogMonitor.addLogGroups( - // foundLogGroupsResult.env, - // foundLogGroupsResult.sdk, - // foundLogGroupsResult.logGroupNames, - // ); - // } + if (options.cloudWatchLogMonitor) { + const foundLogGroupsResult = await findCloudWatchLogGroups(await this.sdkProvider('deploy'), stack); + options.cloudWatchLogMonitor.addLogGroups( + foundLogGroupsResult.env, + foundLogGroupsResult.sdk, + foundLogGroupsResult.logGroupNames, + ); + await ioHost.notify(info(`The following log groups are added: ${foundLogGroupsResult.logGroupNames}`, 'CDK_TOOLKIT_I3001')); + } // If an outputs file has been specified, create the file path and write stack outputs to it once. // Outputs are written after all stacks have been deployed. If a stack deployment fails, @@ -567,13 +567,12 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab // -------------- -------- 'cdk deploy' done -------------- 'cdk deploy' done -------------- let latch: 'pre-ready' | 'open' | 'deploying' | 'queued' = 'pre-ready'; - // @todo - // const cloudWatchLogMonitor = options.traceLogs ? new CloudWatchLogEventMonitor() : undefined; + const cloudWatchLogMonitor = options.traceLogs ? new CloudWatchLogEventMonitor() : undefined; const deployAndWatch = async () => { latch = 'deploying'; - // cloudWatchLogMonitor?.deactivate(); + cloudWatchLogMonitor?.deactivate(); - await this.invokeDeployFromWatch(assembly, options); + await this.invokeDeployFromWatch(assembly, options, cloudWatchLogMonitor); // If latch is still 'deploying' after the 'await', that's fine, // but if it's 'queued', that means we need to deploy again @@ -582,10 +581,10 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab // and thinks the above 'while' condition is always 'false' without the cast latch = 'deploying'; await ioHost.notify(info("Detected file changes during deployment. Invoking 'cdk deploy' again")); - await this.invokeDeployFromWatch(assembly, options); + await this.invokeDeployFromWatch(assembly, options, cloudWatchLogMonitor); } latch = 'open'; - // cloudWatchLogMonitor?.activate(); + cloudWatchLogMonitor?.activate(); }; chokidar @@ -768,11 +767,12 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab private async invokeDeployFromWatch( assembly: StackAssembly, options: WatchOptions, + cloudWatchLogMonitor?: CloudWatchLogEventMonitor, ): Promise { const deployOptions: ExtendedDeployOptions = { ...options, requireApproval: RequireApproval.NEVER, - // cloudWatchLogMonitor, + cloudWatchLogMonitor, hotswap: options.hotswap, extraUserAgent: `cdk-watch/hotswap-${options.hotswap !== HotswapMode.FALL_BACK ? 'on' : 'off'}`, concurrency: options.concurrency, diff --git a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts index 63954124fb616..680b7976c21a8 100644 --- a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts +++ b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts @@ -1,4 +1,5 @@ import { RequireApproval, StackParameters } from '../../lib'; +import { CloudWatchLogEventMonitor } from '../../lib/api/aws-cdk'; import { Toolkit } from '../../lib/toolkit'; import { builderFixture, TestIoHost } from '../_helpers'; @@ -127,6 +128,22 @@ describe('deploy', () => { successfulDeployment(); }); + test('cloudWatchLogMonitor can be passed in', async () => { + // WHEN + const cx = await builderFixture(toolkit, 'stack-with-role'); + await toolkit.deploy(cx, { + cloudWatchLogMonitor: new CloudWatchLogEventMonitor(), + }); + + // THEN + expect(ioHost.notifySpy).toHaveBeenCalledWith(expect.objectContaining({ + action: 'deploy', + level: 'info', + code: 'CDK_TOOLKIT_I3001', + message: expect.stringContaining('The following log groups are added'), + })); + }); + test('non sns notification arn results in error', async () => { // WHEN const arn = 'arn:aws:sqs:us-east-1:1111111111:resource'; From dd914b06e17d9f57a9cc10ca68f54e5d741664c9 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Wed, 29 Jan 2025 17:55:18 -0500 Subject: [PATCH 2/7] tests --- packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts | 3 +++ .../toolkit/lib/api/io/private/codes.ts | 1 + .../toolkit/test/actions/deploy.test.ts | 13 ++++++++++-- .../toolkit/test/actions/watch.test.ts | 21 ++++++++++++++++++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts b/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts index 8fbe595712688..e3555b2a0ed09 100644 --- a/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts +++ b/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts @@ -31,6 +31,9 @@ export type { AssetBuildNode, AssetPublishNode, StackNode } from '../../../../aw export { CloudWatchLogEventMonitor } from '../../../../aws-cdk/lib/api/logs/logs-monitor'; export { findCloudWatchLogGroups } from '../../../../aws-cdk/lib/api/logs/find-cloudwatch-logs'; +// Test APIs +export { MockSdk } from '../../../../aws-cdk/test/util/mock-sdk'; + // @todo Cloud Assembly and Executable - this is a messy API right now export { CloudAssembly, sanitizePatterns, StackCollection, ExtendedStackSelection } from '../../../../aws-cdk/lib/api/cxapp/cloud-assembly'; export { prepareDefaultEnvironment, prepareContext, spaceAvailableForContext } from '../../../../aws-cdk/lib/api/cxapp/exec'; diff --git a/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts b/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts index 41988d0764f59..51e7abcfc2ada 100644 --- a/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts +++ b/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts @@ -18,6 +18,7 @@ export const CODES = { // Toolkit Info codes CDK_TOOLKIT_I0001: 'Display stack data', CDK_TOOLKIT_I0002: 'Successfully deployed stacks', + CDK_TOOLKIT_I3001: 'Log groups added', CDK_TOOLKIT_I5001: 'Display synthesis times', CDK_TOOLKIT_I5050: 'Confirm rollback', CDK_TOOLKIT_I5060: 'Confirm deploy security sensitive changes', diff --git a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts index 680b7976c21a8..bfcc97b262a92 100644 --- a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts +++ b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts @@ -1,8 +1,11 @@ +let mockFindCloudWatchLogGroups = jest.fn(); + import { RequireApproval, StackParameters } from '../../lib'; -import { CloudWatchLogEventMonitor } from '../../lib/api/aws-cdk'; +import { CloudWatchLogEventMonitor, MockSdk } from '../../lib/api/aws-cdk'; import { Toolkit } from '../../lib/toolkit'; import { builderFixture, TestIoHost } from '../_helpers'; +const sdk = new MockSdk(); const ioHost = new TestIoHost(); const toolkit = new Toolkit({ ioHost }); const rollbackSpy = jest.spyOn(toolkit as any, '_rollback').mockResolvedValue({}); @@ -23,6 +26,7 @@ jest.mock('../../lib/api/aws-cdk', () => { isSingleAssetPublished: jest.fn().mockResolvedValue(true), readCurrentTemplate: jest.fn().mockResolvedValue({ Resources: {} }), })), + findCloudWatchLogGroups: mockFindCloudWatchLogGroups, }; }); @@ -30,6 +34,11 @@ beforeEach(() => { ioHost.notifySpy.mockClear(); ioHost.requestSpy.mockClear(); jest.clearAllMocks(); + mockFindCloudWatchLogGroups.mockReturnValue({ + env: { name: 'Z', account: 'X', region: 'Y' }, + sdk, + logGroupNames: ['/aws/lambda/lambda-function-name'], + }); }); describe('deploy', () => { @@ -140,7 +149,7 @@ describe('deploy', () => { action: 'deploy', level: 'info', code: 'CDK_TOOLKIT_I3001', - message: expect.stringContaining('The following log groups are added'), + message: expect.stringContaining('The following log groups are added: /aws/lambda/lambda-function-name'), })); }); diff --git a/packages/@aws-cdk/toolkit/test/actions/watch.test.ts b/packages/@aws-cdk/toolkit/test/actions/watch.test.ts index cc42181bd8da5..5e77658442602 100644 --- a/packages/@aws-cdk/toolkit/test/actions/watch.test.ts +++ b/packages/@aws-cdk/toolkit/test/actions/watch.test.ts @@ -128,9 +128,27 @@ describe('watch', () => { })); }); + test('can specify cloudwatch log monitor', async () => { + // GIVEN + const cx = await builderFixture(toolkit, 'stack-with-role'); + ioHost.level = 'debug'; + await toolkit.watch(cx, { + include: [], + traceLogs: true, + }); + + // WHEN + await fakeChokidarWatcherOn.readyCallback(); + + // THEN + expect(deploySpy).toHaveBeenCalledWith(expect.anything(), 'watch', expect.objectContaining({ + cloudWatchLogMonitor: expect.anything(), // Not undefined + })); + }); + describe.each([HotswapMode.FALL_BACK, HotswapMode.HOTSWAP_ONLY])('%p mode', (hotswapMode) => { test('passes through the correct hotswap mode to deployStack()', async () => { - // WHEN + // GIVEN const cx = await builderFixture(toolkit, 'stack-with-role'); ioHost.level = 'warn'; await toolkit.watch(cx, { @@ -138,6 +156,7 @@ describe('watch', () => { hotswap: hotswapMode, }); + // WHEN await fakeChokidarWatcherOn.readyCallback(); // THEN From 96034fb621804f8a04835547376b5b3ee5bc5e95 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Thu, 30 Jan 2025 12:45:21 -0500 Subject: [PATCH 3/7] pr feedback --- .../toolkit/lib/actions/deploy/index.ts | 32 +++++++++---------- .../toolkit/lib/actions/watch/index.ts | 8 ----- .../@aws-cdk/toolkit/lib/toolkit/toolkit.ts | 6 ++-- .../toolkit/test/actions/deploy.test.ts | 6 ++-- 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts index 957ca6535cf4d..0ef4e166564e1 100644 --- a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts +++ b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts @@ -173,6 +173,14 @@ export interface BaseDeployOptions { * @default 1 */ readonly concurrency?: number; + + /** + * Whether to show logs from all CloudWatch log groups in the template + * locally in the users terminal + * + * @default - false + */ + readonly traceLogs?: boolean; } /** @@ -189,6 +197,14 @@ export interface ExtendedDeployOptions extends DeployOptions { * @default - nothing extra is appended to the User-Agent header */ readonly extraUserAgent?: string; + + /** + * Allows adding CloudWatch log groups to the log monitor via + * cloudWatchLogMonitor.setLogGroups(); + * + * @default - not monitoring CloudWatch logs + */ + readonly cloudWatchLogMonitor?: CloudWatchLogEventMonitor; } export interface DeployOptions extends BaseDeployOptions { @@ -221,14 +237,6 @@ export interface DeployOptions extends BaseDeployOptions { */ readonly outputsFile?: string; - /** - * Whether to show logs from all CloudWatch log groups in the template - * locally in the users terminal - * - * @default - false - */ - readonly traceLogs?: boolean; - /** * Build/publish assets for a single stack in parallel * @@ -260,12 +268,4 @@ export interface DeployOptions extends BaseDeployOptions { * @deprecated Implement in IoHost instead */ readonly progress?: StackActivityProgress; - - /** - * Allows adding CloudWatch log groups to the log monitor via - * cloudWatchLogMonitor.setLogGroups(); - * - * @default - not monitoring CloudWatch logs - */ - readonly cloudWatchLogMonitor?: CloudWatchLogEventMonitor; } diff --git a/packages/@aws-cdk/toolkit/lib/actions/watch/index.ts b/packages/@aws-cdk/toolkit/lib/actions/watch/index.ts index 046fd3d63b3e6..1bb261d8a555a 100644 --- a/packages/@aws-cdk/toolkit/lib/actions/watch/index.ts +++ b/packages/@aws-cdk/toolkit/lib/actions/watch/index.ts @@ -1,14 +1,6 @@ import type { BaseDeployOptions } from '../deploy'; export interface WatchOptions extends BaseDeployOptions { - /** - * Whether to show CloudWatch logs for hotswapped resources - * locally in the users terminal - * - * @default - false - */ - readonly traceLogs?: boolean; - /** * The extra string to append to the User-Agent header when performing AWS SDK calls. * diff --git a/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts b/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts index 9bf2cfa55d2d5..a0262d5cc3d38 100644 --- a/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts +++ b/packages/@aws-cdk/toolkit/lib/toolkit/toolkit.ts @@ -455,9 +455,11 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab [`❌ ${chalk.bold(stack.stackName)} failed:`, ...(e.name ? [`${e.name}:`] : []), e.message].join(' '), ); } finally { - if (options.cloudWatchLogMonitor) { + if (options.traceLogs) { + // deploy calls that originate from watch will come with their own cloudWatchLogMonitor + const cloudWatchLogMonitor = options.cloudWatchLogMonitor ?? new CloudWatchLogEventMonitor(); const foundLogGroupsResult = await findCloudWatchLogGroups(await this.sdkProvider('deploy'), stack); - options.cloudWatchLogMonitor.addLogGroups( + cloudWatchLogMonitor.addLogGroups( foundLogGroupsResult.env, foundLogGroupsResult.sdk, foundLogGroupsResult.logGroupNames, diff --git a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts index bfcc97b262a92..579d87643fdd8 100644 --- a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts +++ b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts @@ -1,7 +1,7 @@ let mockFindCloudWatchLogGroups = jest.fn(); import { RequireApproval, StackParameters } from '../../lib'; -import { CloudWatchLogEventMonitor, MockSdk } from '../../lib/api/aws-cdk'; +import { MockSdk } from '../../lib/api/aws-cdk'; import { Toolkit } from '../../lib/toolkit'; import { builderFixture, TestIoHost } from '../_helpers'; @@ -137,11 +137,11 @@ describe('deploy', () => { successfulDeployment(); }); - test('cloudWatchLogMonitor can be passed in', async () => { + test('can trace logs', async () => { // WHEN const cx = await builderFixture(toolkit, 'stack-with-role'); await toolkit.deploy(cx, { - cloudWatchLogMonitor: new CloudWatchLogEventMonitor(), + traceLogs: true, }); // THEN From 3614245e398e947e0ea038a6c8ef58134dee703e Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Thu, 30 Jan 2025 12:48:45 -0500 Subject: [PATCH 4/7] name --- packages/@aws-cdk/toolkit/test/actions/watch.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/toolkit/test/actions/watch.test.ts b/packages/@aws-cdk/toolkit/test/actions/watch.test.ts index 5e77658442602..73667cb62c2b5 100644 --- a/packages/@aws-cdk/toolkit/test/actions/watch.test.ts +++ b/packages/@aws-cdk/toolkit/test/actions/watch.test.ts @@ -128,7 +128,7 @@ describe('watch', () => { })); }); - test('can specify cloudwatch log monitor', async () => { + test('can trace logs', async () => { // GIVEN const cx = await builderFixture(toolkit, 'stack-with-role'); ioHost.level = 'debug'; From 1fa22e64727a2e8da9cdf21aa9430b968d22c409 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Thu, 30 Jan 2025 13:19:57 -0500 Subject: [PATCH 5/7] fix merge --- packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts | 2 +- .../@aws-cdk/toolkit/lib/actions/deploy/private/index.ts | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts index 321b4a788d958..e0319bdce86fe 100644 --- a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts +++ b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts @@ -1,4 +1,4 @@ -import { CloudWatchLogEventMonitor, StackActivityProgress } from '../../api/aws-cdk'; +import { StackActivityProgress } from '../../api/aws-cdk'; import type { StackSelector } from '../../api/cloud-assembly'; export type DeploymentMethod = DirectDeploymentMethod | ChangeSetDeploymentMethod; diff --git a/packages/@aws-cdk/toolkit/lib/actions/deploy/private/index.ts b/packages/@aws-cdk/toolkit/lib/actions/deploy/private/index.ts index d317679de2982..231b0dd93c890 100644 --- a/packages/@aws-cdk/toolkit/lib/actions/deploy/private/index.ts +++ b/packages/@aws-cdk/toolkit/lib/actions/deploy/private/index.ts @@ -1,4 +1,5 @@ import { DeployOptions } from '..'; +import { CloudWatchLogEventMonitor } from '../../../api/aws-cdk'; export * from './helpers'; @@ -14,4 +15,12 @@ export interface ExtendedDeployOptions extends DeployOptions { * @default - nothing extra is appended to the User-Agent header */ readonly extraUserAgent?: string; + + /** + * Allows adding CloudWatch log groups to the log monitor via + * cloudWatchLogMonitor.setLogGroups(); + * + * @default - not monitoring CloudWatch logs + */ + readonly cloudWatchLogMonitor?: CloudWatchLogEventMonitor; } From a024fd3c139637153a93ab55e9b55cbb27c1bc6d Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:27:05 -0500 Subject: [PATCH 6/7] Update packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts Co-authored-by: Momo Kornher --- packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts b/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts index 51e7abcfc2ada..0f249b505a317 100644 --- a/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts +++ b/packages/@aws-cdk/toolkit/lib/api/io/private/codes.ts @@ -18,7 +18,7 @@ export const CODES = { // Toolkit Info codes CDK_TOOLKIT_I0001: 'Display stack data', CDK_TOOLKIT_I0002: 'Successfully deployed stacks', - CDK_TOOLKIT_I3001: 'Log groups added', + CDK_TOOLKIT_I3001: 'Informs about any log groups that are traced as part of the deployment', CDK_TOOLKIT_I5001: 'Display synthesis times', CDK_TOOLKIT_I5050: 'Confirm rollback', CDK_TOOLKIT_I5060: 'Confirm deploy security sensitive changes', From 4941dc6bd7228cc456bd1eadf082116885df3091 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Thu, 30 Jan 2025 14:48:05 -0500 Subject: [PATCH 7/7] move mocksdk to test side --- packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts | 4 ++-- packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts | 3 --- packages/@aws-cdk/toolkit/test/actions/deploy.test.ts | 2 +- packages/@aws-cdk/toolkit/test/util/aws-cdk.ts | 3 +++ 4 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 packages/@aws-cdk/toolkit/test/util/aws-cdk.ts diff --git a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts index e0319bdce86fe..9ab8d88ad051b 100644 --- a/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts +++ b/packages/@aws-cdk/toolkit/lib/actions/deploy/index.ts @@ -175,8 +175,8 @@ export interface BaseDeployOptions { readonly concurrency?: number; /** - * Whether to show logs from all CloudWatch log groups in the template - * locally in the users terminal + * Whether to send logs from all CloudWatch log groups in the template + * to the IoHost * * @default - false */ diff --git a/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts b/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts index e3555b2a0ed09..8fbe595712688 100644 --- a/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts +++ b/packages/@aws-cdk/toolkit/lib/api/aws-cdk.ts @@ -31,9 +31,6 @@ export type { AssetBuildNode, AssetPublishNode, StackNode } from '../../../../aw export { CloudWatchLogEventMonitor } from '../../../../aws-cdk/lib/api/logs/logs-monitor'; export { findCloudWatchLogGroups } from '../../../../aws-cdk/lib/api/logs/find-cloudwatch-logs'; -// Test APIs -export { MockSdk } from '../../../../aws-cdk/test/util/mock-sdk'; - // @todo Cloud Assembly and Executable - this is a messy API right now export { CloudAssembly, sanitizePatterns, StackCollection, ExtendedStackSelection } from '../../../../aws-cdk/lib/api/cxapp/cloud-assembly'; export { prepareDefaultEnvironment, prepareContext, spaceAvailableForContext } from '../../../../aws-cdk/lib/api/cxapp/exec'; diff --git a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts index 579d87643fdd8..ac508e14c5a19 100644 --- a/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts +++ b/packages/@aws-cdk/toolkit/test/actions/deploy.test.ts @@ -1,9 +1,9 @@ let mockFindCloudWatchLogGroups = jest.fn(); import { RequireApproval, StackParameters } from '../../lib'; -import { MockSdk } from '../../lib/api/aws-cdk'; import { Toolkit } from '../../lib/toolkit'; import { builderFixture, TestIoHost } from '../_helpers'; +import { MockSdk } from '../util/aws-cdk'; const sdk = new MockSdk(); const ioHost = new TestIoHost(); diff --git a/packages/@aws-cdk/toolkit/test/util/aws-cdk.ts b/packages/@aws-cdk/toolkit/test/util/aws-cdk.ts new file mode 100644 index 0000000000000..fa54a188f1b39 --- /dev/null +++ b/packages/@aws-cdk/toolkit/test/util/aws-cdk.ts @@ -0,0 +1,3 @@ +/* eslint-disable import/no-restricted-paths */ + +export { MockSdk } from '../../../../aws-cdk/test/util/mock-sdk';