From b60e6efe54983c2ad0b8cdf3c50da84021aef8f6 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Thu, 24 Aug 2023 14:07:43 +0100 Subject: [PATCH] fix(logs): LogRetention resources fail with rate exceeded errors (#26858) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The LogRetention Custom Resource used to be able to handle server-side throttling, when a lot of requests to the CloudWatch Logs service are made at the same time. Handling of this error case got lost during the migration to SDK v3. If we have (read: a lot) `LogRetention` Custom Resources in a _single_ Stack, CloudFormation apparently applies some internal breaks to the amount of parallelism. For example it appears that resources are batched in smaller groups that need to be completed before the next group is provisioned. And within the groups there appears to be a ever so slight delay between individual resources. Together this is enough to avoid rate limiting in most circumstances. **Therefore, in practice this issues only occurs when multiple stacks are deployed in parallel.** To test this scenario, I have added support for `integ-runner` to deploy all stacks of a test case concurrently. Support for arbitrary command args already existed, but needed to explicitly include the `concurrency` option. I then create an integration test that deploys 3 stacks à 25 LogRetention resources. This triggers the error cases described in #26837. The fix itself is twofold: - Pass the `maxRetries` prop value to the SDK client to increase the number of attempts of the SDK internal throttling handling. But also enforce a minimum for these retries since they might catch additional retryable failures that our custom outer loop does not account for. - Explicitly catch `ThrottlingException` errors in the outer retry loop. Closes #26837 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- ...efaultTestDeployAssert6D1A1A1C.assets.json | 19 + ...aultTestDeployAssert6D1A1A1C.template.json | 36 + .../index.d.ts | 14 + .../index.js | 192 + .../index.ts | 229 ++ ...k-log-retention-integ-retries0.assets.json | 32 + ...log-retention-integ-retries0.template.json | 972 +++++ ...k-log-retention-integ-retries1.assets.json | 32 + ...log-retention-integ-retries1.template.json | 972 +++++ ...k-log-retention-integ-retries2.assets.json | 32 + ...log-retention-integ-retries2.template.json | 972 +++++ .../cdk.out | 1 + .../integ.json | 21 + .../manifest.json | 2728 +++++++++++++ .../tree.json | 3450 +++++++++++++++++ .../test/integ.log-retention-retries.ts | 40 + .../cdk-cli-wrapper/lib/cdk-wrapper.ts | 1 + .../cdk-cli-wrapper/lib/commands/deploy.ts | 7 + .../lib/log-retention-provider/index.ts | 12 +- .../lib/integ-tests/commands/deploy.ts | 7 + .../schema/cloud-assembly.version.json | 2 +- .../schema/integ.schema.json | 4 + 22 files changed, 9771 insertions(+), 4 deletions(-) create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.d.ts create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.ts create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/cdk.out create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/integ.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/manifest.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/tree.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.ts diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets.json new file mode 100644 index 0000000000000..981bfd0350220 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets.json @@ -0,0 +1,19 @@ +{ + "version": "33.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.d.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.d.ts new file mode 100644 index 0000000000000..60193f14b4d6d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.d.ts @@ -0,0 +1,14 @@ +interface LogRetentionEvent extends Omit { + ResourceProperties: { + ServiceToken: string; + LogGroupName: string; + LogGroupRegion?: string; + RetentionInDays?: string; + SdkRetry?: { + maxRetries?: string; + }; + RemovalPolicy?: string; + }; +} +export declare function handler(event: LogRetentionEvent, context: AWSLambda.Context): Promise; +export {}; diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.js new file mode 100644 index 0000000000000..8d4f5cf13f88d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.js @@ -0,0 +1,192 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.handler = void 0; +/* eslint-disable no-console */ +// eslint-disable-next-line import/no-extraneous-dependencies +const Logs = require("@aws-sdk/client-cloudwatch-logs"); +/** + * Creates a log group and doesn't throw if it exists. + */ +async function createLogGroupSafe(logGroupName, client, withDelay) { + await withDelay(async () => { + try { + const params = { logGroupName }; + const command = new Logs.CreateLogGroupCommand(params); + await client.send(command); + } + catch (error) { + if (error instanceof Logs.ResourceAlreadyExistsException || error.name === 'ResourceAlreadyExistsException') { + // The log group is already created by the lambda execution + return; + } + throw error; + } + }); +} +/** + * Deletes a log group and doesn't throw if it does not exist. + */ +async function deleteLogGroup(logGroupName, client, withDelay) { + await withDelay(async () => { + try { + const params = { logGroupName }; + const command = new Logs.DeleteLogGroupCommand(params); + await client.send(command); + } + catch (error) { + if (error instanceof Logs.ResourceNotFoundException || error.name === 'ResourceNotFoundException') { + // The log group doesn't exist + return; + } + throw error; + } + }); +} +/** + * Puts or deletes a retention policy on a log group. + */ +async function setRetentionPolicy(logGroupName, client, withDelay, retentionInDays) { + await withDelay(async () => { + if (!retentionInDays) { + const params = { logGroupName }; + const deleteCommand = new Logs.DeleteRetentionPolicyCommand(params); + await client.send(deleteCommand); + } + else { + const params = { logGroupName, retentionInDays }; + const putCommand = new Logs.PutRetentionPolicyCommand(params); + await client.send(putCommand); + } + }); +} +async function handler(event, context) { + try { + console.log(JSON.stringify({ ...event, ResponseURL: '...' })); + // The target log group + const logGroupName = event.ResourceProperties.LogGroupName; + // The region of the target log group + const logGroupRegion = event.ResourceProperties.LogGroupRegion; + // Parse to AWS SDK retry options + const maxRetries = parseIntOptional(event.ResourceProperties.SdkRetry?.maxRetries) ?? 5; + const withDelay = makeWithDelay(maxRetries); + const sdkConfig = { + logger: console, + region: logGroupRegion, + maxAttempts: Math.max(5, maxRetries), // Use a minimum for SDK level retries, because it might include retryable failures that withDelay isn't checking for + }; + const client = new Logs.CloudWatchLogsClient(sdkConfig); + if (event.RequestType === 'Create' || event.RequestType === 'Update') { + // Act on the target log group + await createLogGroupSafe(logGroupName, client, withDelay); + await setRetentionPolicy(logGroupName, client, withDelay, parseIntOptional(event.ResourceProperties.RetentionInDays)); + // Configure the Log Group for the Custom Resource function itself + if (event.RequestType === 'Create') { + const clientForCustomResourceFunction = new Logs.CloudWatchLogsClient({ + logger: console, + region: process.env.AWS_REGION, + }); + // Set a retention policy of 1 day on the logs of this very function. + // Due to the async nature of the log group creation, the log group for this function might + // still be not created yet at this point. Therefore we attempt to create it. + // In case it is being created, createLogGroupSafe will handle the conflict. + await createLogGroupSafe(`/aws/lambda/${context.functionName}`, clientForCustomResourceFunction, withDelay); + // If createLogGroupSafe fails, the log group is not created even after multiple attempts. + // In this case we have nothing to set the retention policy on but an exception will skip + // the next line. + await setRetentionPolicy(`/aws/lambda/${context.functionName}`, clientForCustomResourceFunction, withDelay, 1); + } + } + // When the requestType is delete, delete the log group if the removal policy is delete + if (event.RequestType === 'Delete' && event.ResourceProperties.RemovalPolicy === 'destroy') { + await deleteLogGroup(logGroupName, client, withDelay); + // else retain the log group + } + await respond('SUCCESS', 'OK', logGroupName); + } + catch (e) { + console.log(e); + await respond('FAILED', e.message, event.ResourceProperties.LogGroupName); + } + function respond(responseStatus, reason, physicalResourceId) { + const responseBody = JSON.stringify({ + Status: responseStatus, + Reason: reason, + PhysicalResourceId: physicalResourceId, + StackId: event.StackId, + RequestId: event.RequestId, + LogicalResourceId: event.LogicalResourceId, + Data: { + // Add log group name as part of the response so that it's available via Fn::GetAtt + LogGroupName: event.ResourceProperties.LogGroupName, + }, + }); + console.log('Responding', responseBody); + // eslint-disable-next-line @typescript-eslint/no-require-imports + const parsedUrl = require('url').parse(event.ResponseURL); + const requestOptions = { + hostname: parsedUrl.hostname, + path: parsedUrl.path, + method: 'PUT', + headers: { + 'content-type': '', + 'content-length': Buffer.byteLength(responseBody, 'utf8'), + }, + }; + return new Promise((resolve, reject) => { + try { + // eslint-disable-next-line @typescript-eslint/no-require-imports + const request = require('https').request(requestOptions, resolve); + request.on('error', reject); + request.write(responseBody); + request.end(); + } + catch (e) { + reject(e); + } + }); + } +} +exports.handler = handler; +function parseIntOptional(value, base = 10) { + if (value === undefined) { + return undefined; + } + return parseInt(value, base); +} +function makeWithDelay(maxRetries, delayBase = 100, delayCap = 10 * 1000) { + // If we try to update the log group, then due to the async nature of + // Lambda logging there could be a race condition when the same log group is + // already being created by the lambda execution. This can sometime result in + // an error "OperationAbortedException: A conflicting operation is currently + // in progress...Please try again." + // To avoid an error, we do as requested and try again. + return async (block) => { + let attempts = 0; + do { + try { + return await block(); + } + catch (error) { + if (error instanceof Logs.OperationAbortedException + || error.name === 'OperationAbortedException' + || error.name === 'ThrottlingException' // There is no class to check with instanceof, see https://github.com/aws/aws-sdk-js-v3/issues/5140 + ) { + if (attempts < maxRetries) { + attempts++; + await new Promise(resolve => setTimeout(resolve, calculateDelay(attempts, delayBase, delayCap))); + continue; + } + else { + // The log group is still being changed by another execution but we are out of retries + throw new Error('Out of attempts to change log group'); + } + } + throw error; + } + } while (true); // exit happens on retry count check + }; +} +function calculateDelay(attempt, base, cap) { + return Math.round(Math.random() * Math.min(cap, base * 2 ** attempt)); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsNkRBQTZEO0FBQzdELHdEQUF3RDtBQWV4RDs7R0FFRztBQUNILEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxZQUFvQixFQUFFLE1BQWlDLEVBQUUsU0FBd0Q7SUFDakosTUFBTSxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDekIsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkQsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBRTVCO1FBQUMsT0FBTyxLQUFVLEVBQUU7WUFDbkIsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLDhCQUE4QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0NBQWdDLEVBQUU7Z0JBQzNHLDJEQUEyRDtnQkFDM0QsT0FBTzthQUNSO1lBRUQsTUFBTSxLQUFLLENBQUM7U0FDYjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGNBQWMsQ0FBQyxZQUFvQixFQUFFLE1BQWlDLEVBQUUsU0FBd0Q7SUFDN0ksTUFBTSxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDekIsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkQsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBRTVCO1FBQUMsT0FBTyxLQUFVLEVBQUU7WUFDbkIsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLHlCQUF5QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssMkJBQTJCLEVBQUU7Z0JBQ2pHLDhCQUE4QjtnQkFDOUIsT0FBTzthQUNSO1lBRUQsTUFBTSxLQUFLLENBQUM7U0FDYjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQixDQUMvQixZQUFvQixFQUNwQixNQUFpQyxFQUNqQyxTQUF3RCxFQUN4RCxlQUF3QjtJQUd4QixNQUFNLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDTCxNQUFNLE1BQU0sR0FBRyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFTSxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQXdCLEVBQUUsT0FBMEI7SUFDaEYsSUFBSTtRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFOUQsdUJBQXVCO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFFM0QscUNBQXFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7UUFFL0QsaUNBQWlDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU1QyxNQUFNLFNBQVMsR0FBb0M7WUFDakQsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUUsY0FBYztZQUN0QixXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUscUhBQXFIO1NBQzVKLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQ3BFLDhCQUE4QjtZQUM5QixNQUFNLGtCQUFrQixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDMUQsTUFBTSxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUV0SCxrRUFBa0U7WUFDbEUsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztvQkFDcEUsTUFBTSxFQUFFLE9BQU87b0JBQ2YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVTtpQkFDL0IsQ0FBQyxDQUFDO2dCQUNILHFFQUFxRTtnQkFDckUsMkZBQTJGO2dCQUMzRiw2RUFBNkU7Z0JBQzdFLDRFQUE0RTtnQkFDNUUsTUFBTSxrQkFBa0IsQ0FBQyxlQUFlLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSwrQkFBK0IsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDNUcsMEZBQTBGO2dCQUMxRix5RkFBeUY7Z0JBQ3pGLGlCQUFpQjtnQkFDakIsTUFBTSxrQkFBa0IsQ0FBQyxlQUFlLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSwrQkFBK0IsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDaEg7U0FDRjtRQUVELHVGQUF1RjtRQUN2RixJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQzFGLE1BQU0sY0FBYyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEQsNEJBQTRCO1NBQzdCO1FBRUQsTUFBTSxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztLQUM5QztJQUFDLE9BQU8sQ0FBTSxFQUFFO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMzRTtJQUVELFNBQVMsT0FBTyxDQUFDLGNBQXNCLEVBQUUsTUFBYyxFQUFFLGtCQUEwQjtRQUNqRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2xDLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE1BQU0sRUFBRSxNQUFNO1lBQ2Qsa0JBQWtCLEVBQUUsa0JBQWtCO1lBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxJQUFJLEVBQUU7Z0JBQ0osbUZBQW1GO2dCQUNuRixZQUFZLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFlBQVk7YUFDcEQ7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV4QyxpRUFBaUU7UUFDakUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUQsTUFBTSxjQUFjLEdBQUc7WUFDckIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1lBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtZQUNwQixNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsRUFBRTtnQkFDbEIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO2FBQzFEO1NBQ0YsQ0FBQztRQUVGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSTtnQkFDRixpRUFBaUU7Z0JBQ2pFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNsRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ2Y7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDWDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFoR0QsMEJBZ0dDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjLEVBQUUsSUFBSSxHQUFHLEVBQUU7SUFDakQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3ZCLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FDcEIsVUFBa0IsRUFDbEIsWUFBb0IsR0FBRyxFQUN2QixRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFFcEIscUVBQXFFO0lBQ3JFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLG1DQUFtQztJQUNuQyx1REFBdUQ7SUFFdkQsT0FBTyxLQUFLLEVBQUUsS0FBMEIsRUFBRSxFQUFFO1FBQzFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixHQUFHO1lBQ0QsSUFBSTtnQkFDRixPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUM7YUFDdEI7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDbkIsSUFDRSxLQUFLLFlBQVksSUFBSSxDQUFDLHlCQUF5Qjt1QkFDNUMsS0FBSyxDQUFDLElBQUksS0FBSywyQkFBMkI7dUJBQzFDLEtBQUssQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsbUdBQW1HO2tCQUMzSTtvQkFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLEVBQUc7d0JBQzFCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDakcsU0FBUztxQkFDVjt5QkFBTTt3QkFDTCxzRkFBc0Y7d0JBQ3RGLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztxQkFDeEQ7aUJBQ0Y7Z0JBQ0QsTUFBTSxLQUFLLENBQUM7YUFDYjtTQUNGLFFBQVEsSUFBSSxFQUFFLENBQUMsb0NBQW9DO0lBQ3RELENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxPQUFlLEVBQUUsSUFBWSxFQUFFLEdBQVc7SUFDaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCAqIGFzIExvZ3MgZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5cbmludGVyZmFjZSBMb2dSZXRlbnRpb25FdmVudCBleHRlbmRzIE9taXQ8QVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgJ1Jlc291cmNlUHJvcGVydGllcyc+IHtcbiAgUmVzb3VyY2VQcm9wZXJ0aWVzOiB7XG4gICAgU2VydmljZVRva2VuOiBzdHJpbmc7XG4gICAgTG9nR3JvdXBOYW1lOiBzdHJpbmc7XG4gICAgTG9nR3JvdXBSZWdpb24/OiBzdHJpbmc7XG4gICAgUmV0ZW50aW9uSW5EYXlzPzogc3RyaW5nO1xuICAgIFNka1JldHJ5Pzoge1xuICAgICAgbWF4UmV0cmllcz86IHN0cmluZztcbiAgICB9O1xuICAgIFJlbW92YWxQb2xpY3k/OiBzdHJpbmdcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbG9nIGdyb3VwIGFuZCBkb2Vzbid0IHRocm93IGlmIGl0IGV4aXN0cy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlTG9nR3JvdXBTYWZlKGxvZ0dyb3VwTmFtZTogc3RyaW5nLCBjbGllbnQ6IExvZ3MuQ2xvdWRXYXRjaExvZ3NDbGllbnQsIHdpdGhEZWxheTogKGJsb2NrOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIGF3YWl0IHdpdGhEZWxheShhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbG9nR3JvdXBOYW1lIH07XG4gICAgICBjb25zdCBjb21tYW5kID0gbmV3IExvZ3MuQ3JlYXRlTG9nR3JvdXBDb21tYW5kKHBhcmFtcyk7XG4gICAgICBhd2FpdCBjbGllbnQuc2VuZChjb21tYW5kKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIExvZ3MuUmVzb3VyY2VBbHJlYWR5RXhpc3RzRXhjZXB0aW9uIHx8IGVycm9yLm5hbWUgPT09ICdSZXNvdXJjZUFscmVhZHlFeGlzdHNFeGNlcHRpb24nKSB7XG4gICAgICAgIC8vIFRoZSBsb2cgZ3JvdXAgaXMgYWxyZWFkeSBjcmVhdGVkIGJ5IHRoZSBsYW1iZGEgZXhlY3V0aW9uXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWxldGVzIGEgbG9nIGdyb3VwIGFuZCBkb2Vzbid0IHRocm93IGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWxldGVMb2dHcm91cChsb2dHcm91cE5hbWU6IHN0cmluZywgY2xpZW50OiBMb2dzLkNsb3VkV2F0Y2hMb2dzQ2xpZW50LCB3aXRoRGVsYXk6IChibG9jazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4gUHJvbWlzZTx2b2lkPikge1xuICBhd2FpdCB3aXRoRGVsYXkoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGxvZ0dyb3VwTmFtZSB9O1xuICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBMb2dzLkRlbGV0ZUxvZ0dyb3VwQ29tbWFuZChwYXJhbXMpO1xuICAgICAgYXdhaXQgY2xpZW50LnNlbmQoY29tbWFuZCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBMb2dzLlJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfHwgZXJyb3IubmFtZSA9PT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7XG4gICAgICAgIC8vIFRoZSBsb2cgZ3JvdXAgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUHV0cyBvciBkZWxldGVzIGEgcmV0ZW50aW9uIHBvbGljeSBvbiBhIGxvZyBncm91cC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0UmV0ZW50aW9uUG9saWN5KFxuICBsb2dHcm91cE5hbWU6IHN0cmluZyxcbiAgY2xpZW50OiBMb2dzLkNsb3VkV2F0Y2hMb2dzQ2xpZW50LFxuICB3aXRoRGVsYXk6IChibG9jazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4gUHJvbWlzZTx2b2lkPixcbiAgcmV0ZW50aW9uSW5EYXlzPzogbnVtYmVyLFxuKSB7XG5cbiAgYXdhaXQgd2l0aERlbGF5KGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXJldGVudGlvbkluRGF5cykge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBsb2dHcm91cE5hbWUgfTtcbiAgICAgIGNvbnN0IGRlbGV0ZUNvbW1hbmQgPSBuZXcgTG9ncy5EZWxldGVSZXRlbnRpb25Qb2xpY3lDb21tYW5kKHBhcmFtcyk7XG4gICAgICBhd2FpdCBjbGllbnQuc2VuZChkZWxldGVDb21tYW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBsb2dHcm91cE5hbWUsIHJldGVudGlvbkluRGF5cyB9O1xuICAgICAgY29uc3QgcHV0Q29tbWFuZCA9IG5ldyBMb2dzLlB1dFJldGVudGlvblBvbGljeUNvbW1hbmQocGFyYW1zKTtcbiAgICAgIGF3YWl0IGNsaWVudC5zZW5kKHB1dENvbW1hbmQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBMb2dSZXRlbnRpb25FdmVudCwgY29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IC4uLmV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfSkpO1xuXG4gICAgLy8gVGhlIHRhcmdldCBsb2cgZ3JvdXBcbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuTG9nR3JvdXBOYW1lO1xuXG4gICAgLy8gVGhlIHJlZ2lvbiBvZiB0aGUgdGFyZ2V0IGxvZyBncm91cFxuICAgIGNvbnN0IGxvZ0dyb3VwUmVnaW9uID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkxvZ0dyb3VwUmVnaW9uO1xuXG4gICAgLy8gUGFyc2UgdG8gQVdTIFNESyByZXRyeSBvcHRpb25zXG4gICAgY29uc3QgbWF4UmV0cmllcyA9IHBhcnNlSW50T3B0aW9uYWwoZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlNka1JldHJ5Py5tYXhSZXRyaWVzKSA/PyA1O1xuICAgIGNvbnN0IHdpdGhEZWxheSA9IG1ha2VXaXRoRGVsYXkobWF4UmV0cmllcyk7XG5cbiAgICBjb25zdCBzZGtDb25maWc6IExvZ3MuQ2xvdWRXYXRjaExvZ3NDbGllbnRDb25maWcgPSB7XG4gICAgICBsb2dnZXI6IGNvbnNvbGUsXG4gICAgICByZWdpb246IGxvZ0dyb3VwUmVnaW9uLFxuICAgICAgbWF4QXR0ZW1wdHM6IE1hdGgubWF4KDUsIG1heFJldHJpZXMpLCAvLyBVc2UgYSBtaW5pbXVtIGZvciBTREsgbGV2ZWwgcmV0cmllcywgYmVjYXVzZSBpdCBtaWdodCBpbmNsdWRlIHJldHJ5YWJsZSBmYWlsdXJlcyB0aGF0IHdpdGhEZWxheSBpc24ndCBjaGVja2luZyBmb3JcbiAgICB9O1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBMb2dzLkNsb3VkV2F0Y2hMb2dzQ2xpZW50KHNka0NvbmZpZyk7XG5cbiAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdDcmVhdGUnIHx8IGV2ZW50LlJlcXVlc3RUeXBlID09PSAnVXBkYXRlJykge1xuICAgICAgLy8gQWN0IG9uIHRoZSB0YXJnZXQgbG9nIGdyb3VwXG4gICAgICBhd2FpdCBjcmVhdGVMb2dHcm91cFNhZmUobG9nR3JvdXBOYW1lLCBjbGllbnQsIHdpdGhEZWxheSk7XG4gICAgICBhd2FpdCBzZXRSZXRlbnRpb25Qb2xpY3kobG9nR3JvdXBOYW1lLCBjbGllbnQsIHdpdGhEZWxheSwgcGFyc2VJbnRPcHRpb25hbChldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuUmV0ZW50aW9uSW5EYXlzKSk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSB0aGUgTG9nIEdyb3VwIGZvciB0aGUgQ3VzdG9tIFJlc291cmNlIGZ1bmN0aW9uIGl0c2VsZlxuICAgICAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnQ3JlYXRlJykge1xuICAgICAgICBjb25zdCBjbGllbnRGb3JDdXN0b21SZXNvdXJjZUZ1bmN0aW9uID0gbmV3IExvZ3MuQ2xvdWRXYXRjaExvZ3NDbGllbnQoe1xuICAgICAgICAgIGxvZ2dlcjogY29uc29sZSxcbiAgICAgICAgICByZWdpb246IHByb2Nlc3MuZW52LkFXU19SRUdJT04sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBTZXQgYSByZXRlbnRpb24gcG9saWN5IG9mIDEgZGF5IG9uIHRoZSBsb2dzIG9mIHRoaXMgdmVyeSBmdW5jdGlvbi5cbiAgICAgICAgLy8gRHVlIHRvIHRoZSBhc3luYyBuYXR1cmUgb2YgdGhlIGxvZyBncm91cCBjcmVhdGlvbiwgdGhlIGxvZyBncm91cCBmb3IgdGhpcyBmdW5jdGlvbiBtaWdodFxuICAgICAgICAvLyBzdGlsbCBiZSBub3QgY3JlYXRlZCB5ZXQgYXQgdGhpcyBwb2ludC4gVGhlcmVmb3JlIHdlIGF0dGVtcHQgdG8gY3JlYXRlIGl0LlxuICAgICAgICAvLyBJbiBjYXNlIGl0IGlzIGJlaW5nIGNyZWF0ZWQsIGNyZWF0ZUxvZ0dyb3VwU2FmZSB3aWxsIGhhbmRsZSB0aGUgY29uZmxpY3QuXG4gICAgICAgIGF3YWl0IGNyZWF0ZUxvZ0dyb3VwU2FmZShgL2F3cy9sYW1iZGEvJHtjb250ZXh0LmZ1bmN0aW9uTmFtZX1gLCBjbGllbnRGb3JDdXN0b21SZXNvdXJjZUZ1bmN0aW9uLCB3aXRoRGVsYXkpO1xuICAgICAgICAvLyBJZiBjcmVhdGVMb2dHcm91cFNhZmUgZmFpbHMsIHRoZSBsb2cgZ3JvdXAgaXMgbm90IGNyZWF0ZWQgZXZlbiBhZnRlciBtdWx0aXBsZSBhdHRlbXB0cy5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGhhdmUgbm90aGluZyB0byBzZXQgdGhlIHJldGVudGlvbiBwb2xpY3kgb24gYnV0IGFuIGV4Y2VwdGlvbiB3aWxsIHNraXBcbiAgICAgICAgLy8gdGhlIG5leHQgbGluZS5cbiAgICAgICAgYXdhaXQgc2V0UmV0ZW50aW9uUG9saWN5KGAvYXdzL2xhbWJkYS8ke2NvbnRleHQuZnVuY3Rpb25OYW1lfWAsIGNsaWVudEZvckN1c3RvbVJlc291cmNlRnVuY3Rpb24sIHdpdGhEZWxheSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiB0aGUgcmVxdWVzdFR5cGUgaXMgZGVsZXRlLCBkZWxldGUgdGhlIGxvZyBncm91cCBpZiB0aGUgcmVtb3ZhbCBwb2xpY3kgaXMgZGVsZXRlXG4gICAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJyAmJiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuUmVtb3ZhbFBvbGljeSA9PT0gJ2Rlc3Ryb3knKSB7XG4gICAgICBhd2FpdCBkZWxldGVMb2dHcm91cChsb2dHcm91cE5hbWUsIGNsaWVudCwgd2l0aERlbGF5KTtcbiAgICAgIC8vIGVsc2UgcmV0YWluIHRoZSBsb2cgZ3JvdXBcbiAgICB9XG5cbiAgICBhd2FpdCByZXNwb25kKCdTVUNDRVNTJywgJ09LJywgbG9nR3JvdXBOYW1lKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coZSk7XG4gICAgYXdhaXQgcmVzcG9uZCgnRkFJTEVEJywgZS5tZXNzYWdlLCBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuTG9nR3JvdXBOYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3BvbmQocmVzcG9uc2VTdGF0dXM6IHN0cmluZywgcmVhc29uOiBzdHJpbmcsIHBoeXNpY2FsUmVzb3VyY2VJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgU3RhdHVzOiByZXNwb25zZVN0YXR1cyxcbiAgICAgIFJlYXNvbjogcmVhc29uLFxuICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBwaHlzaWNhbFJlc291cmNlSWQsXG4gICAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgICBMb2dpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgICBEYXRhOiB7XG4gICAgICAgIC8vIEFkZCBsb2cgZ3JvdXAgbmFtZSBhcyBwYXJ0IG9mIHRoZSByZXNwb25zZSBzbyB0aGF0IGl0J3MgYXZhaWxhYmxlIHZpYSBGbjo6R2V0QXR0XG4gICAgICAgIExvZ0dyb3VwTmFtZTogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkxvZ0dyb3VwTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnUmVzcG9uZGluZycsIHJlc3BvbnNlQm9keSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlKGV2ZW50LlJlc3BvbnNlVVJMKTtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhvc3RuYW1lOiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgICBwYXRoOiBwYXJzZWRVcmwucGF0aCxcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnJyxcbiAgICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgocmVzcG9uc2VCb2R5LCAndXRmOCcpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdodHRwcycpLnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHJlcXVlc3Qud3JpdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW50T3B0aW9uYWwodmFsdWU/OiBzdHJpbmcsIGJhc2UgPSAxMCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUludCh2YWx1ZSwgYmFzZSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VXaXRoRGVsYXkoXG4gIG1heFJldHJpZXM6IG51bWJlcixcbiAgZGVsYXlCYXNlOiBudW1iZXIgPSAxMDAsXG4gIGRlbGF5Q2FwID0gMTAgKiAxMDAwLCAvLyAxMHNcbik6IChibG9jazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIC8vIElmIHdlIHRyeSB0byB1cGRhdGUgdGhlIGxvZyBncm91cCwgdGhlbiBkdWUgdG8gdGhlIGFzeW5jIG5hdHVyZSBvZlxuICAvLyBMYW1iZGEgbG9nZ2luZyB0aGVyZSBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHNhbWUgbG9nIGdyb3VwIGlzXG4gIC8vIGFscmVhZHkgYmVpbmcgY3JlYXRlZCBieSB0aGUgbGFtYmRhIGV4ZWN1dGlvbi4gVGhpcyBjYW4gc29tZXRpbWUgcmVzdWx0IGluXG4gIC8vIGFuIGVycm9yIFwiT3BlcmF0aW9uQWJvcnRlZEV4Y2VwdGlvbjogQSBjb25mbGljdGluZyBvcGVyYXRpb24gaXMgY3VycmVudGx5XG4gIC8vIGluIHByb2dyZXNzLi4uUGxlYXNlIHRyeSBhZ2Fpbi5cIlxuICAvLyBUbyBhdm9pZCBhbiBlcnJvciwgd2UgZG8gYXMgcmVxdWVzdGVkIGFuZCB0cnkgYWdhaW4uXG5cbiAgcmV0dXJuIGFzeW5jIChibG9jazogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgZG8ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIExvZ3MuT3BlcmF0aW9uQWJvcnRlZEV4Y2VwdGlvblxuICAgICAgICAgIHx8IGVycm9yLm5hbWUgPT09ICdPcGVyYXRpb25BYm9ydGVkRXhjZXB0aW9uJ1xuICAgICAgICAgIHx8IGVycm9yLm5hbWUgPT09ICdUaHJvdHRsaW5nRXhjZXB0aW9uJyAvLyBUaGVyZSBpcyBubyBjbGFzcyB0byBjaGVjayB3aXRoIGluc3RhbmNlb2YsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMvaXNzdWVzLzUxNDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGF0dGVtcHRzIDwgbWF4UmV0cmllcyApIHtcbiAgICAgICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgY2FsY3VsYXRlRGVsYXkoYXR0ZW1wdHMsIGRlbGF5QmFzZSwgZGVsYXlDYXApKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIGxvZyBncm91cCBpcyBzdGlsbCBiZWluZyBjaGFuZ2VkIGJ5IGFub3RoZXIgZXhlY3V0aW9uIGJ1dCB3ZSBhcmUgb3V0IG9mIHJldHJpZXNcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3V0IG9mIGF0dGVtcHRzIHRvIGNoYW5nZSBsb2cgZ3JvdXAnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSB3aGlsZSAodHJ1ZSk7IC8vIGV4aXQgaGFwcGVucyBvbiByZXRyeSBjb3VudCBjaGVja1xuICB9O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVEZWxheShhdHRlbXB0OiBudW1iZXIsIGJhc2U6IG51bWJlciwgY2FwOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogTWF0aC5taW4oY2FwLCBiYXNlICogMiAqKiBhdHRlbXB0KSk7XG59XG4iXX0= \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.ts new file mode 100644 index 0000000000000..88843fe3fa016 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0/index.ts @@ -0,0 +1,229 @@ +/* eslint-disable no-console */ +// eslint-disable-next-line import/no-extraneous-dependencies +import * as Logs from '@aws-sdk/client-cloudwatch-logs'; + +interface LogRetentionEvent extends Omit { + ResourceProperties: { + ServiceToken: string; + LogGroupName: string; + LogGroupRegion?: string; + RetentionInDays?: string; + SdkRetry?: { + maxRetries?: string; + }; + RemovalPolicy?: string + }; +} + +/** + * Creates a log group and doesn't throw if it exists. + */ +async function createLogGroupSafe(logGroupName: string, client: Logs.CloudWatchLogsClient, withDelay: (block: () => Promise) => Promise) { + await withDelay(async () => { + try { + const params = { logGroupName }; + const command = new Logs.CreateLogGroupCommand(params); + await client.send(command); + + } catch (error: any) { + if (error instanceof Logs.ResourceAlreadyExistsException || error.name === 'ResourceAlreadyExistsException') { + // The log group is already created by the lambda execution + return; + } + + throw error; + } + }); +} + +/** + * Deletes a log group and doesn't throw if it does not exist. + */ +async function deleteLogGroup(logGroupName: string, client: Logs.CloudWatchLogsClient, withDelay: (block: () => Promise) => Promise) { + await withDelay(async () => { + try { + const params = { logGroupName }; + const command = new Logs.DeleteLogGroupCommand(params); + await client.send(command); + + } catch (error: any) { + if (error instanceof Logs.ResourceNotFoundException || error.name === 'ResourceNotFoundException') { + // The log group doesn't exist + return; + } + + throw error; + } + }); +} + +/** + * Puts or deletes a retention policy on a log group. + */ +async function setRetentionPolicy( + logGroupName: string, + client: Logs.CloudWatchLogsClient, + withDelay: (block: () => Promise) => Promise, + retentionInDays?: number, +) { + + await withDelay(async () => { + if (!retentionInDays) { + const params = { logGroupName }; + const deleteCommand = new Logs.DeleteRetentionPolicyCommand(params); + await client.send(deleteCommand); + } else { + const params = { logGroupName, retentionInDays }; + const putCommand = new Logs.PutRetentionPolicyCommand(params); + await client.send(putCommand); + } + }); +} + +export async function handler(event: LogRetentionEvent, context: AWSLambda.Context) { + try { + console.log(JSON.stringify({ ...event, ResponseURL: '...' })); + + // The target log group + const logGroupName = event.ResourceProperties.LogGroupName; + + // The region of the target log group + const logGroupRegion = event.ResourceProperties.LogGroupRegion; + + // Parse to AWS SDK retry options + const maxRetries = parseIntOptional(event.ResourceProperties.SdkRetry?.maxRetries) ?? 5; + const withDelay = makeWithDelay(maxRetries); + + const sdkConfig: Logs.CloudWatchLogsClientConfig = { + logger: console, + region: logGroupRegion, + maxAttempts: Math.max(5, maxRetries), // Use a minimum for SDK level retries, because it might include retryable failures that withDelay isn't checking for + }; + const client = new Logs.CloudWatchLogsClient(sdkConfig); + + if (event.RequestType === 'Create' || event.RequestType === 'Update') { + // Act on the target log group + await createLogGroupSafe(logGroupName, client, withDelay); + await setRetentionPolicy(logGroupName, client, withDelay, parseIntOptional(event.ResourceProperties.RetentionInDays)); + + // Configure the Log Group for the Custom Resource function itself + if (event.RequestType === 'Create') { + const clientForCustomResourceFunction = new Logs.CloudWatchLogsClient({ + logger: console, + region: process.env.AWS_REGION, + }); + // Set a retention policy of 1 day on the logs of this very function. + // Due to the async nature of the log group creation, the log group for this function might + // still be not created yet at this point. Therefore we attempt to create it. + // In case it is being created, createLogGroupSafe will handle the conflict. + await createLogGroupSafe(`/aws/lambda/${context.functionName}`, clientForCustomResourceFunction, withDelay); + // If createLogGroupSafe fails, the log group is not created even after multiple attempts. + // In this case we have nothing to set the retention policy on but an exception will skip + // the next line. + await setRetentionPolicy(`/aws/lambda/${context.functionName}`, clientForCustomResourceFunction, withDelay, 1); + } + } + + // When the requestType is delete, delete the log group if the removal policy is delete + if (event.RequestType === 'Delete' && event.ResourceProperties.RemovalPolicy === 'destroy') { + await deleteLogGroup(logGroupName, client, withDelay); + // else retain the log group + } + + await respond('SUCCESS', 'OK', logGroupName); + } catch (e: any) { + console.log(e); + await respond('FAILED', e.message, event.ResourceProperties.LogGroupName); + } + + function respond(responseStatus: string, reason: string, physicalResourceId: string) { + const responseBody = JSON.stringify({ + Status: responseStatus, + Reason: reason, + PhysicalResourceId: physicalResourceId, + StackId: event.StackId, + RequestId: event.RequestId, + LogicalResourceId: event.LogicalResourceId, + Data: { + // Add log group name as part of the response so that it's available via Fn::GetAtt + LogGroupName: event.ResourceProperties.LogGroupName, + }, + }); + + console.log('Responding', responseBody); + + // eslint-disable-next-line @typescript-eslint/no-require-imports + const parsedUrl = require('url').parse(event.ResponseURL); + const requestOptions = { + hostname: parsedUrl.hostname, + path: parsedUrl.path, + method: 'PUT', + headers: { + 'content-type': '', + 'content-length': Buffer.byteLength(responseBody, 'utf8'), + }, + }; + + return new Promise((resolve, reject) => { + try { + // eslint-disable-next-line @typescript-eslint/no-require-imports + const request = require('https').request(requestOptions, resolve); + request.on('error', reject); + request.write(responseBody); + request.end(); + } catch (e) { + reject(e); + } + }); + } +} + +function parseIntOptional(value?: string, base = 10): number | undefined { + if (value === undefined) { + return undefined; + } + + return parseInt(value, base); +} + +function makeWithDelay( + maxRetries: number, + delayBase: number = 100, + delayCap = 10 * 1000, // 10s +): (block: () => Promise) => Promise { + // If we try to update the log group, then due to the async nature of + // Lambda logging there could be a race condition when the same log group is + // already being created by the lambda execution. This can sometime result in + // an error "OperationAbortedException: A conflicting operation is currently + // in progress...Please try again." + // To avoid an error, we do as requested and try again. + + return async (block: () => Promise) => { + let attempts = 0; + do { + try { + return await block(); + } catch (error: any) { + if ( + error instanceof Logs.OperationAbortedException + || error.name === 'OperationAbortedException' + || error.name === 'ThrottlingException' // There is no class to check with instanceof, see https://github.com/aws/aws-sdk-js-v3/issues/5140 + ) { + if (attempts < maxRetries ) { + attempts++; + await new Promise(resolve => setTimeout(resolve, calculateDelay(attempts, delayBase, delayCap))); + continue; + } else { + // The log group is still being changed by another execution but we are out of retries + throw new Error('Out of attempts to change log group'); + } + } + throw error; + } + } while (true); // exit happens on retry count check + }; +} + +function calculateDelay(attempt: number, base: number, cap: number): number { + return Math.round(Math.random() * Math.min(cap, base * 2 ** attempt)); +} diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.assets.json new file mode 100644 index 0000000000000..25f8107c811c1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.assets.json @@ -0,0 +1,32 @@ +{ + "version": "33.0.0", + "files": { + "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0": { + "source": { + "path": "asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "9990a29f03d0c5431a972aeb27fc605359cf0093ddd08bfbdf611189e8116726": { + "source": { + "path": "aws-cdk-log-retention-integ-retries0.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "9990a29f03d0c5431a972aeb27fc605359cf0093ddd08bfbdf611189e8116726.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.template.json new file mode 100644 index 0000000000000..5226a72fe3ef4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries0.template.json @@ -0,0 +1,972 @@ +{ + "Resources": { + "LogRetention0486EBFA5": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group0", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:DeleteRetentionPolicy", + "logs:PutRetentionPolicy" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "logs:DeleteLogGroup", + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group0:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group10:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group11:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group12:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group13:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group14:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group15:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group16:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group17:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group18:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group19:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group1:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group20:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group21:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group22:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group23:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group24:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group2:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group3:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group4:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group5:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group6:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group7:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group8:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group9:*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "Roles": [ + { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ] + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Handler": "index.handler", + "Runtime": "nodejs18.x", + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0.zip" + }, + "Role": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "Arn" + ] + } + }, + "DependsOn": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + ] + }, + "LogRetention1EE2E6696": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group1", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention21F957075": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group2", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention3148A75BA": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group3", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention494231F51": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group4", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention591D77AE3": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group5", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention6DF401EB9": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group6", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention72657EF61": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group7", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention880A4B8CA": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group8", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention90199550D": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group9", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention10F7ED9810": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group10", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention1122CC85FD": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group11", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention12FBA31490": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group12", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention136977A520": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group13", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention14731EBD69": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group14", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention153278A425": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group15", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention161FF830E5": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group16", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention176155FBE0": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group17", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention1831457E29": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group18", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention193D6F7E14": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group19", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2029711E62": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group20", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention21F0A3EBF1": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group21", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2233E364BF": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group22", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2397FB44A4": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group23", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention24A64A1B58": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries0/group24", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.assets.json new file mode 100644 index 0000000000000..80d0398ee84c1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.assets.json @@ -0,0 +1,32 @@ +{ + "version": "33.0.0", + "files": { + "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0": { + "source": { + "path": "asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "86fd666939456783b17c970c3813e5a8ee324e05254c7487cabdcb039c586db9": { + "source": { + "path": "aws-cdk-log-retention-integ-retries1.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "86fd666939456783b17c970c3813e5a8ee324e05254c7487cabdcb039c586db9.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.template.json new file mode 100644 index 0000000000000..bea4c8516c2c1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries1.template.json @@ -0,0 +1,972 @@ +{ + "Resources": { + "LogRetention0486EBFA5": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group0", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:DeleteRetentionPolicy", + "logs:PutRetentionPolicy" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "logs:DeleteLogGroup", + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group0:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group10:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group11:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group12:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group13:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group14:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group15:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group16:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group17:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group18:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group19:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group1:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group20:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group21:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group22:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group23:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group24:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group2:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group3:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group4:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group5:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group6:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group7:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group8:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group9:*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "Roles": [ + { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ] + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Handler": "index.handler", + "Runtime": "nodejs18.x", + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0.zip" + }, + "Role": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "Arn" + ] + } + }, + "DependsOn": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + ] + }, + "LogRetention1EE2E6696": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group1", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention21F957075": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group2", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention3148A75BA": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group3", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention494231F51": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group4", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention591D77AE3": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group5", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention6DF401EB9": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group6", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention72657EF61": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group7", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention880A4B8CA": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group8", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention90199550D": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group9", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention10F7ED9810": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group10", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention1122CC85FD": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group11", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention12FBA31490": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group12", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention136977A520": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group13", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention14731EBD69": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group14", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention153278A425": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group15", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention161FF830E5": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group16", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention176155FBE0": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group17", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention1831457E29": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group18", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention193D6F7E14": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group19", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2029711E62": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group20", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention21F0A3EBF1": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group21", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2233E364BF": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group22", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2397FB44A4": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group23", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention24A64A1B58": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries1/group24", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.assets.json new file mode 100644 index 0000000000000..f004c74793b76 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.assets.json @@ -0,0 +1,32 @@ +{ + "version": "33.0.0", + "files": { + "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0": { + "source": { + "path": "asset.a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "80155830078966c61d22e5166c107e5a9a1e6bdc892902f37610c6bef961e7c4": { + "source": { + "path": "aws-cdk-log-retention-integ-retries2.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "80155830078966c61d22e5166c107e5a9a1e6bdc892902f37610c6bef961e7c4.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.template.json new file mode 100644 index 0000000000000..2be99d090472c --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/aws-cdk-log-retention-integ-retries2.template.json @@ -0,0 +1,972 @@ +{ + "Resources": { + "LogRetention0486EBFA5": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group0", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:DeleteRetentionPolicy", + "logs:PutRetentionPolicy" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "logs:DeleteLogGroup", + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group0:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group10:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group11:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group12:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group13:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group14:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group15:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group16:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group17:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group18:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group19:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group1:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group20:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group21:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group22:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group23:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group24:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group2:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group3:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group4:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group5:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group6:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group7:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group8:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group9:*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "Roles": [ + { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ] + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Handler": "index.handler", + "Runtime": "nodejs18.x", + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "a8515c042d9c942705087943220417be929ac44f968d8fcef2681681b400c0c0.zip" + }, + "Role": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "Arn" + ] + } + }, + "DependsOn": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + ] + }, + "LogRetention1EE2E6696": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group1", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention21F957075": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group2", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention3148A75BA": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group3", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention494231F51": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group4", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention591D77AE3": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group5", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention6DF401EB9": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group6", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention72657EF61": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group7", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention880A4B8CA": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group8", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention90199550D": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group9", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention10F7ED9810": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group10", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention1122CC85FD": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group11", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention12FBA31490": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group12", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention136977A520": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group13", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention14731EBD69": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group14", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention153278A425": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group15", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention161FF830E5": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group16", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention176155FBE0": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group17", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention1831457E29": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group18", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention193D6F7E14": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group19", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2029711E62": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group20", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention21F0A3EBF1": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group21", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2233E364BF": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group22", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention2397FB44A4": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group23", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + }, + "LogRetention24A64A1B58": { + "Type": "Custom::LogRetention", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn" + ] + }, + "LogGroupName": "/aws-cdk-log-retention-integ-retries2/group24", + "RetentionInDays": 7, + "RemovalPolicy": "destroy" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/cdk.out new file mode 100644 index 0000000000000..560dae10d018f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"33.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/integ.json new file mode 100644 index 0000000000000..0879f96c34d02 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/integ.json @@ -0,0 +1,21 @@ +{ + "version": "33.0.0", + "testCases": { + "LogRetentionIntegRetries/DefaultTest": { + "stacks": [ + "aws-cdk-log-retention-integ-retries0", + "aws-cdk-log-retention-integ-retries1", + "aws-cdk-log-retention-integ-retries2" + ], + "cdkCommandOptions": { + "deploy": { + "args": { + "concurrency": 3 + } + } + }, + "assertionStack": "LogRetentionIntegRetries/DefaultTest/DeployAssert", + "assertionStackName": "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/manifest.json new file mode 100644 index 0000000000000..eaeea5c921eef --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/manifest.json @@ -0,0 +1,2728 @@ +{ + "version": "33.0.0", + "artifacts": { + "aws-cdk-log-retention-integ-retries0.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-cdk-log-retention-integ-retries0.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-cdk-log-retention-integ-retries0": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-cdk-log-retention-integ-retries0.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/9990a29f03d0c5431a972aeb27fc605359cf0093ddd08bfbdf611189e8116726.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-cdk-log-retention-integ-retries0.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "aws-cdk-log-retention-integ-retries0.assets" + ], + "metadata": { + "/aws-cdk-log-retention-integ-retries0/LogRetention0/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention0486EBFA5" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention1/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1EE2E6696" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention2/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention21F957075" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention3/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention3148A75BA" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention4/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention494231F51" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention5/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention591D77AE3" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention6/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention6DF401EB9" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention7/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention72657EF61" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention8/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention880A4B8CA" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention9/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention90199550D" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention10/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention10F7ED9810" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention11/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1122CC85FD" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention12/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention12FBA31490" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention13/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention136977A520" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention14/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention14731EBD69" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention15/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention153278A425" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention16/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention161FF830E5" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention17/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention176155FBE0" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention18/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1831457E29" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention19/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention193D6F7E14" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention20/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2029711E62" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention21/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention21F0A3EBF1" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention22/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2233E364BF" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention23/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2397FB44A4" + } + ], + "/aws-cdk-log-retention-integ-retries0/LogRetention24/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention24A64A1B58" + } + ], + "/aws-cdk-log-retention-integ-retries0/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-cdk-log-retention-integ-retries0/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ], + "hello0ServiceRole18B87FED": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0ServiceRole18B87FED", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello0FDC1C7D4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0FDC1C7D4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello0LogRetentionC8F721AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0LogRetentionC8F721AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1ServiceRole61803EDF": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1ServiceRole61803EDF", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1B794CF5A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1B794CF5A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1LogRetention8E9D08B2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1LogRetention8E9D08B2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2ServiceRole5C9CD8EE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2ServiceRole5C9CD8EE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2C049BA39": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2C049BA39", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2LogRetentionA2123D9B": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2LogRetentionA2123D9B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello3ServiceRoleCD1C0951": [ + { + "type": "aws:cdk:logicalId", + "data": "hello3ServiceRoleCD1C0951", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello35665AF4E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello35665AF4E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello3LogRetention8F4AE9E4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello3LogRetention8F4AE9E4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4ServiceRole1A0FA08C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4ServiceRole1A0FA08C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4EE4D48AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4EE4D48AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4LogRetention80AF2389": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4LogRetention80AF2389", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5ServiceRole005C05EC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5ServiceRole005C05EC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5CFB46198": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5CFB46198", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5LogRetention5D258C6A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5LogRetention5D258C6A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello6ServiceRoleCB5A5511": [ + { + "type": "aws:cdk:logicalId", + "data": "hello6ServiceRoleCB5A5511", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello626F003DB": [ + { + "type": "aws:cdk:logicalId", + "data": "hello626F003DB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello6LogRetention143EB32C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello6LogRetention143EB32C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello7ServiceRole1C2C58D2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello7ServiceRole1C2C58D2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello75E0B3E8C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello75E0B3E8C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello7LogRetentionB08781CE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello7LogRetentionB08781CE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8ServiceRole35753BB4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8ServiceRole35753BB4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8801993F8": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8801993F8", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8LogRetentionF5960D3A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8LogRetentionF5960D3A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9ServiceRoleBD9E97CC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9ServiceRoleBD9E97CC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9BFC0B703": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9BFC0B703", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9LogRetentionE34A4125": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9LogRetentionE34A4125", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello10ServiceRole474868C9": [ + { + "type": "aws:cdk:logicalId", + "data": "hello10ServiceRole474868C9", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1062D33987": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1062D33987", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello10LogRetention39275264": [ + { + "type": "aws:cdk:logicalId", + "data": "hello10LogRetention39275264", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello11ServiceRoleA7F4A2AF": [ + { + "type": "aws:cdk:logicalId", + "data": "hello11ServiceRoleA7F4A2AF", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1171FEC9AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1171FEC9AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello11LogRetention0EC20DD0": [ + { + "type": "aws:cdk:logicalId", + "data": "hello11LogRetention0EC20DD0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello12ServiceRoleA76D5180": [ + { + "type": "aws:cdk:logicalId", + "data": "hello12ServiceRoleA76D5180", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello120B96E81D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello120B96E81D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello12LogRetentionD7164F3E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello12LogRetentionD7164F3E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello13ServiceRole8CA1C9B1": [ + { + "type": "aws:cdk:logicalId", + "data": "hello13ServiceRole8CA1C9B1", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1364C47B79": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1364C47B79", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello13LogRetention82EB7E45": [ + { + "type": "aws:cdk:logicalId", + "data": "hello13LogRetention82EB7E45", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello14ServiceRoleC31043C0": [ + { + "type": "aws:cdk:logicalId", + "data": "hello14ServiceRoleC31043C0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello140C25FB09": [ + { + "type": "aws:cdk:logicalId", + "data": "hello140C25FB09", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello14LogRetention637A6A38": [ + { + "type": "aws:cdk:logicalId", + "data": "hello14LogRetention637A6A38", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello15ServiceRole57E5496A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello15ServiceRole57E5496A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1590886C17": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1590886C17", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello15LogRetentionEE365DDD": [ + { + "type": "aws:cdk:logicalId", + "data": "hello15LogRetentionEE365DDD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello16ServiceRole1F31EA8F": [ + { + "type": "aws:cdk:logicalId", + "data": "hello16ServiceRole1F31EA8F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello165FD177B6": [ + { + "type": "aws:cdk:logicalId", + "data": "hello165FD177B6", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello16LogRetention2C237DA7": [ + { + "type": "aws:cdk:logicalId", + "data": "hello16LogRetention2C237DA7", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17ServiceRole85B6FE68": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17ServiceRole85B6FE68", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17BE899C71": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17BE899C71", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17LogRetentionCF72C750": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17LogRetentionCF72C750", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello18ServiceRole631ABDC6": [ + { + "type": "aws:cdk:logicalId", + "data": "hello18ServiceRole631ABDC6", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello183853BDDA": [ + { + "type": "aws:cdk:logicalId", + "data": "hello183853BDDA", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello18LogRetentionF558E7A5": [ + { + "type": "aws:cdk:logicalId", + "data": "hello18LogRetentionF558E7A5", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19ServiceRole30A31A1E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19ServiceRole30A31A1E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19E68A0C7A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19E68A0C7A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19LogRetention2FC87D23": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19LogRetention2FC87D23", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello20ServiceRole49BC2091": [ + { + "type": "aws:cdk:logicalId", + "data": "hello20ServiceRole49BC2091", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2096F721E2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2096F721E2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello20LogRetention7406AE13": [ + { + "type": "aws:cdk:logicalId", + "data": "hello20LogRetention7406AE13", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21ServiceRoleEB093398": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21ServiceRoleEB093398", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21B8049B0D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21B8049B0D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21LogRetention0F88CB8A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21LogRetention0F88CB8A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22ServiceRole22CED113": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22ServiceRole22CED113", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22ADC7BF12": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22ADC7BF12", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22LogRetention2A902D73": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22LogRetention2A902D73", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello23ServiceRoleBC985940": [ + { + "type": "aws:cdk:logicalId", + "data": "hello23ServiceRoleBC985940", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello232450EA9D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello232450EA9D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello23LogRetentionF35EA7AE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello23LogRetentionF35EA7AE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24ServiceRoleB669597E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24ServiceRoleB669597E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24A051F98A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24A051F98A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24LogRetention2F02EEBB": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24LogRetention2F02EEBB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ] + }, + "displayName": "aws-cdk-log-retention-integ-retries0" + }, + "aws-cdk-log-retention-integ-retries1.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-cdk-log-retention-integ-retries1.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-cdk-log-retention-integ-retries1": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-cdk-log-retention-integ-retries1.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/86fd666939456783b17c970c3813e5a8ee324e05254c7487cabdcb039c586db9.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-cdk-log-retention-integ-retries1.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "aws-cdk-log-retention-integ-retries1.assets" + ], + "metadata": { + "/aws-cdk-log-retention-integ-retries1/LogRetention0/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention0486EBFA5" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention1/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1EE2E6696" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention2/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention21F957075" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention3/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention3148A75BA" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention4/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention494231F51" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention5/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention591D77AE3" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention6/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention6DF401EB9" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention7/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention72657EF61" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention8/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention880A4B8CA" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention9/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention90199550D" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention10/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention10F7ED9810" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention11/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1122CC85FD" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention12/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention12FBA31490" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention13/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention136977A520" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention14/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention14731EBD69" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention15/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention153278A425" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention16/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention161FF830E5" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention17/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention176155FBE0" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention18/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1831457E29" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention19/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention193D6F7E14" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention20/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2029711E62" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention21/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention21F0A3EBF1" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention22/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2233E364BF" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention23/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2397FB44A4" + } + ], + "/aws-cdk-log-retention-integ-retries1/LogRetention24/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention24A64A1B58" + } + ], + "/aws-cdk-log-retention-integ-retries1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-cdk-log-retention-integ-retries1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ], + "hello0ServiceRole18B87FED": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0ServiceRole18B87FED", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello0FDC1C7D4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0FDC1C7D4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello0LogRetentionC8F721AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0LogRetentionC8F721AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1ServiceRole61803EDF": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1ServiceRole61803EDF", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1B794CF5A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1B794CF5A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1LogRetention8E9D08B2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1LogRetention8E9D08B2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2ServiceRole5C9CD8EE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2ServiceRole5C9CD8EE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2C049BA39": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2C049BA39", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2LogRetentionA2123D9B": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2LogRetentionA2123D9B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello3ServiceRoleCD1C0951": [ + { + "type": "aws:cdk:logicalId", + "data": "hello3ServiceRoleCD1C0951", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello35665AF4E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello35665AF4E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello3LogRetention8F4AE9E4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello3LogRetention8F4AE9E4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4ServiceRole1A0FA08C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4ServiceRole1A0FA08C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4EE4D48AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4EE4D48AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4LogRetention80AF2389": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4LogRetention80AF2389", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5ServiceRole005C05EC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5ServiceRole005C05EC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5CFB46198": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5CFB46198", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5LogRetention5D258C6A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5LogRetention5D258C6A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello6ServiceRoleCB5A5511": [ + { + "type": "aws:cdk:logicalId", + "data": "hello6ServiceRoleCB5A5511", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello626F003DB": [ + { + "type": "aws:cdk:logicalId", + "data": "hello626F003DB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello6LogRetention143EB32C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello6LogRetention143EB32C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello7ServiceRole1C2C58D2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello7ServiceRole1C2C58D2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello75E0B3E8C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello75E0B3E8C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello7LogRetentionB08781CE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello7LogRetentionB08781CE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8ServiceRole35753BB4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8ServiceRole35753BB4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8801993F8": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8801993F8", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8LogRetentionF5960D3A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8LogRetentionF5960D3A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9ServiceRoleBD9E97CC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9ServiceRoleBD9E97CC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9BFC0B703": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9BFC0B703", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9LogRetentionE34A4125": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9LogRetentionE34A4125", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello10ServiceRole474868C9": [ + { + "type": "aws:cdk:logicalId", + "data": "hello10ServiceRole474868C9", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1062D33987": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1062D33987", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello10LogRetention39275264": [ + { + "type": "aws:cdk:logicalId", + "data": "hello10LogRetention39275264", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello11ServiceRoleA7F4A2AF": [ + { + "type": "aws:cdk:logicalId", + "data": "hello11ServiceRoleA7F4A2AF", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1171FEC9AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1171FEC9AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello11LogRetention0EC20DD0": [ + { + "type": "aws:cdk:logicalId", + "data": "hello11LogRetention0EC20DD0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello12ServiceRoleA76D5180": [ + { + "type": "aws:cdk:logicalId", + "data": "hello12ServiceRoleA76D5180", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello120B96E81D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello120B96E81D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello12LogRetentionD7164F3E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello12LogRetentionD7164F3E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello13ServiceRole8CA1C9B1": [ + { + "type": "aws:cdk:logicalId", + "data": "hello13ServiceRole8CA1C9B1", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1364C47B79": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1364C47B79", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello13LogRetention82EB7E45": [ + { + "type": "aws:cdk:logicalId", + "data": "hello13LogRetention82EB7E45", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello14ServiceRoleC31043C0": [ + { + "type": "aws:cdk:logicalId", + "data": "hello14ServiceRoleC31043C0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello140C25FB09": [ + { + "type": "aws:cdk:logicalId", + "data": "hello140C25FB09", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello14LogRetention637A6A38": [ + { + "type": "aws:cdk:logicalId", + "data": "hello14LogRetention637A6A38", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello15ServiceRole57E5496A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello15ServiceRole57E5496A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1590886C17": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1590886C17", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello15LogRetentionEE365DDD": [ + { + "type": "aws:cdk:logicalId", + "data": "hello15LogRetentionEE365DDD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello16ServiceRole1F31EA8F": [ + { + "type": "aws:cdk:logicalId", + "data": "hello16ServiceRole1F31EA8F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello165FD177B6": [ + { + "type": "aws:cdk:logicalId", + "data": "hello165FD177B6", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello16LogRetention2C237DA7": [ + { + "type": "aws:cdk:logicalId", + "data": "hello16LogRetention2C237DA7", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17ServiceRole85B6FE68": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17ServiceRole85B6FE68", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17BE899C71": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17BE899C71", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17LogRetentionCF72C750": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17LogRetentionCF72C750", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello18ServiceRole631ABDC6": [ + { + "type": "aws:cdk:logicalId", + "data": "hello18ServiceRole631ABDC6", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello183853BDDA": [ + { + "type": "aws:cdk:logicalId", + "data": "hello183853BDDA", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello18LogRetentionF558E7A5": [ + { + "type": "aws:cdk:logicalId", + "data": "hello18LogRetentionF558E7A5", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19ServiceRole30A31A1E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19ServiceRole30A31A1E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19E68A0C7A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19E68A0C7A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19LogRetention2FC87D23": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19LogRetention2FC87D23", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello20ServiceRole49BC2091": [ + { + "type": "aws:cdk:logicalId", + "data": "hello20ServiceRole49BC2091", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2096F721E2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2096F721E2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello20LogRetention7406AE13": [ + { + "type": "aws:cdk:logicalId", + "data": "hello20LogRetention7406AE13", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21ServiceRoleEB093398": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21ServiceRoleEB093398", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21B8049B0D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21B8049B0D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21LogRetention0F88CB8A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21LogRetention0F88CB8A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22ServiceRole22CED113": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22ServiceRole22CED113", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22ADC7BF12": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22ADC7BF12", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22LogRetention2A902D73": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22LogRetention2A902D73", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello23ServiceRoleBC985940": [ + { + "type": "aws:cdk:logicalId", + "data": "hello23ServiceRoleBC985940", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello232450EA9D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello232450EA9D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello23LogRetentionF35EA7AE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello23LogRetentionF35EA7AE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24ServiceRoleB669597E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24ServiceRoleB669597E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24A051F98A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24A051F98A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24LogRetention2F02EEBB": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24LogRetention2F02EEBB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ] + }, + "displayName": "aws-cdk-log-retention-integ-retries1" + }, + "aws-cdk-log-retention-integ-retries2.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-cdk-log-retention-integ-retries2.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-cdk-log-retention-integ-retries2": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-cdk-log-retention-integ-retries2.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/80155830078966c61d22e5166c107e5a9a1e6bdc892902f37610c6bef961e7c4.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-cdk-log-retention-integ-retries2.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "aws-cdk-log-retention-integ-retries2.assets" + ], + "metadata": { + "/aws-cdk-log-retention-integ-retries2/LogRetention0/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention0486EBFA5" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention1/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1EE2E6696" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention2/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention21F957075" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention3/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention3148A75BA" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention4/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention494231F51" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention5/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention591D77AE3" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention6/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention6DF401EB9" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention7/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention72657EF61" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention8/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention880A4B8CA" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention9/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention90199550D" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention10/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention10F7ED9810" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention11/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1122CC85FD" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention12/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention12FBA31490" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention13/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention136977A520" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention14/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention14731EBD69" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention15/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention153278A425" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention16/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention161FF830E5" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention17/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention176155FBE0" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention18/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention1831457E29" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention19/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention193D6F7E14" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention20/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2029711E62" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention21/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention21F0A3EBF1" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention22/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2233E364BF" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention23/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention2397FB44A4" + } + ], + "/aws-cdk-log-retention-integ-retries2/LogRetention24/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LogRetention24A64A1B58" + } + ], + "/aws-cdk-log-retention-integ-retries2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-cdk-log-retention-integ-retries2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ], + "hello0ServiceRole18B87FED": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0ServiceRole18B87FED", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello0FDC1C7D4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0FDC1C7D4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello0LogRetentionC8F721AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello0LogRetentionC8F721AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1ServiceRole61803EDF": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1ServiceRole61803EDF", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1B794CF5A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1B794CF5A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1LogRetention8E9D08B2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1LogRetention8E9D08B2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2ServiceRole5C9CD8EE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2ServiceRole5C9CD8EE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2C049BA39": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2C049BA39", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2LogRetentionA2123D9B": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2LogRetentionA2123D9B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello3ServiceRoleCD1C0951": [ + { + "type": "aws:cdk:logicalId", + "data": "hello3ServiceRoleCD1C0951", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello35665AF4E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello35665AF4E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello3LogRetention8F4AE9E4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello3LogRetention8F4AE9E4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4ServiceRole1A0FA08C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4ServiceRole1A0FA08C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4EE4D48AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4EE4D48AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello4LogRetention80AF2389": [ + { + "type": "aws:cdk:logicalId", + "data": "hello4LogRetention80AF2389", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5ServiceRole005C05EC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5ServiceRole005C05EC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5CFB46198": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5CFB46198", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello5LogRetention5D258C6A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello5LogRetention5D258C6A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello6ServiceRoleCB5A5511": [ + { + "type": "aws:cdk:logicalId", + "data": "hello6ServiceRoleCB5A5511", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello626F003DB": [ + { + "type": "aws:cdk:logicalId", + "data": "hello626F003DB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello6LogRetention143EB32C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello6LogRetention143EB32C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello7ServiceRole1C2C58D2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello7ServiceRole1C2C58D2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello75E0B3E8C": [ + { + "type": "aws:cdk:logicalId", + "data": "hello75E0B3E8C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello7LogRetentionB08781CE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello7LogRetentionB08781CE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8ServiceRole35753BB4": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8ServiceRole35753BB4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8801993F8": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8801993F8", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello8LogRetentionF5960D3A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello8LogRetentionF5960D3A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9ServiceRoleBD9E97CC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9ServiceRoleBD9E97CC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9BFC0B703": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9BFC0B703", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello9LogRetentionE34A4125": [ + { + "type": "aws:cdk:logicalId", + "data": "hello9LogRetentionE34A4125", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello10ServiceRole474868C9": [ + { + "type": "aws:cdk:logicalId", + "data": "hello10ServiceRole474868C9", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1062D33987": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1062D33987", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello10LogRetention39275264": [ + { + "type": "aws:cdk:logicalId", + "data": "hello10LogRetention39275264", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello11ServiceRoleA7F4A2AF": [ + { + "type": "aws:cdk:logicalId", + "data": "hello11ServiceRoleA7F4A2AF", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1171FEC9AC": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1171FEC9AC", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello11LogRetention0EC20DD0": [ + { + "type": "aws:cdk:logicalId", + "data": "hello11LogRetention0EC20DD0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello12ServiceRoleA76D5180": [ + { + "type": "aws:cdk:logicalId", + "data": "hello12ServiceRoleA76D5180", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello120B96E81D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello120B96E81D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello12LogRetentionD7164F3E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello12LogRetentionD7164F3E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello13ServiceRole8CA1C9B1": [ + { + "type": "aws:cdk:logicalId", + "data": "hello13ServiceRole8CA1C9B1", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1364C47B79": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1364C47B79", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello13LogRetention82EB7E45": [ + { + "type": "aws:cdk:logicalId", + "data": "hello13LogRetention82EB7E45", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello14ServiceRoleC31043C0": [ + { + "type": "aws:cdk:logicalId", + "data": "hello14ServiceRoleC31043C0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello140C25FB09": [ + { + "type": "aws:cdk:logicalId", + "data": "hello140C25FB09", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello14LogRetention637A6A38": [ + { + "type": "aws:cdk:logicalId", + "data": "hello14LogRetention637A6A38", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello15ServiceRole57E5496A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello15ServiceRole57E5496A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello1590886C17": [ + { + "type": "aws:cdk:logicalId", + "data": "hello1590886C17", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello15LogRetentionEE365DDD": [ + { + "type": "aws:cdk:logicalId", + "data": "hello15LogRetentionEE365DDD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello16ServiceRole1F31EA8F": [ + { + "type": "aws:cdk:logicalId", + "data": "hello16ServiceRole1F31EA8F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello165FD177B6": [ + { + "type": "aws:cdk:logicalId", + "data": "hello165FD177B6", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello16LogRetention2C237DA7": [ + { + "type": "aws:cdk:logicalId", + "data": "hello16LogRetention2C237DA7", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17ServiceRole85B6FE68": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17ServiceRole85B6FE68", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17BE899C71": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17BE899C71", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello17LogRetentionCF72C750": [ + { + "type": "aws:cdk:logicalId", + "data": "hello17LogRetentionCF72C750", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello18ServiceRole631ABDC6": [ + { + "type": "aws:cdk:logicalId", + "data": "hello18ServiceRole631ABDC6", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello183853BDDA": [ + { + "type": "aws:cdk:logicalId", + "data": "hello183853BDDA", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello18LogRetentionF558E7A5": [ + { + "type": "aws:cdk:logicalId", + "data": "hello18LogRetentionF558E7A5", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19ServiceRole30A31A1E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19ServiceRole30A31A1E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19E68A0C7A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19E68A0C7A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello19LogRetention2FC87D23": [ + { + "type": "aws:cdk:logicalId", + "data": "hello19LogRetention2FC87D23", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello20ServiceRole49BC2091": [ + { + "type": "aws:cdk:logicalId", + "data": "hello20ServiceRole49BC2091", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello2096F721E2": [ + { + "type": "aws:cdk:logicalId", + "data": "hello2096F721E2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello20LogRetention7406AE13": [ + { + "type": "aws:cdk:logicalId", + "data": "hello20LogRetention7406AE13", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21ServiceRoleEB093398": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21ServiceRoleEB093398", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21B8049B0D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21B8049B0D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello21LogRetention0F88CB8A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello21LogRetention0F88CB8A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22ServiceRole22CED113": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22ServiceRole22CED113", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22ADC7BF12": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22ADC7BF12", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello22LogRetention2A902D73": [ + { + "type": "aws:cdk:logicalId", + "data": "hello22LogRetention2A902D73", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello23ServiceRoleBC985940": [ + { + "type": "aws:cdk:logicalId", + "data": "hello23ServiceRoleBC985940", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello232450EA9D": [ + { + "type": "aws:cdk:logicalId", + "data": "hello232450EA9D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello23LogRetentionF35EA7AE": [ + { + "type": "aws:cdk:logicalId", + "data": "hello23LogRetentionF35EA7AE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24ServiceRoleB669597E": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24ServiceRoleB669597E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24A051F98A": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24A051F98A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "hello24LogRetention2F02EEBB": [ + { + "type": "aws:cdk:logicalId", + "data": "hello24LogRetention2F02EEBB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ] + }, + "displayName": "aws-cdk-log-retention-integ-retries2" + }, + "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "LogRetentionIntegRetriesDefaultTestDeployAssert6D1A1A1C.assets" + ], + "metadata": { + "/LogRetentionIntegRetries/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/LogRetentionIntegRetries/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "LogRetentionIntegRetries/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/tree.json new file mode 100644 index 0000000000000..dc224f4c7184f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.js.snapshot/tree.json @@ -0,0 +1,3450 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-cdk-log-retention-integ-retries0": { + "id": "aws-cdk-log-retention-integ-retries0", + "path": "aws-cdk-log-retention-integ-retries0", + "children": { + "LogRetention0": { + "id": "LogRetention0", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention0", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention0/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a": { + "id": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", + "children": { + "Code": { + "id": "Code", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/AssetBucket", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketBase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3_assets.Asset", + "version": "0.0.0" + } + }, + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "managedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:DeleteRetentionPolicy", + "logs:PutRetentionPolicy" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "logs:DeleteLogGroup", + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group0:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group10:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group11:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group12:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group13:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group14:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group15:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group16:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group17:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group18:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group19:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group1:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group20:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group21:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group22:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group23:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group24:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group2:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group3:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group4:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group5:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group6:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group7:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group8:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries0/group9:*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "roles": [ + { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.69" + } + }, + "LogRetention1": { + "id": "LogRetention1", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention1", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention1/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention2": { + "id": "LogRetention2", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention2", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention2/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention3": { + "id": "LogRetention3", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention3", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention3/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention4": { + "id": "LogRetention4", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention4", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention4/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention5": { + "id": "LogRetention5", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention5", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention5/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention6": { + "id": "LogRetention6", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention6", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention6/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention7": { + "id": "LogRetention7", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention7", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention7/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention8": { + "id": "LogRetention8", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention8", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention8/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention9": { + "id": "LogRetention9", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention9", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention9/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention10": { + "id": "LogRetention10", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention10", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention10/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention11": { + "id": "LogRetention11", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention11", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention11/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention12": { + "id": "LogRetention12", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention12", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention12/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention13": { + "id": "LogRetention13", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention13", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention13/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention14": { + "id": "LogRetention14", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention14", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention14/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention15": { + "id": "LogRetention15", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention15", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention15/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention16": { + "id": "LogRetention16", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention16", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention16/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention17": { + "id": "LogRetention17", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention17", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention17/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention18": { + "id": "LogRetention18", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention18", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention18/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention19": { + "id": "LogRetention19", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention19", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention19/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention20": { + "id": "LogRetention20", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention20", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention20/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention21": { + "id": "LogRetention21", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention21", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention21/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention22": { + "id": "LogRetention22", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention22", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention22/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention23": { + "id": "LogRetention23", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention23", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention23/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention24": { + "id": "LogRetention24", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention24", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries0/LogRetention24/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-log-retention-integ-retries0/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-log-retention-integ-retries0/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "aws-cdk-log-retention-integ-retries1": { + "id": "aws-cdk-log-retention-integ-retries1", + "path": "aws-cdk-log-retention-integ-retries1", + "children": { + "LogRetention0": { + "id": "LogRetention0", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention0", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention0/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a": { + "id": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", + "children": { + "Code": { + "id": "Code", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/AssetBucket", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketBase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3_assets.Asset", + "version": "0.0.0" + } + }, + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "managedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:DeleteRetentionPolicy", + "logs:PutRetentionPolicy" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "logs:DeleteLogGroup", + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group0:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group10:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group11:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group12:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group13:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group14:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group15:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group16:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group17:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group18:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group19:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group1:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group20:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group21:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group22:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group23:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group24:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group2:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group3:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group4:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group5:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group6:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group7:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group8:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries1/group9:*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "roles": [ + { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.69" + } + }, + "LogRetention1": { + "id": "LogRetention1", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention1", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention1/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention2": { + "id": "LogRetention2", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention2", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention2/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention3": { + "id": "LogRetention3", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention3", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention3/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention4": { + "id": "LogRetention4", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention4", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention4/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention5": { + "id": "LogRetention5", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention5", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention5/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention6": { + "id": "LogRetention6", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention6", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention6/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention7": { + "id": "LogRetention7", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention7", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention7/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention8": { + "id": "LogRetention8", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention8", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention8/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention9": { + "id": "LogRetention9", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention9", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention9/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention10": { + "id": "LogRetention10", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention10", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention10/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention11": { + "id": "LogRetention11", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention11", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention11/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention12": { + "id": "LogRetention12", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention12", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention12/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention13": { + "id": "LogRetention13", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention13", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention13/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention14": { + "id": "LogRetention14", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention14", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention14/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention15": { + "id": "LogRetention15", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention15", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention15/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention16": { + "id": "LogRetention16", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention16", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention16/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention17": { + "id": "LogRetention17", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention17", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention17/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention18": { + "id": "LogRetention18", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention18", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention18/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention19": { + "id": "LogRetention19", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention19", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention19/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention20": { + "id": "LogRetention20", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention20", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention20/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention21": { + "id": "LogRetention21", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention21", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention21/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention22": { + "id": "LogRetention22", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention22", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention22/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention23": { + "id": "LogRetention23", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention23", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention23/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention24": { + "id": "LogRetention24", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention24", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries1/LogRetention24/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-log-retention-integ-retries1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-log-retention-integ-retries1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "aws-cdk-log-retention-integ-retries2": { + "id": "aws-cdk-log-retention-integ-retries2", + "path": "aws-cdk-log-retention-integ-retries2", + "children": { + "LogRetention0": { + "id": "LogRetention0", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention0", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention0/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a": { + "id": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", + "children": { + "Code": { + "id": "Code", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/AssetBucket", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketBase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3_assets.Asset", + "version": "0.0.0" + } + }, + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "managedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:DeleteRetentionPolicy", + "logs:PutRetentionPolicy" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "logs:DeleteLogGroup", + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group0:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group10:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group11:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group12:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group13:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group14:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group15:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group16:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group17:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group18:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group19:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group1:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group20:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group21:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group22:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group23:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group24:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group2:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group3:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group4:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group5:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group6:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group7:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group8:*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws-cdk-log-retention-integ-retries2/group9:*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "roles": [ + { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.69" + } + }, + "LogRetention1": { + "id": "LogRetention1", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention1", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention1/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention2": { + "id": "LogRetention2", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention2", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention2/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention3": { + "id": "LogRetention3", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention3", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention3/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention4": { + "id": "LogRetention4", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention4", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention4/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention5": { + "id": "LogRetention5", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention5", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention5/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention6": { + "id": "LogRetention6", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention6", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention6/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention7": { + "id": "LogRetention7", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention7", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention7/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention8": { + "id": "LogRetention8", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention8", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention8/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention9": { + "id": "LogRetention9", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention9", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention9/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention10": { + "id": "LogRetention10", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention10", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention10/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention11": { + "id": "LogRetention11", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention11", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention11/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention12": { + "id": "LogRetention12", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention12", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention12/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention13": { + "id": "LogRetention13", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention13", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention13/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention14": { + "id": "LogRetention14", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention14", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention14/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention15": { + "id": "LogRetention15", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention15", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention15/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention16": { + "id": "LogRetention16", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention16", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention16/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention17": { + "id": "LogRetention17", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention17", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention17/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention18": { + "id": "LogRetention18", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention18", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention18/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention19": { + "id": "LogRetention19", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention19", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention19/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention20": { + "id": "LogRetention20", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention20", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention20/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention21": { + "id": "LogRetention21", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention21", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention21/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention22": { + "id": "LogRetention22", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention22", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention22/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention23": { + "id": "LogRetention23", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention23", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention23/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "LogRetention24": { + "id": "LogRetention24", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention24", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-log-retention-integ-retries2/LogRetention24/Resource", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_logs.LogRetention", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-log-retention-integ-retries2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-log-retention-integ-retries2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "LogRetentionIntegRetries": { + "id": "LogRetentionIntegRetries", + "path": "LogRetentionIntegRetries", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "LogRetentionIntegRetries/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "LogRetentionIntegRetries/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.69" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "LogRetentionIntegRetries/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "LogRetentionIntegRetries/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "LogRetentionIntegRetries/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.69" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.ts new file mode 100644 index 0000000000000..8dd3609b5335d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-logs/test/integ.log-retention-retries.ts @@ -0,0 +1,40 @@ +import { App, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib'; +import * as logs from 'aws-cdk-lib/aws-logs'; +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { Construct } from 'constructs'; + +class LogRetentionRetriesStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + for (let i = 0; i < 25; i++) { + new logs.LogRetention(this, `LogRetention${i}`, { + logGroupName: `/${id}/group${i}`, + retention: logs.RetentionDays.ONE_WEEK, + removalPolicy: RemovalPolicy.DESTROY, + }); + } + } +} + +const app = new App(); +const numberOfStacks = 3; +const stacks = [...Array(numberOfStacks).keys()].map((i) => new LogRetentionRetriesStack(app, 'aws-cdk-log-retention-integ-retries' + i)); + +/** + * Deploys multiple stacks in parallel, which causes the LogRetention Custom Resource to fail with `ThrottlingException: Rate exceeded` + * This test ensures that the CRs correctly retry on ThrottlingException + * When deploying a single stack at a time, throttling is not an issue because resources are created by CFN with a slight delay + */ +new IntegTest(app, 'LogRetentionIntegRetries', { + testCases: stacks, + cdkCommandOptions: { + deploy: { + args: { + concurrency: numberOfStacks, + }, + }, + }, +}); + +app.synth(); diff --git a/packages/@aws-cdk/cdk-cli-wrapper/lib/cdk-wrapper.ts b/packages/@aws-cdk/cdk-cli-wrapper/lib/cdk-wrapper.ts index 78a3f749868b9..9fe40b0b1314f 100644 --- a/packages/@aws-cdk/cdk-cli-wrapper/lib/cdk-wrapper.ts +++ b/packages/@aws-cdk/cdk-cli-wrapper/lib/cdk-wrapper.ts @@ -183,6 +183,7 @@ export class CdkCliWrapper implements ICdk { ...options.toolkitStackName ? ['--toolkit-stack-name', options.toolkitStackName] : [], ...options.progress ? ['--progress', options.progress] : ['--progress', StackActivityProgress.EVENTS], ...options.deploymentMethod ? ['--method', options.deploymentMethod] : [], + ...options.concurrency ? ['--concurrency', options.concurrency.toString()] : [], ...this.createDefaultArguments(options), ]; diff --git a/packages/@aws-cdk/cdk-cli-wrapper/lib/commands/deploy.ts b/packages/@aws-cdk/cdk-cli-wrapper/lib/commands/deploy.ts index 798b85d36d395..59ffedefe9945 100644 --- a/packages/@aws-cdk/cdk-cli-wrapper/lib/commands/deploy.ts +++ b/packages/@aws-cdk/cdk-cli-wrapper/lib/commands/deploy.ts @@ -134,6 +134,13 @@ export interface DeployOptions extends DefaultCdkOptions { * Deployment method */ readonly deploymentMethod?: DeploymentMethod; + + /** + * Deploy multiple stacks in parallel + * + * @default 1 + */ + readonly concurrency?: number; } export type DeploymentMethod = 'direct' | 'change-set'; diff --git a/packages/aws-cdk-lib/aws-logs/lib/log-retention-provider/index.ts b/packages/aws-cdk-lib/aws-logs/lib/log-retention-provider/index.ts index eea89d75c8795..88843fe3fa016 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/log-retention-provider/index.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/log-retention-provider/index.ts @@ -91,11 +91,13 @@ export async function handler(event: LogRetentionEvent, context: AWSLambda.Conte const logGroupRegion = event.ResourceProperties.LogGroupRegion; // Parse to AWS SDK retry options - const withDelay = makeWithDelay(parseIntOptional(event.ResourceProperties.SdkRetry?.maxRetries)); + const maxRetries = parseIntOptional(event.ResourceProperties.SdkRetry?.maxRetries) ?? 5; + const withDelay = makeWithDelay(maxRetries); const sdkConfig: Logs.CloudWatchLogsClientConfig = { logger: console, region: logGroupRegion, + maxAttempts: Math.max(5, maxRetries), // Use a minimum for SDK level retries, because it might include retryable failures that withDelay isn't checking for }; const client = new Logs.CloudWatchLogsClient(sdkConfig); @@ -185,7 +187,7 @@ function parseIntOptional(value?: string, base = 10): number | undefined { } function makeWithDelay( - maxRetries: number = 5, + maxRetries: number, delayBase: number = 100, delayCap = 10 * 1000, // 10s ): (block: () => Promise) => Promise { @@ -202,7 +204,11 @@ function makeWithDelay( try { return await block(); } catch (error: any) { - if (error instanceof Logs.OperationAbortedException || error.name === 'OperationAbortedException') { + if ( + error instanceof Logs.OperationAbortedException + || error.name === 'OperationAbortedException' + || error.name === 'ThrottlingException' // There is no class to check with instanceof, see https://github.com/aws/aws-sdk-js-v3/issues/5140 + ) { if (attempts < maxRetries ) { attempts++; await new Promise(resolve => setTimeout(resolve, calculateDelay(attempts, delayBase, delayCap))); diff --git a/packages/aws-cdk-lib/cloud-assembly-schema/lib/integ-tests/commands/deploy.ts b/packages/aws-cdk-lib/cloud-assembly-schema/lib/integ-tests/commands/deploy.ts index 09a20c610f12d..8d63a7d9644f9 100644 --- a/packages/aws-cdk-lib/cloud-assembly-schema/lib/integ-tests/commands/deploy.ts +++ b/packages/aws-cdk-lib/cloud-assembly-schema/lib/integ-tests/commands/deploy.ts @@ -94,4 +94,11 @@ export interface DeployOptions extends DefaultCdkOptions { * @default false */ readonly ci?: boolean; + + /** + * Deploy multiple stacks in parallel + * + * @default 1 + */ + readonly concurrency?: number; } diff --git a/packages/aws-cdk-lib/cloud-assembly-schema/schema/cloud-assembly.version.json b/packages/aws-cdk-lib/cloud-assembly-schema/schema/cloud-assembly.version.json index 560dae10d018f..2313ab5436501 100644 --- a/packages/aws-cdk-lib/cloud-assembly-schema/schema/cloud-assembly.version.json +++ b/packages/aws-cdk-lib/cloud-assembly-schema/schema/cloud-assembly.version.json @@ -1 +1 @@ -{"version":"33.0.0"} \ No newline at end of file +{"version":"34.0.0"} \ No newline at end of file diff --git a/packages/aws-cdk-lib/cloud-assembly-schema/schema/integ.schema.json b/packages/aws-cdk-lib/cloud-assembly-schema/schema/integ.schema.json index a098e4d72a134..a43e4f30b6f64 100644 --- a/packages/aws-cdk-lib/cloud-assembly-schema/schema/integ.schema.json +++ b/packages/aws-cdk-lib/cloud-assembly-schema/schema/integ.schema.json @@ -199,6 +199,10 @@ "default": false, "type": "boolean" }, + "concurrency": { + "description": "Deploy multiple stacks in parallel (Default 1)", + "type": "number" + }, "stacks": { "description": "List of stacks to deploy\n\nRequried if `all` is not set (Default - [])", "type": "array",