From 74458a0e9eebce4ee254673aad8933d39588d843 Mon Sep 17 00:00:00 2001 From: "cm-sato.naoya" Date: Mon, 11 Jan 2021 19:37:10 +0900 Subject: [PATCH 01/54] feat(cli): `--quiet` does not print template in `cdk synth` (#12178) fixes #11970 --- _By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license_ --- packages/aws-cdk/README.md | 3 +++ packages/aws-cdk/bin/cdk.ts | 5 +++-- packages/aws-cdk/lib/cdk-toolkit.ts | 7 +++++-- packages/aws-cdk/test/cdk-toolkit.test.ts | 10 ++++++++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/aws-cdk/README.md b/packages/aws-cdk/README.md index 64b542ed4b2fd..d17a38e62f923 100644 --- a/packages/aws-cdk/README.md +++ b/packages/aws-cdk/README.md @@ -115,6 +115,9 @@ $ cdk synth $ # Synthesize cloud assembly for StackName, but don't include dependencies $ cdk synth MyStackName --exclusively + +$ # Synthesize cloud assembly for StackName, but don't cloudFormation template output to STDOUT +$ cdk synth MyStackName --quiet ``` See the [AWS Documentation](https://docs.aws.amazon.com/cdk/latest/guide/apps.html#apps_cloud_assembly) to learn more about cloud assemblies. diff --git a/packages/aws-cdk/bin/cdk.ts b/packages/aws-cdk/bin/cdk.ts index e305da55164e5..d14e53892354a 100644 --- a/packages/aws-cdk/bin/cdk.ts +++ b/packages/aws-cdk/bin/cdk.ts @@ -68,7 +68,8 @@ async function parseCommandLineArguments() { .option('long', { type: 'boolean', default: false, alias: 'l', desc: 'Display environment information for each stack' }), ) .command(['synthesize [STACKS..]', 'synth [STACKS..]'], 'Synthesizes and prints the CloudFormation template for this stack', yargs => yargs - .option('exclusively', { type: 'boolean', alias: 'e', desc: 'Only synthesize requested stacks, don\'t include dependencies' })) + .option('exclusively', { type: 'boolean', alias: 'e', desc: 'Only synthesize requested stacks, don\'t include dependencies' }) + .option('quiet', { type: 'boolean', alias: 'q', desc: 'Do not output CloudFormation Template to stdout', default: false })) .command('bootstrap [ENVIRONMENTS..]', 'Deploys the CDK toolkit stack into an AWS environment', yargs => yargs .option('bootstrap-bucket-name', { type: 'string', alias: ['b', 'toolkit-bucket-name'], desc: 'The name of the CDK toolkit bucket; bucket will be created and must not exist', default: undefined }) .option('bootstrap-kms-key-id', { type: 'string', desc: 'AWS KMS master key ID used for the SSE-KMS encryption', default: undefined, conflicts: 'bootstrap-customer-key' }) @@ -328,7 +329,7 @@ async function initCommandLine() { case 'synthesize': case 'synth': - return cli.synth(args.STACKS, args.exclusively); + return cli.synth(args.STACKS, args.exclusively, args.quiet); case 'metadata': return cli.metadata(args.STACK); diff --git a/packages/aws-cdk/lib/cdk-toolkit.ts b/packages/aws-cdk/lib/cdk-toolkit.ts index c0ae230879a80..c3e8c649eaa7b 100644 --- a/packages/aws-cdk/lib/cdk-toolkit.ts +++ b/packages/aws-cdk/lib/cdk-toolkit.ts @@ -295,12 +295,15 @@ export class CdkToolkit { * OUTPUT: If more than one stack ends up being selected, an output directory * should be supplied, where the templates will be written. */ - public async synth(stackNames: string[], exclusively: boolean): Promise { + public async synth(stackNames: string[], exclusively: boolean, quiet: boolean): Promise { const stacks = await this.selectStacksForDiff(stackNames, exclusively); // if we have a single stack, print it to STDOUT if (stacks.stackCount === 1) { - return stacks.firstStack.template; + if (!quiet) { + return stacks.firstStack.template; + } + return undefined; } // This is a slight hack; in integ mode we allow multiple stacks to be synthesized to stdout sequentially. diff --git a/packages/aws-cdk/test/cdk-toolkit.test.ts b/packages/aws-cdk/test/cdk-toolkit.test.ts index caf3e6cc83257..9266d9bc10646 100644 --- a/packages/aws-cdk/test/cdk-toolkit.test.ts +++ b/packages/aws-cdk/test/cdk-toolkit.test.ts @@ -138,6 +138,16 @@ describe('deploy', () => { }); }); +describe('synth', () => { + test('with no stdout option', async () => { + // GIVE + const toolkit = defaultToolkitSetup(); + + // THEN + await expect(toolkit.synth(['Test-Stack-A'], false, true)).resolves.toBeUndefined(); + }); +}); + class MockStack { public static readonly MOCK_STACK_A: TestStackArtifact = { stackName: 'Test-Stack-A', From 05a998065b3333854715c456b20b7cc5d5daac67 Mon Sep 17 00:00:00 2001 From: CaerusKaru Date: Mon, 11 Jan 2021 05:13:58 -0600 Subject: [PATCH 02/54] feat(cdk-assets): add external asset support (#12259) In the event that assets are not actually available at synthesis time, we still want to support JIT (just-in-time) asset generation via external tooling. This would, for instance, enable a third party tool to fetch additional resources prior to bundling/building and subsequent uploading. This adds a new interface for both File and Docker asset types that allows users to specify an executable. The executable, depending on the asset type, must then reply with a specific key on stdout, which will then get picked up and used by CDK Assets. This also updates the default stack synthesizer to support adding external sources directly. This is technically a breaking change for anyone who currently extends the class. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- allowed-breaking-changes.txt | 4 + .../lib/assets/docker-image-asset.ts | 18 +++- .../lib/assets/file-asset.ts | 15 ++- .../schema/assets.schema.json | 36 ++++--- .../schema/cloud-assembly.version.json | 2 +- .../cloud-assembly-schema/test/assets.test.ts | 46 ++++++++- packages/@aws-cdk/core/lib/assets.ts | 36 ++++++- .../stack-synthesizers/default-synthesizer.ts | 38 +++++++- .../core/lib/stack-synthesizers/legacy.ts | 8 ++ packages/cdk-assets/README.md | 35 +++++++ .../lib/private/handlers/container-images.ts | 95 +++++++++++++++---- .../cdk-assets/lib/private/handlers/files.ts | 65 +++++++++---- .../cdk-assets/lib/private/handlers/index.ts | 2 +- .../cdk-assets/test/docker-images.test.ts | 67 ++++++++++++- packages/cdk-assets/test/files.test.ts | 64 ++++++++++++- .../cdk-assets/test/mock-child_process.ts | 8 +- 16 files changed, 470 insertions(+), 69 deletions(-) diff --git a/allowed-breaking-changes.txt b/allowed-breaking-changes.txt index 9120903b01912..2ca2ca5b6067f 100644 --- a/allowed-breaking-changes.txt +++ b/allowed-breaking-changes.txt @@ -52,3 +52,7 @@ incompatible-argument:@aws-cdk/aws-ecs.FargateTaskDefinition. incompatible-argument:@aws-cdk/aws-ecs.FargateTaskDefinition.addVolume incompatible-argument:@aws-cdk/aws-ecs.TaskDefinition. incompatible-argument:@aws-cdk/aws-ecs.TaskDefinition.addVolume + +# We made properties optional and it's really fine but our differ doesn't think so. +weakened:@aws-cdk/cloud-assembly-schema.DockerImageSource +weakened:@aws-cdk/cloud-assembly-schema.FileSource diff --git a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts index ebec6ab166fbb..654e1aa032926 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts @@ -23,12 +23,24 @@ export interface DockerImageSource { * The directory containing the Docker image build instructions. * * This path is relative to the asset manifest location. + * + * @default - Exactly one of `directory` and `executable` is required + */ + readonly directory?: string; + + /** + * A command-line executable that returns the name of a local + * Docker image on stdout after being run. + * + * @default - Exactly one of `directory` and `executable` is required */ - readonly directory: string; + readonly executable?: string[]; /** * The name of the file with build instructions * + * Only allowed when `directory` is set. + * * @default "Dockerfile" */ readonly dockerFile?: string; @@ -36,6 +48,8 @@ export interface DockerImageSource { /** * Target build stage in a Dockerfile with multiple build stages * + * Only allowed when `directory` is set. + * * @default - The last stage in the Dockerfile */ readonly dockerBuildTarget?: string; @@ -43,6 +57,8 @@ export interface DockerImageSource { /** * Additional build arguments * + * Only allowed when `directory` is set. + * * @default - No additional build arguments */ readonly dockerBuildArgs?: { [name: string]: string }; diff --git a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts index efa6cd4384bbe..58c7e0cc93ebc 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts @@ -34,16 +34,27 @@ export enum FileAssetPackaging { * Describe the source of a file asset */ export interface FileSource { + /** + * External command which will produce the file asset to upload. + * + * @default - Exactly one of `executable` and `path` is required. + */ + readonly executable?: string[]; + /** * The filesystem object to upload * * This path is relative to the asset manifest location. + * + * @default - Exactly one of `executable` and `path` is required. */ - readonly path: string; + readonly path?: string; /** * Packaging method * + * Only allowed when `path` is specified. + * * @default FILE */ readonly packaging?: FileAssetPackaging; @@ -62,4 +73,4 @@ export interface FileDestination extends AwsDestination { * The destination object key */ readonly objectKey: string; -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json b/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json index bbd61aae66813..995a895ad824d 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json +++ b/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json @@ -53,22 +53,26 @@ "description": "Describe the source of a file asset", "type": "object", "properties": { + "executable": { + "description": "External command which will produce the file asset to upload. (Default - Exactly one of `executable` and `path` is required.)", + "type": "array", + "items": { + "type": "string" + } + }, "path": { - "description": "The filesystem object to upload\n\nThis path is relative to the asset manifest location.", + "description": "The filesystem object to upload\n\nThis path is relative to the asset manifest location. (Default - Exactly one of `executable` and `path` is required.)", "type": "string" }, "packaging": { - "description": "Packaging method (Default FILE)", + "description": "Packaging method\n\nOnly allowed when `path` is specified. (Default FILE)", "enum": [ "file", "zip" ], "type": "string" } - }, - "required": [ - "path" - ] + } }, "FileDestination": { "description": "Where in S3 a file asset needs to be published", @@ -126,28 +130,32 @@ "type": "object", "properties": { "directory": { - "description": "The directory containing the Docker image build instructions.\n\nThis path is relative to the asset manifest location.", + "description": "The directory containing the Docker image build instructions.\n\nThis path is relative to the asset manifest location. (Default - Exactly one of `directory` and `executable` is required)", "type": "string" }, + "executable": { + "description": "A command-line executable that returns the name of a local\nDocker image on stdout after being run. (Default - Exactly one of `directory` and `executable` is required)", + "type": "array", + "items": { + "type": "string" + } + }, "dockerFile": { - "description": "The name of the file with build instructions (Default Dockerfile)", + "description": "The name of the file with build instructions\n\nOnly allowed when `directory` is set. (Default Dockerfile)", "type": "string" }, "dockerBuildTarget": { - "description": "Target build stage in a Dockerfile with multiple build stages (Default - The last stage in the Dockerfile)", + "description": "Target build stage in a Dockerfile with multiple build stages\n\nOnly allowed when `directory` is set. (Default - The last stage in the Dockerfile)", "type": "string" }, "dockerBuildArgs": { - "description": "Additional build arguments (Default - No additional build arguments)", + "description": "Additional build arguments\n\nOnly allowed when `directory` is set. (Default - No additional build arguments)", "type": "object", "additionalProperties": { "type": "string" } } - }, - "required": [ - "directory" - ] + } }, "DockerImageDestination": { "description": "Where to publish docker images", diff --git a/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json b/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json index bdc5a9f306dec..e6bb766b23585 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json +++ b/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json @@ -1 +1 @@ -{"version":"7.0.0"} \ No newline at end of file +{"version":"8.0.0"} diff --git a/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts b/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts index 62aebfa26e6ee..24ddd465484b7 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts @@ -21,6 +21,18 @@ describe('Docker image asset', () => { }, }, }, + externalAsset: { + source: { + executable: ['sometool'], + }, + destinations: { + dest: { + region: 'us-north-20', + repositoryName: 'REPO', + imageTag: 'TAG', + }, + }, + }, }, }); }).not.toThrow(); @@ -32,12 +44,18 @@ describe('Docker image asset', () => { version: Manifest.version(), dockerImages: { asset: { + source: { + directory: true, + }, + destinations: {}, + }, + externalAsset: { source: {}, destinations: {}, }, }, }); - }).toThrow(/instance\.dockerImages\.asset\.source requires property \"directory\"/); + }).toThrow(/instance\.dockerImages\.asset\.source\.directory is not of a type\(s\) string/); }); }); @@ -60,6 +78,18 @@ describe('File asset', () => { }, }, }, + externalAsset: { + source: { + executable: ['sometool'], + }, + destinations: { + dest: { + region: 'us-north-20', + bucketName: 'Bouquet', + objectKey: 'key', + }, + }, + }, }, }); }).not.toThrow(); @@ -109,6 +139,18 @@ describe('File asset', () => { }, }, }, + externalAsset: { + source: { + executable: ['sometool'], + }, + destinations: { + dest: { + region: 'us-north-20', + bucketName: 'Bouquet', + objectKey: 'key', + }, + }, + }, }, }); }).toThrow(/instance\.files\.asset\.source\.path is not of a type\(s\) string/); @@ -149,4 +191,4 @@ function validate(manifest: any) { fs.unlinkSync(filePath); fs.rmdirSync(dir); } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/core/lib/assets.ts b/packages/@aws-cdk/core/lib/assets.ts index 17d3b9d93e53f..d992546dbfdb3 100644 --- a/packages/@aws-cdk/core/lib/assets.ts +++ b/packages/@aws-cdk/core/lib/assets.ts @@ -106,17 +106,30 @@ export interface FileAssetSource { */ readonly sourceHash: string; + /** + * An external command that will produce the packaged asset. + * + * The command should produce the location of a ZIP file on `stdout`. + * + * @default - Exactly one of `directory` and `executable` is required + */ + readonly executable?: string[]; + /** * The path, relative to the root of the cloud assembly, in which this asset * source resides. This can be a path to a file or a directory, dependning on the * packaging type. + * + * @default - Exactly one of `directory` and `executable` is required */ - readonly fileName: string; + readonly fileName?: string; /** * Which type of packaging to perform. + * + * @default - Required if `fileName` is specified. */ - readonly packaging: FileAssetPackaging; + readonly packaging?: FileAssetPackaging; } export interface DockerImageAssetSource { @@ -130,11 +143,22 @@ export interface DockerImageAssetSource { */ readonly sourceHash: string; + /** + * An external command that will produce the packaged asset. + * + * The command should produce the name of a local Docker image on `stdout`. + * + * @default - Exactly one of `directoryName` and `executable` is required + */ + readonly executable?: string[]; + /** * The directory where the Dockerfile is stored, must be relative * to the cloud assembly root. + * + * @default - Exactly one of `directoryName` and `executable` is required */ - readonly directoryName: string; + readonly directoryName?: string; /** * Build args to pass to the `docker build` command. @@ -143,6 +167,8 @@ export interface DockerImageAssetSource { * values cannot refer to unresolved tokens (such as `lambda.functionArn` or * `queue.queueUrl`). * + * Only allowed when `directoryName` is specified. + * * @default - no build args are passed */ readonly dockerBuildArgs?: { [key: string]: string }; @@ -150,6 +176,8 @@ export interface DockerImageAssetSource { /** * Docker target to build to * + * Only allowed when `directoryName` is specified. + * * @default - no target */ readonly dockerBuildTarget?: string; @@ -157,6 +185,8 @@ export interface DockerImageAssetSource { /** * Path to the Dockerfile (relative to the directory). * + * Only allowed when `directoryName` is specified. + * * @default - no file */ readonly dockerFile?: string; diff --git a/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts b/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts index 734e4915c5b95..f90ae86dbf584 100644 --- a/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts +++ b/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts @@ -1,7 +1,7 @@ -import * as cxschema from '@aws-cdk/cloud-assembly-schema'; -import * as cxapi from '@aws-cdk/cx-api'; import * as fs from 'fs'; import * as path from 'path'; +import * as cxschema from '@aws-cdk/cloud-assembly-schema'; +import * as cxapi from '@aws-cdk/cx-api'; import { DockerImageAssetLocation, DockerImageAssetSource, FileAssetLocation, FileAssetPackaging, FileAssetSource } from '../assets'; import { Fn } from '../cfn-fn'; import { CfnParameter } from '../cfn-parameter'; @@ -9,8 +9,8 @@ import { CfnRule } from '../cfn-rule'; import { ISynthesisSession } from '../construct-compat'; import { Stack } from '../stack'; import { Token } from '../token'; -import { StackSynthesizer } from './stack-synthesizer'; import { assertBound, contentHash } from './_shared'; +import { StackSynthesizer } from './stack-synthesizer'; export const BOOTSTRAP_QUALIFIER_CONTEXT = '@aws-cdk/core:bootstrapQualifier'; @@ -289,12 +289,15 @@ export class DefaultStackSynthesizer extends StackSynthesizer { public addFileAsset(asset: FileAssetSource): FileAssetLocation { assertBound(this.stack); assertBound(this.bucketName); + validateFileAssetSource(asset); + const objectKey = this.bucketPrefix + asset.sourceHash + (asset.packaging === FileAssetPackaging.ZIP_DIRECTORY ? '.zip' : ''); // Add to manifest this.files[asset.sourceHash] = { source: { path: asset.fileName, + executable: asset.executable, packaging: asset.packaging, }, destinations: { @@ -325,12 +328,14 @@ export class DefaultStackSynthesizer extends StackSynthesizer { public addDockerImageAsset(asset: DockerImageAssetSource): DockerImageAssetLocation { assertBound(this.stack); assertBound(this.repositoryName); + validateDockerImageAssetSource(asset); const imageTag = asset.sourceHash; // Add to manifest this.dockerImages[asset.sourceHash] = { source: { + executable: asset.executable, directory: asset.directoryName, dockerBuildArgs: asset.dockerBuildArgs, dockerBuildTarget: asset.dockerBuildTarget, @@ -565,4 +570,31 @@ function range(startIncl: number, endExcl: number) { ret.push(i); } return ret; +} + + +function validateFileAssetSource(asset: FileAssetSource) { + if (!!asset.executable === !!asset.fileName) { + throw new Error(`Exactly one of 'fileName' or 'executable' is required, got: ${JSON.stringify(asset)}`); + } + + if (!!asset.packaging !== !!asset.fileName) { + throw new Error(`'packaging' is expected in combination with 'fileName', got: ${JSON.stringify(asset)}`); + } +} + +function validateDockerImageAssetSource(asset: DockerImageAssetSource) { + if (!!asset.executable === !!asset.directoryName) { + throw new Error(`Exactly one of 'directoryName' or 'executable' is required, got: ${JSON.stringify(asset)}`); + } + + check('dockerBuildArgs'); + check('dockerBuildTarget'); + check('dockerFile'); + + function check(key: K) { + if (asset[key] && !asset.directoryName) { + throw new Error(`'${key}' is only allowed in combination with 'directoryName', got: ${JSON.stringify(asset)}`); + } + } } \ No newline at end of file diff --git a/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts b/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts index e6dfd63235b8c..bf699b271878d 100644 --- a/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts +++ b/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts @@ -120,6 +120,10 @@ export class LegacyStackSynthesizer extends StackSynthesizer { // only add every image (identified by source hash) once for each stack that uses it. if (!this.addedImageAssets.has(assetId)) { + if (!asset.directoryName) { + throw new Error(`LegacyStackSynthesizer does not support this type of file asset: ${JSON.stringify(asset)}`); + } + const metadata: cxschema.ContainerImageAssetMetadataEntry = { repositoryName, imageTag, @@ -149,6 +153,10 @@ export class LegacyStackSynthesizer extends StackSynthesizer { if (!params) { params = new FileAssetParameters(this.assetParameters, asset.sourceHash); + if (!asset.fileName || !asset.packaging) { + throw new Error(`LegacyStackSynthesizer does not support this type of file asset: ${JSON.stringify(asset)}`); + } + const metadata: cxschema.FileAssetMetadataEntry = { path: asset.fileName, id: asset.sourceHash, diff --git a/packages/cdk-assets/README.md b/packages/cdk-assets/README.md index 2eb10ae621947..c40afcd00c42d 100644 --- a/packages/cdk-assets/README.md +++ b/packages/cdk-assets/README.md @@ -28,6 +28,7 @@ Currently the following asset types are supported: * Files and archives, uploaded to S3 * Docker Images, uploaded to ECR +* Files, archives, and Docker images built by external utilities S3 buckets and ECR repositories to upload to are expected to exist already. @@ -41,6 +42,13 @@ itself in the following behaviors: image in the local Docker cache) already exists named after the asset's ID, it will not be packaged, but will be uploaded directly to the destination location. + +For assets build by external utilities, the contract is such that cdk-assets +expects the utility to manage dedupe detection as well as path/image tag generation. +This means that cdk-assets will call the external utility every time generation +is warranted, and it is up to the utility to a) determine whether to do a +full rebuild; and b) to return only one thing on stdout: the path to the file/archive +asset, or the name of the local Docker image. ## Usage @@ -82,6 +90,19 @@ An asset manifest looks like this: } } }, + "3dfe2b80b050e7e4e168f84feff678d4": { + "source": { + "executable": ["myzip"] + }, + "destinations": { + "us-east-1": { + "region": "us-east-1", + "assumeRoleArn": "arn:aws:iam::12345789012:role/my-account", + "bucketName": "MySpecialBucket", + "objectKey": "3dfe2b80b050e7e4e168f84feff678d4.zip" + } + } + }, }, "dockerImages": { "b48783c58a86f7b8c68a4591c4f9be31": { @@ -97,6 +118,20 @@ An asset manifest looks like this: "imageUri": "123456789012.dkr.ecr.us-east-1.amazonaws.com/MyRepository:1234567891b48783c58a86f7b8c68a4591c4f9be31", } } + }, + "d92753c58a86f7b8c68a4591c4f9cf28": { + "source": { + "executable": ["mytool", "package", "dockerdir"], + }, + "destinations": { + "us-east-1": { + "region": "us-east-1", + "assumeRoleArn": "arn:aws:iam::12345789012:role/my-account", + "repositoryName": "MyRepository2", + "imageTag": "d92753c58a86f7b8c68a4591c4f9cf28", + "imageUri": "123456789987.dkr.ecr.us-east-1.amazonaws.com/MyRepository2:1234567891b48783c58a86f7b8c68a4591c4f9be31", + } + } } } } diff --git a/packages/cdk-assets/lib/private/handlers/container-images.ts b/packages/cdk-assets/lib/private/handlers/container-images.ts index bd755a52f139b..a3b6756ecb18d 100644 --- a/packages/cdk-assets/lib/private/handlers/container-images.ts +++ b/packages/cdk-assets/lib/private/handlers/container-images.ts @@ -1,73 +1,128 @@ import * as path from 'path'; +import { DockerImageDestination } from '@aws-cdk/cloud-assembly-schema'; import { DockerImageManifestEntry } from '../../asset-manifest'; import { EventType } from '../../progress'; import { IAssetHandler, IHandlerHost } from '../asset-handler'; import { Docker } from '../docker'; import { replaceAwsPlaceholders } from '../placeholders'; +import { shell } from '../shell'; export class ContainerImageAssetHandler implements IAssetHandler { - private readonly localTagName: string; private readonly docker = new Docker(m => this.host.emitMessage(EventType.DEBUG, m)); constructor( private readonly workDir: string, private readonly asset: DockerImageManifestEntry, private readonly host: IHandlerHost) { - - this.localTagName = `cdkasset-${this.asset.id.assetId.toLowerCase()}`; } public async publish(): Promise { const destination = await replaceAwsPlaceholders(this.asset.destination, this.host.aws); - const ecr = await this.host.aws.ecrClient(destination); - const account = (await this.host.aws.discoverCurrentAccount()).accountId; - const repoUri = await repositoryUri(ecr, destination.repositoryName); + if (!repoUri) { throw new Error(`No ECR repository named '${destination.repositoryName}' in account ${account}. Is this account bootstrapped?`); } const imageUri = `${repoUri}:${destination.imageTag}`; - this.host.emitMessage(EventType.CHECK, `Check ${imageUri}`); - if (await imageExists(ecr, destination.repositoryName, destination.imageTag)) { - this.host.emitMessage(EventType.FOUND, `Found ${imageUri}`); - return; - } - + if (await this.destinationAlreadyExists(ecr, destination, imageUri)) { return; } if (this.host.aborted) { return; } // Login before build so that the Dockerfile can reference images in the ECR repo await this.docker.login(ecr); - await this.buildImage(); + + const localTagName = this.asset.source.executable + ? await this.buildExternalAsset(this.asset.source.executable) + : await this.buildDirectoryAsset(); + + if (localTagName === undefined || this.host.aborted) { + return; + } this.host.emitMessage(EventType.UPLOAD, `Push ${imageUri}`); if (this.host.aborted) { return; } - await this.docker.tag(this.localTagName, imageUri); + await this.docker.tag(localTagName, imageUri); await this.docker.push(imageUri); } - private async buildImage(): Promise { - if (await this.docker.exists(this.localTagName)) { - this.host.emitMessage(EventType.CACHED, `Cached ${this.localTagName}`); - return; + /** + * Build a (local) Docker asset from a directory with a Dockerfile + * + * Tags under a deterministic, unique, local identifier wich will skip + * the build if it already exists. + */ + private async buildDirectoryAsset(): Promise { + const localTagName = `cdkasset-${this.asset.id.assetId.toLowerCase()}`; + + if (!(await this.isImageCached(localTagName))) { + if (this.host.aborted) { return undefined; } + + await this.buildImage(localTagName); + } + + return localTagName; + } + + /** + * Build a (local) Docker asset by running an external command + * + * External command is responsible for deduplicating the build if possible, + * and is expected to return the generated image identifier on stdout. + */ + private async buildExternalAsset(executable: string[]): Promise { + this.host.emitMessage(EventType.BUILD, `Building Docker image using command '${executable}'`); + if (this.host.aborted) { return undefined; } + + return (await shell(executable, { quiet: true })).trim(); + } + + + /** + * Check whether the image already exists in the ECR repo + * + * Use the fields from the destination to do the actual check. The imageUri + * should correspond to that, but is only used to print Docker image location + * for user benefit (the format is slightly different). + */ + private async destinationAlreadyExists(ecr: AWS.ECR, destination: DockerImageDestination, imageUri: string): Promise { + this.host.emitMessage(EventType.CHECK, `Check ${imageUri}`); + if (await imageExists(ecr, destination.repositoryName, destination.imageTag)) { + this.host.emitMessage(EventType.FOUND, `Found ${imageUri}`); + return true; } + return false; + } + + private async buildImage(localTagName: string): Promise { const source = this.asset.source; + if (!source.directory) { + throw new Error(`'directory' is expected in the DockerImage asset source, got: ${JSON.stringify(source)}`); + } const fullPath = path.resolve(this.workDir, source.directory); this.host.emitMessage(EventType.BUILD, `Building Docker image at ${fullPath}`); await this.docker.build({ directory: fullPath, - tag: this.localTagName, + tag: localTagName, buildArgs: source.dockerBuildArgs, target: source.dockerBuildTarget, file: source.dockerFile, }); } + + private async isImageCached(localTagName: string): Promise { + if (await this.docker.exists(localTagName)) { + this.host.emitMessage(EventType.CACHED, `Cached ${localTagName}`); + return true; + } + + return false; + } } async function imageExists(ecr: AWS.ECR, repositoryName: string, imageTag: string) { @@ -93,4 +148,4 @@ async function repositoryUri(ecr: AWS.ECR, repositoryName: string): Promise { - const source = this.asset.source; - const fullPath = path.resolve(this.workDir, this.asset.source.path); + private async packageFile(source: FileSource): Promise { + if (!source.path) { + throw new Error(`'path' is expected in the File asset source, got: ${JSON.stringify(source)}`); + } + + const fullPath = path.resolve(this.workDir, source.path); if (source.packaging === FileAssetPackaging.ZIP_DIRECTORY) { + const contentType = 'application/zip'; + await fs.mkdir(this.fileCacheRoot, { recursive: true }); - const ret = path.join(this.fileCacheRoot, `${this.asset.id.assetId}.zip`); + const packagedPath = path.join(this.fileCacheRoot, `${this.asset.id.assetId}.zip`); - if (await pathExists(ret)) { - this.host.emitMessage(EventType.CACHED, `From cache ${ret}`); - return ret; + if (await pathExists(packagedPath)) { + this.host.emitMessage(EventType.CACHED, `From cache ${path}`); + return { packagedPath, contentType }; } - this.host.emitMessage(EventType.BUILD, `Zip ${fullPath} -> ${ret}`); - await zipDirectory(fullPath, ret); - return ret; + this.host.emitMessage(EventType.BUILD, `Zip ${fullPath} -> ${path}`); + await zipDirectory(fullPath, packagedPath); + return { packagedPath, contentType }; } else { - return fullPath; + return { packagedPath: fullPath }; } } + + private async externalPackageFile(executable: string[]): Promise { + this.host.emitMessage(EventType.BUILD, `Building asset source using command: '${executable}'`); + + return { + packagedPath: (await shell(executable, { quiet: true })).trim(), + contentType: 'application/zip', + }; + } } enum BucketOwnership { @@ -109,3 +124,21 @@ async function objectExists(s3: AWS.S3, bucket: string, key: string) { const response = await s3.listObjectsV2({ Bucket: bucket, Prefix: key, MaxKeys: 1 }).promise(); return response.Contents != null && response.Contents.some(object => object.Key === key); } + + +/** + * A packaged asset which can be uploaded (either a single file or directory) + */ +interface PackagedFileAsset { + /** + * Path of the file or directory + */ + readonly packagedPath: string; + + /** + * Content type to be added in the S3 upload action + * + * @default - No content type + */ + readonly contentType?: string; +} diff --git a/packages/cdk-assets/lib/private/handlers/index.ts b/packages/cdk-assets/lib/private/handlers/index.ts index 2e4d406ce5b0b..97ec7354279df 100644 --- a/packages/cdk-assets/lib/private/handlers/index.ts +++ b/packages/cdk-assets/lib/private/handlers/index.ts @@ -12,4 +12,4 @@ export function makeAssetHandler(manifest: AssetManifest, asset: IManifestEntry, } throw new Error(`Unrecognized asset type: '${asset}'`); -} \ No newline at end of file +} diff --git a/packages/cdk-assets/test/docker-images.test.ts b/packages/cdk-assets/test/docker-images.test.ts index 3f0aeaabf474c..3b608a1e63ffe 100644 --- a/packages/cdk-assets/test/docker-images.test.ts +++ b/packages/cdk-assets/test/docker-images.test.ts @@ -9,6 +9,8 @@ import { mockSpawn } from './mock-child_process'; let aws: ReturnType; const absoluteDockerPath = '/simple/cdk.out/dockerdir'; beforeEach(() => { + jest.resetAllMocks(); + mockfs({ '/simple/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), @@ -28,6 +30,24 @@ beforeEach(() => { }, }, }), + '/external/cdk.out/assets.json': JSON.stringify({ + version: Manifest.version(), + dockerImages: { + theExternalAsset: { + source: { + executable: ['sometool'], + }, + destinations: { + theDestination: { + region: 'us-north-50', + assumeRoleArn: 'arn:aws:role', + repositoryName: 'repo', + imageTag: 'ghijkl', + }, + }, + }, + }, + }), '/simple/cdk.out/dockerdir/Dockerfile': 'FROM scratch', '/abs/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), @@ -92,7 +112,7 @@ describe('with a complete manifest', () => { ], }); - mockSpawn( + const expectAllSpawns = mockSpawn( { commandLine: ['docker', 'login', '--username', 'user', '--password-stdin', 'https://proxy.com/'] }, { commandLine: ['docker', 'inspect', 'cdkasset-theasset'] }, { commandLine: ['docker', 'tag', 'cdkasset-theasset', '12345.amazonaws.com/repo:abcdef'] }, @@ -100,6 +120,9 @@ describe('with a complete manifest', () => { ); await pub.publish(); + + expectAllSpawns(); + expect(true).toBeTruthy(); // Expect no exception, satisfy linter }); test('build and upload docker image if not exists anywhere', async () => { @@ -110,7 +133,7 @@ describe('with a complete manifest', () => { ], }); - mockSpawn( + const expectAllSpawns = mockSpawn( { commandLine: ['docker', 'login', '--username', 'user', '--password-stdin', 'https://proxy.com/'] }, { commandLine: ['docker', 'inspect', 'cdkasset-theasset'], exitCode: 1 }, { commandLine: ['docker', 'build', '--tag', 'cdkasset-theasset', '.'], cwd: absoluteDockerPath }, @@ -119,6 +142,41 @@ describe('with a complete manifest', () => { ); await pub.publish(); + + expectAllSpawns(); + expect(true).toBeTruthy(); // Expect no exception, satisfy linter + }); +}); + +describe('external assets', () => { + let pub: AssetPublishing; + const externalTag = 'external:tag'; + beforeEach(() => { + pub = new AssetPublishing(AssetManifest.fromPath('/external/cdk.out'), { aws }); + }); + + test('upload externally generated Docker image', async () => { + aws.mockEcr.describeImages = mockedApiFailure('ImageNotFoundException', 'File does not exist'); + aws.mockEcr.getAuthorizationToken = mockedApiResult({ + authorizationData: [ + { authorizationToken: 'dXNlcjpwYXNz', proxyEndpoint: 'https://proxy.com/' }, + ], + }); + + const expectAllSpawns = mockSpawn( + { commandLine: ['docker', 'login', '--username', 'user', '--password-stdin', 'https://proxy.com/'] }, + { commandLine: ['sometool'], stdout: externalTag }, + { commandLine: ['docker', 'tag', externalTag, '12345.amazonaws.com/repo:ghijkl'] }, + { commandLine: ['docker', 'push', '12345.amazonaws.com/repo:ghijkl'] }, + ); + + await pub.publish(); + + expect(aws.ecrClient).toHaveBeenCalledWith(expect.objectContaining({ + region: 'us-north-50', + assumeRoleArn: 'arn:aws:role', + })); + expectAllSpawns(); }); }); @@ -132,7 +190,7 @@ test('correctly identify Docker directory if path is absolute', async () => { ], }); - mockSpawn( + const expectAllSpawns = mockSpawn( // Only care about the 'build' command line { commandLine: ['docker', 'login'], prefix: true }, { commandLine: ['docker', 'inspect'], exitCode: 1, prefix: true }, @@ -142,4 +200,7 @@ test('correctly identify Docker directory if path is absolute', async () => { ); await pub.publish(); + + expect(true).toBeTruthy(); // Expect no exception, satisfy linter + expectAllSpawns(); }); diff --git a/packages/cdk-assets/test/files.test.ts b/packages/cdk-assets/test/files.test.ts index e8c7247ef7f42..42cb8a71c05ad 100644 --- a/packages/cdk-assets/test/files.test.ts +++ b/packages/cdk-assets/test/files.test.ts @@ -1,10 +1,17 @@ +jest.mock('child_process'); + import { Manifest } from '@aws-cdk/cloud-assembly-schema'; import * as mockfs from 'mock-fs'; import { AssetManifest, AssetPublishing } from '../lib'; import { mockAws, mockedApiResult, mockUpload } from './mock-aws'; +import { mockSpawn } from './mock-child_process'; + +const ABS_PATH = '/simple/cdk.out/some_external_file'; let aws: ReturnType; beforeEach(() => { + jest.resetAllMocks(); + mockfs({ '/simple/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), @@ -25,6 +32,7 @@ beforeEach(() => { }, }), '/simple/cdk.out/some_file': 'FILE_CONTENTS', + [ABS_PATH]: 'FILE_CONTENTS', '/abs/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), files: { @@ -36,7 +44,25 @@ beforeEach(() => { theDestination: { region: 'us-north-50', assumeRoleArn: 'arn:aws:role', - bucketName: 'some_bucket', + bucketName: 'some_other_bucket', + objectKey: 'some_key', + }, + }, + }, + }, + }), + '/external/cdk.out/assets.json': JSON.stringify({ + version: Manifest.version(), + files: { + externalAsset: { + source: { + executable: ['sometool'], + }, + destinations: { + theDestination: { + region: 'us-north-50', + assumeRoleArn: 'arn:aws:role', + bucketName: 'some_external_bucket', objectKey: 'some_key', }, }, @@ -127,4 +153,40 @@ test('correctly identify asset path if path is absolute', async () => { aws.mockS3.upload = mockUpload('FILE_CONTENTS'); await pub.publish(); + + expect(true).toBeTruthy(); // No exception, satisfy linter +}); + +describe('external assets', () => { + let pub: AssetPublishing; + beforeEach(() => { + pub = new AssetPublishing(AssetManifest.fromPath('/external/cdk.out'), { aws }); + }); + + test('do nothing if file exists already', async () => { + aws.mockS3.listObjectsV2 = mockedApiResult({ Contents: [{ Key: 'some_key' }] }); + + await pub.publish(); + + expect(aws.mockS3.listObjectsV2).toHaveBeenCalledWith(expect.objectContaining({ + Bucket: 'some_external_bucket', + Prefix: 'some_key', + MaxKeys: 1, + })); + }); + + test('upload external asset correctly', async () => { + aws.mockS3.listObjectsV2 = mockedApiResult({ Contents: undefined }); + aws.mockS3.upload = mockUpload('FILE_CONTENTS'); + const expectAllSpawns = mockSpawn({ commandLine: ['sometool'], stdout: ABS_PATH }); + + await pub.publish(); + + expect(aws.s3Client).toHaveBeenCalledWith(expect.objectContaining({ + region: 'us-north-50', + assumeRoleArn: 'arn:aws:role', + })); + + expectAllSpawns(); + }); }); diff --git a/packages/cdk-assets/test/mock-child_process.ts b/packages/cdk-assets/test/mock-child_process.ts index da0fd27d08fe6..2cb513e24fff7 100644 --- a/packages/cdk-assets/test/mock-child_process.ts +++ b/packages/cdk-assets/test/mock-child_process.ts @@ -17,7 +17,7 @@ export interface Invocation { prefix?: boolean; } -export function mockSpawn(...invocations: Invocation[]) { +export function mockSpawn(...invocations: Invocation[]): () => void { let mock = (child_process.spawn as any); for (const _invocation of invocations) { const invocation = _invocation; // Mirror into variable for closure @@ -42,7 +42,7 @@ export function mockSpawn(...invocations: Invocation[]) { child.stderr = new events.EventEmitter(); if (invocation.stdout) { - mockEmit(child.stdout, 'data', invocation.stdout); + mockEmit(child.stdout, 'data', Buffer.from(invocation.stdout)); } mockEmit(child, 'close', invocation.exitCode ?? 0); @@ -53,6 +53,10 @@ export function mockSpawn(...invocations: Invocation[]) { mock.mockImplementation((binary: string, args: string[], _options: any) => { throw new Error(`Did not expect call of ${JSON.stringify([binary, ...args])}`); }); + + return () => { + expect(mock).toHaveBeenCalledTimes(invocations.length); + }; } /** From 85d31599c3d63eb2c517e484a7ddb4b30ff428a4 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 11 Jan 2021 11:51:31 +0000 Subject: [PATCH 03/54] feat(iam): import users by arn or attributes #12340 (#12388) Import IAM users by ARN or attributes. Closes #12340 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-iam/README.md | 28 ++++++++++++ packages/@aws-cdk/aws-iam/lib/user.ts | 44 ++++++++++++++++--- .../aws-iam/test/integ.user.expected.json | 13 +++++- packages/@aws-cdk/aws-iam/test/integ.user.ts | 14 +++++- packages/@aws-cdk/aws-iam/test/user.test.ts | 28 +++++++++++- 5 files changed, 118 insertions(+), 9 deletions(-) diff --git a/packages/@aws-cdk/aws-iam/README.md b/packages/@aws-cdk/aws-iam/README.md index a676af6352cf2..d9488e7d081c8 100644 --- a/packages/@aws-cdk/aws-iam/README.md +++ b/packages/@aws-cdk/aws-iam/README.md @@ -320,6 +320,34 @@ const provider = new iam.OpenIdConnectProvider(this, 'MyProvider', { const principal = new iam.OpenIdConnectPrincipal(provider); ``` +## Users + +IAM manages users for your AWS account. To create a new user: + +```ts +const user = new User(this, 'MyUser'); +``` + +To import an existing user by name [with path](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-friendly-names): + +```ts +const user = User.fromUserName(stack, 'MyImportedUserByName', 'johnsmith'); +``` + +To import an existing user by ARN: + +```ts +const user = User.fromUserArn(this, 'MyImportedUserByArn', 'arn:aws:iam::123456789012:user/johnsmith'); +``` + +To import an existing user by attributes: + +```ts +const user = User.fromUserAttributes(stack, 'MyImportedUserByAttributes', { + userArn: 'arn:aws:iam::123456789012:user/johnsmith', +}); +``` + ## Features * Policy name uniqueness is enforced. If two policies by the same name are attached to the same diff --git a/packages/@aws-cdk/aws-iam/lib/user.ts b/packages/@aws-cdk/aws-iam/lib/user.ts index a8c3b61443771..5c8f6418a9bb8 100644 --- a/packages/@aws-cdk/aws-iam/lib/user.ts +++ b/packages/@aws-cdk/aws-iam/lib/user.ts @@ -1,4 +1,4 @@ -import { Aws, Lazy, Resource, SecretValue, Stack } from '@aws-cdk/core'; +import { Arn, Aws, Lazy, Resource, SecretValue, Stack } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { IGroup } from './group'; import { CfnUser } from './iam.generated'; @@ -119,6 +119,18 @@ export interface UserProps { readonly passwordResetRequired?: boolean; } +/** + * Represents a user defined outside of this stack. + */ +export interface UserAttributes { + /** + * The ARN of the user. + * + * Format: arn::iam:::user/ + */ + readonly userArn: string; +} + /** * Define a new IAM user */ @@ -131,20 +143,42 @@ export class User extends Resource implements IIdentity, IUser { * @param userName the username of the existing user to import */ public static fromUserName(scope: Construct, id: string, userName: string): IUser { - const arn = Stack.of(scope).formatArn({ + const userArn = Stack.of(scope).formatArn({ service: 'iam', region: '', resource: 'user', resourceName: userName, }); + return User.fromUserAttributes(scope, id, { userArn }); + } + + /** + * Import an existing user given a user ARN. + * + * @param scope construct scope + * @param id construct id + * @param userArn the ARN of an existing user to import + */ + public static fromUserArn(scope: Construct, id: string, userArn: string): IUser { + return User.fromUserAttributes(scope, id, { userArn }); + } + + /** + * Import an existing user given user attributes. + * + * @param scope construct scope + * @param id construct id + * @param attrs the attributes of the user to import + */ + public static fromUserAttributes(scope: Construct, id: string, attrs: UserAttributes): IUser { class Import extends Resource implements IUser { public readonly grantPrincipal: IPrincipal = this; public readonly principalAccount = Aws.ACCOUNT_ID; - public readonly userName: string = userName; - public readonly userArn: string = arn; + public readonly userName: string = Arn.extractResourceName(attrs.userArn, 'user'); + public readonly userArn: string = attrs.userArn; public readonly assumeRoleAction: string = 'sts:AssumeRole'; - public readonly policyFragment: PrincipalPolicyFragment = new ArnPrincipal(arn).policyFragment; + public readonly policyFragment: PrincipalPolicyFragment = new ArnPrincipal(attrs.userArn).policyFragment; private readonly attachedPolicies = new AttachedPolicies(); private defaultPolicy?: Policy; diff --git a/packages/@aws-cdk/aws-iam/test/integ.user.expected.json b/packages/@aws-cdk/aws-iam/test/integ.user.expected.json index 2c4bc6c9b52c0..a57b3db4c6f32 100644 --- a/packages/@aws-cdk/aws-iam/test/integ.user.expected.json +++ b/packages/@aws-cdk/aws-iam/test/integ.user.expected.json @@ -4,11 +4,22 @@ "Type": "AWS::IAM::User", "Properties": { "LoginProfile": { - "Password": "1234", + "Password": "Test1234567890!", "PasswordResetRequired": true }, "UserName": "benisrae" } } + }, + "Outputs": { + "NameForUserImportedByArn": { + "Value": "rossrhodes" + }, + "NameForUserImportedByAttributes": { + "Value": "johndoe" + }, + "NameForUserImportedByName": { + "Value": "janedoe" + } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-iam/test/integ.user.ts b/packages/@aws-cdk/aws-iam/test/integ.user.ts index 198f3ecb77c4c..7f8d00695742c 100644 --- a/packages/@aws-cdk/aws-iam/test/integ.user.ts +++ b/packages/@aws-cdk/aws-iam/test/integ.user.ts @@ -1,4 +1,4 @@ -import { App, SecretValue, Stack } from '@aws-cdk/core'; +import { App, CfnOutput, SecretValue, Stack } from '@aws-cdk/core'; import { User } from '../lib'; const app = new App(); @@ -7,8 +7,18 @@ const stack = new Stack(app, 'aws-cdk-iam-user'); new User(stack, 'MyUser', { userName: 'benisrae', - password: SecretValue.plainText('1234'), + password: SecretValue.plainText('Test1234567890!'), passwordResetRequired: true, }); +const userImportedByArn = User.fromUserArn(stack, 'ImportedUserByArn', 'arn:aws:iam::123456789012:user/rossrhodes'); +const userImportedByAttributes = User.fromUserAttributes(stack, 'ImportedUserByAttributes', { + userArn: 'arn:aws:iam::123456789012:user/johndoe', +}); +const userImportedByName = User.fromUserName(stack, 'ImportedUserByName', 'janedoe'); + +new CfnOutput(stack, 'NameForUserImportedByArn', { value: userImportedByArn.userName }); +new CfnOutput(stack, 'NameForUserImportedByAttributes', { value: userImportedByAttributes.userName }); +new CfnOutput(stack, 'NameForUserImportedByName', { value: userImportedByName.userName }); + app.synth(); diff --git a/packages/@aws-cdk/aws-iam/test/user.test.ts b/packages/@aws-cdk/aws-iam/test/user.test.ts index 9908eeac2c6c7..4a59a86d4a45d 100644 --- a/packages/@aws-cdk/aws-iam/test/user.test.ts +++ b/packages/@aws-cdk/aws-iam/test/user.test.ts @@ -81,7 +81,7 @@ describe('IAM user', () => { }); }); - test('imported user has an ARN', () => { + test('user imported by user name has an ARN', () => { // GIVEN const stack = new Stack(); @@ -94,6 +94,32 @@ describe('IAM user', () => { }); }); + test('user imported by user ARN has a name', () => { + // GIVEN + const stack = new Stack(); + const userName = 'MyUserName'; + + // WHEN + const user = User.fromUserArn(stack, 'import', `arn:aws:iam::account-id:user/${userName}`); + + // THEN + expect(stack.resolve(user.userName)).toStrictEqual(userName); + }); + + test('user imported by user attributes has a name', () => { + // GIVEN + const stack = new Stack(); + const userName = 'MyUserName'; + + // WHEN + const user = User.fromUserAttributes(stack, 'import', { + userArn: `arn:aws:iam::account-id:user/${userName}`, + }); + + // THEN + expect(stack.resolve(user.userName)).toStrictEqual(userName); + }); + test('add to policy of imported user', () => { // GIVEN const stack = new Stack(); From 2389a9b5742583f1d58c66a4f513ee4d833baab5 Mon Sep 17 00:00:00 2001 From: bitbauer <4582513+bitbauer@users.noreply.github.com> Date: Mon, 11 Jan 2021 14:49:08 +0100 Subject: [PATCH 04/54] fix(cli): CLI doesn't read context from ~/.cdk.json (#12394) Right now, Configuration.load() completely ignores context structure in ~/.cdk.json. Documentation says it will merge context of ~/.cdk.json. Fixes #10823, fixes #4802 Change that behavior to merge context of userConfig in Configuration.load() Add tests for this behavior and first test for ~/.cdk.json at all ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/aws-cdk/lib/settings.ts | 3 +- packages/aws-cdk/test/usersettings.test.ts | 72 ++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 packages/aws-cdk/test/usersettings.test.ts diff --git a/packages/aws-cdk/lib/settings.ts b/packages/aws-cdk/lib/settings.ts index 0663d021f63d3..f61d2ebd270da 100644 --- a/packages/aws-cdk/lib/settings.ts +++ b/packages/aws-cdk/lib/settings.ts @@ -98,7 +98,8 @@ export class Configuration { this.context = new Context( this.commandLineContext, this.projectConfig.subSettings([CONTEXT_KEY]).makeReadOnly(), - this.projectContext); + this.projectContext, + userConfig.subSettings([CONTEXT_KEY]).makeReadOnly()); // Build settings from what's left this.settings = this.defaultConfig diff --git a/packages/aws-cdk/test/usersettings.test.ts b/packages/aws-cdk/test/usersettings.test.ts new file mode 100644 index 0000000000000..948b3b3f907bc --- /dev/null +++ b/packages/aws-cdk/test/usersettings.test.ts @@ -0,0 +1,72 @@ +import * as os from 'os'; +import * as fs_path from 'path'; +import * as fs from 'fs-extra'; +import { mocked } from 'ts-jest/utils'; +import { Configuration, PROJECT_CONFIG, PROJECT_CONTEXT } from '../lib/settings'; + +// mock fs deeply +jest.mock('fs-extra'); +const mockedFs = mocked(fs, true); + +const USER_CONFIG = fs_path.join(os.homedir(), '.cdk.json'); + +test('load settings from both files if available', async () => { + // GIVEN + const GIVEN_CONFIG: Map = new Map([ + [PROJECT_CONFIG, { + project: 'foobar', + }], + [USER_CONFIG, { + project: 'foo', + test: 'bar', + }], + ]); + + // WHEN + mockedFs.pathExists.mockImplementation(path => { + return GIVEN_CONFIG.has(path); + }); + mockedFs.readJSON.mockImplementation(path => { + return GIVEN_CONFIG.get(path); + }); + + const config = await new Configuration().load(); + + // THEN + expect(config.settings.get(['project'])).toBe('foobar'); + expect(config.settings.get(['test'])).toBe('bar'); +}); + +test('load context from all 3 files if available', async () => { + // GIVEN + const GIVEN_CONFIG: Map = new Map([ + [PROJECT_CONFIG, { + context: { + project: 'foobar', + }, + }], + [PROJECT_CONTEXT, { + foo: 'bar', + }], + [USER_CONFIG, { + context: { + test: 'bar', + }, + }], + ]); + + // WHEN + mockedFs.pathExists.mockImplementation(path => { + return GIVEN_CONFIG.has(path); + }); + mockedFs.readJSON.mockImplementation(path => { + return GIVEN_CONFIG.get(path); + }); + + const config = await new Configuration().load(); + + // THEN + expect(config.context.get('project')).toBe('foobar'); + expect(config.context.get('foo')).toBe('bar'); + expect(config.context.get('test')).toBe('bar'); +}); \ No newline at end of file From 26121c81abf0fb92de97567c758a1ecf60f85f63 Mon Sep 17 00:00:00 2001 From: Rafael Zamana Date: Mon, 11 Jan 2021 16:40:43 +0100 Subject: [PATCH 05/54] feat(core): validate maximum amount of resources in a stack (#12193) closes #276 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/core/README.md | 8 +++ packages/@aws-cdk/core/lib/stack.ts | 25 +++++++++ packages/@aws-cdk/core/test/stack.test.ts | 62 +++++++++++++++++++++++ 3 files changed, 95 insertions(+) diff --git a/packages/@aws-cdk/core/README.md b/packages/@aws-cdk/core/README.md index 3b013f3ff990e..8c5ce270d8dc1 100644 --- a/packages/@aws-cdk/core/README.md +++ b/packages/@aws-cdk/core/README.md @@ -843,3 +843,11 @@ IAM operator, we need it in the *key* of a `StringEquals` condition. JSON keys *must be* strings, so to circumvent this limitation, we use `CfnJson` to "delay" the rendition of this template section to deploy-time. This means that the value of `StringEquals` in the template will be `{ "Fn::GetAtt": [ "ConditionJson", "Value" ] }`, and will only "expand" to the operator we synthesized during deployment. + +### Stack Resource Limit + +When deploying to AWS CloudFormation, it needs to keep in check the amount of resources being added inside a Stack. Currently it's possible to check the limits in the [AWS CloudFormation quotas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) page. + +It's possible to synthesize the project with more Resources than the allowed (or even reduce the number of Resources). + +Set the context key `@aws-cdk/core:stackResourceLimit` with the proper value, being 0 for disable the limit of resources. diff --git a/packages/@aws-cdk/core/lib/stack.ts b/packages/@aws-cdk/core/lib/stack.ts index e1664e2996a90..c6a8a56916f2f 100644 --- a/packages/@aws-cdk/core/lib/stack.ts +++ b/packages/@aws-cdk/core/lib/stack.ts @@ -27,8 +27,12 @@ import { Construct as CoreConstruct } from './construct-compat'; const STACK_SYMBOL = Symbol.for('@aws-cdk/core.Stack'); const MY_STACK_CACHE = Symbol.for('@aws-cdk/core.Stack.myStack'); +export const STACK_RESOURCE_LIMIT_CONTEXT = '@aws-cdk/core:stackResourceLimit'; + const VALID_STACK_NAME_REGEX = /^[A-Za-z][A-Za-z0-9-]*$/; +const MAX_RESOURCES = 500; + export interface StackProps { /** * A description of the stack. @@ -753,6 +757,17 @@ export class Stack extends CoreConstruct implements ITaggable { // write the CloudFormation template as a JSON file const outPath = path.join(builder.outdir, this.templateFile); + + if (this.maxResources > 0) { + const resources = template.Resources || {}; + const numberOfResources = Object.keys(resources).length; + + if (numberOfResources > this.maxResources) { + throw new Error(`Number of resources: ${numberOfResources} is greater than allowed maximum of ${this.maxResources}`); + } else if (numberOfResources >= (this.maxResources * 0.8)) { + Annotations.of(this).addInfo(`Number of resources: ${numberOfResources} is approaching allowed maximum of ${this.maxResources}`); + } + } fs.writeFileSync(outPath, JSON.stringify(template, undefined, 2)); for (const ctx of this._missingContext) { @@ -907,6 +922,16 @@ export class Stack extends CoreConstruct implements ITaggable { }; } + /** + * Maximum number of resources in the stack + * + * Set to 0 to mean "unlimited". + */ + private get maxResources(): number { + const contextLimit = this.node.tryGetContext(STACK_RESOURCE_LIMIT_CONTEXT); + return contextLimit !== undefined ? parseInt(contextLimit, 10) : MAX_RESOURCES; + } + /** * Check whether this stack has a (transitive) dependency on another stack * diff --git a/packages/@aws-cdk/core/test/stack.test.ts b/packages/@aws-cdk/core/test/stack.test.ts index 63c04be2e81de..581f4ed003895 100644 --- a/packages/@aws-cdk/core/test/stack.test.ts +++ b/packages/@aws-cdk/core/test/stack.test.ts @@ -45,6 +45,68 @@ nodeunitShim({ test.done(); }, + 'when stackResourceLimit is default, should give error'(test: Test) { + // GIVEN + const app = new App({}); + + const stack = new Stack(app, 'MyStack'); + + // WHEN + for (let index = 0; index < 1000; index++) { + new CfnResource(stack, `MyResource-${index}`, { type: 'MyResourceType' }); + } + + test.throws(() => { + app.synth(); + }, 'Number of resources: 1000 is greater than allowed maximum of 500'); + + test.done(); + }, + + 'when stackResourceLimit is defined, should give the proper error'(test: Test) { + // GIVEN + const app = new App({ + context: { + '@aws-cdk/core:stackResourceLimit': 100, + }, + }); + + const stack = new Stack(app, 'MyStack'); + + // WHEN + for (let index = 0; index < 200; index++) { + new CfnResource(stack, `MyResource-${index}`, { type: 'MyResourceType' }); + } + + test.throws(() => { + app.synth(); + }, 'Number of resources: 200 is greater than allowed maximum of 100'); + + test.done(); + }, + + 'when stackResourceLimit is 0, should not give error'(test: Test) { + // GIVEN + const app = new App({ + context: { + '@aws-cdk/core:stackResourceLimit': 0, + }, + }); + + const stack = new Stack(app, 'MyStack'); + + // WHEN + for (let index = 0; index < 1000; index++) { + new CfnResource(stack, `MyResource-${index}`, { type: 'MyResourceType' }); + } + + test.doesNotThrow(() => { + app.synth(); + }); + + test.done(); + }, + 'stack.templateOptions can be used to set template-level options'(test: Test) { const stack = new Stack(); From cc745f88df10a1cfda467e75f69777e2d3c20291 Mon Sep 17 00:00:00 2001 From: Niranjan Jayakar Date: Mon, 11 Jan 2021 16:17:49 +0000 Subject: [PATCH 06/54] chore(lambda): throw a relevant error message when asset is used across stacks (#12420) Although the constructor of the AssetCode doesn't imply it's real dependencies, an AssetCode currently can only be associated to consumers within a single stack. Attempting to use them across stacks results in the conspicuous error - "Cannot reference across apps. Consuming and producing stacks must be defined within the same CDK app." The correct solution here would have been to model this such that the stack dependency is made explicit on the customer facing API, perhaps by taking a 'scope' parameter. For the moment, throw a more relevant error message so that it's obvious to the user on what is wrong. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-lambda/lib/code.ts | 3 +++ .../@aws-cdk/aws-lambda/test/code.test.ts | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/@aws-cdk/aws-lambda/lib/code.ts b/packages/@aws-cdk/aws-lambda/lib/code.ts index fef200a9a6c9c..b2323008bb5fd 100644 --- a/packages/@aws-cdk/aws-lambda/lib/code.ts +++ b/packages/@aws-cdk/aws-lambda/lib/code.ts @@ -248,6 +248,9 @@ export class AssetCode extends Code { path: this.path, ...this.options, }); + } else if (cdk.Stack.of(this.asset) !== cdk.Stack.of(scope)) { + throw new Error(`Asset is already associated with another stack '${cdk.Stack.of(this.asset).stackName}'. ` + + 'Create a new Code instance for every stack.'); } if (!this.asset.isZipArchive) { diff --git a/packages/@aws-cdk/aws-lambda/test/code.test.ts b/packages/@aws-cdk/aws-lambda/test/code.test.ts index a822ba698697e..9b99c095c2467 100644 --- a/packages/@aws-cdk/aws-lambda/test/code.test.ts +++ b/packages/@aws-cdk/aws-lambda/test/code.test.ts @@ -77,6 +77,26 @@ describe('code', () => { }, }, ResourcePart.CompleteDefinition); }); + + test('fails if asset is bound with a second stack', () => { + // GIVEN + const asset = lambda.Code.fromAsset(path.join(__dirname, 'my-lambda-handler')); + + const app = new cdk.App(); + const stack1 = new cdk.Stack(app, 'Stack1'); + new lambda.Function(stack1, 'Func', { + code: asset, + runtime: lambda.Runtime.NODEJS_10_X, + handler: 'foom', + }); + + const stack2 = new cdk.Stack(app, 'Stack2'); + expect(() => new lambda.Function(stack2, 'Func', { + code: asset, + runtime: lambda.Runtime.NODEJS_10_X, + handler: 'foom', + })).toThrow(/already associated/); + }); }); describe('lambda.Code.fromCfnParameters', () => { From 422dc8e9d50105af4e710d409a4f301079d43f3f Mon Sep 17 00:00:00 2001 From: Alvin Tanjaya Date: Tue, 12 Jan 2021 01:41:28 +0700 Subject: [PATCH 07/54] feat(codebuild): support Standard 5.0 (#12434) Closes: #12433 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-codebuild/lib/project.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/@aws-cdk/aws-codebuild/lib/project.ts b/packages/@aws-cdk/aws-codebuild/lib/project.ts index 461bb8fd5e233..13df5688ee151 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/project.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/project.ts @@ -1436,6 +1436,8 @@ export class LinuxBuildImage implements IBuildImage { public static readonly STANDARD_3_0 = LinuxBuildImage.codeBuildImage('aws/codebuild/standard:3.0'); /** The `aws/codebuild/standard:4.0` build image. */ public static readonly STANDARD_4_0 = LinuxBuildImage.codeBuildImage('aws/codebuild/standard:4.0'); + /** The `aws/codebuild/standard:5.0` build image. */ + public static readonly STANDARD_5_0 = LinuxBuildImage.codeBuildImage('aws/codebuild/standard:5.0'); public static readonly AMAZON_LINUX_2 = LinuxBuildImage.codeBuildImage('aws/codebuild/amazonlinux2-x86_64-standard:1.0'); public static readonly AMAZON_LINUX_2_2 = LinuxBuildImage.codeBuildImage('aws/codebuild/amazonlinux2-x86_64-standard:2.0'); From 5f6f0f9d46dbd460ac03dd5f9f4874eaa41611d8 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Tue, 12 Jan 2021 15:36:48 +0200 Subject: [PATCH 08/54] fix(eks): nodegroup synthesis fails when configured with an AMI type that is not compatible to the default instance type (#12441) > Note: both issues here were introduced in https://github.com/aws/aws-cdk/pull/11962 ## Problem 1 When creating a `Nodegroup` without passing instance types, we currently default to use `t3.medium`: https://github.com/aws/aws-cdk/blob/da1ed08a6a2de584f5ddf43dab4efbb530541419/packages/%40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L294 This default is then used to calculate the expected AMI type, and assert that the configured AMI type is indeed as expected: https://github.com/aws/aws-cdk/blob/da1ed08a6a2de584f5ddf43dab4efbb530541419/packages/%40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L302-L304 However, a user might configure instance types on the launch template, and an AMI type on the nodegroup. In this scenario, we still use the default instance type to perform the validation, which will fail if the ami type is not compatible with it. To make things worse, we don't actually use the default instance type at all, apart from the validation: https://github.com/aws/aws-cdk/blob/da1ed08a6a2de584f5ddf43dab4efbb530541419/packages/%40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L329-L330 And in-fact, this default was only introduced in this [PR](https://github.com/aws/aws-cdk/pull/11962), which also added the problematic validation. ### Solution Drop the default instance type altogether, like it was before. The new validation will only take place if the user explicitly configured both `instanceTypes` and `amiType` on the nodegroup. Since the default value was never actually used, this doesn't incur any behavior change. ## Problem 2 When a launch template is used, we currently ignore the value of `amiType` explicitly passed by the user: https://github.com/aws/aws-cdk/blob/da1ed08a6a2de584f5ddf43dab4efbb530541419/packages/%40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L324-L325 This behavior means that users who configured a launch template without a custom ami, and passing an `amiType` to the nodegroup, would now result in no ami specification at all, defaulting to whatever EKS does, which might not be what the user had in mind. There's no good reason to do this, we should either throw a validation error if both are used, or pass the explicit value nevertheless, even though it might cause problems. ### Solution When a user explicitly passes an AMI type, just use it and assume the user knows what he/she is doing. When a user does not explicitly pass it, only apply the default if a launch template is not used. > If we apply the default in the presence of a launch template, a user would not be able to escape if they also have a custom AMI in the launch template. This change means that users who previously "relied" on this override, might now experience a deployment failure if they are using a custom AMI in the launch template, those users can resolve the problem by removing the `amiType` property from the nodegroup (since it wasn't used, its not needed). I don't imagine many such users exist since this behavior is new and it doesn't make much sense to configure both a custom AMI and an `amiType`. -------------------- Fixes https://github.com/aws/aws-cdk/issues/12389 BREAKING CHANGE: Explicitly passing `amiType` to nodegroups will now take affect even if a launch template is configured as well. If your launch template contains a custom AMI, this will cause a deployment failure, to resolve, remove the explicit `amiType` from the nodegroup configuration. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../@aws-cdk/aws-eks/lib/managed-nodegroup.ts | 54 +++++++----- .../@aws-cdk/aws-eks/test/test.nodegroup.ts | 86 +++++++++++++++++++ 2 files changed, 118 insertions(+), 22 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts b/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts index 576957512cc6d..7d46fb00c6e92 100644 --- a/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts +++ b/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts @@ -226,10 +226,6 @@ export interface NodegroupProps extends NodegroupOptions { * The Nodegroup resource class */ export class Nodegroup extends Resource implements INodegroup { - /** - * Default instanceTypes - */ - public static readonly DEFAULT_INSTANCE_TYPES = [new InstanceType('t3.medium')]; /** * Import the Nodegroup from attributes */ @@ -291,16 +287,17 @@ export class Nodegroup extends Resource implements INodegroup { if (props.instanceType) { Annotations.of(this).addWarning('"instanceType" is deprecated and will be removed in the next major version. please use "instanceTypes" instead'); } - const instanceTypes = props.instanceTypes ?? (props.instanceType ? [props.instanceType] : Nodegroup.DEFAULT_INSTANCE_TYPES); - // get unique AMI types from instanceTypes - const uniqAmiTypes = getAmiTypes(instanceTypes); - // uniqAmiTypes.length should be at least 1 - if (uniqAmiTypes.length > 1) { - throw new Error('instanceTypes of different CPU architectures is not allowed'); - } - const determinedAmiType = uniqAmiTypes[0]; - if (props.amiType && props.amiType !== determinedAmiType) { - throw new Error(`The specified AMI does not match the instance types architecture, either specify ${determinedAmiType} or dont specify any`); + const instanceTypes = props.instanceTypes ?? (props.instanceType ? [props.instanceType] : undefined); + let expectedAmiType = undefined; + + if (instanceTypes && instanceTypes.length > 0) { + // if the user explicitly configured instance types, we can calculate the expected ami type. + expectedAmiType = getAmiType(instanceTypes); + + // if the user explicitly configured an ami type, make sure its the same as the expected one. + if (props.amiType && props.amiType !== expectedAmiType) { + throw new Error(`The specified AMI does not match the instance types architecture, either specify ${expectedAmiType} or dont specify any`); + } } if (!props.nodeRole) { @@ -321,13 +318,18 @@ export class Nodegroup extends Resource implements INodegroup { nodegroupName: props.nodegroupName, nodeRole: this.role.roleArn, subnets: this.cluster.vpc.selectSubnets(props.subnets).subnetIds, - // AmyType is not allowed by CFN when specifying an image id in your launch template. - amiType: props.launchTemplateSpec === undefined ? determinedAmiType : undefined, + + // if a launch template is configured, we cannot apply a default since it + // might exist in the launch template as well, causing a deployment failure. + amiType: props.launchTemplateSpec !== undefined ? props.amiType : (props.amiType ?? expectedAmiType), + capacityType: props.capacityType ? props.capacityType.valueOf() : undefined, diskSize: props.diskSize, forceUpdateEnabled: props.forceUpdate ?? true, - instanceTypes: props.instanceTypes ? props.instanceTypes.map(t => t.toString()) : - props.instanceType ? [props.instanceType.toString()] : undefined, + + // note that we don't check if a launch template is configured here (even though it might configure instance types as well) + // because this doesn't have a default value, meaning the user had to explicitly configure this. + instanceTypes: instanceTypes?.map(t => t.toString()), labels: props.labels, releaseVersion: props.releaseVersion, remoteAccess: props.remoteAccess ? { @@ -392,8 +394,16 @@ function getAmiTypeForInstanceType(instanceType: InstanceType) { NodegroupAmiType.AL2_X86_64; } -function getAmiTypes(instanceType: InstanceType[]) { - const amiTypes = instanceType.map(i =>getAmiTypeForInstanceType(i)); - // retuen unique AMI types - return [...new Set(amiTypes)]; +// this function examines the CPU architecture of every instance type and determines +// what ami type is compatible for all of them. it either throws or produces a single value because +// instance types of different CPU architectures are not supported. +function getAmiType(instanceTypes: InstanceType[]) { + const amiTypes = new Set(instanceTypes.map(i => getAmiTypeForInstanceType(i))); + if (amiTypes.size == 0) { // protective code, the current implementation will never result in this. + throw new Error(`Cannot determine any ami type comptaible with instance types: ${instanceTypes.map(i => i.toString).join(',')}`); + } + if (amiTypes.size > 1) { + throw new Error('instanceTypes of different CPU architectures is not allowed'); + } + return amiTypes.values().next().value; } diff --git a/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts b/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts index ff962572a6f92..241482d469c65 100644 --- a/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts +++ b/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts @@ -10,6 +10,92 @@ import { testFixture } from './util'; const CLUSTER_VERSION = eks.KubernetesVersion.V1_18; export = { + + 'default ami type is not applied when launch template is configured'(test: Test) { + + // GIVEN + const { stack, vpc } = testFixture(); + + const launchTemplate = new ec2.CfnLaunchTemplate(stack, 'LaunchTemplate', { + launchTemplateData: { + instanceType: ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.MEDIUM).toString(), + }, + }); + + // WHEN + const cluster = new eks.Cluster(stack, 'Cluster', { + vpc, + defaultCapacity: 0, + version: CLUSTER_VERSION, + }); + new eks.Nodegroup(stack, 'Nodegroup', { + cluster, + instanceTypes: [ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.LARGE)], + launchTemplateSpec: { + id: launchTemplate.ref, + version: launchTemplate.attrLatestVersionNumber, + }, + }); + + // THEN + test.equal(expect(stack).value.Resources.Nodegroup62B4B2C1.Properties.AmiType, undefined); + test.done(); + }, + + 'explicit ami type is applied even when launch template is configured'(test: Test) { + + // GIVEN + const { stack, vpc } = testFixture(); + + const launchTemplate = new ec2.CfnLaunchTemplate(stack, 'LaunchTemplate', { + launchTemplateData: { + instanceType: ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.MEDIUM).toString(), + }, + }); + + // WHEN + const cluster = new eks.Cluster(stack, 'Cluster', { + vpc, + defaultCapacity: 0, + version: CLUSTER_VERSION, + }); + new eks.Nodegroup(stack, 'Nodegroup', { + cluster, + amiType: eks.NodegroupAmiType.AL2_X86_64, + launchTemplateSpec: { + id: launchTemplate.ref, + version: launchTemplate.attrLatestVersionNumber, + }, + }); + + // THEN + test.equal(expect(stack).value.Resources.Nodegroup62B4B2C1.Properties.AmiType, 'AL2_x86_64'); + test.done(); + }, + + 'ami type is taken as is when no instance types are configured'(test: Test) { + + // GIVEN + const { stack, vpc } = testFixture(); + + // WHEN + const cluster = new eks.Cluster(stack, 'Cluster', { + vpc, + defaultCapacity: 0, + version: CLUSTER_VERSION, + }); + new eks.Nodegroup(stack, 'Nodegroup', { + cluster, + amiType: eks.NodegroupAmiType.AL2_X86_64_GPU, + }); + + // THEN + expect(stack).to(haveResourceLike('AWS::EKS::Nodegroup', { + AmiType: 'AL2_x86_64_GPU', + })); + test.done(); + }, + 'create nodegroup correctly'(test: Test) { // GIVEN const { stack, vpc } = testFixture(); From e6bb96ff6bae96e3167c82f6de97807217ddb3be Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Tue, 12 Jan 2021 16:48:57 +0200 Subject: [PATCH 09/54] fix(elasticsearch): domain fails due to log publishing keys on unsupported cluster versions (#11622) Don't include the logging keys for disabled logging options as some cluster versions reject unknown keys. Fixes https://github.com/aws/aws-cdk/issues/11223 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../@aws-cdk/aws-elasticsearch/lib/domain.ts | 49 +++++--- .../aws-elasticsearch/test/domain.test.ts | 105 +++++------------- ...asticsearch.advancedsecurity.expected.json | 15 +-- ...elasticsearch.custom-kms-key.expected.json | 8 +- .../test/integ.elasticsearch.expected.json | 14 +-- ...sticsearch.unsignedbasicauth.expected.json | 19 +--- 6 files changed, 67 insertions(+), 143 deletions(-) diff --git a/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts b/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts index 480361c1358f6..668086dab5372 100644 --- a/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts +++ b/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts @@ -1474,6 +1474,36 @@ export class Domain extends DomainBase implements IDomain { }); } + const logPublishing: Record = {}; + + if (this.appLogGroup) { + logPublishing.ES_APPLICATION_LOGS = { + enabled: true, + cloudWatchLogsLogGroupArn: this.appLogGroup.logGroupArn, + }; + } + + if (this.slowSearchLogGroup) { + logPublishing.SEARCH_SLOW_LOGS = { + enabled: true, + cloudWatchLogsLogGroupArn: this.slowSearchLogGroup.logGroupArn, + }; + } + + if (this.slowIndexLogGroup) { + logPublishing.INDEX_SLOW_LOGS = { + enabled: true, + cloudWatchLogsLogGroupArn: this.slowIndexLogGroup.logGroupArn, + }; + } + + if (this.auditLogGroup) { + logPublishing.AUDIT_LOGS = { + enabled: this.auditLogGroup != null, + cloudWatchLogsLogGroupArn: this.auditLogGroup?.logGroupArn, + }; + } + // Create the domain this.domain = new CfnDomain(this, 'Resource', { domainName: this.physicalName, @@ -1506,24 +1536,7 @@ export class Domain extends DomainBase implements IDomain { : undefined, }, nodeToNodeEncryptionOptions: { enabled: nodeToNodeEncryptionEnabled }, - logPublishingOptions: { - AUDIT_LOGS: { - enabled: this.auditLogGroup != null, - cloudWatchLogsLogGroupArn: this.auditLogGroup?.logGroupArn, - }, - ES_APPLICATION_LOGS: { - enabled: this.appLogGroup != null, - cloudWatchLogsLogGroupArn: this.appLogGroup?.logGroupArn, - }, - SEARCH_SLOW_LOGS: { - enabled: this.slowSearchLogGroup != null, - cloudWatchLogsLogGroupArn: this.slowSearchLogGroup?.logGroupArn, - }, - INDEX_SLOW_LOGS: { - enabled: this.slowIndexLogGroup != null, - cloudWatchLogsLogGroupArn: this.slowIndexLogGroup?.logGroupArn, - }, - }, + logPublishingOptions: logPublishing, cognitoOptions: { enabled: props.cognitoKibanaAuth != null, identityPoolId: props.cognitoKibanaAuth?.identityPoolId, diff --git a/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts b/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts index affa1d45e4477..ff85a85e218f8 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts +++ b/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts @@ -89,18 +89,10 @@ test('minimal example renders correctly', () => { Enabled: false, }, LogPublishingOptions: { - AUDIT_LOGS: { - Enabled: false, - }, - ES_APPLICATION_LOGS: { - Enabled: false, - }, - SEARCH_SLOW_LOGS: { - Enabled: false, - }, - INDEX_SLOW_LOGS: { - Enabled: false, - }, + AUDIT_LOGS: assert.ABSENT, + ES_APPLICATION_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: assert.ABSENT, }, NodeToNodeEncryptionOptions: { Enabled: false, @@ -133,9 +125,6 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { - ES_APPLICATION_LOGS: { - Enabled: false, - }, SEARCH_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -145,9 +134,9 @@ describe('log groups', () => { }, Enabled: true, }, - INDEX_SLOW_LOGS: { - Enabled: false, - }, + AUDIT_LOGS: assert.ABSENT, + ES_APPLICATION_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -162,12 +151,6 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { - ES_APPLICATION_LOGS: { - Enabled: false, - }, - SEARCH_SLOW_LOGS: { - Enabled: false, - }, INDEX_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -177,6 +160,9 @@ describe('log groups', () => { }, Enabled: true, }, + AUDIT_LOGS: assert.ABSENT, + ES_APPLICATION_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -200,12 +186,9 @@ describe('log groups', () => { }, Enabled: true, }, - SEARCH_SLOW_LOGS: { - Enabled: false, - }, - INDEX_SLOW_LOGS: { - Enabled: false, - }, + AUDIT_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -237,15 +220,9 @@ describe('log groups', () => { }, Enabled: true, }, - ES_APPLICATION_LOGS: { - Enabled: false, - }, - SEARCH_SLOW_LOGS: { - Enabled: false, - }, - INDEX_SLOW_LOGS: { - Enabled: false, - }, + ES_APPLICATION_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -296,6 +273,7 @@ describe('log groups', () => { }, Enabled: true, }, + AUDIT_LOGS: assert.ABSENT, }, }); expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { @@ -327,6 +305,7 @@ describe('log groups', () => { }, Enabled: true, }, + AUDIT_LOGS: assert.ABSENT, }, }); }); @@ -385,12 +364,6 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { - AUDIT_LOGS: { - Enabled: false, - }, - ES_APPLICATION_LOGS: { - Enabled: false, - }, SEARCH_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -400,9 +373,9 @@ describe('log groups', () => { }, Enabled: true, }, - INDEX_SLOW_LOGS: { - Enabled: false, - }, + AUDIT_LOGS: assert.ABSENT, + ES_APPLICATION_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -420,15 +393,6 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { - AUDIT_LOGS: { - Enabled: false, - }, - ES_APPLICATION_LOGS: { - Enabled: false, - }, - SEARCH_SLOW_LOGS: { - Enabled: false, - }, INDEX_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -438,6 +402,9 @@ describe('log groups', () => { }, Enabled: true, }, + AUDIT_LOGS: assert.ABSENT, + ES_APPLICATION_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -455,9 +422,6 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { - AUDIT_LOGS: { - Enabled: false, - }, ES_APPLICATION_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -467,12 +431,9 @@ describe('log groups', () => { }, Enabled: true, }, - SEARCH_SLOW_LOGS: { - Enabled: false, - }, - INDEX_SLOW_LOGS: { - Enabled: false, - }, + AUDIT_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -507,15 +468,9 @@ describe('log groups', () => { }, Enabled: true, }, - ES_APPLICATION_LOGS: { - Enabled: false, - }, - SEARCH_SLOW_LOGS: { - Enabled: false, - }, - INDEX_SLOW_LOGS: { - Enabled: false, - }, + ES_APPLICATION_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: assert.ABSENT, }, }); }); diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json index a4ec48af68521..e919ee6365e8e 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json @@ -40,20 +40,7 @@ "EncryptionAtRestOptions": { "Enabled": true }, - "LogPublishingOptions": { - "AUDIT_LOGS": { - "Enabled": false - }, - "ES_APPLICATION_LOGS": { - "Enabled": false - }, - "SEARCH_SLOW_LOGS": { - "Enabled": false - }, - "INDEX_SLOW_LOGS": { - "Enabled": false - } - }, + "LogPublishingOptions": {}, "NodeToNodeEncryptionOptions": { "Enabled": true } diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json index f987bec734004..fafc653e73740 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json @@ -211,9 +211,6 @@ } }, "LogPublishingOptions": { - "AUDIT_LOGS": { - "Enabled": false - }, "ES_APPLICATION_LOGS": { "CloudWatchLogsLogGroupArn": { "Fn::GetAtt": [ @@ -231,9 +228,6 @@ ] }, "Enabled": true - }, - "INDEX_SLOW_LOGS": { - "Enabled": false } }, "NodeToNodeEncryptionOptions": { @@ -442,13 +436,13 @@ ] } }, - "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "Arn" ] }, + "Handler": "index.handler", "Runtime": "nodejs12.x", "Timeout": 120 }, diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json index a6a6dd2b0d37f..6c782aee20cc9 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json @@ -157,9 +157,6 @@ "Enabled": true }, "LogPublishingOptions": { - "AUDIT_LOGS": { - "Enabled": false - }, "ES_APPLICATION_LOGS": { "CloudWatchLogsLogGroupArn": { "Fn::GetAtt": [ @@ -177,9 +174,6 @@ ] }, "Enabled": true - }, - "INDEX_SLOW_LOGS": { - "Enabled": false } }, "NodeToNodeEncryptionOptions": { @@ -358,13 +352,13 @@ ] } }, - "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "Arn" ] }, + "Handler": "index.handler", "Runtime": "nodejs12.x", "Timeout": 120 }, @@ -529,9 +523,6 @@ "Enabled": true }, "LogPublishingOptions": { - "AUDIT_LOGS": { - "Enabled": false - }, "ES_APPLICATION_LOGS": { "CloudWatchLogsLogGroupArn": { "Fn::GetAtt": [ @@ -549,9 +540,6 @@ ] }, "Enabled": true - }, - "INDEX_SLOW_LOGS": { - "Enabled": false } }, "NodeToNodeEncryptionOptions": { diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json index 99ca282a3469a..b55ac9e14df69 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json @@ -4,8 +4,8 @@ "Type": "AWS::SecretsManager::Secret", "Properties": { "GenerateSecretString": { - "GenerateStringKey": "password", "ExcludeCharacters": "{}'\\*[]()`", + "GenerateStringKey": "password", "SecretStringTemplate": "{\"username\":\"admin\"}" } } @@ -54,20 +54,7 @@ "EncryptionAtRestOptions": { "Enabled": true }, - "LogPublishingOptions": { - "AUDIT_LOGS": { - "Enabled": false - }, - "ES_APPLICATION_LOGS": { - "Enabled": false - }, - "SEARCH_SLOW_LOGS": { - "Enabled": false - }, - "INDEX_SLOW_LOGS": { - "Enabled": false - } - }, + "LogPublishingOptions": {}, "NodeToNodeEncryptionOptions": { "Enabled": true } @@ -297,4 +284,4 @@ "Description": "Artifact hash for asset \"b64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94\"" } } -} +} \ No newline at end of file From 6ac1f4fdef5853785d8e57652ec4c4e1d770844d Mon Sep 17 00:00:00 2001 From: Taehyun Kim Date: Wed, 13 Jan 2021 03:20:03 +0900 Subject: [PATCH 10/54] feat(eks): spot interruption handler can be disabled for self managed nodes (#12453) Added `spotInterruptHandler` to `addAutoScalingGroupCapacity` and `connectAutoScalingGroupCapacity` that allows disabling the installation of the spot-interrupt-handler helm chart. Closes #12451 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-eks/README.md | 2 + packages/@aws-cdk/aws-eks/lib/cluster.ts | 20 ++++++++- .../@aws-cdk/aws-eks/test/test.cluster.ts | 42 +++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-eks/README.md b/packages/@aws-cdk/aws-eks/README.md index 0b92c183fb786..27f9eda6f0d16 100644 --- a/packages/@aws-cdk/aws-eks/README.md +++ b/packages/@aws-cdk/aws-eks/README.md @@ -401,6 +401,8 @@ terminated. > > Chart Version: [0.9.5](https://github.com/aws/eks-charts/blob/v0.0.28/stable/aws-node-termination-handler/Chart.yaml) +To disable the installation of the termination handler, set the `spotInterruptHandler` property to `false`. This applies both to `addAutoScalingGroupCapacity` and `connectAutoScalingGroupCapacity`. + #### Bottlerocket [Bottlerocket](https://aws.amazon.com/bottlerocket/) is a Linux-based open-source operating system that is purpose-built by Amazon Web Services for running containers on virtual machines or bare metal hosts. diff --git a/packages/@aws-cdk/aws-eks/lib/cluster.ts b/packages/@aws-cdk/aws-eks/lib/cluster.ts index 5e7fb32ecacd3..92a32d3f0747a 100644 --- a/packages/@aws-cdk/aws-eks/lib/cluster.ts +++ b/packages/@aws-cdk/aws-eks/lib/cluster.ts @@ -1181,6 +1181,7 @@ export class Cluster extends ClusterBase { bootstrapOptions: options.bootstrapOptions, bootstrapEnabled: options.bootstrapEnabled, machineImageType: options.machineImageType, + spotInterruptHandler: options.spotInterruptHandler, }); if (nodeTypeForInstanceType(options.instanceType) === NodeType.INFERENTIA) { @@ -1290,8 +1291,9 @@ export class Cluster extends ClusterBase { }); } + const addSpotInterruptHandler = options.spotInterruptHandler ?? true; // if this is an ASG with spot instances, install the spot interrupt handler (only if kubectl is enabled). - if (autoScalingGroup.spotPrice) { + if (autoScalingGroup.spotPrice && addSpotInterruptHandler) { this.addSpotInterruptHandler(); } } @@ -1580,6 +1582,14 @@ export interface AutoScalingGroupCapacityOptions extends autoscaling.CommonAutoS * @default MachineImageType.AMAZON_LINUX_2 */ readonly machineImageType?: MachineImageType; + + /** + * Installs the AWS spot instance interrupt handler on the cluster if it's not + * already added. Only relevant if `spotPrice` is used. + * + * @default true + */ + readonly spotInterruptHandler?: boolean; } /** @@ -1671,6 +1681,14 @@ export interface AutoScalingGroupOptions { * @default MachineImageType.AMAZON_LINUX_2 */ readonly machineImageType?: MachineImageType; + + /** + * Installs the AWS spot instance interrupt handler on the cluster if it's not + * already added. Only relevant if `spotPrice` is configured on the auto-scaling group. + * + * @default true + */ + readonly spotInterruptHandler?: boolean; } /** diff --git a/packages/@aws-cdk/aws-eks/test/test.cluster.ts b/packages/@aws-cdk/aws-eks/test/test.cluster.ts index 4306d042acf1b..907cd12ec0adb 100644 --- a/packages/@aws-cdk/aws-eks/test/test.cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/test.cluster.ts @@ -188,6 +188,31 @@ export = { }, + 'spot interrupt handler is not added if spotInterruptHandler is false when connecting self-managed nodes'(test: Test) { + + // GIVEN + const { stack, vpc } = testFixture(); + const cluster = new eks.Cluster(stack, 'Cluster', { + vpc, + defaultCapacity: 0, + version: CLUSTER_VERSION, + prune: false, + }); + + const selfManaged = new asg.AutoScalingGroup(stack, 'self-managed', { + instanceType: new ec2.InstanceType('t2.medium'), + vpc: vpc, + machineImage: new ec2.AmazonLinuxImage(), + spotPrice: '0.1', + }); + + // WHEN + cluster.connectAutoScalingGroupCapacity(selfManaged, { spotInterruptHandler: false }); + + test.equal(cluster.node.findAll().filter(c => c.node.id === 'chart-spot-interrupt-handler').length, 0); + test.done(); + }, + 'throws when a non cdk8s chart construct is added as cdk8s chart'(test: Test) { const { stack } = testFixture(); @@ -1292,6 +1317,23 @@ export = { test.done(); }, + 'interrupt handler is not added when spotInterruptHandler is false'(test: Test) { + // GIVEN + const { stack } = testFixtureNoVpc(); + const cluster = new eks.Cluster(stack, 'Cluster', { defaultCapacity: 0, version: CLUSTER_VERSION, prune: false }); + + // WHEN + cluster.addAutoScalingGroupCapacity('MyCapcity', { + instanceType: new ec2.InstanceType('m3.xlarge'), + spotPrice: '0.01', + spotInterruptHandler: false, + }); + + // THEN + test.equal(cluster.node.findAll().filter(c => c.node.id === 'chart-spot-interrupt-handler').length, 0); + test.done(); + }, + 'its possible to add two capacities with spot instances and only one stop handler will be installed'(test: Test) { // GIVEN const { stack } = testFixtureNoVpc(); From 7cb851c7aec38bbfc5eae464afa7f43011175171 Mon Sep 17 00:00:00 2001 From: AWS CDK Team Date: Tue, 12 Jan 2021 19:12:15 +0000 Subject: [PATCH 11/54] chore(release): 1.84.0 --- CHANGELOG.md | 31 +++++++++++++++++++++++++++++++ version.v1.json | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f5ba6592ea70..fdaa47e49e00c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,37 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.84.0](https://github.com/aws/aws-cdk/compare/v1.83.0...v1.84.0) (2021-01-12) + + +### ⚠ BREAKING CHANGES TO EXPERIMENTAL FEATURES + +* **apigatewayv2:** `subnets` prop in `VpcLink` resource now takes `SubnetSelection` instead of `ISubnet[]` + +### Features + +* **aws-lambda-nodejs:** add esbuild `define` bundling option ([#12424](https://github.com/aws/aws-cdk/issues/12424)) ([581f6af](https://github.com/aws/aws-cdk/commit/581f6af3d1f71737ca93b6ecb9b004bdade149a8)), closes [#12423](https://github.com/aws/aws-cdk/issues/12423) +* **cdk-assets:** add external asset support ([#12259](https://github.com/aws/aws-cdk/issues/12259)) ([05a9980](https://github.com/aws/aws-cdk/commit/05a998065b3333854715c456b20b7cc5d5daac67)) +* **cli:** `--quiet` does not print template in `cdk synth` ([#12178](https://github.com/aws/aws-cdk/issues/12178)) ([74458a0](https://github.com/aws/aws-cdk/commit/74458a0e9eebce4ee254673aad8933d39588d843)), closes [#11970](https://github.com/aws/aws-cdk/issues/11970) +* **codebuild:** support Standard 5.0 ([#12434](https://github.com/aws/aws-cdk/issues/12434)) ([422dc8e](https://github.com/aws/aws-cdk/commit/422dc8e9d50105af4e710d409a4f301079d43f3f)), closes [#12433](https://github.com/aws/aws-cdk/issues/12433) +* **core:** validate maximum amount of resources in a stack ([#12193](https://github.com/aws/aws-cdk/issues/12193)) ([26121c8](https://github.com/aws/aws-cdk/commit/26121c81abf0fb92de97567c758a1ecf60f85f63)), closes [#276](https://github.com/aws/aws-cdk/issues/276) +* **eks:** spot interruption handler can be disabled for self managed nodes ([#12453](https://github.com/aws/aws-cdk/issues/12453)) ([6ac1f4f](https://github.com/aws/aws-cdk/commit/6ac1f4fdef5853785d8e57652ec4c4e1d770844d)), closes [#12451](https://github.com/aws/aws-cdk/issues/12451) +* **synthetics:** Update Cloudwatch Synthetics canaries NodeJS runtimes ([#11866](https://github.com/aws/aws-cdk/issues/11866)) ([4f6e377](https://github.com/aws/aws-cdk/commit/4f6e377ae3f35c3fa010e1597c3d71ef6e6e9a04)), closes [#11870](https://github.com/aws/aws-cdk/issues/11870) + + +### Bug Fixes + +* **apigatewayv2:** vpclink - explicit subnet specification still causes private subnets to be included ([#12401](https://github.com/aws/aws-cdk/issues/12401)) ([336a58f](https://github.com/aws/aws-cdk/commit/336a58f06a3b3a9f5db2a79350f8721244767e3b)), closes [#12083](https://github.com/aws/aws-cdk/issues/12083) +* **cli:** CLI doesn't read context from ~/.cdk.json ([#12394](https://github.com/aws/aws-cdk/issues/12394)) ([2389a9b](https://github.com/aws/aws-cdk/commit/2389a9b5742583f1d58c66a4f513ee4d833baab5)), closes [#10823](https://github.com/aws/aws-cdk/issues/10823) [#4802](https://github.com/aws/aws-cdk/issues/4802) +* **core:** DefaultStackSynthesizer bucket prefix missing for template assets ([#11855](https://github.com/aws/aws-cdk/issues/11855)) ([50a3d3a](https://github.com/aws/aws-cdk/commit/50a3d3acf3e413d9b4e51197d2be4ea1349c0955)), closes [#10710](https://github.com/aws/aws-cdk/issues/10710) [#11327](https://github.com/aws/aws-cdk/issues/11327) +* **dynamodb:** missing grantRead for ConditionCheckItem ([#12313](https://github.com/aws/aws-cdk/issues/12313)) ([e157007](https://github.com/aws/aws-cdk/commit/e1570072440b07b6b82219c1a4371386c541fb1c)) +* **ec2:** interface endpoint AZ lookup does not guard against broken situations ([#12033](https://github.com/aws/aws-cdk/issues/12033)) ([80f0bfd](https://github.com/aws/aws-cdk/commit/80f0bfd167430a015e71b00506e0ecc280068e86)) +* **eks:** nodegroup synthesis fails when configured with an AMI type that is not compatible to the default instance type ([#12441](https://github.com/aws/aws-cdk/issues/12441)) ([5f6f0f9](https://github.com/aws/aws-cdk/commit/5f6f0f9d46dbd460ac03dd5f9f4874eaa41611d8)), closes [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L294](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L294) [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L302-L304](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L302-L304) [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L329-L330](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L329-L330) [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L324-L325](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L324-L325) +* **elasticsearch:** domain fails due to log publishing keys on unsupported cluster versions ([#11622](https://github.com/aws/aws-cdk/issues/11622)) ([e6bb96f](https://github.com/aws/aws-cdk/commit/e6bb96ff6bae96e3167c82f6de97807217ddb3be)) +* **elbv2:** can't import two application listeners into the same scope ([#12373](https://github.com/aws/aws-cdk/issues/12373)) ([6534dcf](https://github.com/aws/aws-cdk/commit/6534dcf3e04a55f5c6d28203192cbbddb5d119e6)), closes [#12132](https://github.com/aws/aws-cdk/issues/12132) +* **logs:** custom resource Lambda uses old NodeJS version ([#12228](https://github.com/aws/aws-cdk/issues/12228)) ([29c4943](https://github.com/aws/aws-cdk/commit/29c4943466f4a911f65a2a13cf9e776ade9b8dfe)) +* **stepfunctions-tasks:** EvaluateExpression does not support JSON paths with dash ([#12248](https://github.com/aws/aws-cdk/issues/12248)) ([da1ed08](https://github.com/aws/aws-cdk/commit/da1ed08a6a2de584f5ddf43dab4efbb530541419)), closes [#12221](https://github.com/aws/aws-cdk/issues/12221) + ## [1.83.0](https://github.com/aws/aws-cdk/compare/v1.82.0...v1.83.0) (2021-01-06) diff --git a/version.v1.json b/version.v1.json index 5d4e6a68aecb5..5ccb440326d66 100644 --- a/version.v1.json +++ b/version.v1.json @@ -1,3 +1,3 @@ { - "version": "1.83.0" + "version": "1.84.0" } From 0decba67dc74f76c8aab27d9a6f571d55bae8b39 Mon Sep 17 00:00:00 2001 From: Neta Nir Date: Tue, 12 Jan 2021 11:25:22 -0800 Subject: [PATCH 12/54] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdaa47e49e00c..5c6ffbb423465 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ All notable changes to this project will be documented in this file. See [standa * **core:** DefaultStackSynthesizer bucket prefix missing for template assets ([#11855](https://github.com/aws/aws-cdk/issues/11855)) ([50a3d3a](https://github.com/aws/aws-cdk/commit/50a3d3acf3e413d9b4e51197d2be4ea1349c0955)), closes [#10710](https://github.com/aws/aws-cdk/issues/10710) [#11327](https://github.com/aws/aws-cdk/issues/11327) * **dynamodb:** missing grantRead for ConditionCheckItem ([#12313](https://github.com/aws/aws-cdk/issues/12313)) ([e157007](https://github.com/aws/aws-cdk/commit/e1570072440b07b6b82219c1a4371386c541fb1c)) * **ec2:** interface endpoint AZ lookup does not guard against broken situations ([#12033](https://github.com/aws/aws-cdk/issues/12033)) ([80f0bfd](https://github.com/aws/aws-cdk/commit/80f0bfd167430a015e71b00506e0ecc280068e86)) -* **eks:** nodegroup synthesis fails when configured with an AMI type that is not compatible to the default instance type ([#12441](https://github.com/aws/aws-cdk/issues/12441)) ([5f6f0f9](https://github.com/aws/aws-cdk/commit/5f6f0f9d46dbd460ac03dd5f9f4874eaa41611d8)), closes [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L294](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L294) [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L302-L304](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L302-L304) [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L329-L330](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L329-L330) [40aws-cdk/aws-eks/lib/managed-nodegroup.ts#L324-L325](https://github.com/40aws-cdk/aws-eks/lib/managed-nodegroup.ts/issues/L324-L325) +* **eks:** nodegroup synthesis fails when configured with an AMI type that is not compatible to the default instance type ([#12441](https://github.com/aws/aws-cdk/issues/12441)) ([5f6f0f9](https://github.com/aws/aws-cdk/commit/5f6f0f9d46dbd460ac03dd5f9f4874eaa41611d8)), closes [#12389](https://github.com/aws/aws-cdk/issues/12389) * **elasticsearch:** domain fails due to log publishing keys on unsupported cluster versions ([#11622](https://github.com/aws/aws-cdk/issues/11622)) ([e6bb96f](https://github.com/aws/aws-cdk/commit/e6bb96ff6bae96e3167c82f6de97807217ddb3be)) * **elbv2:** can't import two application listeners into the same scope ([#12373](https://github.com/aws/aws-cdk/issues/12373)) ([6534dcf](https://github.com/aws/aws-cdk/commit/6534dcf3e04a55f5c6d28203192cbbddb5d119e6)), closes [#12132](https://github.com/aws/aws-cdk/issues/12132) * **logs:** custom resource Lambda uses old NodeJS version ([#12228](https://github.com/aws/aws-cdk/issues/12228)) ([29c4943](https://github.com/aws/aws-cdk/commit/29c4943466f4a911f65a2a13cf9e776ade9b8dfe)) From a0aad85e234b2e6eb60c4cfcea78e3db1f6e994c Mon Sep 17 00:00:00 2001 From: ashutosh chaudhary <216.ashutosh@gmail.com> Date: Wed, 13 Jan 2021 01:33:27 +0530 Subject: [PATCH 13/54] chore: ignore venv for python template (#12429) Fixes #12229 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../aws-cdk/lib/init-templates/v1/app/python/.template.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore b/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore index 383cdd5040f7e..58505a0211c74 100644 --- a/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore +++ b/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore @@ -3,6 +3,7 @@ package-lock.json __pycache__ .pytest_cache .env +.venv *.egg-info # CDK asset staging directory From 175a2570465d484aa0a73a7bded34e686da493ed Mon Sep 17 00:00:00 2001 From: Alex Johnson Date: Tue, 12 Jan 2021 14:16:16 -0800 Subject: [PATCH 14/54] feat(appmesh): add listener TLS certificates for VirtualNodes and VirtualGateways (#11863) This change allows customers to include an ACM certificiate or specify a file certificate for their listeners to use to terminate TLS. #10051 ```typescript const cert = new Certificate(stack, 'cert', { domainName: '', }); new appmesh.VirtualNode(stack, 'test-node', { mesh, dnsHostName: 'test', listeners: [appmesh.VirtualNodeListener.grpc({ port: 80, tlsCertificate: appmesh.TlsCertificate.acm({ acmCertificate: cert, tlsMode: TlsMode.STRICT, }), }, )], }); ``` ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-appmesh/README.md | 38 ++++ packages/@aws-cdk/aws-appmesh/lib/index.ts | 1 + .../aws-appmesh/lib/tls-certificate.ts | 173 ++++++++++++++++++ .../lib/virtual-gateway-listener.ts | 115 ++++-------- .../aws-appmesh/lib/virtual-node-listener.ts | 34 +++- packages/@aws-cdk/aws-appmesh/package.json | 2 + .../aws-appmesh/test/integ.mesh.expected.json | 30 +++ .../@aws-cdk/aws-appmesh/test/integ.mesh.ts | 14 ++ .../aws-appmesh/test/test.virtual-gateway.ts | 138 +++++++++++++- .../aws-appmesh/test/test.virtual-node.ts | 143 +++++++++++++++ 10 files changed, 601 insertions(+), 87 deletions(-) create mode 100644 packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts diff --git a/packages/@aws-cdk/aws-appmesh/README.md b/packages/@aws-cdk/aws-appmesh/README.md index 9a4fcddf386cc..2253b12d2987d 100644 --- a/packages/@aws-cdk/aws-appmesh/README.md +++ b/packages/@aws-cdk/aws-appmesh/README.md @@ -241,6 +241,44 @@ The `backends` property can be added with `node.addBackend()`. We define a virtu The `backendsDefaultClientPolicy` property are added to the node while creating the virtual node. These are virtual node's service backends client policy defaults. +## Adding TLS to a listener + +The `tlsCertificate` property can be added to a Virtual Node listener or Virtual Gateway listener to add TLS configuration. +A certificate from AWS Certificate Manager can be incorporated or a customer provided certificate can be specified with a `certificateChain` path file and a `privateKey` file path. + +```typescript +import * as certificatemanager from '@aws-cdk/aws-certificatemanager'; + +// A Virtual Node with listener TLS from an ACM provided certificate +const cert = new certificatemanager.Certificate(this, 'cert', {...}); + +const node = new appmesh.VirtualNode(stack, 'node', { + mesh, + dnsHostName: 'node', + listeners: [appmesh.VirtualNodeListener.grpc({ + port: 80, + tlsCertificate: appmesh.TlsCertificate.acm({ + certificate: cert, + tlsMode: TlsMode.STRICT, + }), + })], +}); + +// A Virtual Gateway with listener TLS from a customer provided file certificate +const gateway = new appmesh.VirtualGateway(this, 'gateway', { + mesh: mesh, + listeners: [appmesh.VirtualGatewayListener.grpc({ + port: 8080, + tlsCertificate: appmesh.TlsCertificate.file({ + certificateChain: 'path/to/certChain', + privateKey: 'path/to/privateKey', + tlsMode: TlsMode.STRICT, + }), + })], + virtualGatewayName: 'gateway', +}); +``` + ## Adding a Route A `route` is associated with a virtual router, and it's used to match requests for a virtual router and distribute traffic accordingly to its associated virtual nodes. diff --git a/packages/@aws-cdk/aws-appmesh/lib/index.ts b/packages/@aws-cdk/aws-appmesh/lib/index.ts index a10ef54aa977b..1f5ca87def34d 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/index.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/index.ts @@ -5,6 +5,7 @@ export * from './route'; export * from './service-discovery'; export * from './route-spec'; export * from './shared-interfaces'; +export * from './tls-certificate'; export * from './virtual-node'; export * from './virtual-router'; export * from './virtual-router-listener'; diff --git a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts new file mode 100644 index 0000000000000..524eb079d8702 --- /dev/null +++ b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts @@ -0,0 +1,173 @@ +import * as acm from '@aws-cdk/aws-certificatemanager'; +import * as cdk from '@aws-cdk/core'; +import { CfnVirtualNode } from './appmesh.generated'; + +/** + * Enum of supported TLS modes + */ +export enum TlsMode { + /** + * Only accept encrypted traffic + */ + STRICT = 'STRICT', + + /** + * Accept encrypted and plaintext traffic. + */ + PERMISSIVE = 'PERMISSIVE', + + /** + * TLS is disabled, only accept plaintext traffic. + */ + DISABLED = 'DISABLED', +} + +/** + * A wrapper for the tls config returned by {@link TlsCertificate.bind} + */ +export interface TlsCertificateConfig { + /** + * The CFN shape for a listener TLS certificate + */ + readonly tlsCertificate: CfnVirtualNode.ListenerTlsCertificateProperty, + + /** + * The TLS mode. + */ + readonly tlsMode: TlsMode; +} + +/** + * ACM Certificate Properties + */ +export interface AcmCertificateOptions { + /** + * The TLS mode. + */ + readonly tlsMode: TlsMode; + + /** + * The ACM certificate + */ + readonly certificate: acm.ICertificate; +} + +/** + * File Certificate Properties + */ +export interface FileCertificateOptions { + /** + * The TLS mode. + */ + readonly tlsMode: TlsMode; + + /** + * The file path of the certificate chain file. + */ + readonly certificateChainPath: string; + + /** + * The file path of the private key file. + */ + readonly privateKeyPath: string; +} + +/** + * Represents a TLS certificate + */ +export abstract class TlsCertificate { + /** + * Returns an File TLS Certificate + */ + public static file(props: FileCertificateOptions): TlsCertificate { + return new FileTlsCertificate(props); + } + + /** + * Returns an ACM TLS Certificate + */ + public static acm(props: AcmCertificateOptions): TlsCertificate { + return new AcmTlsCertificate(props); + } + + /** + * Returns TLS certificate based provider. + */ + public abstract bind(_scope: cdk.Construct): TlsCertificateConfig; + +} + +/** + * Represents a ACM provided TLS certificate + */ +class AcmTlsCertificate extends TlsCertificate { + /** + * The TLS mode. + * + * @default - TlsMode.DISABLED + */ + readonly tlsMode: TlsMode; + + /** + * The ARN of the ACM certificate + */ + readonly acmCertificate: acm.ICertificate; + + constructor(props: AcmCertificateOptions) { + super(); + this.tlsMode = props.tlsMode; + this.acmCertificate = props.certificate; + } + + bind(_scope: cdk.Construct): TlsCertificateConfig { + return { + tlsCertificate: { + acm: { + certificateArn: this.acmCertificate.certificateArn, + }, + }, + tlsMode: this.tlsMode, + }; + } +} + +/** + * Represents a file provided TLS certificate + */ +class FileTlsCertificate extends TlsCertificate { + /** + * The TLS mode. + * + * @default - TlsMode.DISABLED + */ + readonly tlsMode: TlsMode; + + /** + * The file path of the certificate chain file. + */ + readonly certificateChain: string; + + /** + * The file path of the private key file. + */ + readonly privateKey: string; + + constructor(props: FileCertificateOptions) { + super(); + this.tlsMode = props.tlsMode; + this.certificateChain = props.certificateChainPath; + this.privateKey = props.privateKeyPath; + } + + bind(_scope: cdk.Construct): TlsCertificateConfig { + return { + tlsCertificate: { + file: { + certificateChain: this.certificateChain, + privateKey: this.privateKey, + }, + }, + tlsMode: this.tlsMode, + }; + } +} diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts index 7b111dbc0a67d..afe21479ede0c 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts @@ -2,6 +2,7 @@ import * as cdk from '@aws-cdk/core'; import { CfnVirtualGateway } from './appmesh.generated'; import { validateHealthChecks } from './private/utils'; import { HealthCheck, Protocol } from './shared-interfaces'; +import { TlsCertificate, TlsCertificateConfig } from './tls-certificate'; /** * Represents the properties needed to define HTTP Listeners for a VirtualGateway @@ -20,6 +21,13 @@ export interface HttpGatewayListenerOptions { * @default - no healthcheck */ readonly healthCheck?: HealthCheck; + + /** + * Represents the configuration for enabling TLS on a listener + * + * @default - none + */ + readonly tlsCertificate?: TlsCertificate; } /** @@ -39,6 +47,13 @@ export interface GrpcGatewayListenerOptions { * @default - no healthcheck */ readonly healthCheck?: HealthCheck; + + /** + * Represents the listener certificate + * + * @default - none + */ + readonly tlsCertificate?: TlsCertificate; } /** @@ -48,7 +63,7 @@ export interface VirtualGatewayListenerConfig { /** * Single listener config for a VirtualGateway */ - readonly listener: CfnVirtualGateway.VirtualGatewayListenerProperty, + readonly listener: CfnVirtualGateway.VirtualGatewayListenerProperty; } /** @@ -59,21 +74,21 @@ export abstract class VirtualGatewayListener { * Returns an HTTP Listener for a VirtualGateway */ public static http(options: HttpGatewayListenerOptions = {}): VirtualGatewayListener { - return new HttpGatewayListener(options); + return new VirtualGatewayListenerImpl(Protocol.HTTP, options.healthCheck, options.port, options.tlsCertificate); } /** * Returns an HTTP2 Listener for a VirtualGateway */ public static http2(options: HttpGatewayListenerOptions = {}): VirtualGatewayListener { - return new Http2GatewayListener(options); + return new VirtualGatewayListenerImpl(Protocol.HTTP2, options.healthCheck, options.port, options.tlsCertificate); } /** * Returns a GRPC Listener for a VirtualGateway */ public static grpc(options: GrpcGatewayListenerOptions = {}): VirtualGatewayListener { - return new GrpcGatewayListener(options); + return new VirtualGatewayListenerImpl(Protocol.GRPC, options.healthCheck, options.port, options.tlsCertificate); } /** @@ -86,37 +101,21 @@ export abstract class VirtualGatewayListener { /** * Represents the properties needed to define an HTTP Listener for a VirtualGateway */ -class HttpGatewayListener extends VirtualGatewayListener { - /** - * Port to listen for connections on - * - * @default - 8080 - */ - readonly port: number; +class VirtualGatewayListenerImpl extends VirtualGatewayListener { - /** - * Health checking strategy upstream nodes should use when communicating with the listener - * - * @default - no healthcheck - */ - readonly healthCheck?: HealthCheck; - - /** - * Protocol the listener implements - */ - protected protocol: Protocol = Protocol.HTTP; - - constructor(options: HttpGatewayListenerOptions = {}) { + constructor(private readonly protocol: Protocol, + private readonly healthCheck: HealthCheck | undefined, + private readonly port: number = 8080, + private readonly tlsCertificate: TlsCertificate | undefined) { super(); - this.port = options.port ? options.port : 8080; - this.healthCheck = options.healthCheck; } /** * Called when the GatewayListener type is initialized. Can be used to enforce * mutual exclusivity */ - public bind(_scope: cdk.Construct): VirtualGatewayListenerConfig { + public bind(scope: cdk.Construct): VirtualGatewayListenerConfig { + const tlsConfig = this.tlsCertificate?.bind(scope); return { listener: { portMapping: { @@ -124,69 +123,25 @@ class HttpGatewayListener extends VirtualGatewayListener { protocol: this.protocol, }, healthCheck: this.healthCheck ? renderHealthCheck(this.healthCheck, this.protocol, this.port): undefined, + tls: tlsConfig ? renderTls(tlsConfig) : undefined, }, }; } -} -/** -* Represents the properties needed to define an HTTP2 Listener for a VirtualGateway -*/ -class Http2GatewayListener extends HttpGatewayListener { - constructor(options: HttpGatewayListenerOptions = {}) { - super(options); - this.protocol = Protocol.HTTP2; - } } /** - * Represents the properties needed to define a GRPC Listener for Virtual Gateway + * Renders the TLS config for a listener */ -class GrpcGatewayListener extends VirtualGatewayListener { - /** - * Port to listen for connections on - * - * @default - 8080 - */ - readonly port: number; - - /** - * Health checking strategy upstream nodes should use when communicating with the listener - * - * @default - no healthcheck - */ - readonly healthCheck?: HealthCheck; - - /** - * Protocol the listener implements - */ - protected protocol: Protocol = Protocol.GRPC; - - constructor(options: HttpGatewayListenerOptions = {}) { - super(); - this.port = options.port ? options.port : 8080; - this.healthCheck = options.healthCheck; - } - - /** - * Called when the GatewayListener type is initialized. Can be used to enforce - * mutual exclusivity - */ - public bind(_scope: cdk.Construct): VirtualGatewayListenerConfig { - return { - listener: { - portMapping: { - port: this.port, - protocol: Protocol.GRPC, - }, - healthCheck: this.healthCheck ? renderHealthCheck(this.healthCheck, this.protocol, this.port): undefined, - }, - }; - } +function renderTls(tlsCertificateConfig: TlsCertificateConfig): CfnVirtualGateway.VirtualGatewayListenerTlsProperty { + return { + certificate: tlsCertificateConfig.tlsCertificate, + mode: tlsCertificateConfig.tlsMode.toString(), + }; } -function renderHealthCheck( - hc: HealthCheck, listenerProtocol: Protocol, listenerPort: number): CfnVirtualGateway.VirtualGatewayHealthCheckPolicyProperty { +function renderHealthCheck(hc: HealthCheck, listenerProtocol: Protocol, + listenerPort: number): CfnVirtualGateway.VirtualGatewayHealthCheckPolicyProperty { if (hc.protocol === Protocol.TCP) { throw new Error('TCP health checks are not permitted for gateway listeners'); diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts index 5793a746ee968..332e7c5771d15 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts @@ -2,6 +2,7 @@ import * as cdk from '@aws-cdk/core'; import { CfnVirtualNode } from './appmesh.generated'; import { validateHealthChecks } from './private/utils'; import { HealthCheck, Protocol, HttpTimeout, GrpcTimeout, TcpTimeout } from './shared-interfaces'; +import { TlsCertificate, TlsCertificateConfig } from './tls-certificate'; /** * Properties for a VirtualNode listener @@ -30,6 +31,13 @@ interface VirtualNodeListenerCommonOptions { * @default - no healthcheck */ readonly healthCheck?: HealthCheck; + + /** + * Represents the configuration for enabling TLS on a listener + * + * @default - none + */ + readonly tlsCertificate?: TlsCertificate; } /** @@ -76,28 +84,28 @@ export abstract class VirtualNodeListener { * Returns an HTTP Listener for a VirtualNode */ public static http(props: HttpVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.HTTP, props.healthCheck, props.timeout, props.port); + return new VirtualNodeListenerImpl(Protocol.HTTP, props.healthCheck, props.timeout, props.port, props.tlsCertificate); } /** * Returns an HTTP2 Listener for a VirtualNode */ public static http2(props: HttpVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.HTTP2, props.healthCheck, props.timeout, props.port); + return new VirtualNodeListenerImpl(Protocol.HTTP2, props.healthCheck, props.timeout, props.port, props.tlsCertificate); } /** * Returns an GRPC Listener for a VirtualNode */ public static grpc(props: GrpcVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.GRPC, props.healthCheck, props.timeout, props.port); + return new VirtualNodeListenerImpl(Protocol.GRPC, props.healthCheck, props.timeout, props.port, props.tlsCertificate); } /** * Returns an TCP Listener for a VirtualNode */ public static tcp(props: TcpVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.TCP, props.healthCheck, props.timeout, props.port); + return new VirtualNodeListenerImpl(Protocol.TCP, props.healthCheck, props.timeout, props.port, props.tlsCertificate); } /** @@ -111,9 +119,11 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { constructor(private readonly protocol: Protocol, private readonly healthCheck: HealthCheck | undefined, private readonly timeout: HttpTimeout | undefined, - private readonly port: number = 8080) { super(); } + private readonly port: number = 8080, + private readonly tlsCertificate: TlsCertificate | undefined) { super(); } - public bind(_scope: cdk.Construct): VirtualNodeListenerConfig { + public bind(scope: cdk.Construct): VirtualNodeListenerConfig { + const tlsConfig = this.tlsCertificate?.bind(scope); return { listener: { portMapping: { @@ -122,10 +132,21 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { }, healthCheck: this.healthCheck ? this.renderHealthCheck(this.healthCheck) : undefined, timeout: this.timeout ? this.renderTimeout(this.timeout) : undefined, + tls: tlsConfig ? this.renderTls(tlsConfig) : undefined, }, }; } + /** + * Renders the TLS config for a listener + */ + private renderTls(tlsCertificateConfig: TlsCertificateConfig): CfnVirtualNode.ListenerTlsProperty { + return { + certificate: tlsCertificateConfig.tlsCertificate, + mode: tlsCertificateConfig.tlsMode.toString(), + }; + } + private renderHealthCheck(hc: HealthCheck): CfnVirtualNode.HealthCheckProperty | undefined { if (hc === undefined) { return undefined; } @@ -167,3 +188,4 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { }); } } + diff --git a/packages/@aws-cdk/aws-appmesh/package.json b/packages/@aws-cdk/aws-appmesh/package.json index fad86447a4fe3..4f8f64891e3c7 100644 --- a/packages/@aws-cdk/aws-appmesh/package.json +++ b/packages/@aws-cdk/aws-appmesh/package.json @@ -87,6 +87,7 @@ }, "dependencies": { "@aws-cdk/aws-acmpca": "0.0.0", + "@aws-cdk/aws-certificatemanager": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-servicediscovery": "0.0.0", @@ -95,6 +96,7 @@ }, "peerDependencies": { "@aws-cdk/aws-acmpca": "0.0.0", + "@aws-cdk/aws-certificatemanager": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-servicediscovery": "0.0.0", diff --git a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json index e642633387206..db9277d071432 100644 --- a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json +++ b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json @@ -649,6 +649,17 @@ "VirtualServiceName": "service1.domain.local" } }, + "cert56CA94EB": { + "Type": "AWS::CertificateManager::Certificate", + "Properties": { + "DomainName":"node1.domain.local", + "DomainValidationOptions": [{ + "DomainName":"node1.domain.local", + "ValidationDomain":"local" + }], + "ValidationMethod": "EMAIL" + } + }, "meshnode726C787D": { "Type": "AWS::AppMesh::VirtualNode", "Properties": { @@ -695,6 +706,16 @@ "PortMapping": { "Port": 8080, "Protocol": "http" + }, + "TLS": { + "Certificate": { + "ACM": { + "CertificateArn": { + "Ref": "cert56CA94EB" + } + } + }, + "Mode": "STRICT" } } ], @@ -1019,6 +1040,15 @@ "PortMapping": { "Port": 443, "Protocol": "http" + }, + "TLS": { + "Certificate": { + "File": { + "CertificateChain": "path/to/certChain", + "PrivateKey": "path/to/privateKey" + } + }, + "Mode": "STRICT" } } ] diff --git a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts index 2f1884b3f7e63..730418aef7970 100644 --- a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts +++ b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts @@ -1,4 +1,5 @@ import * as acmpca from '@aws-cdk/aws-acmpca'; +import * as acm from '@aws-cdk/aws-certificatemanager'; import * as ec2 from '@aws-cdk/aws-ec2'; import * as cloudmap from '@aws-cdk/aws-servicediscovery'; import * as cdk from '@aws-cdk/core'; @@ -29,6 +30,10 @@ const virtualService = mesh.addVirtualService('service', { virtualServiceName: 'service1.domain.local', }); +const cert = new acm.Certificate(stack, 'cert', { + domainName: `node1.${namespace.namespaceName}`, +}); + const node = mesh.addVirtualNode('node', { serviceDiscovery: appmesh.ServiceDiscovery.dns(`node1.${namespace.namespaceName}`), listeners: [appmesh.VirtualNodeListener.http({ @@ -36,6 +41,10 @@ const node = mesh.addVirtualNode('node', { healthyThreshold: 3, path: '/check-path', }, + tlsCertificate: appmesh.TlsCertificate.acm({ + certificate: cert, + tlsMode: appmesh.TlsMode.STRICT, + }), })], backends: [ virtualService, @@ -155,6 +164,11 @@ new appmesh.VirtualGateway(stack, 'gateway2', { healthCheck: { interval: cdk.Duration.seconds(10), }, + tlsCertificate: appmesh.TlsCertificate.file({ + certificateChainPath: 'path/to/certChain', + privateKeyPath: 'path/to/privateKey', + tlsMode: appmesh.TlsMode.STRICT, + }), })], }); diff --git a/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts b/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts index 6207e49ce0be1..7b4a563c90d34 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts @@ -1,7 +1,7 @@ import { expect, haveResourceLike } from '@aws-cdk/assert'; +import * as acm from '@aws-cdk/aws-certificatemanager'; import * as cdk from '@aws-cdk/core'; import { Test } from 'nodeunit'; - import * as appmesh from '../lib'; export = { @@ -153,6 +153,142 @@ export = { })); test.done(); }, + + 'with an http listener with a TLS certificate from ACM'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const mesh = new appmesh.Mesh(stack, 'mesh', { + meshName: 'test-mesh', + }); + + const cert = new acm.Certificate(stack, 'cert', { + domainName: '', + }); + + new appmesh.VirtualGateway(stack, 'testGateway', { + virtualGatewayName: 'test-gateway', + mesh: mesh, + listeners: [appmesh.VirtualGatewayListener.http({ + port: 8080, + tlsCertificate: appmesh.TlsCertificate.acm({ + tlsMode: appmesh.TlsMode.STRICT, + certificate: cert, + }), + })], + }); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualGateway', { + Spec: { + Listeners: [ + { + TLS: { + Mode: appmesh.TlsMode.STRICT, + Certificate: { + ACM: { + CertificateArn: { + Ref: 'cert56CA94EB', + }, + }, + }, + }, + }, + ], + }, + })); + + test.done(); + }, + + 'with an grpc listener with a TLS certificate from file'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const mesh = new appmesh.Mesh(stack, 'mesh', { + meshName: 'test-mesh', + }); + + new appmesh.VirtualGateway(stack, 'testGateway', { + virtualGatewayName: 'test-gateway', + mesh: mesh, + listeners: [appmesh.VirtualGatewayListener.grpc({ + port: 8080, + tlsCertificate: appmesh.TlsCertificate.file({ + certificateChainPath: 'path/to/certChain', + privateKeyPath: 'path/to/privateKey', + tlsMode: appmesh.TlsMode.STRICT, + }), + })], + }); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualGateway', { + Spec: { + Listeners: [ + { + TLS: { + Mode: appmesh.TlsMode.STRICT, + Certificate: { + File: { + CertificateChain: 'path/to/certChain', + PrivateKey: 'path/to/privateKey', + }, + }, + }, + }, + ], + }, + })); + + test.done(); + }, + + 'with an grpc listener with the TLS mode permissive'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const mesh = new appmesh.Mesh(stack, 'mesh', { + meshName: 'test-mesh', + }); + + new appmesh.VirtualGateway(stack, 'testGateway', { + virtualGatewayName: 'test-gateway', + mesh: mesh, + listeners: [appmesh.VirtualGatewayListener.grpc({ + port: 8080, + tlsCertificate: appmesh.TlsCertificate.file({ + certificateChainPath: 'path/to/certChain', + privateKeyPath: 'path/to/privateKey', + tlsMode: appmesh.TlsMode.PERMISSIVE, + }), + })], + }); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualGateway', { + Spec: { + Listeners: [ + { + TLS: { + Mode: appmesh.TlsMode.PERMISSIVE, + Certificate: { + File: { + CertificateChain: 'path/to/certChain', + PrivateKey: 'path/to/privateKey', + }, + }, + }, + }, + ], + }, + })); + + test.done(); + }, }, 'When adding a gateway route to existing VirtualGateway ': { diff --git a/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts b/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts index ffc7e60107ba1..9fb05931a2a44 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts @@ -1,5 +1,6 @@ import { expect, haveResourceLike } from '@aws-cdk/assert'; import * as acmpca from '@aws-cdk/aws-acmpca'; +import * as acm from '@aws-cdk/aws-certificatemanager'; import * as cdk from '@aws-cdk/core'; import { Test } from 'nodeunit'; import * as appmesh from '../lib'; @@ -357,7 +358,149 @@ export = { test.done(); }, }, + + 'when a grpc listener is added with a TLS certificate from ACM': { + 'the listener should include the TLS configuration'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const mesh = new appmesh.Mesh(stack, 'mesh', { + meshName: 'test-mesh', + }); + + const cert = new acm.Certificate(stack, 'cert', { + domainName: '', + }); + + new appmesh.VirtualNode(stack, 'test-node', { + mesh, + listeners: [appmesh.VirtualNodeListener.grpc({ + port: 80, + tlsCertificate: appmesh.TlsCertificate.acm({ + certificate: cert, + tlsMode: appmesh.TlsMode.STRICT, + }), + }, + )], + }); + + // THEN + + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Listeners: [ + { + TLS: { + Mode: appmesh.TlsMode.STRICT, + Certificate: { + ACM: { + CertificateArn: { + Ref: 'cert56CA94EB', + }, + }, + }, + }, + }, + ], + }, + })); + + test.done(); + }, + }, + + 'when an http listener is added with a TLS certificate from file': { + 'the listener should include the TLS configuration'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const mesh = new appmesh.Mesh(stack, 'mesh', { + meshName: 'test-mesh', + }); + + new appmesh.VirtualNode(stack, 'test-node', { + mesh, + listeners: [appmesh.VirtualNodeListener.http({ + port: 80, + tlsCertificate: appmesh.TlsCertificate.file({ + certificateChainPath: 'path/to/certChain', + privateKeyPath: 'path/to/privateKey', + tlsMode: appmesh.TlsMode.STRICT, + }), + })], + }); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Listeners: [ + { + TLS: { + Mode: appmesh.TlsMode.STRICT, + Certificate: { + File: { + CertificateChain: 'path/to/certChain', + PrivateKey: 'path/to/privateKey', + }, + }, + }, + }, + ], + }, + })); + + test.done(); + }, + }, + + 'when an http listener is added with the TLS mode permissive': { + 'the listener should include the TLS configuration'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const mesh = new appmesh.Mesh(stack, 'mesh', { + meshName: 'test-mesh', + }); + + new appmesh.VirtualNode(stack, 'test-node', { + mesh, + listeners: [appmesh.VirtualNodeListener.http({ + port: 80, + tlsCertificate: appmesh.TlsCertificate.file({ + certificateChainPath: 'path/to/certChain', + privateKeyPath: 'path/to/privateKey', + tlsMode: appmesh.TlsMode.PERMISSIVE, + }), + })], + }); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Listeners: [ + { + TLS: { + Mode: appmesh.TlsMode.PERMISSIVE, + Certificate: { + File: { + CertificateChain: 'path/to/certChain', + PrivateKey: 'path/to/privateKey', + }, + }, + }, + }, + ], + }, + })); + + test.done(); + }, + }, }, + 'Can import Virtual Nodes using an ARN'(test: Test) { // GIVEN const stack = new cdk.Stack(); From 6d9a0f1ea0c05e7902ccca4d0fc4040e688846e5 Mon Sep 17 00:00:00 2001 From: Hsing-Hui Hsu Date: Tue, 12 Jan 2021 14:54:30 -0800 Subject: [PATCH 15/54] fix(aws-ecs): Support configuring Windows capacity for cluster ASGs (#12365) Fixes https://github.com/aws/aws-cdk/issues/4295 Closes https://github.com/aws/aws-cdk/pull/5033 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-ecs/lib/cluster.ts | 93 ++++++++++++------- .../@aws-cdk/aws-ecs/test/test.ecs-cluster.ts | 53 +++++++++++ 2 files changed, 115 insertions(+), 31 deletions(-) diff --git a/packages/@aws-cdk/aws-ecs/lib/cluster.ts b/packages/@aws-cdk/aws-ecs/lib/cluster.ts index ae3b3d0a6c163..b68e212f3dd74 100644 --- a/packages/@aws-cdk/aws-ecs/lib/cluster.ts +++ b/packages/@aws-cdk/aws-ecs/lib/cluster.ts @@ -231,38 +231,42 @@ export class Cluster extends Resource implements ICluster { this._hasEc2Capacity = true; this.connections.connections.addSecurityGroup(...autoScalingGroup.connections.securityGroups); - // Tie instances to cluster - switch (options.machineImageType) { - // Bottlerocket AMI - case MachineImageType.BOTTLEROCKET: { - autoScalingGroup.addUserData( - // Connect to the cluster - // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#connecting-to-your-cluster - '[settings.ecs]', - `cluster = "${this.clusterName}"`, - ); - // Enabling SSM - // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#enabling-ssm - autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore')); - // required managed policy - autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonEC2ContainerServiceforEC2Role')); - break; - } - default: - // Amazon ECS-optimized AMI for Amazon Linux 2 - autoScalingGroup.addUserData(`echo ECS_CLUSTER=${this.clusterName} >> /etc/ecs/ecs.config`); - if (!options.canContainersAccessInstanceRole) { - // Deny containers access to instance metadata service - // Source: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html - autoScalingGroup.addUserData('sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP'); - autoScalingGroup.addUserData('sudo service iptables save'); - // The following is only for AwsVpc networking mode, but doesn't hurt for the other modes. - autoScalingGroup.addUserData('echo ECS_AWSVPC_BLOCK_IMDS=true >> /etc/ecs/ecs.config'); - } - - if (autoScalingGroup.spotPrice && options.spotInstanceDraining) { - autoScalingGroup.addUserData('echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config'); + if ( autoScalingGroup.osType === ec2.OperatingSystemType.WINDOWS ) { + this.configureWindowsAutoScalingGroup(autoScalingGroup, options); + } else { + // Tie instances to cluster + switch (options.machineImageType) { + // Bottlerocket AMI + case MachineImageType.BOTTLEROCKET: { + autoScalingGroup.addUserData( + // Connect to the cluster + // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#connecting-to-your-cluster + '[settings.ecs]', + `cluster = "${this.clusterName}"`, + ); + // Enabling SSM + // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#enabling-ssm + autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore')); + // required managed policy + autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonEC2ContainerServiceforEC2Role')); + break; } + default: + // Amazon ECS-optimized AMI for Amazon Linux 2 + autoScalingGroup.addUserData(`echo ECS_CLUSTER=${this.clusterName} >> /etc/ecs/ecs.config`); + if (!options.canContainersAccessInstanceRole) { + // Deny containers access to instance metadata service + // Source: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html + autoScalingGroup.addUserData('sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP'); + autoScalingGroup.addUserData('sudo service iptables save'); + // The following is only for AwsVpc networking mode, but doesn't hurt for the other modes. + autoScalingGroup.addUserData('echo ECS_AWSVPC_BLOCK_IMDS=true >> /etc/ecs/ecs.config'); + } + + if (autoScalingGroup.spotPrice && options.spotInstanceDraining) { + autoScalingGroup.addUserData('echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config'); + } + } } // ECS instances must be able to do these things @@ -319,6 +323,33 @@ export class Cluster extends Resource implements ICluster { } } + private configureWindowsAutoScalingGroup(autoScalingGroup: autoscaling.AutoScalingGroup, options: AddAutoScalingGroupCapacityOptions = {}) { + // clear the cache of the agent + autoScalingGroup.addUserData('Remove-Item -Recurse C:\\ProgramData\\Amazon\\ECS\\Cache'); + + // pull the latest ECS Tools + autoScalingGroup.addUserData('Import-Module ECSTools'); + + // set the cluster name environment variable + autoScalingGroup.addUserData(`[Environment]::SetEnvironmentVariable("ECS_CLUSTER", "${this.clusterName}", "Machine")`); + autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", "true", "Machine")'); + // tslint:disable-next-line: max-line-length + autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_AVAILABLE_LOGGING_DRIVERS", "[\"json-file\",\"awslogs\"]", "Machine")'); + + // enable instance draining + if (autoScalingGroup.spotPrice && options.spotInstanceDraining) { + autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_ENABLE_SPOT_INSTANCE_DRAINING", "true", "Machine")'); + } + + // enable task iam role + if (!options.canContainersAccessInstanceRole) { + autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_ENABLE_TASK_IAM_ROLE", "true", "Machine")'); + autoScalingGroup.addUserData(`Initialize-ECSAgent -Cluster '${this.clusterName}' -EnableTaskIAMRole'`); + } else { + autoScalingGroup.addUserData(`Initialize-ECSAgent -Cluster '${this.clusterName}'`); + } + } + /** * Getter for autoscaling group added to cluster */ diff --git a/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts b/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts index cbccd0683dd0d..b8f3b3621a71c 100644 --- a/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts +++ b/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts @@ -755,6 +755,59 @@ export = { test.done(); }, + 'configures userdata with powershell if windows machine image is specified'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + const vpc = new ec2.Vpc(stack, 'MyVpc', {}); + + const cluster = new ecs.Cluster(stack, 'EcsCluster', { vpc }); + cluster.addCapacity('WindowsAutoScalingGroup', { + instanceType: new ec2.InstanceType('t2.micro'), + machineImage: new ecs.EcsOptimizedAmi({ + windowsVersion: ecs.WindowsOptimizedVersion.SERVER_2019, + }), + }); + + // THEN + expect(stack).to(haveResource('AWS::AutoScaling::LaunchConfiguration', { + ImageId: { + Ref: 'SsmParameterValueawsserviceecsoptimizedamiwindowsserver2019englishfullrecommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter', + }, + InstanceType: 't2.micro', + IamInstanceProfile: { + Ref: 'EcsClusterWindowsAutoScalingGroupInstanceProfile65DFA6BB', + }, + SecurityGroups: [ + { + 'Fn::GetAtt': [ + 'EcsClusterWindowsAutoScalingGroupInstanceSecurityGroupDA468DF1', + 'GroupId', + ], + }, + ], + UserData: { + 'Fn::Base64': { + 'Fn::Join': [ + '', + [ + 'Remove-Item -Recurse C:\\ProgramData\\Amazon\\ECS\\Cache\nImport-Module ECSTools\n[Environment]::SetEnvironmentVariable("ECS_CLUSTER", "', + { + Ref: 'EcsCluster97242B84', + }, + "\", \"Machine\")\n[Environment]::SetEnvironmentVariable(\"ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE\", \"true\", \"Machine\")\n[Environment]::SetEnvironmentVariable(\"ECS_AVAILABLE_LOGGING_DRIVERS\", \"[\"json-file\",\"awslogs\"]\", \"Machine\")\n[Environment]::SetEnvironmentVariable(\"ECS_ENABLE_TASK_IAM_ROLE\", \"true\", \"Machine\")\nInitialize-ECSAgent -Cluster '", + { + Ref: 'EcsCluster97242B84', + }, + "' -EnableTaskIAMRole'", + ], + ], + }, + }, + })); + + test.done(); + }, + /* * TODO:v2.0.0 BEGINNING OF OBSOLETE BLOCK */ From cd28c29803a03296d11900be56aa57b69e3c14a1 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 00:10:25 +0000 Subject: [PATCH 16/54] chore(deps): bump decamelize from 4.0.0 to 5.0.0 (#12459) Bumps [decamelize](https://github.com/sindresorhus/decamelize) from 4.0.0 to 5.0.0. - [Release notes](https://github.com/sindresorhus/decamelize/releases) - [Commits](https://github.com/sindresorhus/decamelize/compare/v4.0.0...v5.0.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- packages/aws-cdk/package.json | 2 +- yarn.lock | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index 4bb111e863ef6..c476d08300b19 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -77,7 +77,7 @@ "camelcase": "^6.2.0", "cdk-assets": "0.0.0", "colors": "^1.4.0", - "decamelize": "^4.0.0", + "decamelize": "^5.0.0", "fs-extra": "^9.0.1", "glob": "^7.1.6", "json-diff": "^0.5.4", diff --git a/yarn.lock b/yarn.lock index 29e50d06679d2..f272cd2be50fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3513,6 +3513,11 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +decamelize@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.0.tgz#88358157b010ef133febfd27c18994bd80c6215b" + integrity sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w== + decimal.js@^10.2.0: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" From 37d8ccc763f532999bc9f114264f3d29725b0f28 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 13 Jan 2021 01:36:22 +0000 Subject: [PATCH 17/54] fix(sns): require topic name for fifo topic #12386 (#12437) Require topicName property for FIFO SNS topics as a workaround to [issue 681](https://github.com/aws-cloudformation/aws-cloudformation-coverage-roadmap/issues/681) reported in the CloudFormation coverage roadmap. Also adding additional logic to append '.fifo' to FIFO topic name if not provided explicitly by the user. Fixes #12386 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-sns/README.md | 3 + packages/@aws-cdk/aws-sns/lib/topic.ts | 15 ++++- .../@aws-cdk/aws-sns/test/integ.sns-fifo.ts | 2 +- packages/@aws-cdk/aws-sns/test/test.sns.ts | 64 ++++++++++++++++++- 4 files changed, 81 insertions(+), 3 deletions(-) diff --git a/packages/@aws-cdk/aws-sns/README.md b/packages/@aws-cdk/aws-sns/README.md index 05ad30fc9af17..b5d9f52c3d9b9 100644 --- a/packages/@aws-cdk/aws-sns/README.md +++ b/packages/@aws-cdk/aws-sns/README.md @@ -30,9 +30,12 @@ const topic = new sns.Topic(this, 'Topic', { contentBasedDeduplication: true, displayName: 'Customer subscription topic', fifo: true, + topicName: 'customerTopic', }); ``` +Note that FIFO topics require a topic name to be provided. The required `.fifo` suffix will be automatically added to the topic name if it is not explicitly provided. + ## Subscriptions Various subscriptions can be added to the topic by calling the diff --git a/packages/@aws-cdk/aws-sns/lib/topic.ts b/packages/@aws-cdk/aws-sns/lib/topic.ts index 532c138fd7ef3..f4bbfc10cb2ca 100644 --- a/packages/@aws-cdk/aws-sns/lib/topic.ts +++ b/packages/@aws-cdk/aws-sns/lib/topic.ts @@ -80,13 +80,26 @@ export class Topic extends TopicBase { physicalName: props.topicName, }); + if (props.fifo && !props.topicName) { + // NOTE: Workaround for CloudFormation problem reported in CDK issue 12386 + // see https://github.com/aws/aws-cdk/issues/12386 + throw new Error('FIFO SNS topics must be given a topic name.'); + } + if (props.contentBasedDeduplication && !props.fifo) { throw new Error('Content based deduplication can only be enabled for FIFO SNS topics.'); } + let cfnTopicName: string; + if (props.fifo && props.topicName && !props.topicName.endsWith('.fifo')) { + cfnTopicName = this.physicalName + '.fifo'; + } else { + cfnTopicName = this.physicalName; + } + const resource = new CfnTopic(this, 'Resource', { displayName: props.displayName, - topicName: this.physicalName, + topicName: cfnTopicName, kmsMasterKeyId: props.masterKey && props.masterKey.keyArn, contentBasedDeduplication: props.contentBasedDeduplication, fifoTopic: props.fifo, diff --git a/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts b/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts index 76e4cef96994c..a4352cbe6fe44 100644 --- a/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts +++ b/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts @@ -6,7 +6,7 @@ class SNSFifoInteg extends Stack { super(scope, id, props); new Topic(this, 'MyTopic', { - topicName: 'fooTopic.fifo', + topicName: 'fooTopic', displayName: 'fooDisplayName', contentBasedDeduplication: true, fifo: true, diff --git a/packages/@aws-cdk/aws-sns/test/test.sns.ts b/packages/@aws-cdk/aws-sns/test/test.sns.ts index bbe171ca188ab..cc4b50aed717c 100644 --- a/packages/@aws-cdk/aws-sns/test/test.sns.ts +++ b/packages/@aws-cdk/aws-sns/test/test.sns.ts @@ -81,7 +81,7 @@ export = { test.done(); }, - 'specify both'(test: Test) { + 'specify displayName and topicName'(test: Test) { const stack = new cdk.Stack(); new sns.Topic(stack, 'MyTopic', { @@ -104,11 +104,70 @@ export = { test.done(); }, + // NOTE: This test case should be invalid when CloudFormation problem reported in CDK issue 12386 is resolved + // see https://github.com/aws/aws-cdk/issues/12386 + 'throw with missing topicName on fifo topic'(test: Test) { + const stack = new cdk.Stack(); + + test.throws(() => new sns.Topic(stack, 'MyTopic', { + fifo: true, + }), /FIFO SNS topics must be given a topic name./); + + test.done(); + }, + + 'specify fifo without .fifo suffix in topicName'(test: Test) { + const stack = new cdk.Stack(); + + new sns.Topic(stack, 'MyTopic', { + fifo: true, + topicName: 'topicName', + }); + + expect(stack).toMatch({ + 'Resources': { + 'MyTopic86869434': { + 'Type': 'AWS::SNS::Topic', + 'Properties': { + 'FifoTopic': true, + 'TopicName': 'topicName.fifo', + }, + }, + }, + }); + + test.done(); + }, + + 'specify fifo with .fifo suffix in topicName'(test: Test) { + const stack = new cdk.Stack(); + + new sns.Topic(stack, 'MyTopic', { + fifo: true, + topicName: 'topicName.fifo', + }); + + expect(stack).toMatch({ + 'Resources': { + 'MyTopic86869434': { + 'Type': 'AWS::SNS::Topic', + 'Properties': { + 'FifoTopic': true, + 'TopicName': 'topicName.fifo', + }, + }, + }, + }); + + test.done(); + }, + 'specify fifo without contentBasedDeduplication'(test: Test) { const stack = new cdk.Stack(); new sns.Topic(stack, 'MyTopic', { fifo: true, + topicName: 'topicName', }); expect(stack).toMatch({ @@ -117,6 +176,7 @@ export = { 'Type': 'AWS::SNS::Topic', 'Properties': { 'FifoTopic': true, + 'TopicName': 'topicName.fifo', }, }, }, @@ -131,6 +191,7 @@ export = { new sns.Topic(stack, 'MyTopic', { contentBasedDeduplication: true, fifo: true, + topicName: 'topicName', }); expect(stack).toMatch({ @@ -140,6 +201,7 @@ export = { 'Properties': { 'ContentBasedDeduplication': true, 'FifoTopic': true, + 'TopicName': 'topicName.fifo', }, }, }, From d0305f33da41ce1f07a5d571eb21c0ee9ea852d0 Mon Sep 17 00:00:00 2001 From: Bryan Pan Date: Tue, 12 Jan 2021 21:13:36 -0800 Subject: [PATCH 18/54] fix(appsync): rds data source configured with cluster arn (#12255) Lazily add a formatted cluster arn to the RdsHttpEndpointConfig. Before we were just adding the cluster id, but the [docs](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-rdshttpendpointconfig.html) call for the Cluster Arn instead. Fixes: #11536 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../@aws-cdk/aws-appsync/lib/data-source.ts | 14 +++++++--- .../aws-appsync/test/appsync-rds.test.ts | 26 +++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/packages/@aws-cdk/aws-appsync/lib/data-source.ts b/packages/@aws-cdk/aws-appsync/lib/data-source.ts index 96c578390dfbc..21646e8573193 100644 --- a/packages/@aws-cdk/aws-appsync/lib/data-source.ts +++ b/packages/@aws-cdk/aws-appsync/lib/data-source.ts @@ -3,7 +3,7 @@ import { Grant, IGrantable, IPrincipal, IRole, Role, ServicePrincipal } from '@a import { IFunction } from '@aws-cdk/aws-lambda'; import { IDatabaseCluster } from '@aws-cdk/aws-rds'; import { ISecret } from '@aws-cdk/aws-secretsmanager'; -import { IResolvable, Stack } from '@aws-cdk/core'; +import { IResolvable, Lazy, Stack } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { BaseAppsyncFunctionProps, AppsyncFunction } from './appsync-function'; import { CfnDataSource } from './appsync.generated'; @@ -318,17 +318,25 @@ export class RdsDataSource extends BackedDataSource { relationalDatabaseConfig: { rdsHttpEndpointConfig: { awsRegion: props.databaseCluster.stack.region, - dbClusterIdentifier: props.databaseCluster.clusterIdentifier, + dbClusterIdentifier: Lazy.string({ + produce: () => { + return Stack.of(this).formatArn({ + service: 'rds', + resource: `cluster:${props.databaseCluster.clusterIdentifier}`, + }); + }, + }), awsSecretStoreArn: props.secretStore.secretArn, }, relationalDatabaseSourceType: 'RDS_HTTP_ENDPOINT', }, }); - props.secretStore.grantRead(this); const clusterArn = Stack.of(this).formatArn({ service: 'rds', resource: `cluster:${props.databaseCluster.clusterIdentifier}`, }); + props.secretStore.grantRead(this); + // Change to grant with RDS grant becomes implemented Grant.addToPrincipal({ grantee: this, diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts index ba0d80d00037b..97cea819de8f3 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts @@ -97,6 +97,32 @@ describe('Rds Data Source configuration', () => { }); }); + test('rds cluster arn saved to RdsHttpEndpointConfig', () => { + // WHEN + api.addRdsDataSource('ds', cluster, secret); + + // THEN + expect(stack).toHaveResourceLike('AWS::AppSync::DataSource', { + Type: 'RELATIONAL_DATABASE', + RelationalDatabaseConfig: { + RdsHttpEndpointConfig: { + AwsRegion: { Ref: 'AWS::Region' }, + AwsSecretStoreArn: { Ref: 'AuroraSecret41E6E877' }, + DbClusterIdentifier: { + 'Fn::Join': ['', ['arn:', + { Ref: 'AWS::Partition' }, + ':rds:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':cluster:', + { Ref: 'AuroraCluster23D869C0' }]], + }, + }, + }, + }); + }); + test('default configuration produces name identical to the id', () => { // WHEN api.addRdsDataSource('ds', cluster, secret); From cd437cf630266086a3ddf9e326f215b5d1acdfd7 Mon Sep 17 00:00:00 2001 From: Adam Ruka Date: Wed, 13 Jan 2021 01:17:56 -0800 Subject: [PATCH 19/54] fix(s3): Bucket.grantWrite() no longer adds s3:PutObject* permission (#12391) Right now, Bucket.grantWrite() adds an 's3:PutObject*' permission to the passed principal. That means it grants the 's3:PubObjectAcl' permission, which allows changing the ACL of an individual object written to the Bucket, potentially giving it more visibility than other objects in the Bucket. Change that behavior to grant 's3:PutObject' instead. Since customers might be relying on the old overly-broad permissions, gate that change behind a feature flag, which means only newly created CDK projects will get this behavior. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../lib/s3/deploy-action.ts | 6 + .../integ.pipeline-s3-deploy.expected.json | 231 ++-------- .../test/integ.pipeline-s3-deploy.ts | 5 +- packages/@aws-cdk/aws-s3/lib/bucket.ts | 39 +- packages/@aws-cdk/aws-s3/lib/perms.ts | 16 +- packages/@aws-cdk/aws-s3/package.json | 2 + packages/@aws-cdk/aws-s3/test/bucket.test.ts | 400 ++++++++++++------ packages/@aws-cdk/cx-api/lib/features.ts | 11 + 8 files changed, 352 insertions(+), 358 deletions(-) diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts index 3f3364ae69a3a..aebc8ba2548c8 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts @@ -111,6 +111,12 @@ export class S3DeployAction extends Action { // pipeline needs permissions to write to the S3 bucket this.props.bucket.grantWrite(options.role); + if (this.props.accessControl !== undefined) { + // we need to modify the ACL settings of objects within the Bucket, + // so grant the Action's Role permissions to do that + this.props.bucket.grantPutAcl(options.role); + } + // the Action Role also needs to read from the Pipeline's bucket options.bucket.grantRead(options.role); diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json index d6bc02e90525c..d37bdc0c6798c 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json @@ -12,155 +12,9 @@ }, "DeployBucket67E2C076": { "Type": "AWS::S3::Bucket", - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" - }, - "PipelineArtifactsBucketEncryptionKey01D58D69": { - "Type": "AWS::KMS::Key", - "Properties": { - "KeyPolicy": { - "Statement": [ - { - "Action": [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion", - "kms:GenerateDataKey", - "kms:TagResource", - "kms:UntagResource" - ], - "Effect": "Allow", - "Principal": { - "AWS": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":iam::", - { - "Ref": "AWS::AccountId" - }, - ":root" - ] - ] - } - }, - "Resource": "*" - }, - { - "Action": [ - "kms:Decrypt", - "kms:DescribeKey", - "kms:Encrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*" - ], - "Effect": "Allow", - "Principal": { - "AWS": { - "Fn::GetAtt": [ - "PipelineRoleD68726F7", - "Arn" - ] - } - }, - "Resource": "*" - }, - { - "Action": [ - "kms:Encrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:Decrypt" - ], - "Effect": "Allow", - "Principal": { - "AWS": { - "Fn::GetAtt": [ - "PipelineSourceCodePipelineActionRoleC6F9E7F5", - "Arn" - ] - } - }, - "Resource": "*" - }, - { - "Action": [ - "kms:Decrypt", - "kms:DescribeKey" - ], - "Effect": "Allow", - "Principal": { - "AWS": { - "Fn::GetAtt": [ - "PipelineDeployDeployActionCodePipelineActionRole1C288A60", - "Arn" - ] - } - }, - "Resource": "*" - } - ], - "Version": "2012-10-17" - } - }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" }, - "PipelineArtifactsBucketEncryptionKeyAlias5C510EEE": { - "Type": "AWS::KMS::Alias", - "Properties": { - "AliasName": "alias/codepipeline-awscdkcodepipelines3deploypipeline907bf1e7", - "TargetKeyId": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKey01D58D69", - "Arn" - ] - } - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete" - }, - "PipelineArtifactsBucket22248F97": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "KMSMasterKeyID": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKey01D58D69", - "Arn" - ] - }, - "SSEAlgorithm": "aws:kms" - } - } - ] - }, - "PublicAccessBlockConfiguration": { - "BlockPublicAcls": true, - "BlockPublicPolicy": true, - "IgnorePublicAcls": true, - "RestrictPublicBuckets": true - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" - }, "PipelineRoleD68726F7": { "Type": "AWS::IAM::Role", "Properties": { @@ -196,7 +50,7 @@ "Resource": [ { "Fn::GetAtt": [ - "PipelineArtifactsBucket22248F97", + "PipelineBucketB967BD35", "Arn" ] }, @@ -206,7 +60,7 @@ [ { "Fn::GetAtt": [ - "PipelineArtifactsBucket22248F97", + "PipelineBucketB967BD35", "Arn" ] }, @@ -216,22 +70,6 @@ } ] }, - { - "Action": [ - "kms:Decrypt", - "kms:DescribeKey", - "kms:Encrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*" - ], - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKey01D58D69", - "Arn" - ] - } - }, { "Action": "sts:AssumeRole", "Effect": "Allow", @@ -341,17 +179,8 @@ } ], "ArtifactStore": { - "EncryptionKey": { - "Id": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKey01D58D69", - "Arn" - ] - }, - "Type": "KMS" - }, "Location": { - "Ref": "PipelineArtifactsBucket22248F97" + "Ref": "PipelineBucketB967BD35" }, "Type": "S3" } @@ -438,7 +267,7 @@ "Resource": [ { "Fn::GetAtt": [ - "PipelineArtifactsBucket22248F97", + "PipelineBucketB967BD35", "Arn" ] }, @@ -448,7 +277,7 @@ [ { "Fn::GetAtt": [ - "PipelineArtifactsBucket22248F97", + "PipelineBucketB967BD35", "Arn" ] }, @@ -457,21 +286,6 @@ ] } ] - }, - { - "Action": [ - "kms:Encrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:Decrypt" - ], - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKey01D58D69", - "Arn" - ] - } } ], "Version": "2012-10-17" @@ -551,6 +365,24 @@ } ] }, + { + "Action": "s3:PutObjectAcl", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "DeployBucket67E2C076", + "Arn" + ] + }, + "/*" + ] + ] + } + }, { "Action": [ "s3:GetObject*", @@ -561,7 +393,7 @@ "Resource": [ { "Fn::GetAtt": [ - "PipelineArtifactsBucket22248F97", + "PipelineBucketB967BD35", "Arn" ] }, @@ -571,7 +403,7 @@ [ { "Fn::GetAtt": [ - "PipelineArtifactsBucket22248F97", + "PipelineBucketB967BD35", "Arn" ] }, @@ -580,19 +412,6 @@ ] } ] - }, - { - "Action": [ - "kms:Decrypt", - "kms:DescribeKey" - ], - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKey01D58D69", - "Arn" - ] - } } ], "Version": "2012-10-17" diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts index b012d6ff8aeb8..5277170c0ca59 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts @@ -19,9 +19,12 @@ const sourceAction = new cpactions.S3SourceAction({ bucketKey: 'key', }); -const deployBucket = new s3.Bucket(stack, 'DeployBucket', {}); +const deployBucket = new s3.Bucket(stack, 'DeployBucket', { + removalPolicy: cdk.RemovalPolicy.DESTROY, +}); new codepipeline.Pipeline(stack, 'Pipeline', { + artifactBucket: bucket, stages: [ { stageName: 'Source', diff --git a/packages/@aws-cdk/aws-s3/lib/bucket.ts b/packages/@aws-cdk/aws-s3/lib/bucket.ts index 51f4a30800cad..811acbe631067 100644 --- a/packages/@aws-cdk/aws-s3/lib/bucket.ts +++ b/packages/@aws-cdk/aws-s3/lib/bucket.ts @@ -5,8 +5,9 @@ import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; import { Fn, IResource, Lazy, RemovalPolicy, Resource, Stack, Token, - CustomResource, CustomResourceProvider, CustomResourceProviderRuntime, + CustomResource, CustomResourceProvider, CustomResourceProviderRuntime, FeatureFlags, } from '@aws-cdk/core'; +import * as cxapi from '@aws-cdk/cx-api'; import { Construct } from 'constructs'; import { BucketPolicy } from './bucket-policy'; import { IBucketNotificationDestination } from './destination'; @@ -161,6 +162,18 @@ export interface IBucket extends IResource { */ grantPut(identity: iam.IGrantable, objectsKeyPattern?: any): iam.Grant; + /** + * Grant the given IAM identity permissions to modify the ACLs of objects in the given Bucket. + * + * If your application has the '@aws-cdk/aws-s3:grantWriteWithoutAcl' feature flag set, + * calling {@link grantWrite} or {@link grantReadWrite} no longer grants permissions to modify the ACLs of the objects; + * in this case, if you need to modify object ACLs, call this method explicitly. + * + * @param identity The principal + * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') + */ + grantPutAcl(identity: iam.IGrantable, objectsKeyPattern?: string): iam.Grant; + /** * Grants s3:DeleteObject* permission to an IAM pricipal for objects * in this bucket. @@ -584,7 +597,7 @@ abstract class BucketBase extends Resource implements IBucket { * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') */ public grantWrite(identity: iam.IGrantable, objectsKeyPattern: any = '*') { - return this.grant(identity, perms.BUCKET_WRITE_ACTIONS, perms.KEY_WRITE_ACTIONS, + return this.grant(identity, this.writeActions, perms.KEY_WRITE_ACTIONS, this.bucketArn, this.arnForObjects(objectsKeyPattern)); } @@ -598,7 +611,12 @@ abstract class BucketBase extends Resource implements IBucket { * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') */ public grantPut(identity: iam.IGrantable, objectsKeyPattern: any = '*') { - return this.grant(identity, perms.BUCKET_PUT_ACTIONS, perms.KEY_WRITE_ACTIONS, + return this.grant(identity, this.putActions, perms.KEY_WRITE_ACTIONS, + this.arnForObjects(objectsKeyPattern)); + } + + public grantPutAcl(identity: iam.IGrantable, objectsKeyPattern: string = '*') { + return this.grant(identity, perms.BUCKET_PUT_ACL_ACTIONS, [], this.arnForObjects(objectsKeyPattern)); } @@ -625,7 +643,7 @@ abstract class BucketBase extends Resource implements IBucket { * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') */ public grantReadWrite(identity: iam.IGrantable, objectsKeyPattern: any = '*') { - const bucketActions = perms.BUCKET_READ_ACTIONS.concat(perms.BUCKET_WRITE_ACTIONS); + const bucketActions = perms.BUCKET_READ_ACTIONS.concat(this.writeActions); // we need unique permissions because some permissions are common between read and write key actions const keyActions = [...new Set([...perms.KEY_READ_ACTIONS, ...perms.KEY_WRITE_ACTIONS])]; @@ -673,6 +691,19 @@ abstract class BucketBase extends Resource implements IBucket { }); } + private get writeActions(): string[] { + return [ + ...perms.BUCKET_DELETE_ACTIONS, + ...this.putActions, + ]; + } + + private get putActions(): string[] { + return FeatureFlags.of(this).isEnabled(cxapi.S3_GRANT_WRITE_WITHOUT_ACL) + ? perms.BUCKET_PUT_ACTIONS + : perms.LEGACY_BUCKET_PUT_ACTIONS; + } + private urlJoin(...components: string[]): string { return components.reduce((result, component) => { if (result.endsWith('/')) { diff --git a/packages/@aws-cdk/aws-s3/lib/perms.ts b/packages/@aws-cdk/aws-s3/lib/perms.ts index 544bdda936da9..eebab60da2104 100644 --- a/packages/@aws-cdk/aws-s3/lib/perms.ts +++ b/packages/@aws-cdk/aws-s3/lib/perms.ts @@ -4,18 +4,22 @@ export const BUCKET_READ_ACTIONS = [ 's3:List*', ]; -export const BUCKET_PUT_ACTIONS = [ +export const LEGACY_BUCKET_PUT_ACTIONS = [ 's3:PutObject*', 's3:Abort*', ]; -export const BUCKET_DELETE_ACTIONS = [ - 's3:DeleteObject*', +export const BUCKET_PUT_ACTIONS = [ + 's3:PutObject', + 's3:Abort*', ]; -export const BUCKET_WRITE_ACTIONS = [ - ...BUCKET_DELETE_ACTIONS, - ...BUCKET_PUT_ACTIONS, +export const BUCKET_PUT_ACL_ACTIONS = [ + 's3:PutObjectAcl', +]; + +export const BUCKET_DELETE_ACTIONS = [ + 's3:DeleteObject*', ]; export const KEY_READ_ACTIONS = [ diff --git a/packages/@aws-cdk/aws-s3/package.json b/packages/@aws-cdk/aws-s3/package.json index 02da965202f64..8adbd67cf204b 100644 --- a/packages/@aws-cdk/aws-s3/package.json +++ b/packages/@aws-cdk/aws-s3/package.json @@ -85,6 +85,7 @@ "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-kms": "0.0.0", "@aws-cdk/core": "0.0.0", + "@aws-cdk/cx-api": "0.0.0", "constructs": "^3.2.0" }, "homepage": "https://github.com/aws/aws-cdk", @@ -93,6 +94,7 @@ "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-kms": "0.0.0", "@aws-cdk/core": "0.0.0", + "@aws-cdk/cx-api": "0.0.0", "constructs": "^3.2.0" }, "engines": { diff --git a/packages/@aws-cdk/aws-s3/test/bucket.test.ts b/packages/@aws-cdk/aws-s3/test/bucket.test.ts index 997a3abd4e56f..cb9202b28cfd7 100644 --- a/packages/@aws-cdk/aws-s3/test/bucket.test.ts +++ b/packages/@aws-cdk/aws-s3/test/bucket.test.ts @@ -3,6 +3,7 @@ import { countResources, expect, haveResource, haveResourceLike, ResourcePart, S import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; import * as cdk from '@aws-cdk/core'; +import * as cxapi from '@aws-cdk/cx-api'; import { nodeunitShim, Test } from 'nodeunit-shim'; import * as s3 from '../lib'; @@ -1085,176 +1086,293 @@ nodeunitShim({ test.done(); }, - }, - 'grantWrite with KMS key has appropriate permissions for multipart uploads'(test: Test) { - const stack = new cdk.Stack(); - const bucket = new s3.Bucket(stack, 'MyBucket', { encryption: s3.BucketEncryption.KMS }); - const user = new iam.User(stack, 'MyUser'); - bucket.grantWrite(user); + 'does not grant PutObjectAcl when the S3_GRANT_WRITE_WITHOUT_ACL feature is enabled'(test: Test) { + const app = new cdk.App({ + context: { + [cxapi.S3_GRANT_WRITE_WITHOUT_ACL]: true, + }, + }); + const stack = new cdk.Stack(app, 'Stack'); + const bucket = new s3.Bucket(stack, 'MyBucket'); + const user = new iam.User(stack, 'MyUser'); - expect(stack).toMatch({ - 'Resources': { - 'MyBucketKeyC17130CF': { - 'Type': 'AWS::KMS::Key', - 'Properties': { - 'KeyPolicy': { - 'Statement': [ + bucket.grantReadWrite(user); + + expect(stack).to(haveResourceLike('AWS::IAM::Policy', { + 'PolicyDocument': { + 'Statement': [ + { + 'Action': [ + 's3:GetObject*', + 's3:GetBucket*', + 's3:List*', + 's3:DeleteObject*', + 's3:PutObject', + 's3:Abort*', + ], + 'Resource': [ + { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, { - 'Action': [ - 'kms:Create*', - 'kms:Describe*', - 'kms:Enable*', - 'kms:List*', - 'kms:Put*', - 'kms:Update*', - 'kms:Revoke*', - 'kms:Disable*', - 'kms:Get*', - 'kms:Delete*', - 'kms:ScheduleKeyDeletion', - 'kms:CancelKeyDeletion', - 'kms:GenerateDataKey', - 'kms:TagResource', - 'kms:UntagResource', - ], - 'Effect': 'Allow', - 'Principal': { - 'AWS': { - 'Fn::Join': [ - '', - [ - 'arn:', - { - 'Ref': 'AWS::Partition', - }, - ':iam::', - { - 'Ref': 'AWS::AccountId', - }, - ':root', + 'Fn::Join': ['', [ + { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, + '/*', + ]], + }, + ], + }, + ], + }, + })); + + test.done(); + }, + }, + + 'grantWrite': { + 'with KMS key has appropriate permissions for multipart uploads'(test: Test) { + const stack = new cdk.Stack(); + const bucket = new s3.Bucket(stack, 'MyBucket', { encryption: s3.BucketEncryption.KMS }); + const user = new iam.User(stack, 'MyUser'); + bucket.grantWrite(user); + + expect(stack).toMatch({ + 'Resources': { + 'MyBucketKeyC17130CF': { + 'Type': 'AWS::KMS::Key', + 'Properties': { + 'KeyPolicy': { + 'Statement': [ + { + 'Action': [ + 'kms:Create*', + 'kms:Describe*', + 'kms:Enable*', + 'kms:List*', + 'kms:Put*', + 'kms:Update*', + 'kms:Revoke*', + 'kms:Disable*', + 'kms:Get*', + 'kms:Delete*', + 'kms:ScheduleKeyDeletion', + 'kms:CancelKeyDeletion', + 'kms:GenerateDataKey', + 'kms:TagResource', + 'kms:UntagResource', + ], + 'Effect': 'Allow', + 'Principal': { + 'AWS': { + 'Fn::Join': [ + '', + [ + 'arn:', + { + 'Ref': 'AWS::Partition', + }, + ':iam::', + { + 'Ref': 'AWS::AccountId', + }, + ':root', + ], ], - ], + }, }, + 'Resource': '*', }, - 'Resource': '*', - }, - { - 'Action': [ - 'kms:Encrypt', - 'kms:ReEncrypt*', - 'kms:GenerateDataKey*', - 'kms:Decrypt', - ], - 'Effect': 'Allow', - 'Principal': { - 'AWS': { - 'Fn::GetAtt': [ - 'MyUserDC45028B', - 'Arn', - ], + { + 'Action': [ + 'kms:Encrypt', + 'kms:ReEncrypt*', + 'kms:GenerateDataKey*', + 'kms:Decrypt', + ], + 'Effect': 'Allow', + 'Principal': { + 'AWS': { + 'Fn::GetAtt': [ + 'MyUserDC45028B', + 'Arn', + ], + }, }, + 'Resource': '*', }, - 'Resource': '*', - }, - ], - 'Version': '2012-10-17', + ], + 'Version': '2012-10-17', + }, + 'Description': 'Created by Default/MyBucket', }, - 'Description': 'Created by Default/MyBucket', + 'UpdateReplacePolicy': 'Retain', + 'DeletionPolicy': 'Retain', }, - 'UpdateReplacePolicy': 'Retain', - 'DeletionPolicy': 'Retain', - }, - 'MyBucketF68F3FF0': { - 'Type': 'AWS::S3::Bucket', - 'Properties': { - 'BucketEncryption': { - 'ServerSideEncryptionConfiguration': [ - { - 'ServerSideEncryptionByDefault': { - 'KMSMasterKeyID': { + 'MyBucketF68F3FF0': { + 'Type': 'AWS::S3::Bucket', + 'Properties': { + 'BucketEncryption': { + 'ServerSideEncryptionConfiguration': [ + { + 'ServerSideEncryptionByDefault': { + 'KMSMasterKeyID': { + 'Fn::GetAtt': [ + 'MyBucketKeyC17130CF', + 'Arn', + ], + }, + 'SSEAlgorithm': 'aws:kms', + }, + }, + ], + }, + }, + 'UpdateReplacePolicy': 'Retain', + 'DeletionPolicy': 'Retain', + }, + 'MyUserDC45028B': { + 'Type': 'AWS::IAM::User', + }, + 'MyUserDefaultPolicy7B897426': { + 'Type': 'AWS::IAM::Policy', + 'Properties': { + 'PolicyDocument': { + 'Statement': [ + { + 'Action': [ + 's3:DeleteObject*', + 's3:PutObject*', + 's3:Abort*', + ], + 'Effect': 'Allow', + 'Resource': [ + { + 'Fn::GetAtt': [ + 'MyBucketF68F3FF0', + 'Arn', + ], + }, + { + 'Fn::Join': [ + '', + [ + { + 'Fn::GetAtt': [ + 'MyBucketF68F3FF0', + 'Arn', + ], + }, + '/*', + ], + ], + }, + ], + }, + { + 'Action': [ + 'kms:Encrypt', + 'kms:ReEncrypt*', + 'kms:GenerateDataKey*', + 'kms:Decrypt', + ], + 'Effect': 'Allow', + 'Resource': { 'Fn::GetAtt': [ 'MyBucketKeyC17130CF', 'Arn', ], }, - 'SSEAlgorithm': 'aws:kms', }, + ], + 'Version': '2012-10-17', + }, + 'PolicyName': 'MyUserDefaultPolicy7B897426', + 'Users': [ + { + 'Ref': 'MyUserDC45028B', }, ], }, }, - 'UpdateReplacePolicy': 'Retain', - 'DeletionPolicy': 'Retain', }, - 'MyUserDC45028B': { - 'Type': 'AWS::IAM::User', + }); + + test.done(); + }, + + 'does not grant PutObjectAcl when the S3_GRANT_WRITE_WITHOUT_ACL feature is enabled'(test: Test) { + const app = new cdk.App({ + context: { + [cxapi.S3_GRANT_WRITE_WITHOUT_ACL]: true, }, - 'MyUserDefaultPolicy7B897426': { - 'Type': 'AWS::IAM::Policy', - 'Properties': { - 'PolicyDocument': { - 'Statement': [ - { - 'Action': [ - 's3:DeleteObject*', - 's3:PutObject*', - 's3:Abort*', - ], - 'Effect': 'Allow', - 'Resource': [ - { - 'Fn::GetAtt': [ - 'MyBucketF68F3FF0', - 'Arn', - ], - }, - { - 'Fn::Join': [ - '', - [ - { - 'Fn::GetAtt': [ - 'MyBucketF68F3FF0', - 'Arn', - ], - }, - '/*', - ], - ], - }, - ], - }, + }); + const stack = new cdk.Stack(app, 'Stack'); + const bucket = new s3.Bucket(stack, 'MyBucket'); + const user = new iam.User(stack, 'MyUser'); + + bucket.grantWrite(user); + + expect(stack).to(haveResourceLike('AWS::IAM::Policy', { + 'PolicyDocument': { + 'Statement': [ + { + 'Action': [ + 's3:DeleteObject*', + 's3:PutObject', + 's3:Abort*', + ], + 'Resource': [ + { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, { - 'Action': [ - 'kms:Encrypt', - 'kms:ReEncrypt*', - 'kms:GenerateDataKey*', - 'kms:Decrypt', - ], - 'Effect': 'Allow', - 'Resource': { - 'Fn::GetAtt': [ - 'MyBucketKeyC17130CF', - 'Arn', - ], - }, + 'Fn::Join': ['', [ + { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, + '/*', + ]], }, ], - 'Version': '2012-10-17', }, - 'PolicyName': 'MyUserDefaultPolicy7B897426', - 'Users': [ - { - 'Ref': 'MyUserDC45028B', + ], + }, + })); + + test.done(); + }, + }, + + 'grantPut': { + 'does not grant PutObjectAcl when the S3_GRANT_WRITE_WITHOUT_ACL feature is enabled'(test: Test) { + const app = new cdk.App({ + context: { + [cxapi.S3_GRANT_WRITE_WITHOUT_ACL]: true, + }, + }); + const stack = new cdk.Stack(app, 'Stack'); + const bucket = new s3.Bucket(stack, 'MyBucket'); + const user = new iam.User(stack, 'MyUser'); + + bucket.grantPut(user); + + expect(stack).to(haveResourceLike('AWS::IAM::Policy', { + 'PolicyDocument': { + 'Statement': [ + { + 'Action': [ + 's3:PutObject', + 's3:Abort*', + ], + 'Resource': { + 'Fn::Join': ['', [ + { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, + '/*', + ]], }, - ], - }, + }, + ], }, - }, - }); + })); - test.done(); + test.done(); + }, }, 'more grants'(test: Test) { diff --git a/packages/@aws-cdk/cx-api/lib/features.ts b/packages/@aws-cdk/cx-api/lib/features.ts index 499c8e3438fe8..c91607b587eb0 100644 --- a/packages/@aws-cdk/cx-api/lib/features.ts +++ b/packages/@aws-cdk/cx-api/lib/features.ts @@ -80,6 +80,15 @@ export const SECRETS_MANAGER_PARSE_OWNED_SECRET_NAME = '@aws-cdk/aws-secretsmana */ export const KMS_DEFAULT_KEY_POLICIES = '@aws-cdk/aws-kms:defaultKeyPolicies'; +/** + * Change the old 's3:PutObject*' permission to 's3:PutObject' on Bucket, + * as the former includes 's3:PutObjectAcl', + * which allows changing the visibility of an object written to the Bucket. + * Use a feature flag to make sure existing customers who might be relying + * on the overly-broad permissions are not broken. + */ +export const S3_GRANT_WRITE_WITHOUT_ACL = '@aws-cdk/aws-s3:grantWriteWithoutAcl'; + /** * This map includes context keys and values for feature flags that enable * capabilities "from the future", which we could not introduce as the default @@ -100,6 +109,7 @@ export const FUTURE_FLAGS = { [DOCKER_IGNORE_SUPPORT]: true, [SECRETS_MANAGER_PARSE_OWNED_SECRET_NAME]: true, [KMS_DEFAULT_KEY_POLICIES]: true, + [S3_GRANT_WRITE_WITHOUT_ACL]: true, // We will advertise this flag when the feature is complete // [NEW_STYLE_STACK_SYNTHESIS_CONTEXT]: 'true', @@ -117,6 +127,7 @@ const FUTURE_FLAGS_DEFAULTS: { [key: string]: boolean } = { [DOCKER_IGNORE_SUPPORT]: false, [SECRETS_MANAGER_PARSE_OWNED_SECRET_NAME]: false, [KMS_DEFAULT_KEY_POLICIES]: false, + [S3_GRANT_WRITE_WITHOUT_ACL]: false, }; export function futureFlagDefault(flag: string): boolean { From dcb1579ec13ef5536364db1c954684c11124ec44 Mon Sep 17 00:00:00 2001 From: Niranjan Jayakar Date: Wed, 13 Jan 2021 11:19:14 +0000 Subject: [PATCH 20/54] chore: auto approve v2 release PRs (#12471) For v2, we will be releasing automatically once per week. The 'bump' job will create the PR with the necessary changes. Auto-approve the bump PR. ref: aws/cdk-ops#1132 --- .github/workflows/auto-approve-v2-merge-forward.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/auto-approve-v2-merge-forward.yml b/.github/workflows/auto-approve-v2-merge-forward.yml index 96dd3d0837e6e..f05cd6753316c 100644 --- a/.github/workflows/auto-approve-v2-merge-forward.yml +++ b/.github/workflows/auto-approve-v2-merge-forward.yml @@ -1,7 +1,7 @@ # Automatically approve PRs that merge master forward to v2-main # # Only does approvals! mergify takes care of the actual merge. -name: Auto-approve forward merges onto v2-main +name: Auto-approve automated PRs around CDK v2 on: pull_request: types: @@ -21,6 +21,6 @@ jobs: if: > github.event.pull_request.user.login == 'aws-cdk-automation' && github.event.pull_request.base.ref == 'v2-main' - && contains(github.event.pull_request.labels.*.name, 'pr/forward-merge') + && contains(github.event.pull_request.labels.*.name, 'pr/auto-approve') with: github-token: "${{ secrets.GITHUB_TOKEN }}" From 5e6f377d74c18e00a40f54448370ca8ee221fe16 Mon Sep 17 00:00:00 2001 From: Nick Lynch Date: Wed, 13 Jan 2021 14:45:59 +0000 Subject: [PATCH 21/54] chore: backporting changes to merge-forward job from v2 branch (#12482) Bringing the two branches back into sync. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- scripts/merge-forward.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/merge-forward.sh b/scripts/merge-forward.sh index 3a7632e70d736..a70bf7e9f71c5 100755 --- a/scripts/merge-forward.sh +++ b/scripts/merge-forward.sh @@ -6,8 +6,11 @@ set -exo pipefail git fetch --all git checkout -B v2-main origin/v2-main +git merge origin/master --no-edit + # Some package rules differ between v1 and v2, most notably which packages can be public vs private. # These differences are fixable via 'pkglint', so we run that and commit the delta (if any). -lerna run pkglint && { git diff --quiet || git commit -am 'automatic pkglint fixes'; } - -git merge origin/master --no-edit +yarn install --frozen-lockfile +yarn pkglint +# Commit the difference, if there is one. +git diff --quiet || git commit -am 'automatic pkglint fixes' From 3967c6e54cef5d3bc7e137ebcf827f884ec5ee04 Mon Sep 17 00:00:00 2001 From: Meng Xin Zhu Date: Thu, 14 Jan 2021 01:52:37 +0800 Subject: [PATCH 22/54] docs(stepfunctions-tasks): fix code example of glue start job (#12483) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-stepfunctions-tasks/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/README.md b/packages/@aws-cdk/aws-stepfunctions-tasks/README.md index 32044b4a23649..689ed0a53195f 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/README.md +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/README.md @@ -667,7 +667,7 @@ You can call the [`StartJobRun`](https://docs.aws.amazon.com/glue/latest/dg/aws- ```ts new GlueStartJobRun(stack, 'Task', { - jobName: 'my-glue-job', + glueJobName: 'my-glue-job', arguments: { key: 'value', }, From adb2a188bf8df5950dec7647defa2c0796948c10 Mon Sep 17 00:00:00 2001 From: Alexey Novikov Date: Wed, 13 Jan 2021 20:59:14 +0100 Subject: [PATCH 23/54] docs(applicationautoscaling): typo in docstring (#12377) minor typo ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../aws-applicationautoscaling/lib/step-scaling-policy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts index dcead1cf8e37a..455e9ebbbd9e9 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts @@ -57,7 +57,7 @@ export interface StepScalingPolicyProps extends BasicStepScalingPolicyProps { } /** - * Define a acaling strategy which scales depending on absolute values of some metric. + * Define a scaling strategy which scales depending on absolute values of some metric. * * You can specify the scaling behavior for various values of the metric. * From 2fed1e1bf0fb26a9e209dc9219ea3b0729f295c7 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Wed, 13 Jan 2021 21:34:55 +0100 Subject: [PATCH 24/54] docs: clarify egress default for `fromSecurityGroupId` (#12350) The default is currently not clearly documented. Fixes #12082. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-ec2/lib/security-group.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/@aws-cdk/aws-ec2/lib/security-group.ts b/packages/@aws-cdk/aws-ec2/lib/security-group.ts index 62a0ceb19e0ca..b5c3e4bf5cff2 100644 --- a/packages/@aws-cdk/aws-ec2/lib/security-group.ts +++ b/packages/@aws-cdk/aws-ec2/lib/security-group.ts @@ -321,6 +321,13 @@ export class SecurityGroup extends SecurityGroupBase { /** * Import an existing security group into this app. + * + * This method will assume that the Security Group has a rule in it which allows + * all outbound traffic, and so will not add egress rules to the imported Security + * Group (only ingress rules). + * + * If your existing Security Group needs to have egress rules added, pass the + * `allowAllOutbound: false` option on import. */ public static fromSecurityGroupId(scope: Construct, id: string, securityGroupId: string, options: SecurityGroupImportOptions = {}): ISecurityGroup { class MutableImport extends SecurityGroupBase { From c14e641fd154667e740cd7c2196e7bf58c1a6016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=81akomy?= Date: Wed, 13 Jan 2021 22:30:43 +0100 Subject: [PATCH 25/54] chore(appsync): improved example DynamoDB stack in AppSync README.md file (#12320) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `MappingTemplate` is not a global value and it has to either be explicitly imported: ``` import { MappingTemplate } from '@aws-cdk/aws-appsync'; ``` or accessed via `appsync` field (since there is an `import * as appsync from '@aws-cdk/aws-appsync';` on line 55). It's a small thing but now the whole example code is more or less copy&paste-able 👍 (same goes for `PrimaryKey` and `Values`) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-appsync/README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/@aws-cdk/aws-appsync/README.md b/packages/@aws-cdk/aws-appsync/README.md index 794cff6db3cda..61c4e797f5bb4 100644 --- a/packages/@aws-cdk/aws-appsync/README.md +++ b/packages/@aws-cdk/aws-appsync/README.md @@ -75,20 +75,23 @@ const demoTable = new db.Table(stack, 'DemoTable', { const demoDS = api.addDynamoDbDataSource('demoDataSource', demoTable); -// Resolver for the Query "getDemos" that scans the DyanmoDb table and returns the entire list. +// Resolver for the Query "getDemos" that scans the DynamoDb table and returns the entire list. demoDS.createResolver({ typeName: 'Query', fieldName: 'getDemos', - requestMappingTemplate: MappingTemplate.dynamoDbScanTable(), - responseMappingTemplate: MappingTemplate.dynamoDbResultList(), + requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(), + responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(), }); // Resolver for the Mutation "addDemo" that puts the item into the DynamoDb table. demoDS.createResolver({ typeName: 'Mutation', fieldName: 'addDemo', - requestMappingTemplate: MappingTemplate.dynamoDbPutItem(PrimaryKey.partition('id').auto(), Values.projecting('demo')), - responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: appsync.MappingTemplate.dynamoDbPutItem( + appsync.PrimaryKey.partition('id').auto(), + appsync.Values.projecting('demo') + ), + responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultItem(), }); ``` From a7a2236367f8f01b00b6d90f1d3fe7bf674b1aee Mon Sep 17 00:00:00 2001 From: Adam Ruka Date: Wed, 13 Jan 2021 14:06:50 -0800 Subject: [PATCH 26/54] feat(cfnspec): CloudFormation resource specification update to v23.0.0 (#12490) Includes removing a bunch of patches that no longer apply, as many custom Tags property types have been removed in this version of the spec in favor of using the common Tag type. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../@aws-cdk/aws-auditmanager/.eslintrc.js | 3 + packages/@aws-cdk/aws-auditmanager/.gitignore | 19 + packages/@aws-cdk/aws-auditmanager/.npmignore | 28 + packages/@aws-cdk/aws-auditmanager/LICENSE | 201 ++ packages/@aws-cdk/aws-auditmanager/NOTICE | 2 + packages/@aws-cdk/aws-auditmanager/README.md | 20 + .../@aws-cdk/aws-auditmanager/jest.config.js | 2 + .../@aws-cdk/aws-auditmanager/lib/index.ts | 2 + .../@aws-cdk/aws-auditmanager/package.json | 97 + .../test/auditmanager.test.ts | 6 + packages/@aws-cdk/aws-datasync/.eslintrc.js | 3 + packages/@aws-cdk/aws-datasync/.gitignore | 19 + packages/@aws-cdk/aws-datasync/.npmignore | 28 + packages/@aws-cdk/aws-datasync/LICENSE | 201 ++ packages/@aws-cdk/aws-datasync/NOTICE | 2 + packages/@aws-cdk/aws-datasync/README.md | 20 + packages/@aws-cdk/aws-datasync/jest.config.js | 2 + packages/@aws-cdk/aws-datasync/lib/index.ts | 2 + packages/@aws-cdk/aws-datasync/package.json | 97 + .../aws-datasync/test/datasync.test.ts | 6 + .../@aws-cdk/aws-mediaconnect/.eslintrc.js | 3 + packages/@aws-cdk/aws-mediaconnect/.gitignore | 19 + packages/@aws-cdk/aws-mediaconnect/.npmignore | 28 + packages/@aws-cdk/aws-mediaconnect/LICENSE | 201 ++ packages/@aws-cdk/aws-mediaconnect/NOTICE | 2 + packages/@aws-cdk/aws-mediaconnect/README.md | 20 + .../@aws-cdk/aws-mediaconnect/jest.config.js | 2 + .../@aws-cdk/aws-mediaconnect/lib/index.ts | 2 + .../@aws-cdk/aws-mediaconnect/package.json | 97 + .../test/mediaconnect.test.ts | 6 + packages/@aws-cdk/cfnspec/CHANGELOG.md | 469 +++ .../build-tools/create-missing-libraries.ts | 2 +- packages/@aws-cdk/cfnspec/cfn.version | 2 +- ...0_CloudFormationResourceSpecification.json | 2778 +++++++++++++---- .../cfnspec/spec-source/000_sam.spec.json | 30 +- ...ngTemplate_Tags_CorrectItemType_patch.json | 21 - .../570_Athena_Workgroup_Tags_patch.json | 36 - .../610_IoT_Authorizer_Tags_patch.json | 16 - ...figuration_Tags_CorrectItemType_patch.json | 21 - .../711_AuditMgr_Assesment_patch.json | 13 - .../cloudformation-include/package.json | 6 + packages/aws-cdk-lib/package.json | 3 + packages/decdk/package.json | 3 + packages/monocdk/package.json | 3 + 44 files changed, 3878 insertions(+), 665 deletions(-) create mode 100644 packages/@aws-cdk/aws-auditmanager/.eslintrc.js create mode 100644 packages/@aws-cdk/aws-auditmanager/.gitignore create mode 100644 packages/@aws-cdk/aws-auditmanager/.npmignore create mode 100644 packages/@aws-cdk/aws-auditmanager/LICENSE create mode 100644 packages/@aws-cdk/aws-auditmanager/NOTICE create mode 100644 packages/@aws-cdk/aws-auditmanager/README.md create mode 100644 packages/@aws-cdk/aws-auditmanager/jest.config.js create mode 100644 packages/@aws-cdk/aws-auditmanager/lib/index.ts create mode 100644 packages/@aws-cdk/aws-auditmanager/package.json create mode 100644 packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts create mode 100644 packages/@aws-cdk/aws-datasync/.eslintrc.js create mode 100644 packages/@aws-cdk/aws-datasync/.gitignore create mode 100644 packages/@aws-cdk/aws-datasync/.npmignore create mode 100644 packages/@aws-cdk/aws-datasync/LICENSE create mode 100644 packages/@aws-cdk/aws-datasync/NOTICE create mode 100644 packages/@aws-cdk/aws-datasync/README.md create mode 100644 packages/@aws-cdk/aws-datasync/jest.config.js create mode 100644 packages/@aws-cdk/aws-datasync/lib/index.ts create mode 100644 packages/@aws-cdk/aws-datasync/package.json create mode 100644 packages/@aws-cdk/aws-datasync/test/datasync.test.ts create mode 100644 packages/@aws-cdk/aws-mediaconnect/.eslintrc.js create mode 100644 packages/@aws-cdk/aws-mediaconnect/.gitignore create mode 100644 packages/@aws-cdk/aws-mediaconnect/.npmignore create mode 100644 packages/@aws-cdk/aws-mediaconnect/LICENSE create mode 100644 packages/@aws-cdk/aws-mediaconnect/NOTICE create mode 100644 packages/@aws-cdk/aws-mediaconnect/README.md create mode 100644 packages/@aws-cdk/aws-mediaconnect/jest.config.js create mode 100644 packages/@aws-cdk/aws-mediaconnect/lib/index.ts create mode 100644 packages/@aws-cdk/aws-mediaconnect/package.json create mode 100644 packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts delete mode 100644 packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json delete mode 100644 packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json delete mode 100644 packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json delete mode 100644 packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json delete mode 100644 packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json diff --git a/packages/@aws-cdk/aws-auditmanager/.eslintrc.js b/packages/@aws-cdk/aws-auditmanager/.eslintrc.js new file mode 100644 index 0000000000000..61dd8dd001f63 --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/.eslintrc.js @@ -0,0 +1,3 @@ +const baseConfig = require('cdk-build-tools/config/eslintrc'); +baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-auditmanager/.gitignore b/packages/@aws-cdk/aws-auditmanager/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/.gitignore @@ -0,0 +1,19 @@ +*.js +*.js.map +*.d.ts +tsconfig.json +node_modules +*.generated.ts +dist +.jsii + +.LAST_BUILD +.nyc_output +coverage +.nycrc +.LAST_PACKAGE +*.snk +nyc.config.js +!.eslintrc.js +!jest.config.js +junit.xml diff --git a/packages/@aws-cdk/aws-auditmanager/.npmignore b/packages/@aws-cdk/aws-auditmanager/.npmignore new file mode 100644 index 0000000000000..e4486030fcb17 --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/.npmignore @@ -0,0 +1,28 @@ +# Don't include original .ts files when doing `npm pack` +*.ts +!*.d.ts +coverage +.nyc_output +*.tgz + +dist +.LAST_PACKAGE +.LAST_BUILD +!*.js + +# Include .jsii +!.jsii + +*.snk + +*.tsbuildinfo + +tsconfig.json + +.eslintrc.js +jest.config.js + +# exclude cdk artifacts +**/cdk.out +junit.xml +test/ diff --git a/packages/@aws-cdk/aws-auditmanager/LICENSE b/packages/@aws-cdk/aws-auditmanager/LICENSE new file mode 100644 index 0000000000000..28e4bdcec77ec --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/@aws-cdk/aws-auditmanager/NOTICE b/packages/@aws-cdk/aws-auditmanager/NOTICE new file mode 100644 index 0000000000000..5fc3826926b5b --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-auditmanager/README.md b/packages/@aws-cdk/aws-auditmanager/README.md new file mode 100644 index 0000000000000..ee34051ab78e3 --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/README.md @@ -0,0 +1,20 @@ +# AWS::AuditManager Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts +import auditmanager = require('@aws-cdk/aws-auditmanager'); +``` diff --git a/packages/@aws-cdk/aws-auditmanager/jest.config.js b/packages/@aws-cdk/aws-auditmanager/jest.config.js new file mode 100644 index 0000000000000..54e28beb9798b --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/jest.config.js @@ -0,0 +1,2 @@ +const baseConfig = require('cdk-build-tools/config/jest.config'); +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-auditmanager/lib/index.ts b/packages/@aws-cdk/aws-auditmanager/lib/index.ts new file mode 100644 index 0000000000000..f6234117e603f --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::AuditManager CloudFormation Resources: +export * from './auditmanager.generated'; diff --git a/packages/@aws-cdk/aws-auditmanager/package.json b/packages/@aws-cdk/aws-auditmanager/package.json new file mode 100644 index 0000000000000..35a6fdbe08a93 --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/package.json @@ -0,0 +1,97 @@ +{ + "name": "@aws-cdk/aws-auditmanager", + "version": "0.0.0", + "description": "The CDK Construct Library for AWS::AuditManager", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AuditManager", + "packageId": "Amazon.CDK.AWS.AuditManager", + "signAssembly": true, + "assemblyOriginatorKeyFile": "../../key.snk", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" + }, + "java": { + "package": "software.amazon.awscdk.services.auditmanager", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "auditmanager" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ], + "distName": "aws-cdk.aws-auditmanager", + "module": "aws_cdk.aws_auditmanager" + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-auditmanager" + }, + "homepage": "https://github.com/aws/aws-cdk", + "scripts": { + "build": "cdk-build", + "watch": "cdk-watch", + "lint": "cdk-lint", + "test": "cdk-test", + "integ": "cdk-integ", + "pkglint": "pkglint -f", + "package": "cdk-package", + "awslint": "cdk-awslint", + "cfn2ts": "cfn2ts", + "build+test+package": "npm run build+test && npm run package", + "build+test": "npm run build && npm test", + "compat": "cdk-compat", + "gen": "cfn2ts", + "rosetta:extract": "yarn --silent jsii-rosetta extract" + }, + "cdk-build": { + "cloudformation": "AWS::AuditManager", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::AuditManager", + "aws-auditmanager" + ], + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com", + "organization": true + }, + "license": "Apache-2.0", + "devDependencies": { + "@aws-cdk/assert": "0.0.0", + "cdk-build-tools": "0.0.0", + "cfn2ts": "0.0.0", + "pkglint": "0.0.0" + }, + "dependencies": { + "@aws-cdk/core": "0.0.0" + }, + "peerDependencies": { + "@aws-cdk/core": "0.0.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "stability": "experimental", + "maturity": "cfn-only", + "awscdkio": { + "announce": false + } +} diff --git a/packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts b/packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts new file mode 100644 index 0000000000000..e394ef336bfb4 --- /dev/null +++ b/packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts @@ -0,0 +1,6 @@ +import '@aws-cdk/assert/jest'; +import {} from '../lib'; + +test('No tests are specified for this package', () => { + expect(true).toBe(true); +}); diff --git a/packages/@aws-cdk/aws-datasync/.eslintrc.js b/packages/@aws-cdk/aws-datasync/.eslintrc.js new file mode 100644 index 0000000000000..61dd8dd001f63 --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/.eslintrc.js @@ -0,0 +1,3 @@ +const baseConfig = require('cdk-build-tools/config/eslintrc'); +baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-datasync/.gitignore b/packages/@aws-cdk/aws-datasync/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/.gitignore @@ -0,0 +1,19 @@ +*.js +*.js.map +*.d.ts +tsconfig.json +node_modules +*.generated.ts +dist +.jsii + +.LAST_BUILD +.nyc_output +coverage +.nycrc +.LAST_PACKAGE +*.snk +nyc.config.js +!.eslintrc.js +!jest.config.js +junit.xml diff --git a/packages/@aws-cdk/aws-datasync/.npmignore b/packages/@aws-cdk/aws-datasync/.npmignore new file mode 100644 index 0000000000000..e4486030fcb17 --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/.npmignore @@ -0,0 +1,28 @@ +# Don't include original .ts files when doing `npm pack` +*.ts +!*.d.ts +coverage +.nyc_output +*.tgz + +dist +.LAST_PACKAGE +.LAST_BUILD +!*.js + +# Include .jsii +!.jsii + +*.snk + +*.tsbuildinfo + +tsconfig.json + +.eslintrc.js +jest.config.js + +# exclude cdk artifacts +**/cdk.out +junit.xml +test/ diff --git a/packages/@aws-cdk/aws-datasync/LICENSE b/packages/@aws-cdk/aws-datasync/LICENSE new file mode 100644 index 0000000000000..28e4bdcec77ec --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/@aws-cdk/aws-datasync/NOTICE b/packages/@aws-cdk/aws-datasync/NOTICE new file mode 100644 index 0000000000000..5fc3826926b5b --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-datasync/README.md b/packages/@aws-cdk/aws-datasync/README.md new file mode 100644 index 0000000000000..ab865b0be83a8 --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/README.md @@ -0,0 +1,20 @@ +# AWS::DataSync Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts +import datasync = require('@aws-cdk/aws-datasync'); +``` diff --git a/packages/@aws-cdk/aws-datasync/jest.config.js b/packages/@aws-cdk/aws-datasync/jest.config.js new file mode 100644 index 0000000000000..54e28beb9798b --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/jest.config.js @@ -0,0 +1,2 @@ +const baseConfig = require('cdk-build-tools/config/jest.config'); +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-datasync/lib/index.ts b/packages/@aws-cdk/aws-datasync/lib/index.ts new file mode 100644 index 0000000000000..e6edd2b3a8a5f --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::DataSync CloudFormation Resources: +export * from './datasync.generated'; diff --git a/packages/@aws-cdk/aws-datasync/package.json b/packages/@aws-cdk/aws-datasync/package.json new file mode 100644 index 0000000000000..2b97e1d28dc2e --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/package.json @@ -0,0 +1,97 @@ +{ + "name": "@aws-cdk/aws-datasync", + "version": "0.0.0", + "description": "The CDK Construct Library for AWS::DataSync", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DataSync", + "packageId": "Amazon.CDK.AWS.DataSync", + "signAssembly": true, + "assemblyOriginatorKeyFile": "../../key.snk", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" + }, + "java": { + "package": "software.amazon.awscdk.services.datasync", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "datasync" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ], + "distName": "aws-cdk.aws-datasync", + "module": "aws_cdk.aws_datasync" + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-datasync" + }, + "homepage": "https://github.com/aws/aws-cdk", + "scripts": { + "build": "cdk-build", + "watch": "cdk-watch", + "lint": "cdk-lint", + "test": "cdk-test", + "integ": "cdk-integ", + "pkglint": "pkglint -f", + "package": "cdk-package", + "awslint": "cdk-awslint", + "cfn2ts": "cfn2ts", + "build+test+package": "npm run build+test && npm run package", + "build+test": "npm run build && npm test", + "compat": "cdk-compat", + "gen": "cfn2ts", + "rosetta:extract": "yarn --silent jsii-rosetta extract" + }, + "cdk-build": { + "cloudformation": "AWS::DataSync", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::DataSync", + "aws-datasync" + ], + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com", + "organization": true + }, + "license": "Apache-2.0", + "devDependencies": { + "@aws-cdk/assert": "0.0.0", + "cdk-build-tools": "0.0.0", + "cfn2ts": "0.0.0", + "pkglint": "0.0.0" + }, + "dependencies": { + "@aws-cdk/core": "0.0.0" + }, + "peerDependencies": { + "@aws-cdk/core": "0.0.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "stability": "experimental", + "maturity": "cfn-only", + "awscdkio": { + "announce": false + } +} diff --git a/packages/@aws-cdk/aws-datasync/test/datasync.test.ts b/packages/@aws-cdk/aws-datasync/test/datasync.test.ts new file mode 100644 index 0000000000000..e394ef336bfb4 --- /dev/null +++ b/packages/@aws-cdk/aws-datasync/test/datasync.test.ts @@ -0,0 +1,6 @@ +import '@aws-cdk/assert/jest'; +import {} from '../lib'; + +test('No tests are specified for this package', () => { + expect(true).toBe(true); +}); diff --git a/packages/@aws-cdk/aws-mediaconnect/.eslintrc.js b/packages/@aws-cdk/aws-mediaconnect/.eslintrc.js new file mode 100644 index 0000000000000..61dd8dd001f63 --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/.eslintrc.js @@ -0,0 +1,3 @@ +const baseConfig = require('cdk-build-tools/config/eslintrc'); +baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-mediaconnect/.gitignore b/packages/@aws-cdk/aws-mediaconnect/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/.gitignore @@ -0,0 +1,19 @@ +*.js +*.js.map +*.d.ts +tsconfig.json +node_modules +*.generated.ts +dist +.jsii + +.LAST_BUILD +.nyc_output +coverage +.nycrc +.LAST_PACKAGE +*.snk +nyc.config.js +!.eslintrc.js +!jest.config.js +junit.xml diff --git a/packages/@aws-cdk/aws-mediaconnect/.npmignore b/packages/@aws-cdk/aws-mediaconnect/.npmignore new file mode 100644 index 0000000000000..e4486030fcb17 --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/.npmignore @@ -0,0 +1,28 @@ +# Don't include original .ts files when doing `npm pack` +*.ts +!*.d.ts +coverage +.nyc_output +*.tgz + +dist +.LAST_PACKAGE +.LAST_BUILD +!*.js + +# Include .jsii +!.jsii + +*.snk + +*.tsbuildinfo + +tsconfig.json + +.eslintrc.js +jest.config.js + +# exclude cdk artifacts +**/cdk.out +junit.xml +test/ diff --git a/packages/@aws-cdk/aws-mediaconnect/LICENSE b/packages/@aws-cdk/aws-mediaconnect/LICENSE new file mode 100644 index 0000000000000..28e4bdcec77ec --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/@aws-cdk/aws-mediaconnect/NOTICE b/packages/@aws-cdk/aws-mediaconnect/NOTICE new file mode 100644 index 0000000000000..5fc3826926b5b --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-mediaconnect/README.md b/packages/@aws-cdk/aws-mediaconnect/README.md new file mode 100644 index 0000000000000..46776462c67ff --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/README.md @@ -0,0 +1,20 @@ +# AWS::MediaConnect Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts +import mediaconnect = require('@aws-cdk/aws-mediaconnect'); +``` diff --git a/packages/@aws-cdk/aws-mediaconnect/jest.config.js b/packages/@aws-cdk/aws-mediaconnect/jest.config.js new file mode 100644 index 0000000000000..54e28beb9798b --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/jest.config.js @@ -0,0 +1,2 @@ +const baseConfig = require('cdk-build-tools/config/jest.config'); +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-mediaconnect/lib/index.ts b/packages/@aws-cdk/aws-mediaconnect/lib/index.ts new file mode 100644 index 0000000000000..ffee08204e7b6 --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::MediaConnect CloudFormation Resources: +export * from './mediaconnect.generated'; diff --git a/packages/@aws-cdk/aws-mediaconnect/package.json b/packages/@aws-cdk/aws-mediaconnect/package.json new file mode 100644 index 0000000000000..7c6fa4af10a93 --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/package.json @@ -0,0 +1,97 @@ +{ + "name": "@aws-cdk/aws-mediaconnect", + "version": "0.0.0", + "description": "The CDK Construct Library for AWS::MediaConnect", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaConnect", + "packageId": "Amazon.CDK.AWS.MediaConnect", + "signAssembly": true, + "assemblyOriginatorKeyFile": "../../key.snk", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" + }, + "java": { + "package": "software.amazon.awscdk.services.mediaconnect", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "mediaconnect" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ], + "distName": "aws-cdk.aws-mediaconnect", + "module": "aws_cdk.aws_mediaconnect" + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-mediaconnect" + }, + "homepage": "https://github.com/aws/aws-cdk", + "scripts": { + "build": "cdk-build", + "watch": "cdk-watch", + "lint": "cdk-lint", + "test": "cdk-test", + "integ": "cdk-integ", + "pkglint": "pkglint -f", + "package": "cdk-package", + "awslint": "cdk-awslint", + "cfn2ts": "cfn2ts", + "build+test+package": "npm run build+test && npm run package", + "build+test": "npm run build && npm test", + "compat": "cdk-compat", + "gen": "cfn2ts", + "rosetta:extract": "yarn --silent jsii-rosetta extract" + }, + "cdk-build": { + "cloudformation": "AWS::MediaConnect", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::MediaConnect", + "aws-mediaconnect" + ], + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com", + "organization": true + }, + "license": "Apache-2.0", + "devDependencies": { + "@aws-cdk/assert": "0.0.0", + "cdk-build-tools": "0.0.0", + "cfn2ts": "0.0.0", + "pkglint": "0.0.0" + }, + "dependencies": { + "@aws-cdk/core": "0.0.0" + }, + "peerDependencies": { + "@aws-cdk/core": "0.0.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "stability": "experimental", + "maturity": "cfn-only", + "awscdkio": { + "announce": false + } +} diff --git a/packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts b/packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts new file mode 100644 index 0000000000000..e394ef336bfb4 --- /dev/null +++ b/packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts @@ -0,0 +1,6 @@ +import '@aws-cdk/assert/jest'; +import {} from '../lib'; + +test('No tests are specified for this package', () => { + expect(true).toBe(true); +}); diff --git a/packages/@aws-cdk/cfnspec/CHANGELOG.md b/packages/@aws-cdk/cfnspec/CHANGELOG.md index c2eac793948d6..b2d9016a94475 100644 --- a/packages/@aws-cdk/cfnspec/CHANGELOG.md +++ b/packages/@aws-cdk/cfnspec/CHANGELOG.md @@ -1,3 +1,472 @@ +# CloudFormation Resource Specification v23.0.0 + +## New Resource Types + +* AWS::Config::StoredQuery +* AWS::DataSync::Agent +* AWS::DataSync::LocationEFS +* AWS::DataSync::LocationFSxWindows +* AWS::DataSync::LocationNFS +* AWS::DataSync::LocationObjectStorage +* AWS::DataSync::LocationS3 +* AWS::DataSync::LocationSMB +* AWS::DataSync::Task +* AWS::MediaConnect::Flow +* AWS::MediaConnect::FlowEntitlement +* AWS::MediaConnect::FlowOutput +* AWS::MediaConnect::FlowSource +* AWS::MediaConnect::FlowVpcInterface +* AWS::Route53::DNSSEC +* AWS::Route53::KeySigningKey +* AWS::Route53Resolver::ResolverDNSSECConfig + +## Attribute Changes + +* AWS::ApiGateway::ClientCertificate ClientCertificateId (__added__) +* AWS::AuditManager::Assessment arn (__deleted__) +* AWS::AuditManager::Assessment assessmentId (__deleted__) +* AWS::AuditManager::Assessment creationTime (__deleted__) +* AWS::AuditManager::Assessment delegations (__deleted__) +* AWS::AuditManager::Assessment frameworkId (__deleted__) +* AWS::AuditManager::Assessment Arn (__added__) +* AWS::AuditManager::Assessment AssessmentId (__added__) +* AWS::AuditManager::Assessment CreationTime (__added__) +* AWS::AuditManager::Assessment Delegations (__added__) +* AWS::AuditManager::Assessment FrameworkId (__added__) +* AWS::EC2::NetworkInsightsAnalysis StatusMessage (__added__) +* AWS::ElastiCache::User Authentication (__deleted__) +* AWS::ElastiCache::User UserGroupIds (__deleted__) +* AWS::ElastiCache::UserGroup PendingChanges (__deleted__) +* AWS::ElastiCache::UserGroup ReplicationGroupIds (__deleted__) +* AWS::ElasticLoadBalancingV2::ListenerRule IsDefault (__added__) +* AWS::ElasticLoadBalancingV2::ListenerRule RuleArn (__added__) +* AWS::SageMaker::Device DeviceFleetName (__deleted__) +* AWS::SageMaker::DeviceFleet DeviceFleetName (__deleted__) + +## Property Changes + +* AWS::ACMPCA::CertificateAuthority CsrExtensions (__added__) +* AWS::ApiGatewayV2::Integration ResponseParameters (__added__) +* AWS::Athena::DataCatalog Tags.ItemType (__added__) +* AWS::Athena::DataCatalog Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::Athena::WorkGroup Tags.ItemType (__added__) +* AWS::Athena::WorkGroup Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::AuditManager::Assessment assessmentReportsDestination (__deleted__) +* AWS::AuditManager::Assessment awsAccount (__deleted__) +* AWS::AuditManager::Assessment description (__deleted__) +* AWS::AuditManager::Assessment frameworkId (__deleted__) +* AWS::AuditManager::Assessment name (__deleted__) +* AWS::AuditManager::Assessment roles (__deleted__) +* AWS::AuditManager::Assessment scope (__deleted__) +* AWS::AuditManager::Assessment status (__deleted__) +* AWS::AuditManager::Assessment tags (__deleted__) +* AWS::AuditManager::Assessment AssessmentReportsDestination (__added__) +* AWS::AuditManager::Assessment AwsAccount (__added__) +* AWS::AuditManager::Assessment Description (__added__) +* AWS::AuditManager::Assessment FrameworkId (__added__) +* AWS::AuditManager::Assessment Name (__added__) +* AWS::AuditManager::Assessment Roles (__added__) +* AWS::AuditManager::Assessment Scope (__added__) +* AWS::AuditManager::Assessment Status (__added__) +* AWS::AuditManager::Assessment Tags (__added__) +* AWS::EC2::CarrierGateway Tags.DuplicatesAllowed (__added__) +* AWS::EC2::CarrierGateway Tags.ItemType (__added__) +* AWS::EC2::CarrierGateway Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::EC2::LocalGatewayRouteTableVPCAssociation Tags.DuplicatesAllowed (__added__) +* AWS::EC2::LocalGatewayRouteTableVPCAssociation Tags.ItemType (__added__) +* AWS::EC2::LocalGatewayRouteTableVPCAssociation Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::EC2::NetworkInsightsAnalysis StatusMessage (__deleted__) +* AWS::ECR::PublicRepository RepositoryPolicyText.PrimitiveType (__added__) +* AWS::ECR::Repository RepositoryPolicyText.PrimitiveType (__added__) +* AWS::ElastiCache::User Authentication (__added__) +* AWS::ElastiCache::User UserGroupIds (__added__) +* AWS::ElastiCache::User Passwords.DuplicatesAllowed (__added__) +* AWS::ElastiCache::User Passwords.PrimitiveItemType (__added__) +* AWS::ElastiCache::User Passwords.Type (__changed__) + * Old: PasswordList + * New: List +* AWS::ElastiCache::UserGroup PendingChanges (__added__) +* AWS::ElastiCache::UserGroup ReplicationGroupIds (__added__) +* AWS::ElastiCache::UserGroup UserIds.DuplicatesAllowed (__added__) +* AWS::ElastiCache::UserGroup UserIds.PrimitiveItemType (__added__) +* AWS::ElastiCache::UserGroup UserIds.Type (__changed__) + * Old: UserIdList + * New: List +* AWS::GameLift::GameServerGroup InstanceDefinitions.ItemType (__added__) +* AWS::GameLift::GameServerGroup InstanceDefinitions.Type (__changed__) + * Old: InstanceDefinitions + * New: List +* AWS::GameLift::GameServerGroup Tags.ItemType (__added__) +* AWS::GameLift::GameServerGroup Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::GameLift::GameServerGroup VpcSubnets.PrimitiveItemType (__added__) +* AWS::GameLift::GameServerGroup VpcSubnets.Type (__changed__) + * Old: VpcSubnets + * New: List +* AWS::IoT::Authorizer Tags.ItemType (__added__) +* AWS::IoT::Authorizer Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::IoT::Authorizer TokenSigningPublicKeys.PrimitiveItemType (__added__) +* AWS::IoT::Authorizer TokenSigningPublicKeys.Type (__changed__) + * Old: TokenSigningPublicKeys + * New: Map +* AWS::IoT::DomainConfiguration Tags.ItemType (__added__) +* AWS::IoT::DomainConfiguration Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::IoT::ProvisioningTemplate Tags.ItemType (__added__) +* AWS::IoT::ProvisioningTemplate Tags.Type (__changed__) + * Old: Tags + * New: List +* AWS::KMS::Key KeyPolicy.PrimitiveType (__added__) +* AWS::Kendra::DataSource Tags.ItemType (__added__) +* AWS::Kendra::DataSource Tags.Type (__changed__) + * Old: TagList + * New: List +* AWS::Kendra::Faq Tags.ItemType (__added__) +* AWS::Kendra::Faq Tags.Type (__changed__) + * Old: TagList + * New: List +* AWS::Kendra::Index DocumentMetadataConfigurations.ItemType (__added__) +* AWS::Kendra::Index DocumentMetadataConfigurations.Type (__changed__) + * Old: DocumentMetadataConfigurationList + * New: List +* AWS::Kendra::Index Tags.ItemType (__added__) +* AWS::Kendra::Index Tags.Type (__changed__) + * Old: TagList + * New: List +* AWS::Kendra::Index UserTokenConfigurations.ItemType (__added__) +* AWS::Kendra::Index UserTokenConfigurations.Type (__changed__) + * Old: UserTokenConfigurationList + * New: List +* AWS::LicenseManager::Grant AllowedOperations.DuplicatesAllowed (__added__) +* AWS::LicenseManager::Grant AllowedOperations.PrimitiveItemType (__added__) +* AWS::LicenseManager::Grant AllowedOperations.Type (__changed__) + * Old: AllowedOperationList + * New: List +* AWS::LicenseManager::Grant Filters.DuplicatesAllowed (__added__) +* AWS::LicenseManager::Grant Filters.ItemType (__added__) +* AWS::LicenseManager::Grant Filters.Type (__changed__) + * Old: FilterList + * New: List +* AWS::LicenseManager::Grant GrantArns.DuplicatesAllowed (__added__) +* AWS::LicenseManager::Grant GrantArns.PrimitiveItemType (__added__) +* AWS::LicenseManager::Grant GrantArns.Type (__changed__) + * Old: ArnList + * New: List +* AWS::LicenseManager::Grant GrantedOperations.DuplicatesAllowed (__added__) +* AWS::LicenseManager::Grant GrantedOperations.PrimitiveItemType (__added__) +* AWS::LicenseManager::Grant GrantedOperations.Type (__changed__) + * Old: AllowedOperationList + * New: List +* AWS::LicenseManager::Grant Principals.DuplicatesAllowed (__added__) +* AWS::LicenseManager::Grant Principals.PrimitiveItemType (__added__) +* AWS::LicenseManager::Grant Principals.Type (__changed__) + * Old: ArnList + * New: List +* AWS::LicenseManager::Grant Tags.DuplicatesAllowed (__added__) +* AWS::LicenseManager::Grant Tags.ItemType (__added__) +* AWS::LicenseManager::Grant Tags.Type (__changed__) + * Old: TagList + * New: List +* AWS::LicenseManager::License Entitlements.DuplicatesAllowed (__added__) +* AWS::LicenseManager::License Entitlements.ItemType (__added__) +* AWS::LicenseManager::License Entitlements.Type (__changed__) + * Old: EntitlementList + * New: List +* AWS::LicenseManager::License Filters.DuplicatesAllowed (__added__) +* AWS::LicenseManager::License Filters.ItemType (__added__) +* AWS::LicenseManager::License Filters.Type (__changed__) + * Old: FilterList + * New: List +* AWS::LicenseManager::License LicenseArns.DuplicatesAllowed (__added__) +* AWS::LicenseManager::License LicenseArns.PrimitiveItemType (__added__) +* AWS::LicenseManager::License LicenseArns.Type (__changed__) + * Old: ArnList + * New: List +* AWS::LicenseManager::License LicenseMetadata.DuplicatesAllowed (__added__) +* AWS::LicenseManager::License LicenseMetadata.ItemType (__added__) +* AWS::LicenseManager::License LicenseMetadata.Type (__changed__) + * Old: MetadataList + * New: List +* AWS::LicenseManager::License Tags.DuplicatesAllowed (__added__) +* AWS::LicenseManager::License Tags.ItemType (__added__) +* AWS::LicenseManager::License Tags.Type (__changed__) + * Old: TagList + * New: List +* AWS::MediaLive::Channel CdiInputSpecification (__added__) +* AWS::SSO::InstanceAccessControlAttributeConfiguration AccessControlAttributes (__added__) +* AWS::SSO::InstanceAccessControlAttributeConfiguration InstanceAccessControlAttributeConfiguration.Required (__changed__) + * Old: true + * New: false +* AWS::SSO::InstanceAccessControlAttributeConfiguration InstanceArn.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::SSO::PermissionSet InlinePolicy.PrimitiveType (__changed__) + * Old: String + * New: Json +* AWS::SageMaker::Device DeviceFleetName (__added__) +* AWS::SageMaker::DeviceFleet DeviceFleetName (__added__) +* AWS::SageMaker::ModelPackageGroup ModelPackageGroupPolicy.PrimitiveType (__added__) +* AWS::StepFunctions::StateMachine DefinitionSubstitutions.PrimitiveItemType (__added__) +* AWS::StepFunctions::StateMachine DefinitionSubstitutions.Type (__changed__) + * Old: DefinitionSubstitutions + * New: Map +* AWS::Transfer::Server Domain (__added__) +* AWS::Transfer::User PosixProfile (__added__) + +## Property Type Changes + +* AWS::Athena::DataCatalog.Tags (__removed__) +* AWS::Athena::WorkGroup.Tags (__removed__) +* AWS::AuditManager::Assessment.AWSAccounts (__removed__) +* AWS::AuditManager::Assessment.AWSServices (__removed__) +* AWS::AuditManager::Assessment.Delegations (__removed__) +* AWS::AuditManager::Assessment.Roles (__removed__) +* AWS::AuditManager::Assessment.Tags (__removed__) +* AWS::EC2::CarrierGateway.Tags (__removed__) +* AWS::EC2::LocalGatewayRouteTableVPCAssociation.Tags (__removed__) +* AWS::ElastiCache::User.PasswordList (__removed__) +* AWS::ElastiCache::User.UserGroupIdList (__removed__) +* AWS::ElastiCache::UserGroup.ReplicationGroupIdList (__removed__) +* AWS::ElastiCache::UserGroup.UserIdList (__removed__) +* AWS::GameLift::GameServerGroup.InstanceDefinitions (__removed__) +* AWS::GameLift::GameServerGroup.Tags (__removed__) +* AWS::GameLift::GameServerGroup.VpcSubnets (__removed__) +* AWS::IoT::Authorizer.Tags (__removed__) +* AWS::IoT::Authorizer.TokenSigningPublicKeys (__removed__) +* AWS::IoT::DomainConfiguration.Tags (__removed__) +* AWS::IoT::ProvisioningTemplate.Tags (__removed__) +* AWS::Kendra::DataSource.TagList (__removed__) +* AWS::Kendra::Faq.TagList (__removed__) +* AWS::Kendra::Index.DocumentMetadataConfigurationList (__removed__) +* AWS::Kendra::Index.TagList (__removed__) +* AWS::Kendra::Index.UserTokenConfigurationList (__removed__) +* AWS::LicenseManager::Grant.AllowedOperationList (__removed__) +* AWS::LicenseManager::Grant.ArnList (__removed__) +* AWS::LicenseManager::Grant.FilterList (__removed__) +* AWS::LicenseManager::Grant.TagList (__removed__) +* AWS::LicenseManager::License.ArnList (__removed__) +* AWS::LicenseManager::License.EntitlementList (__removed__) +* AWS::LicenseManager::License.FilterList (__removed__) +* AWS::LicenseManager::License.MetadataList (__removed__) +* AWS::LicenseManager::License.TagList (__removed__) +* AWS::StepFunctions::StateMachine.DefinitionSubstitutions (__removed__) +* AWS::ACMPCA::CertificateAuthority.AccessDescription (__added__) +* AWS::ACMPCA::CertificateAuthority.AccessMethod (__added__) +* AWS::ACMPCA::CertificateAuthority.CsrExtensions (__added__) +* AWS::ACMPCA::CertificateAuthority.EdiPartyName (__added__) +* AWS::ACMPCA::CertificateAuthority.GeneralName (__added__) +* AWS::ACMPCA::CertificateAuthority.KeyUsage (__added__) +* AWS::ACMPCA::CertificateAuthority.OtherName (__added__) +* AWS::ACMPCA::CertificateAuthority.SubjectInformationAccess (__added__) +* AWS::ApiGatewayV2::Integration.ResponseParameter (__added__) +* AWS::ApiGatewayV2::Integration.ResponseParameterList (__added__) +* AWS::MediaLive::Channel.AncillarySourceSettings (__added__) +* AWS::MediaLive::Channel.AudioSilenceFailoverSettings (__added__) +* AWS::MediaLive::Channel.CdiInputSpecification (__added__) +* AWS::MediaLive::Channel.FailoverCondition (__added__) +* AWS::MediaLive::Channel.FailoverConditionSettings (__added__) +* AWS::MediaLive::Channel.InputLossFailoverSettings (__added__) +* AWS::MediaLive::Channel.Mpeg2FilterSettings (__added__) +* AWS::MediaLive::Channel.Mpeg2Settings (__added__) +* AWS::MediaLive::Channel.RawSettings (__added__) +* AWS::MediaLive::Channel.VideoBlackFailoverSettings (__added__) +* AWS::MediaLive::Channel.WavSettings (__added__) +* AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttribute (__added__) +* AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValue (__added__) +* AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValueSourceList (__added__) +* AWS::Transfer::User.PosixProfile (__added__) +* AWS::AuditManager::Assessment.AWSAccount emailAddress (__deleted__) +* AWS::AuditManager::Assessment.AWSAccount id (__deleted__) +* AWS::AuditManager::Assessment.AWSAccount name (__deleted__) +* AWS::AuditManager::Assessment.AWSAccount EmailAddress (__added__) +* AWS::AuditManager::Assessment.AWSAccount Id (__added__) +* AWS::AuditManager::Assessment.AWSAccount Name (__added__) +* AWS::AuditManager::Assessment.AWSService serviceName (__deleted__) +* AWS::AuditManager::Assessment.AWSService ServiceName (__added__) +* AWS::AuditManager::Assessment.AssessmentReportsDestination destination (__deleted__) +* AWS::AuditManager::Assessment.AssessmentReportsDestination destinationType (__deleted__) +* AWS::AuditManager::Assessment.AssessmentReportsDestination Destination (__added__) +* AWS::AuditManager::Assessment.AssessmentReportsDestination DestinationType (__added__) +* AWS::AuditManager::Assessment.Delegation assessmentId (__deleted__) +* AWS::AuditManager::Assessment.Delegation assessmentName (__deleted__) +* AWS::AuditManager::Assessment.Delegation comment (__deleted__) +* AWS::AuditManager::Assessment.Delegation controlSetId (__deleted__) +* AWS::AuditManager::Assessment.Delegation createdBy (__deleted__) +* AWS::AuditManager::Assessment.Delegation creationTime (__deleted__) +* AWS::AuditManager::Assessment.Delegation id (__deleted__) +* AWS::AuditManager::Assessment.Delegation lastUpdated (__deleted__) +* AWS::AuditManager::Assessment.Delegation roleArn (__deleted__) +* AWS::AuditManager::Assessment.Delegation roleType (__deleted__) +* AWS::AuditManager::Assessment.Delegation status (__deleted__) +* AWS::AuditManager::Assessment.Delegation AssessmentId (__added__) +* AWS::AuditManager::Assessment.Delegation AssessmentName (__added__) +* AWS::AuditManager::Assessment.Delegation Comment (__added__) +* AWS::AuditManager::Assessment.Delegation ControlSetId (__added__) +* AWS::AuditManager::Assessment.Delegation CreatedBy (__added__) +* AWS::AuditManager::Assessment.Delegation CreationTime (__added__) +* AWS::AuditManager::Assessment.Delegation Id (__added__) +* AWS::AuditManager::Assessment.Delegation LastUpdated (__added__) +* AWS::AuditManager::Assessment.Delegation RoleArn (__added__) +* AWS::AuditManager::Assessment.Delegation RoleType (__added__) +* AWS::AuditManager::Assessment.Delegation Status (__added__) +* AWS::AuditManager::Assessment.Role roleArn (__deleted__) +* AWS::AuditManager::Assessment.Role roleType (__deleted__) +* AWS::AuditManager::Assessment.Role RoleArn (__added__) +* AWS::AuditManager::Assessment.Role RoleType (__added__) +* AWS::AuditManager::Assessment.Scope awsAccounts (__deleted__) +* AWS::AuditManager::Assessment.Scope awsServices (__deleted__) +* AWS::AuditManager::Assessment.Scope AwsAccounts (__added__) +* AWS::AuditManager::Assessment.Scope AwsServices (__added__) +* AWS::EC2::LaunchTemplate.Ebs Throughput (__added__) +* AWS::ElasticLoadBalancingV2::ListenerRule.Action AuthenticateCognitoConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.Action AuthenticateOidcConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.Action FixedResponseConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.Action ForwardConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.Action Order.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-order + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-order +* AWS::ElasticLoadBalancingV2::ListenerRule.Action RedirectConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.Action TargetGroupArn.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-targetgrouparn + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-targetgrouparn +* AWS::ElasticLoadBalancingV2::ListenerRule.Action Type.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-type + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-type +* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateCognitoConfig AuthenticationRequestExtraParams.DuplicatesAllowed (__deleted__) +* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateCognitoConfig SessionTimeout.PrimitiveType (__changed__) + * Old: Long + * New: Integer +* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateOidcConfig UseExistingClientSecret (__added__) +* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateOidcConfig AuthenticationRequestExtraParams.DuplicatesAllowed (__deleted__) +* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateOidcConfig SessionTimeout.PrimitiveType (__changed__) + * Old: Long + * New: Integer +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition Field.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-field + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-field +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition HostHeaderConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition HttpHeaderConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition HttpRequestMethodConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition PathPatternConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition QueryStringConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition SourceIpConfig.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig +* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition Values.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-values + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-values +* AWS::ImageBuilder::DistributionConfiguration.Distribution ContainerDistributionConfiguration (__added__) +* AWS::IoTWireless::WirelessDevice.AbpV10X DevAddr.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.AbpV10X SessionKeys.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.AbpV11 DevAddr.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.AbpV11 SessionKeys.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.OtaaV10X AppEui.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.OtaaV10X AppKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.OtaaV11 AppKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.OtaaV11 JoinEui.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.OtaaV11 NwkKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV10X AppSKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV10X NwkSKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 AppSKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 FNwkSIntKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 NwkSEncKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 SNwkSIntKey.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessGateway.LoRaWANGateway GatewayEui.Required (__changed__) + * Old: false + * New: true +* AWS::IoTWireless::WirelessGateway.LoRaWANGateway RfRegion.Required (__changed__) + * Old: false + * New: true +* AWS::MediaLive::Channel.ArchiveContainerSettings RawSettings (__added__) +* AWS::MediaLive::Channel.AudioCodecSettings WavSettings (__added__) +* AWS::MediaLive::Channel.AutomaticInputFailoverSettings ErrorClearTimeMsec (__added__) +* AWS::MediaLive::Channel.AutomaticInputFailoverSettings FailoverConditions (__added__) +* AWS::MediaLive::Channel.CaptionSelectorSettings AncillarySourceSettings (__added__) +* AWS::MediaLive::Channel.HlsGroupSettings DiscontinuityTags (__added__) +* AWS::MediaLive::Channel.HlsGroupSettings IncompleteSegmentBehavior (__added__) +* AWS::MediaLive::Channel.RtmpGroupSettings AdMarkers (__added__) +* AWS::MediaLive::Channel.VideoCodecSettings Mpeg2Settings (__added__) + +# Serverless Application Model (SAM) Resource Specification v2016-10-31 + +## New Resource Types + + +## Attribute Changes + + +## Property Changes + +* AWS::Serverless::LayerVersion ContentUri.PrimitiveType (__deleted__) +* AWS::Serverless::LayerVersion ContentUri.PrimitiveTypes (__added__) +* AWS::Serverless::LayerVersion ContentUri.Types (__added__) + +## Property Type Changes + +* AWS::Serverless::LayerVersion.S3Location (__added__) + # CloudFormation Resource Specification v22.0.0 ## New Resource Types diff --git a/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts b/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts index 1cf4c4f9cc32e..73276889da9df 100644 --- a/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts +++ b/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts @@ -272,7 +272,7 @@ async function main() { '', '![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge)', '', - '> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use.' + + '> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use.', '>', '> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib', '', diff --git a/packages/@aws-cdk/cfnspec/cfn.version b/packages/@aws-cdk/cfnspec/cfn.version index 1d975bef24600..84b76f4d1c529 100644 --- a/packages/@aws-cdk/cfnspec/cfn.version +++ b/packages/@aws-cdk/cfnspec/cfn.version @@ -1 +1 @@ -22.0.0 +23.0.0 diff --git a/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json b/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json index ca6f3aa09b55b..861e9f77698ac 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json +++ b/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json @@ -17,6 +17,40 @@ } } }, + "AWS::ACMPCA::CertificateAuthority.AccessDescription": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html", + "Properties": { + "AccessLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accesslocation", + "Required": true, + "Type": "GeneralName", + "UpdateType": "Immutable" + }, + "AccessMethod": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accessmethod", + "Required": true, + "Type": "AccessMethod", + "UpdateType": "Immutable" + } + } + }, + "AWS::ACMPCA::CertificateAuthority.AccessMethod": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html", + "Properties": { + "AccessMethodType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-accessmethodtype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "CustomObjectIdentifier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-customobjectidentifier", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, "AWS::ACMPCA::CertificateAuthority.CrlConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html", "Properties": { @@ -46,6 +80,169 @@ } } }, + "AWS::ACMPCA::CertificateAuthority.CsrExtensions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html", + "Properties": { + "KeyUsage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-keyusage", + "Required": false, + "Type": "KeyUsage", + "UpdateType": "Immutable" + }, + "SubjectInformationAccess": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-subjectinformationaccess", + "Required": false, + "Type": "SubjectInformationAccess", + "UpdateType": "Immutable" + } + } + }, + "AWS::ACMPCA::CertificateAuthority.EdiPartyName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html", + "Properties": { + "NameAssigner": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-nameassigner", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "PartyName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-partyname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::ACMPCA::CertificateAuthority.GeneralName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html", + "Properties": { + "DirectoryName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-directoryname", + "Required": false, + "Type": "Subject", + "UpdateType": "Immutable" + }, + "DnsName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-dnsname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "EdiPartyName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-edipartyname", + "Required": false, + "Type": "EdiPartyName", + "UpdateType": "Immutable" + }, + "IpAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-ipaddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "OtherName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-othername", + "Required": false, + "Type": "OtherName", + "UpdateType": "Immutable" + }, + "RegisteredId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-registeredid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Rfc822Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-rfc822name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "UniformResourceIdentifier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-uniformresourceidentifier", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::ACMPCA::CertificateAuthority.KeyUsage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html", + "Properties": { + "CRLSign": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-crlsign", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "DataEncipherment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-dataencipherment", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "DecipherOnly": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-decipheronly", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "DigitalSignature": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-digitalsignature", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "EncipherOnly": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-encipheronly", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "KeyAgreement": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyagreement", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "KeyCertSign": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keycertsign", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "KeyEncipherment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyencipherment", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "NonRepudiation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-nonrepudiation", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::ACMPCA::CertificateAuthority.OtherName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html", + "Properties": { + "TypeId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-typeid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::ACMPCA::CertificateAuthority.RevocationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html", "Properties": { @@ -146,6 +343,18 @@ } } }, + "AWS::ACMPCA::CertificateAuthority.SubjectInformationAccess": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subjectinformationaccess.html", + "Properties": { + "SubjectInformationAccess": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subjectinformationaccess.html#cfn-acmpca-certificateauthority-subjectinformationaccess-subjectinformationaccess", + "ItemType": "AccessDescription", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, "AWS::AccessAnalyzer::Analyzer.ArchiveRule": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-accessanalyzer-analyzer-archiverule.html", "Properties": { @@ -1647,6 +1856,35 @@ } } }, + "AWS::ApiGatewayV2::Integration.ResponseParameter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html", + "Properties": { + "Destination": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html#cfn-apigatewayv2-integration-responseparameter-destination", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Source": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html#cfn-apigatewayv2-integration-responseparameter-source", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::ApiGatewayV2::Integration.ResponseParameterList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameterlist.html", + "Properties": { + "ResponseParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameterlist.html#cfn-apigatewayv2-integration-responseparameterlist-responseparameters", + "ItemType": "ResponseParameter", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::ApiGatewayV2::Integration.TlsConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-tlsconfig.html", "Properties": { @@ -6242,18 +6480,6 @@ } } }, - "AWS::Athena::DataCatalog.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-datacatalog-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-datacatalog-tags.html#cfn-athena-datacatalog-tags-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Athena::WorkGroup.EncryptionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-encryptionconfiguration.html", "Properties": { @@ -6317,18 +6543,6 @@ } } }, - "AWS::Athena::WorkGroup.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-tags.html#cfn-athena-workgroup-tags-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Athena::WorkGroup.WorkGroupConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html", "Properties": { @@ -6408,19 +6622,19 @@ "AWS::AuditManager::Assessment.AWSAccount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html", "Properties": { - "emailAddress": { + "EmailAddress": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-emailaddress", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, - "id": { + "Id": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-id", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, - "name": { + "Name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-name", "PrimitiveType": "String", "Required": false, @@ -6428,22 +6642,10 @@ } } }, - "AWS::AuditManager::Assessment.AWSAccounts": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccounts.html", - "Properties": { - "AWSAccounts": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccounts.html#cfn-auditmanager-assessment-awsaccounts-awsaccounts", - "ItemType": "AWSAccount", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::AuditManager::Assessment.AWSService": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservice.html", "Properties": { - "serviceName": { + "ServiceName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservice.html#cfn-auditmanager-assessment-awsservice-servicename", "PrimitiveType": "String", "Required": false, @@ -6451,28 +6653,16 @@ } } }, - "AWS::AuditManager::Assessment.AWSServices": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservices.html", - "Properties": { - "AWSServices": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservices.html#cfn-auditmanager-assessment-awsservices-awsservices", - "ItemType": "AWSService", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::AuditManager::Assessment.AssessmentReportsDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-assessmentreportsdestination.html", "Properties": { - "destination": { + "Destination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-assessmentreportsdestination.html#cfn-auditmanager-assessment-assessmentreportsdestination-destination", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "destinationType": { + "DestinationType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-assessmentreportsdestination.html#cfn-auditmanager-assessment-assessmentreportsdestination-destinationtype", "PrimitiveType": "String", "Required": false, @@ -6483,67 +6673,67 @@ "AWS::AuditManager::Assessment.Delegation": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html", "Properties": { - "assessmentId": { + "AssessmentId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-assessmentid", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "assessmentName": { + "AssessmentName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-assessmentname", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "comment": { + "Comment": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-comment", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "controlSetId": { + "ControlSetId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-controlsetid", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "createdBy": { + "CreatedBy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-createdby", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "creationTime": { + "CreationTime": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-creationtime", "PrimitiveType": "Double", "Required": false, "UpdateType": "Mutable" }, - "id": { + "Id": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-id", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "lastUpdated": { + "LastUpdated": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-lastupdated", "PrimitiveType": "Double", "Required": false, "UpdateType": "Mutable" }, - "roleArn": { + "RoleArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-rolearn", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "roleType": { + "RoleType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-roletype", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "status": { + "Status": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-status", "PrimitiveType": "String", "Required": false, @@ -6551,28 +6741,16 @@ } } }, - "AWS::AuditManager::Assessment.Delegations": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegations.html", - "Properties": { - "Delegations": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegations.html#cfn-auditmanager-assessment-delegations-delegations", - "ItemType": "Delegation", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::AuditManager::Assessment.Role": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-role.html", "Properties": { - "roleArn": { + "RoleArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-role.html#cfn-auditmanager-assessment-role-rolearn", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "roleType": { + "RoleType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-role.html#cfn-auditmanager-assessment-role-roletype", "PrimitiveType": "String", "Required": false, @@ -6580,41 +6758,19 @@ } } }, - "AWS::AuditManager::Assessment.Roles": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-roles.html", - "Properties": { - "Roles": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-roles.html#cfn-auditmanager-assessment-roles-roles", - "ItemType": "Role", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::AuditManager::Assessment.Scope": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html", "Properties": { - "awsAccounts": { + "AwsAccounts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html#cfn-auditmanager-assessment-scope-awsaccounts", + "ItemType": "AWSAccount", "Required": false, - "Type": "AWSAccounts", + "Type": "List", "UpdateType": "Mutable" }, - "awsServices": { + "AwsServices": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html#cfn-auditmanager-assessment-scope-awsservices", - "Required": false, - "Type": "AWSServices", - "UpdateType": "Mutable" - } - } - }, - "AWS::AuditManager::Assessment.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-tags.html#cfn-auditmanager-assessment-tags-tags", - "ItemType": "Tag", + "ItemType": "AWSService", "Required": false, "Type": "List", "UpdateType": "Mutable" @@ -14327,6 +14483,180 @@ } } }, + "AWS::DataSync::LocationEFS.Ec2Config": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html", + "Properties": { + "SecurityGroupArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html#cfn-datasync-locationefs-ec2config-securitygrouparns", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Immutable" + }, + "SubnetArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html#cfn-datasync-locationefs-ec2config-subnetarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::LocationNFS.MountOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-mountoptions.html", + "Properties": { + "Version": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-mountoptions.html#cfn-datasync-locationnfs-mountoptions-version", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::LocationNFS.OnPremConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-onpremconfig.html", + "Properties": { + "AgentArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-onpremconfig.html#cfn-datasync-locationnfs-onpremconfig-agentarns", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::LocationS3.S3Config": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locations3-s3config.html", + "Properties": { + "BucketAccessRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locations3-s3config.html#cfn-datasync-locations3-s3config-bucketaccessrolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::LocationSMB.MountOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-mountoptions.html", + "Properties": { + "Version": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-mountoptions.html#cfn-datasync-locationsmb-mountoptions-version", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::Task.FilterRule": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html", + "Properties": { + "FilterType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html#cfn-datasync-task-filterrule-filtertype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html#cfn-datasync-task-filterrule-value", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::DataSync::Task.Options": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html", + "Properties": { + "Atime": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-atime", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "BytesPerSecond": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-bytespersecond", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Gid": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-gid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "LogLevel": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-loglevel", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Mtime": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-mtime", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "OverwriteMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-overwritemode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PosixPermissions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-posixpermissions", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PreserveDeletedFiles": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-preservedeletedfiles", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PreserveDevices": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-preservedevices", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TaskQueueing": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-taskqueueing", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TransferMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-transfermode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Uid": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-uid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VerifyMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-verifymode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::DataSync::Task.TaskSchedule": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskschedule.html", + "Properties": { + "ScheduleExpression": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskschedule.html#cfn-datasync-task-taskschedule-scheduleexpression", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::DevOpsGuru::NotificationChannel.NotificationChannelConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationchannelconfig.html", "Properties": { @@ -14616,19 +14946,6 @@ } } }, - "AWS::EC2::CarrierGateway.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-carriergateway-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-carriergateway-tags.html#cfn-ec2-carriergateway-tags-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::EC2::ClientVpnEndpoint.CertificateAuthenticationRequest": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-certificateauthenticationrequest.html", "Properties": { @@ -15524,6 +15841,12 @@ "Required": false, "UpdateType": "Mutable" }, + "Throughput": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-throughput", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, "VolumeSize": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-volumesize", "PrimitiveType": "Integer", @@ -16074,19 +16397,6 @@ } } }, - "AWS::EC2::LocalGatewayRouteTableVPCAssociation.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-localgatewayroutetablevpcassociation-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-localgatewayroutetablevpcassociation-tags.html#cfn-ec2-localgatewayroutetablevpcassociation-tags-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::EC2::NetworkAclEntry.Icmp": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html", "Properties": { @@ -20564,43 +20874,6 @@ } } }, - "AWS::ElastiCache::User.PasswordList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-passwordlist.html", - "Properties": { - "PasswordList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-passwordlist.html#cfn-elasticache-user-passwordlist-passwordlist", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::ElastiCache::User.UserGroupIdList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-usergroupidlist.html", - "Properties": { - "UserGroupIdList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-usergroupidlist.html#cfn-elasticache-user-usergroupidlist-usergroupidlist", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::ElastiCache::UserGroup.ReplicationGroupIdList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-replicationgroupidlist.html", - "Properties": { - "ReplicationGroupIdList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-replicationgroupidlist.html#cfn-elasticache-usergroup-replicationgroupidlist-replicationgroupidlist", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::ElastiCache::UserGroup.UserGroupPendingChanges": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-usergrouppendingchanges.html", "Properties": { @@ -20622,19 +20895,6 @@ } } }, - "AWS::ElastiCache::UserGroup.UserIdList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-useridlist.html", - "Properties": { - "UserIdList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-useridlist.html#cfn-elasticache-usergroup-useridlist-useridlist", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::ElasticBeanstalk::Application.ApplicationResourceLifecycleConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticbeanstalk-application-applicationresourcelifecycleconfig.html", "Properties": { @@ -21359,52 +21619,52 @@ } }, "AWS::ElasticLoadBalancingV2::ListenerRule.Action": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html", "Properties": { "AuthenticateCognitoConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig", "Required": false, "Type": "AuthenticateCognitoConfig", "UpdateType": "Mutable" }, "AuthenticateOidcConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig", "Required": false, "Type": "AuthenticateOidcConfig", "UpdateType": "Mutable" }, "FixedResponseConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig", "Required": false, "Type": "FixedResponseConfig", "UpdateType": "Mutable" }, "ForwardConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig", "Required": false, "Type": "ForwardConfig", "UpdateType": "Mutable" }, "Order": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-order", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-order", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "RedirectConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig", "Required": false, "Type": "RedirectConfig", "UpdateType": "Mutable" }, "TargetGroupArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-targetgrouparn", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-targetgrouparn", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-type", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-type", "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" @@ -21416,7 +21676,6 @@ "Properties": { "AuthenticationRequestExtraParams": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-authenticationrequestextraparams", - "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "Map", @@ -21442,7 +21701,7 @@ }, "SessionTimeout": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-sessiontimeout", - "PrimitiveType": "Long", + "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, @@ -21471,7 +21730,6 @@ "Properties": { "AuthenticationRequestExtraParams": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-authenticationrequestextraparams", - "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "Map", @@ -21521,7 +21779,7 @@ }, "SessionTimeout": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-sessiontimeout", - "PrimitiveType": "Long", + "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, @@ -21531,6 +21789,12 @@ "Required": true, "UpdateType": "Mutable" }, + "UseExistingClientSecret": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-useexistingclientsecret", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, "UserInfoEndpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-userinfoendpoint", "PrimitiveType": "String", @@ -21711,52 +21975,52 @@ } }, "AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html", "Properties": { "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-field", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-field", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "HostHeaderConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig", "Required": false, "Type": "HostHeaderConfig", "UpdateType": "Mutable" }, "HttpHeaderConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig", "Required": false, "Type": "HttpHeaderConfig", "UpdateType": "Mutable" }, "HttpRequestMethodConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig", "Required": false, "Type": "HttpRequestMethodConfig", "UpdateType": "Mutable" }, "PathPatternConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig", "Required": false, "Type": "PathPatternConfig", "UpdateType": "Mutable" }, "QueryStringConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig", "Required": false, "Type": "QueryStringConfig", "UpdateType": "Mutable" }, "SourceIpConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig", "Required": false, "Type": "SourceIpConfig", "UpdateType": "Mutable" }, "Values": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-values", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-values", "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, @@ -23087,18 +23351,6 @@ } } }, - "AWS::GameLift::GameServerGroup.InstanceDefinitions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-instancedefinitions.html", - "Properties": { - "InstanceDefinitions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-instancedefinitions.html#cfn-gamelift-gameservergroup-instancedefinitions-instancedefinitions", - "ItemType": "InstanceDefinition", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::GameLift::GameServerGroup.LaunchTemplate": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-launchtemplate.html", "Properties": { @@ -23122,18 +23374,6 @@ } } }, - "AWS::GameLift::GameServerGroup.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-tags.html#cfn-gamelift-gameservergroup-tags-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::GameLift::GameServerGroup.TargetTrackingConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-targettrackingconfiguration.html", "Properties": { @@ -23145,18 +23385,6 @@ } } }, - "AWS::GameLift::GameServerGroup.VpcSubnets": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-vpcsubnets.html", - "Properties": { - "VpcSubnets": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-vpcsubnets.html#cfn-gamelift-gameservergroup-vpcsubnets-vpcsubnets", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::GameLift::GameSessionQueue.Destination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-destination.html", "Properties": { @@ -26257,6 +26485,12 @@ "Required": false, "UpdateType": "Mutable" }, + "ContainerDistributionConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-distribution.html#cfn-imagebuilder-distributionconfiguration-distribution-containerdistributionconfiguration", + "PrimitiveType": "Json", + "Required": false, + "UpdateType": "Mutable" + }, "LicenseConfigurationArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-distribution.html#cfn-imagebuilder-distributionconfiguration-distribution-licenseconfigurationarns", "PrimitiveItemType": "String", @@ -26472,21 +26706,6 @@ } } }, - "AWS::IoT::Authorizer.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-authorizer-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-authorizer-tags.html#cfn-iot-authorizer-tags-tags", - "ItemType": "Json", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::IoT::Authorizer.TokenSigningPublicKeys": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-authorizer-tokensigningpublickeys.html" - }, "AWS::IoT::DomainConfiguration.AuthorizerConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-domainconfiguration-authorizerconfig.html", "Properties": { @@ -26527,18 +26746,6 @@ } } }, - "AWS::IoT::DomainConfiguration.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-domainconfiguration-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-domainconfiguration-tags.html#cfn-iot-domainconfiguration-tags-tags", - "ItemType": "Json", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::IoT::ProvisioningTemplate.ProvisioningHook": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-provisioningtemplate-provisioninghook.html", "Properties": { @@ -26556,18 +26763,6 @@ } } }, - "AWS::IoT::ProvisioningTemplate.Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-provisioningtemplate-tags.html", - "Properties": { - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-provisioningtemplate-tags.html#cfn-iot-provisioningtemplate-tags-tags", - "ItemType": "Json", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::IoT::Thing.AttributePayload": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-thing-attributepayload.html", "Properties": { @@ -29419,12 +29614,12 @@ "DevAddr": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv10x.html#cfn-iotwireless-wirelessdevice-abpv10x-devaddr", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "SessionKeys": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv10x.html#cfn-iotwireless-wirelessdevice-abpv10x-sessionkeys", - "Required": false, + "Required": true, "Type": "SessionKeysAbpV10X", "UpdateType": "Mutable" } @@ -29436,12 +29631,12 @@ "DevAddr": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv11.html#cfn-iotwireless-wirelessdevice-abpv11-devaddr", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "SessionKeys": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv11.html#cfn-iotwireless-wirelessdevice-abpv11-sessionkeys", - "Required": false, + "Required": true, "Type": "SessionKeysAbpV11", "UpdateType": "Mutable" } @@ -29500,13 +29695,13 @@ "AppEui": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav10x.html#cfn-iotwireless-wirelessdevice-otaav10x-appeui", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "AppKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav10x.html#cfn-iotwireless-wirelessdevice-otaav10x-appkey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } @@ -29517,19 +29712,19 @@ "AppKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav11.html#cfn-iotwireless-wirelessdevice-otaav11-appkey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "JoinEui": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav11.html#cfn-iotwireless-wirelessdevice-otaav11-joineui", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "NwkKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav11.html#cfn-iotwireless-wirelessdevice-otaav11-nwkkey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } @@ -29540,13 +29735,13 @@ "AppSKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv10x.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv10x-appskey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "NwkSKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv10x.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv10x-nwkskey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } @@ -29557,25 +29752,25 @@ "AppSKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-appskey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "FNwkSIntKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-fnwksintkey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "NwkSEncKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-nwksenckey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "SNwkSIntKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-snwksintkey", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } @@ -29586,13 +29781,13 @@ "GatewayEui": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessgateway-lorawangateway.html#cfn-iotwireless-wirelessgateway-lorawangateway-gatewayeui", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "RfRegion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessgateway-lorawangateway.html#cfn-iotwireless-wirelessgateway-lorawangateway-rfregion", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } @@ -30748,18 +30943,6 @@ } } }, - "AWS::Kendra::DataSource.TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-taglist.html", - "Properties": { - "TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-taglist.html#cfn-kendra-datasource-taglist-taglist", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Kendra::Faq.S3Path": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-faq-s3path.html", "Properties": { @@ -30777,18 +30960,6 @@ } } }, - "AWS::Kendra::Faq.TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-faq-taglist.html", - "Properties": { - "TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-faq-taglist.html#cfn-kendra-faq-taglist-taglist", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Kendra::Index.CapacityUnitsConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-capacityunitsconfiguration.html", "Properties": { @@ -30835,18 +31006,6 @@ } } }, - "AWS::Kendra::Index.DocumentMetadataConfigurationList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-documentmetadataconfigurationlist.html", - "Properties": { - "DocumentMetadataConfigurationList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-documentmetadataconfigurationlist.html#cfn-kendra-index-documentmetadataconfigurationlist-documentmetadataconfigurationlist", - "ItemType": "DocumentMetadataConfiguration", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Kendra::Index.JsonTokenTypeConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-jsontokentypeconfiguration.html", "Properties": { @@ -30986,18 +31145,6 @@ } } }, - "AWS::Kendra::Index.TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-taglist.html", - "Properties": { - "TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-taglist.html#cfn-kendra-index-taglist-taglist", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Kendra::Index.UserTokenConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-usertokenconfiguration.html", "Properties": { @@ -31015,18 +31162,6 @@ } } }, - "AWS::Kendra::Index.UserTokenConfigurationList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-usertokenconfigurationlist.html", - "Properties": { - "UserTokenConfigurationList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-usertokenconfigurationlist.html#cfn-kendra-index-usertokenconfigurationlist-usertokenconfigurationlist", - "ItemType": "UserTokenConfiguration", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Kendra::Index.ValueImportanceItem": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-valueimportanceitem.html", "Properties": { @@ -33754,32 +33889,6 @@ } } }, - "AWS::LicenseManager::Grant.AllowedOperationList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-allowedoperationlist.html", - "Properties": { - "AllowedOperationList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-allowedoperationlist.html#cfn-licensemanager-grant-allowedoperationlist-allowedoperationlist", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::LicenseManager::Grant.ArnList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-arnlist.html", - "Properties": { - "ArnList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-arnlist.html#cfn-licensemanager-grant-arnlist-arnlist", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::LicenseManager::Grant.Filter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-filter.html", "Properties": { @@ -33797,19 +33906,6 @@ } } }, - "AWS::LicenseManager::Grant.FilterList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-filterlist.html", - "Properties": { - "FilterList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-filterlist.html#cfn-licensemanager-grant-filterlist-filterlist", - "DuplicatesAllowed": false, - "ItemType": "Filter", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::LicenseManager::Grant.StringList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-stringlist.html", "Properties": { @@ -33823,32 +33919,6 @@ } } }, - "AWS::LicenseManager::Grant.TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-taglist.html", - "Properties": { - "TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-taglist.html#cfn-licensemanager-grant-taglist-taglist", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::LicenseManager::License.ArnList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-arnlist.html", - "Properties": { - "ArnList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-arnlist.html#cfn-licensemanager-license-arnlist-arnlist", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::LicenseManager::License.BorrowConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-borrowconfiguration.html", "Properties": { @@ -33936,19 +34006,6 @@ } } }, - "AWS::LicenseManager::License.EntitlementList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-entitlementlist.html", - "Properties": { - "EntitlementList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-entitlementlist.html#cfn-licensemanager-license-entitlementlist-entitlementlist", - "DuplicatesAllowed": false, - "ItemType": "Entitlement", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::LicenseManager::License.Filter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-filter.html", "Properties": { @@ -33966,19 +34023,6 @@ } } }, - "AWS::LicenseManager::License.FilterList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-filterlist.html", - "Properties": { - "FilterList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-filterlist.html#cfn-licensemanager-license-filterlist-filterlist", - "DuplicatesAllowed": false, - "ItemType": "Filter", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::LicenseManager::License.IssuerData": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-issuerdata.html", "Properties": { @@ -34013,19 +34057,6 @@ } } }, - "AWS::LicenseManager::License.MetadataList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-metadatalist.html", - "Properties": { - "MetadataList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-metadatalist.html#cfn-licensemanager-license-metadatalist-metadatalist", - "DuplicatesAllowed": false, - "ItemType": "Metadata", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::LicenseManager::License.ProvisionalConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-provisionalconfiguration.html", "Properties": { @@ -34086,19 +34117,6 @@ } } }, - "AWS::LicenseManager::License.TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-taglist.html", - "Properties": { - "TagList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-taglist.html#cfn-licensemanager-license-taglist-taglist", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::LicenseManager::License.ValidityDateFormat": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-validitydateformat.html", "Properties": { @@ -34799,6 +34817,323 @@ } } }, + "AWS::MediaConnect::Flow.Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html", + "Properties": { + "Algorithm": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-algorithm", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ConstantInitializationVector": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-constantinitializationvector", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DeviceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-deviceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "KeyType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-keytype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Region": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-region", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ResourceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-resourceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SecretArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-secretarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-url", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::Flow.FailoverConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html", + "Properties": { + "RecoveryWindow": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-recoverywindow", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "State": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-state", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::Flow.Source": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html", + "Properties": { + "Decryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-decryption", + "Required": false, + "Type": "Encryption", + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "EntitlementArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-entitlementarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "IngestIp": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-ingestip", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "IngestPort": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-ingestport", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaxBitrate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-maxbitrate", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaxLatency": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-maxlatency", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Protocol": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-protocol", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SourceArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-sourcearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-streamid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VpcInterfaceName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-vpcinterfacename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "WhitelistCidr": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-whitelistcidr", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowEntitlement.Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html", + "Properties": { + "Algorithm": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-algorithm", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ConstantInitializationVector": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-constantinitializationvector", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DeviceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-deviceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "KeyType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-keytype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Region": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-region", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ResourceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-resourceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SecretArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-secretarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-url", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowOutput.Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html", + "Properties": { + "Algorithm": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-algorithm", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "KeyType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-keytype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SecretArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-secretarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowOutput.VpcInterfaceAttachment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-vpcinterfaceattachment.html", + "Properties": { + "VpcInterfaceName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-vpcinterfaceattachment.html#cfn-mediaconnect-flowoutput-vpcinterfaceattachment-vpcinterfacename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowSource.Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html", + "Properties": { + "Algorithm": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-algorithm", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ConstantInitializationVector": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-constantinitializationvector", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DeviceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-deviceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "KeyType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-keytype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Region": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-region", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ResourceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-resourceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SecretArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-secretarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-url", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaConvert::JobTemplate.AccelerationSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconvert-jobtemplate-accelerationsettings.html", "Properties": { @@ -34939,6 +35274,17 @@ } } }, + "AWS::MediaLive::Channel.AncillarySourceSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html", + "Properties": { + "SourceAncillaryChannelNumber": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html#cfn-medialive-channel-ancillarysourcesettings-sourceancillarychannelnumber", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.ArchiveContainerSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html", "Properties": { @@ -34947,6 +35293,12 @@ "Required": false, "Type": "M2tsSettings", "UpdateType": "Mutable" + }, + "RawSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-rawsettings", + "Required": false, + "Type": "RawSettings", + "UpdateType": "Mutable" } } }, @@ -35048,6 +35400,12 @@ "Required": false, "Type": "PassThroughSettings", "UpdateType": "Mutable" + }, + "WavSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-wavsettings", + "Required": false, + "Type": "WavSettings", + "UpdateType": "Mutable" } } }, @@ -35236,6 +35594,23 @@ } } }, + "AWS::MediaLive::Channel.AudioSilenceFailoverSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html", + "Properties": { + "AudioSelectorName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audioselectorname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "AudioSilenceThresholdMsec": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audiosilencethresholdmsec", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.AudioTrack": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrack.html", "Properties": { @@ -35262,6 +35637,19 @@ "AWS::MediaLive::Channel.AutomaticInputFailoverSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html", "Properties": { + "ErrorClearTimeMsec": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-errorcleartimemsec", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "FailoverConditions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-failoverconditions", + "ItemType": "FailoverCondition", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "InputPreference": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-inputpreference", "PrimitiveType": "String", @@ -35630,6 +36018,12 @@ "AWS::MediaLive::Channel.CaptionSelectorSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html", "Properties": { + "AncillarySourceSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-ancillarysourcesettings", + "Required": false, + "Type": "AncillarySourceSettings", + "UpdateType": "Mutable" + }, "AribSourceSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-aribsourcesettings", "Required": false, @@ -35668,6 +36062,17 @@ } } }, + "AWS::MediaLive::Channel.CdiInputSpecification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html", + "Properties": { + "Resolution": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html#cfn-medialive-channel-cdiinputspecification-resolution", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.ColorSpacePassthroughSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorspacepassthroughsettings.html", "Properties": {} @@ -36113,6 +36518,40 @@ } } }, + "AWS::MediaLive::Channel.FailoverCondition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html", + "Properties": { + "FailoverConditionSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html#cfn-medialive-channel-failovercondition-failoverconditionsettings", + "Required": false, + "Type": "FailoverConditionSettings", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaLive::Channel.FailoverConditionSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html", + "Properties": { + "AudioSilenceSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-audiosilencesettings", + "Required": false, + "Type": "AudioSilenceFailoverSettings", + "UpdateType": "Mutable" + }, + "InputLossSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-inputlosssettings", + "Required": false, + "Type": "InputLossFailoverSettings", + "UpdateType": "Mutable" + }, + "VideoBlackSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-videoblacksettings", + "Required": false, + "Type": "VideoBlackFailoverSettings", + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.FeatureActivations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html", "Properties": { @@ -36953,6 +37392,12 @@ "Required": false, "UpdateType": "Mutable" }, + "DiscontinuityTags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-discontinuitytags", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "EncryptionType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-encryptiontype", "PrimitiveType": "String", @@ -36977,6 +37422,12 @@ "Required": false, "UpdateType": "Mutable" }, + "IncompleteSegmentBehavior": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-incompletesegmentbehavior", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "IndexNSegments": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-indexnsegments", "PrimitiveType": "Integer", @@ -37378,6 +37829,17 @@ } } }, + "AWS::MediaLive::Channel.InputLossFailoverSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html", + "Properties": { + "InputLossThresholdMsec": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html#cfn-medialive-channel-inputlossfailoversettings-inputlossthresholdmsec", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.InputSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html", "Properties": { @@ -37922,6 +38384,118 @@ } } }, + "AWS::MediaLive::Channel.Mpeg2FilterSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html", + "Properties": { + "TemporalFilterSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html#cfn-medialive-channel-mpeg2filtersettings-temporalfiltersettings", + "Required": false, + "Type": "TemporalFilterSettings", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaLive::Channel.Mpeg2Settings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html", + "Properties": { + "AdaptiveQuantization": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-adaptivequantization", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "AfdSignaling": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-afdsignaling", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ColorMetadata": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colormetadata", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ColorSpace": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colorspace", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DisplayAspectRatio": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-displayaspectratio", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "FilterSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-filtersettings", + "Required": false, + "Type": "Mpeg2FilterSettings", + "UpdateType": "Mutable" + }, + "FixedAfd": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-fixedafd", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "FramerateDenominator": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratedenominator", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "FramerateNumerator": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratenumerator", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "GopClosedCadence": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopclosedcadence", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "GopNumBFrames": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopnumbframes", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "GopSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsize", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "GopSizeUnits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsizeunits", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ScanType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-scantype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SubgopLength": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-subgoplength", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TimecodeInsertion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeinsertion", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.MsSmoothGroupSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html", "Properties": { @@ -38366,6 +38940,10 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-passthroughsettings.html", "Properties": {} }, + "AWS::MediaLive::Channel.RawSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rawsettings.html", + "Properties": {} + }, "AWS::MediaLive::Channel.Rec601Settings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rec601settings.html", "Properties": {} @@ -38405,6 +38983,13 @@ "AWS::MediaLive::Channel.RtmpGroupSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html", "Properties": { + "AdMarkers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-admarkers", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "AuthenticationScheme": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-authenticationscheme", "PrimitiveType": "String", @@ -38715,6 +39300,23 @@ } } }, + "AWS::MediaLive::Channel.VideoBlackFailoverSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html", + "Properties": { + "BlackDetectThreshold": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-blackdetectthreshold", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "VideoBlackThresholdMsec": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-videoblackthresholdmsec", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.VideoCodecSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html", "Properties": { @@ -38735,6 +39337,12 @@ "Required": false, "Type": "H265Settings", "UpdateType": "Mutable" + }, + "Mpeg2Settings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-mpeg2settings", + "Required": false, + "Type": "Mpeg2Settings", + "UpdateType": "Mutable" } } }, @@ -38847,6 +39455,29 @@ } } }, + "AWS::MediaLive::Channel.WavSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html", + "Properties": { + "BitDepth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-bitdepth", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "CodingMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-codingmode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SampleRate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-samplerate", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaLive::Channel.WebvttDestinationSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-webvttdestinationsettings.html", "Properties": {} @@ -45482,6 +46113,46 @@ } } }, + "AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttribute": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute.html", + "Properties": { + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute-value", + "Required": true, + "Type": "AccessControlAttributeValue", + "UpdateType": "Mutable" + } + } + }, + "AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue.html", + "Properties": { + "Source": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue-source", + "Required": true, + "Type": "AccessControlAttributeValueSourceList", + "UpdateType": "Mutable" + } + } + }, + "AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValueSourceList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevaluesourcelist.html", + "Properties": { + "AccessControlAttributeValueSourceList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevaluesourcelist.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevaluesourcelist-accesscontrolattributevaluesourcelist", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::SageMaker::CodeRepository.GitConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-coderepository-gitconfig.html", "Properties": { @@ -47827,9 +48498,6 @@ } } }, - "AWS::StepFunctions::StateMachine.DefinitionSubstitutions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-definitionsubstitutions.html" - }, "AWS::StepFunctions::StateMachine.LogDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-logdestination.html", "Properties": { @@ -48098,6 +48766,30 @@ } } }, + "AWS::Transfer::User.PosixProfile": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html", + "Properties": { + "Gid": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html#cfn-transfer-user-posixprofile-gid", + "PrimitiveType": "Double", + "Required": true, + "UpdateType": "Mutable" + }, + "SecondaryGids": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html#cfn-transfer-user-posixprofile-secondarygids", + "PrimitiveItemType": "Double", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Uid": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html#cfn-transfer-user-posixprofile-uid", + "PrimitiveType": "Double", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::Transfer::User.SshPublicKey": { "PrimitiveType": "String" }, @@ -50227,7 +50919,7 @@ } } }, - "ResourceSpecificationVersion": "22.0.0", + "ResourceSpecificationVersion": "23.0.0", "ResourceTypes": { "AWS::ACMPCA::Certificate": { "Attributes": { @@ -50283,6 +50975,12 @@ }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html", "Properties": { + "CsrExtensions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-csrextensions", + "Required": false, + "Type": "CsrExtensions", + "UpdateType": "Immutable" + }, "KeyAlgorithm": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-keyalgorithm", "PrimitiveType": "String", @@ -51043,6 +51741,11 @@ } }, "AWS::ApiGateway::ClientCertificate": { + "Attributes": { + "ClientCertificateId": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html", "Properties": { "Description": { @@ -52092,6 +52795,12 @@ "Required": false, "UpdateType": "Mutable" }, + "ResponseParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-responseparameters", + "PrimitiveType": "Json", + "Required": false, + "UpdateType": "Mutable" + }, "TemplateSelectionExpression": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-templateselectionexpression", "PrimitiveType": "String", @@ -54164,8 +54873,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-tags", + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "Type": { @@ -54250,8 +54960,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-tags", + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "WorkGroupConfiguration": { @@ -54270,76 +54981,79 @@ }, "AWS::AuditManager::Assessment": { "Attributes": { - "arn": { + "Arn": { "PrimitiveType": "String" }, - "assessmentId": { + "AssessmentId": { "PrimitiveType": "String" }, - "creationTime": { + "CreationTime": { "PrimitiveType": "Double" }, - "delegations": { - "Type": "Delegations" + "Delegations": { + "ItemType": "Delegation", + "Type": "List" }, - "frameworkId": { + "FrameworkId": { "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html", "Properties": { - "assessmentReportsDestination": { + "AssessmentReportsDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-assessmentreportsdestination", "Required": false, "Type": "AssessmentReportsDestination", "UpdateType": "Mutable" }, - "awsAccount": { + "AwsAccount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-awsaccount", "Required": false, "Type": "AWSAccount", "UpdateType": "Immutable" }, - "description": { + "Description": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-description", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "frameworkId": { + "FrameworkId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-frameworkid", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, - "name": { + "Name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-name", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "roles": { + "Roles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-roles", + "ItemType": "Role", "Required": false, - "Type": "Roles", + "Type": "List", "UpdateType": "Mutable" }, - "scope": { + "Scope": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-scope", "Required": false, "Type": "Scope", "UpdateType": "Mutable" }, - "status": { + "Status": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-status", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "tags": { + "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-tags", + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" } } @@ -58203,6 +58917,45 @@ } } }, + "AWS::Config::StoredQuery": { + "Attributes": { + "QueryArn": { + "PrimitiveType": "String" + }, + "QueryId": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html", + "Properties": { + "QueryDescription": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-querydescription", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "QueryExpression": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-queryexpression", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "QueryName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-queryname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::DAX::Cluster": { "Attributes": { "Arn": { @@ -59090,6 +59843,458 @@ } } }, + "AWS::DataSync::Agent": { + "Attributes": { + "AgentArn": { + "PrimitiveType": "String" + }, + "EndpointType": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html", + "Properties": { + "ActivationKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-activationkey", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "AgentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-agentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SecurityGroupArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-securitygrouparns", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "SubnetArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-subnetarns", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "VpcEndpointId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-vpcendpointid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::LocationEFS": { + "Attributes": { + "LocationArn": { + "PrimitiveType": "String" + }, + "LocationUri": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html", + "Properties": { + "Ec2Config": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-ec2config", + "Required": true, + "Type": "Ec2Config", + "UpdateType": "Immutable" + }, + "EfsFilesystemArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-efsfilesystemarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Subdirectory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-subdirectory", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::DataSync::LocationFSxWindows": { + "Attributes": { + "LocationArn": { + "PrimitiveType": "String" + }, + "LocationUri": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html", + "Properties": { + "Domain": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-domain", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "FsxFilesystemArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-fsxfilesystemarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Password": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-password", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "SecurityGroupArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-securitygrouparns", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Immutable" + }, + "Subdirectory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-subdirectory", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "User": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-user", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::LocationNFS": { + "Attributes": { + "LocationArn": { + "PrimitiveType": "String" + }, + "LocationUri": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html", + "Properties": { + "MountOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-mountoptions", + "Required": false, + "Type": "MountOptions", + "UpdateType": "Immutable" + }, + "OnPremConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-onpremconfig", + "Required": true, + "Type": "OnPremConfig", + "UpdateType": "Immutable" + }, + "ServerHostname": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-serverhostname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Subdirectory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-subdirectory", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::DataSync::LocationObjectStorage": { + "Attributes": { + "LocationArn": { + "PrimitiveType": "String" + }, + "LocationUri": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html", + "Properties": { + "AccessKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-accesskey", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "AgentArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-agentarns", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Immutable" + }, + "BucketName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-bucketname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "SecretKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-secretkey", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "ServerHostname": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverhostname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "ServerPort": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverport", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "ServerProtocol": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverprotocol", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Subdirectory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-subdirectory", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::DataSync::LocationS3": { + "Attributes": { + "LocationArn": { + "PrimitiveType": "String" + }, + "LocationUri": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html", + "Properties": { + "S3BucketArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3bucketarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "S3Config": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3config", + "Required": true, + "Type": "S3Config", + "UpdateType": "Immutable" + }, + "S3StorageClass": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3storageclass", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Subdirectory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-subdirectory", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::DataSync::LocationSMB": { + "Attributes": { + "LocationArn": { + "PrimitiveType": "String" + }, + "LocationUri": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html", + "Properties": { + "AgentArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-agentarns", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Immutable" + }, + "Domain": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-domain", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "MountOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-mountoptions", + "Required": false, + "Type": "MountOptions", + "UpdateType": "Immutable" + }, + "Password": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-password", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "ServerHostname": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-serverhostname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Subdirectory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-subdirectory", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "User": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-user", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::DataSync::Task": { + "Attributes": { + "DestinationNetworkInterfaceArns": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "ErrorCode": { + "PrimitiveType": "String" + }, + "ErrorDetail": { + "PrimitiveType": "String" + }, + "SourceNetworkInterfaceArns": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "Status": { + "PrimitiveType": "String" + }, + "TaskArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html", + "Properties": { + "CloudWatchLogGroupArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-cloudwatchloggrouparn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DestinationLocationArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-destinationlocationarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Excludes": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-excludes", + "ItemType": "FilterRule", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Options": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-options", + "Required": false, + "Type": "Options", + "UpdateType": "Mutable" + }, + "Schedule": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-schedule", + "Required": false, + "Type": "TaskSchedule", + "UpdateType": "Mutable" + }, + "SourceLocationArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-sourcelocationarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Detective::Graph": { "Attributes": { "Arn": { @@ -59732,8 +60937,10 @@ "Properties": { "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-carriergateway.html#cfn-ec2-carriergateway-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "VpcId": { @@ -60639,8 +61846,10 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevpcassociation.html#cfn-ec2-localgatewayroutetablevpcassociation-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "VpcId": { @@ -60786,6 +61995,9 @@ }, "Status": { "PrimitiveType": "String" + }, + "StatusMessage": { + "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html", @@ -60803,12 +62015,6 @@ "Required": true, "UpdateType": "Immutable" }, - "StatusMessage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-statusmessage", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-tags", "ItemType": "Tag", @@ -62401,6 +63607,7 @@ }, "RepositoryPolicyText": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html#cfn-ecr-publicrepository-repositorypolicytext", + "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" } @@ -62440,6 +63647,7 @@ }, "RepositoryPolicyText": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-repositorypolicytext", + "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" }, @@ -64053,14 +65261,8 @@ "Arn": { "PrimitiveType": "String" }, - "Authentication": { - "Type": "Authentication" - }, "Status": { "PrimitiveType": "String" - }, - "UserGroupIds": { - "Type": "UserGroupIdList" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html", @@ -64071,6 +65273,12 @@ "Required": false, "UpdateType": "Mutable" }, + "Authentication": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-authentication", + "Required": false, + "Type": "Authentication", + "UpdateType": "Mutable" + }, "Engine": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-engine", "PrimitiveType": "String", @@ -64085,8 +65293,18 @@ }, "Passwords": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-passwords", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "UserGroupIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-usergroupids", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", "Required": false, - "Type": "PasswordList", + "Type": "List", "UpdateType": "Mutable" }, "UserId": { @@ -64108,12 +65326,6 @@ "Arn": { "PrimitiveType": "String" }, - "PendingChanges": { - "Type": "UserGroupPendingChanges" - }, - "ReplicationGroupIds": { - "Type": "ReplicationGroupIdList" - }, "Status": { "PrimitiveType": "String" } @@ -64126,6 +65338,20 @@ "Required": true, "UpdateType": "Immutable" }, + "PendingChanges": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-pendingchanges", + "Required": false, + "Type": "UserGroupPendingChanges", + "UpdateType": "Mutable" + }, + "ReplicationGroupIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-replicationgroupids", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "UserGroupId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-usergroupid", "PrimitiveType": "String", @@ -64134,8 +65360,10 @@ }, "UserIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-userids", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", "Required": false, - "Type": "UserIdList", + "Type": "List", "UpdateType": "Mutable" } } @@ -64528,6 +65756,14 @@ } }, "AWS::ElasticLoadBalancingV2::ListenerRule": { + "Attributes": { + "IsDefault": { + "PrimitiveType": "Boolean" + }, + "RuleArn": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html", "Properties": { "Actions": { @@ -65610,8 +66846,9 @@ }, "InstanceDefinitions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-instancedefinitions", + "ItemType": "InstanceDefinition", "Required": true, - "Type": "InstanceDefinitions", + "Type": "List", "UpdateType": "Mutable" }, "LaunchTemplate": { @@ -65640,14 +66877,16 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-tags", + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "VpcSubnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-vpcsubnets", + "PrimitiveItemType": "String", "Required": false, - "Type": "VpcSubnets", + "Type": "List", "UpdateType": "Mutable" } } @@ -68545,8 +69784,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-authorizer.html#cfn-iot-authorizer-tags", + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "TokenKeyName": { @@ -68557,8 +69797,9 @@ }, "TokenSigningPublicKeys": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-authorizer.html#cfn-iot-authorizer-tokensigningpublickeys", + "PrimitiveItemType": "String", "Required": false, - "Type": "TokenSigningPublicKeys", + "Type": "Map", "UpdateType": "Mutable" } } @@ -68660,8 +69901,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-domainconfiguration.html#cfn-iot-domainconfiguration-tags", + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "ValidationCertificateArn": { @@ -68745,8 +69987,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-provisioningtemplate.html#cfn-iot-provisioningtemplate-tags", + "ItemType": "Tag", "Required": false, - "Type": "Tags", + "Type": "List", "UpdateType": "Mutable" }, "TemplateBody": { @@ -69684,6 +70927,7 @@ }, "KeyPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#cfn-kms-key-keypolicy", + "PrimitiveType": "Json", "Required": true, "UpdateType": "Mutable" }, @@ -69764,8 +71008,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-datasource.html#cfn-kendra-datasource-tags", + "ItemType": "Tag", "Required": false, - "Type": "TagList", + "Type": "List", "UpdateType": "Mutable" }, "Type": { @@ -69825,8 +71070,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-faq.html#cfn-kendra-faq-tags", + "ItemType": "Tag", "Required": false, - "Type": "TagList", + "Type": "List", "UpdateType": "Mutable" } } @@ -69856,8 +71102,9 @@ }, "DocumentMetadataConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-documentmetadataconfigurations", + "ItemType": "DocumentMetadataConfiguration", "Required": false, - "Type": "DocumentMetadataConfigurationList", + "Type": "List", "UpdateType": "Mutable" }, "Edition": { @@ -69886,8 +71133,9 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-tags", + "ItemType": "Tag", "Required": false, - "Type": "TagList", + "Type": "List", "UpdateType": "Mutable" }, "UserContextPolicy": { @@ -69898,8 +71146,9 @@ }, "UserTokenConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-usertokenconfigurations", + "ItemType": "UserTokenConfiguration", "Required": false, - "Type": "UserTokenConfigurationList", + "Type": "List", "UpdateType": "Mutable" } } @@ -70805,8 +72054,10 @@ "Properties": { "AllowedOperations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-allowedoperations", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", "Required": false, - "Type": "AllowedOperationList", + "Type": "List", "UpdateType": "Mutable" }, "ClientToken": { @@ -70817,14 +72068,18 @@ }, "Filters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-filters", + "DuplicatesAllowed": false, + "ItemType": "Filter", "Required": false, - "Type": "FilterList", + "Type": "List", "UpdateType": "Mutable" }, "GrantArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-grantarns", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", "Required": false, - "Type": "ArnList", + "Type": "List", "UpdateType": "Mutable" }, "GrantName": { @@ -70841,8 +72096,10 @@ }, "GrantedOperations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-grantedoperations", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", "Required": false, - "Type": "AllowedOperationList", + "Type": "List", "UpdateType": "Mutable" }, "GranteePrincipalArn": { @@ -70883,8 +72140,10 @@ }, "Principals": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-principals", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", "Required": false, - "Type": "ArnList", + "Type": "List", "UpdateType": "Mutable" }, "SourceVersion": { @@ -70907,8 +72166,10 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", "Required": false, - "Type": "TagList", + "Type": "List", "UpdateType": "Mutable" }, "Version": { @@ -70947,14 +72208,18 @@ }, "Entitlements": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-entitlements", + "DuplicatesAllowed": false, + "ItemType": "Entitlement", "Required": true, - "Type": "EntitlementList", + "Type": "List", "UpdateType": "Mutable" }, "Filters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-filters", + "DuplicatesAllowed": false, + "ItemType": "Filter", "Required": false, - "Type": "FilterList", + "Type": "List", "UpdateType": "Mutable" }, "HomeRegion": { @@ -70971,14 +72236,18 @@ }, "LicenseArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-licensearns", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", "Required": false, - "Type": "ArnList", + "Type": "List", "UpdateType": "Mutable" }, "LicenseMetadata": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-licensemetadata", + "DuplicatesAllowed": false, + "ItemType": "Metadata", "Required": false, - "Type": "MetadataList", + "Type": "List", "UpdateType": "Mutable" }, "LicenseName": { @@ -71025,8 +72294,10 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", "Required": false, - "Type": "TagList", + "Type": "List", "UpdateType": "Mutable" }, "Validity": { @@ -71583,6 +72854,312 @@ } } }, + "AWS::MediaConnect::Flow": { + "Attributes": { + "FlowArn": { + "PrimitiveType": "String" + }, + "FlowAvailabilityZone": { + "PrimitiveType": "String" + }, + "IngestIp": { + "PrimitiveType": "String" + }, + "SourceArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html", + "Properties": { + "AvailabilityZone": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-availabilityzone", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Source": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-source", + "Required": true, + "Type": "Source", + "UpdateType": "Mutable" + }, + "SourceFailoverConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-sourcefailoverconfig", + "Required": false, + "Type": "FailoverConfig", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowEntitlement": { + "Attributes": { + "EntitlementArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html", + "Properties": { + "DataTransferSubscriberFeePercent": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-datatransfersubscriberfeepercent", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-description", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-encryption", + "Required": false, + "Type": "Encryption", + "UpdateType": "Mutable" + }, + "EntitlementStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-entitlementstatus", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "FlowArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-flowarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Subscribers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-subscribers", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowOutput": { + "Attributes": { + "OutputArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html", + "Properties": { + "CidrAllowList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-cidrallowlist", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Destination": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-destination", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-encryption", + "Required": false, + "Type": "Encryption", + "UpdateType": "Mutable" + }, + "FlowArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-flowarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "MaxLatency": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-maxlatency", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Port": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-port", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Protocol": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-protocol", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "RemoteId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-remoteid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SmoothingLatency": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-smoothinglatency", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-streamid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VpcInterfaceAttachment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-vpcinterfaceattachment", + "Required": false, + "Type": "VpcInterfaceAttachment", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowSource": { + "Attributes": { + "IngestIp": { + "PrimitiveType": "String" + }, + "SourceArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html", + "Properties": { + "Decryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-decryption", + "Required": false, + "Type": "Encryption", + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-description", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "EntitlementArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-entitlementarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "FlowArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-flowarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "IngestPort": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-ingestport", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaxBitrate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-maxbitrate", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaxLatency": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-maxlatency", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Protocol": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-protocol", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-streamid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VpcInterfaceName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-vpcinterfacename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "WhitelistCidr": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-whitelistcidr", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaConnect::FlowVpcInterface": { + "Attributes": { + "FlowArn": { + "PrimitiveType": "String" + }, + "Name": { + "PrimitiveType": "String" + }, + "NetworkInterfaceIds": { + "PrimitiveItemType": "String", + "Type": "List" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html", + "Properties": { + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html#cfn-mediaconnect-flowvpcinterface-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SecurityGroupIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html#cfn-mediaconnect-flowvpcinterface-securitygroupids", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "SubnetId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html#cfn-mediaconnect-flowvpcinterface-subnetid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaConvert::JobTemplate": { "Attributes": { "Arn": { @@ -71755,6 +73332,12 @@ }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html", "Properties": { + "CdiInputSpecification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification", + "Required": false, + "Type": "CdiInputSpecification", + "UpdateType": "Mutable" + }, "ChannelClass": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-channelclass", "PrimitiveType": "String", @@ -76343,6 +77926,17 @@ } } }, + "AWS::Route53::DNSSEC": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-dnssec.html", + "Properties": { + "HostedZoneId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-dnssec.html#cfn-route53-dnssec-hostedzoneid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::Route53::HealthCheck": { "Attributes": { "HealthCheckId": { @@ -76416,6 +78010,35 @@ } } }, + "AWS::Route53::KeySigningKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html", + "Properties": { + "HostedZoneId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-hostedzoneid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "KeyManagementServiceArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-keymanagementservicearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Status": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-status", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::Route53::RecordSet": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html", "Properties": { @@ -76544,6 +78167,28 @@ } } }, + "AWS::Route53Resolver::ResolverDNSSECConfig": { + "Attributes": { + "Id": { + "PrimitiveType": "String" + }, + "OwnerId": { + "PrimitiveType": "String" + }, + "ValidationStatus": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverdnssecconfig.html", + "Properties": { + "ResourceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverdnssecconfig.html#cfn-route53resolver-resolverdnssecconfig-resourceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, "AWS::Route53Resolver::ResolverEndpoint": { "Attributes": { "Arn": { @@ -77949,17 +79594,24 @@ "AWS::SSO::InstanceAccessControlAttributeConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html", "Properties": { + "AccessControlAttributes": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributes", + "ItemType": "AccessControlAttribute", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "InstanceAccessControlAttributeConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html#cfn-sso-instanceaccesscontrolattributeconfiguration-instanceaccesscontrolattributeconfiguration", "PrimitiveType": "Json", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "InstanceArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html#cfn-sso-instanceaccesscontrolattributeconfiguration-instancearn", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } }, @@ -77979,7 +79631,7 @@ }, "InlinePolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-permissionset.html#cfn-sso-permissionset-inlinepolicy", - "PrimitiveType": "String", + "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" }, @@ -78120,11 +79772,6 @@ } }, "AWS::SageMaker::Device": { - "Attributes": { - "DeviceFleetName": { - "PrimitiveType": "String" - } - }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html", "Properties": { "Device": { @@ -78134,6 +79781,12 @@ "Type": "Device", "UpdateType": "Mutable" }, + "DeviceFleetName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-devicefleetname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-tags", "ItemType": "Json", @@ -78144,11 +79797,6 @@ } }, "AWS::SageMaker::DeviceFleet": { - "Attributes": { - "DeviceFleetName": { - "PrimitiveType": "String" - } - }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html", "Properties": { "Description": { @@ -78157,6 +79805,12 @@ "Required": false, "UpdateType": "Mutable" }, + "DeviceFleetName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-devicefleetname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, "OutputConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-outputconfig", "Required": true, @@ -78498,6 +80152,7 @@ }, "ModelPackageGroupPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html#cfn-sagemaker-modelpackagegroup-modelpackagegrouppolicy", + "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" }, @@ -79903,8 +81558,9 @@ }, "DefinitionSubstitutions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions", + "PrimitiveItemType": "String", "Required": false, - "Type": "DefinitionSubstitutions", + "Type": "Map", "UpdateType": "Mutable" }, "LoggingConfiguration": { @@ -80115,6 +81771,12 @@ "Required": false, "UpdateType": "Mutable" }, + "Domain": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-server.html#cfn-transfer-server-domain", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, "EndpointDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-server.html#cfn-transfer-server-endpointdetails", "Required": false, @@ -80206,6 +81868,12 @@ "Required": false, "UpdateType": "Mutable" }, + "PosixProfile": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-user.html#cfn-transfer-user-posixprofile", + "Required": false, + "Type": "PosixProfile", + "UpdateType": "Mutable" + }, "Role": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-user.html#cfn-transfer-user-role", "PrimitiveType": "String", diff --git a/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json b/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json index 9c032b1062520..41065e7109a19 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json +++ b/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json @@ -955,6 +955,29 @@ } } }, + "AWS::Serverless::LayerVersion.S3Location": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object", + "Properties": { + "Bucket": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Key": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Version": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + } + } + }, "AWS::Serverless::SimpleTable.PrimaryKey": { "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#primary-key-object", "Properties": { @@ -1568,8 +1591,13 @@ }, "ContentUri": { "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion", - "PrimitiveType": "String", + "PrimitiveTypes": [ + "String" + ], "Required": false, + "Types": [ + "S3Location" + ], "UpdateType": "Immutable" }, "Description": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json b/packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json deleted file mode 100644 index 4282477502f05..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "PropertyTypes": { - "AWS::IoT::ProvisioningTemplate.Tags": { - "patch": { - "description": "AWS::IoT::ProvisioningTemplate.Tag.ItemType should have been PrimitiveItemType", - "operations": [ - { - "op": "remove", - "path": "/Properties/Tags/ItemType", - "value": "Json" - }, - { - "op": "add", - "path": "/Properties/Tags/PrimitiveItemType", - "value": "Json" - } - ] - } - } - } -} diff --git a/packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json b/packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json deleted file mode 100644 index 6f9224d738886..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "PropertyTypes": { - "AWS::Athena::WorkGroup.Tags": { - "patch": { - "description": "Corrects tag specification for AWS::Athena::WorkGroup.Tags", - "operations": [ - { - "op": "remove", - "path": "/Properties" - }, - { - "op": "add", - "path": "/ItemType", - "value": "Tag" - }, - { - "op": "add", - "path": "/Required", - "value": false - }, - { - "op": "add", - "path": "/Type", - "value": "List" - }, - { - "op": "add", - "path": "/UpdateType", - "value": "Mutable" - } - ] - } - } - } -} - diff --git a/packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json b/packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json deleted file mode 100644 index 45e189299b113..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "PropertyTypes": { - "AWS::IoT::Authorizer.Tags": { - "patch": { - "description": "Tags is defined as a List whereas it should he List", - "operations": [ - { - "path": "/Properties/Tags/ItemType", - "op": "replace", - "value": "Tag" - } - ] - } - } - } -} \ No newline at end of file diff --git a/packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json b/packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json deleted file mode 100644 index 5ffa659a47b46..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "PropertyTypes": { - "AWS::IoT::DomainConfiguration.Tags": { - "patch": { - "description": "AWS::IoT::DomainConfiguration.Tag.ItemType should have been PrimitiveItemType", - "operations": [ - { - "op": "remove", - "path": "/Properties/Tags/ItemType", - "value": "Json" - }, - { - "op": "add", - "path": "/Properties/Tags/PrimitiveItemType", - "value": "Json" - } - ] - } - } - } -} diff --git a/packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json b/packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json deleted file mode 100644 index 17c14a9db8bf6..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "ResourceTypes": { - "patch": { - "description": "Remove the AWS::AuditManager::Assessment resource type", - "operations": [ - { - "op": "remove", - "path": "/AWS::AuditManager::Assessment" - } - ] - } - } -} diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index 53cd7d3d4ed34..f147414a93354 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -82,6 +82,7 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", + "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscalingplans": "0.0.0", "@aws-cdk/aws-backup": "0.0.0", @@ -109,6 +110,7 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", + "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -160,6 +162,7 @@ "@aws-cdk/aws-logs": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", + "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", @@ -223,6 +226,7 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", + "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscalingplans": "0.0.0", "@aws-cdk/aws-backup": "0.0.0", @@ -250,6 +254,7 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", + "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -301,6 +306,7 @@ "@aws-cdk/aws-logs": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", + "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 2620afe738181..f0a41a593db93 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -119,6 +119,7 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", + "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscaling-common": "0.0.0", "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", @@ -152,6 +153,7 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", + "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -214,6 +216,7 @@ "@aws-cdk/aws-logs-destinations": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", + "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", diff --git a/packages/decdk/package.json b/packages/decdk/package.json index c03991f78e00e..e80e793978cfa 100644 --- a/packages/decdk/package.json +++ b/packages/decdk/package.json @@ -45,6 +45,7 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", + "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscaling-common": "0.0.0", "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", @@ -78,6 +79,7 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", + "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -140,6 +142,7 @@ "@aws-cdk/aws-logs-destinations": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", + "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 440429fad3008..9b5c9e5580d99 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -118,6 +118,7 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", + "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscaling-common": "0.0.0", "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", @@ -151,6 +152,7 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", + "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -213,6 +215,7 @@ "@aws-cdk/aws-logs-destinations": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", + "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", From 25b8d609d46e8e29e2cadc7b0e6a25b3db850124 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 22:52:28 +0000 Subject: [PATCH 27/54] chore(deps): bump aws-sdk from 2.824.0 to 2.827.0 (#12493) Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.824.0 to 2.827.0. - [Release notes](https://github.com/aws/aws-sdk-js/releases) - [Changelog](https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-js/compare/v2.824.0...v2.827.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- packages/@aws-cdk/aws-cloudfront-origins/package.json | 2 +- packages/@aws-cdk/aws-cloudfront/package.json | 2 +- packages/@aws-cdk/aws-cloudtrail/package.json | 2 +- packages/@aws-cdk/aws-codebuild/package.json | 2 +- packages/@aws-cdk/aws-codecommit/package.json | 2 +- packages/@aws-cdk/aws-dynamodb/package.json | 2 +- packages/@aws-cdk/aws-eks/package.json | 2 +- packages/@aws-cdk/aws-events-targets/package.json | 2 +- packages/@aws-cdk/aws-logs/package.json | 2 +- packages/@aws-cdk/aws-route53/package.json | 2 +- packages/@aws-cdk/aws-sqs/package.json | 2 +- packages/@aws-cdk/custom-resources/package.json | 2 +- packages/aws-cdk/package.json | 2 +- packages/cdk-assets/package.json | 2 +- yarn.lock | 8 ++++---- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/@aws-cdk/aws-cloudfront-origins/package.json b/packages/@aws-cdk/aws-cloudfront-origins/package.json index 0feacddfa4f91..f2d620b5f80d7 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/package.json +++ b/packages/@aws-cdk/aws-cloudfront-origins/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "pkglint": "0.0.0" diff --git a/packages/@aws-cdk/aws-cloudfront/package.json b/packages/@aws-cdk/aws-cloudfront/package.json index aa8791dcdf953..47af43c3bf2ca 100644 --- a/packages/@aws-cdk/aws-cloudfront/package.json +++ b/packages/@aws-cdk/aws-cloudfront/package.json @@ -74,7 +74,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-cloudtrail/package.json b/packages/@aws-cdk/aws-cloudtrail/package.json index e2b4e7c0146a0..b3577f87bbe06 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -74,7 +74,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-codebuild/package.json b/packages/@aws-cdk/aws-codebuild/package.json index a41ea21bae2a0..3d6f1f2ae1765 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -80,7 +80,7 @@ "@aws-cdk/aws-sns": "0.0.0", "@aws-cdk/aws-sqs": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-codecommit/package.json b/packages/@aws-cdk/aws-codecommit/package.json index 922bb02012b61..f5169ac4b65b3 100644 --- a/packages/@aws-cdk/aws-codecommit/package.json +++ b/packages/@aws-cdk/aws-codecommit/package.json @@ -80,7 +80,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-sns": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-dynamodb/package.json b/packages/@aws-cdk/aws-dynamodb/package.json index 19ca930e30c48..d5897ede6d0cf 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -75,7 +75,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/jest": "^26.0.15", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-eks/package.json b/packages/@aws-cdk/aws-eks/package.json index d1d449e2c2606..914143934e167 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -75,7 +75,7 @@ "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", "@types/yaml": "1.9.6", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-events-targets/package.json b/packages/@aws-cdk/aws-events-targets/package.json index affbfc3d5c1c0..1c1438f8584bd 100644 --- a/packages/@aws-cdk/aws-events-targets/package.json +++ b/packages/@aws-cdk/aws-events-targets/package.json @@ -76,7 +76,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-codecommit": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-logs/package.json b/packages/@aws-cdk/aws-logs/package.json index fd6306ce2c8d0..b412ac28e8369 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-route53/package.json b/packages/@aws-cdk/aws-route53/package.json index cd66d64c90c43..27f771de7a6db 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-sqs/package.json b/packages/@aws-cdk/aws-sqs/package.json index bc9cadc2527fd..a434141cd88bf 100644 --- a/packages/@aws-cdk/aws-sqs/package.json +++ b/packages/@aws-cdk/aws-sqs/package.json @@ -75,7 +75,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/custom-resources/package.json b/packages/@aws-cdk/custom-resources/package.json index 630de06bbd877..ab2f3cad05299 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -80,7 +80,7 @@ "@types/aws-lambda": "^8.10.64", "@types/fs-extra": "^8.1.1", "@types/sinon": "^9.0.9", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index c476d08300b19..c33e690bacc8c 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -73,7 +73,7 @@ "@aws-cdk/region-info": "0.0.0", "@aws-cdk/yaml-cfn": "0.0.0", "archiver": "^5.2.0", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "camelcase": "^6.2.0", "cdk-assets": "0.0.0", "colors": "^1.4.0", diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index f5f6f12a4bf09..dda6f1ce2cb64 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -47,7 +47,7 @@ "@aws-cdk/cloud-assembly-schema": "0.0.0", "@aws-cdk/cx-api": "0.0.0", "archiver": "^5.2.0", - "aws-sdk": "^2.824.0", + "aws-sdk": "^2.827.0", "glob": "^7.1.6", "yargs": "^16.2.0" }, diff --git a/yarn.lock b/yarn.lock index f272cd2be50fb..554bb813e6092 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2309,10 +2309,10 @@ aws-sdk-mock@^5.1.0: sinon "^9.0.1" traverse "^0.6.6" -aws-sdk@^2.637.0, aws-sdk@^2.824.0: - version "2.824.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.824.0.tgz#a67747d4d0b53d09c6c121e93f44d8f6e76fc44b" - integrity sha512-9KNRQBkIMPn+6DWb4gR+RzqTMNyGLEwOgXbE4dDehOIAflfLnv3IFwLnzrhxJnleB4guYrILIsBroJFBzjiekg== +aws-sdk@^2.637.0, aws-sdk@^2.827.0: + version "2.827.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.827.0.tgz#372e37cabf0e8351de6d8f07a8f519bfaaeeae2a" + integrity sha512-71PWS1dqJ65/SeNgDQWEgbJ6oKCuB+Ypq30TM3EyzbAHaxl69WjQRK71oJ2bjhdIHfGQJtOV0G9wg4zpge4Erg== dependencies: buffer "4.9.2" events "1.1.1" From 4a6e26a4de9164f5b6b9561f8083f9273abb1157 Mon Sep 17 00:00:00 2001 From: Ben Limmer Date: Wed, 13 Jan 2021 16:42:00 -0700 Subject: [PATCH 28/54] chore(rds): add missing AuroraPostgresEngineVersions 9.6.18, 9.6.19, 10.13 and 10.14 (#12495) This PR adds missing engine versions. See inline comments for API descriptions. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-rds/lib/cluster-engine.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts b/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts index 3643e457bdbb9..9905362f4669a 100644 --- a/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts +++ b/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts @@ -422,6 +422,10 @@ export class AuroraPostgresEngineVersion { public static readonly VER_9_6_16 = AuroraPostgresEngineVersion.of('9.6.16', '9.6'); /** Version "9.6.17". */ public static readonly VER_9_6_17 = AuroraPostgresEngineVersion.of('9.6.17', '9.6'); + /** Version "9.6.18". */ + public static readonly VER_9_6_18 = AuroraPostgresEngineVersion.of('9.6.18', '9.6'); + /** Version "9.6.19". */ + public static readonly VER_9_6_19 = AuroraPostgresEngineVersion.of('9.6.19', '9.6'); /** Version "10.4". */ public static readonly VER_10_4 = AuroraPostgresEngineVersion.of('10.4', '10'); /** Version "10.5". */ @@ -434,6 +438,10 @@ export class AuroraPostgresEngineVersion { public static readonly VER_10_11 = AuroraPostgresEngineVersion.of('10.11', '10', { s3Import: true, s3Export: true }); /** Version "10.12". */ public static readonly VER_10_12 = AuroraPostgresEngineVersion.of('10.12', '10', { s3Import: true, s3Export: true }); + /** Version "10.13". */ + public static readonly VER_10_13 = AuroraPostgresEngineVersion.of('10.13', '10', { s3Import: true, s3Export: true }); + /** Version "10.14". */ + public static readonly VER_10_14 = AuroraPostgresEngineVersion.of('10.14', '10', { s3Import: true, s3Export: true }); /** Version "11.4". */ public static readonly VER_11_4 = AuroraPostgresEngineVersion.of('11.4', '11', { s3Import: true }); /** Version "11.6". */ From 05c0b5f5a31c3fe89c47c6db8d9051f7165641a9 Mon Sep 17 00:00:00 2001 From: Dirk Nilius Date: Thu, 14 Jan 2021 01:30:06 +0100 Subject: [PATCH 29/54] fix(eks): aws-node-termination-handler incorrectly deployed to on-demand instances as well (#12369) fixes #12368 The former implementation was using the string format for submitting Helm values in the CLI (`parent.child=value`). This does not work here as JavaScript does not expand the string. We need to define the values is the correct hierarchy. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-eks/lib/cluster.ts | 4 +++- .../@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json | 2 +- packages/@aws-cdk/aws-eks/test/test.cluster.ts | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/lib/cluster.ts b/packages/@aws-cdk/aws-eks/lib/cluster.ts index 92a32d3f0747a..1af5b1bc15046 100644 --- a/packages/@aws-cdk/aws-eks/lib/cluster.ts +++ b/packages/@aws-cdk/aws-eks/lib/cluster.ts @@ -1450,7 +1450,9 @@ export class Cluster extends ClusterBase { repository: 'https://aws.github.io/eks-charts', namespace: 'kube-system', values: { - 'nodeSelector.lifecycle': LifecycleLabel.SPOT, + nodeSelector: { + lifecycle: LifecycleLabel.SPOT, + }, }, }); } diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json index 230268fdca0f7..5c0b4bf402a5b 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json @@ -2739,7 +2739,7 @@ "Release": "ksclustertestclusterchartspotinterrupthandlerf41ba997", "Chart": "aws-node-termination-handler", "Version": "0.13.2", - "Values": "{\"nodeSelector.lifecycle\":\"Ec2Spot\"}", + "Values": "{\"nodeSelector\":{\"lifecycle\":\"Ec2Spot\"}}", "Namespace": "kube-system", "Repository": "https://aws.github.io/eks-charts", "CreateNamespace": true diff --git a/packages/@aws-cdk/aws-eks/test/test.cluster.ts b/packages/@aws-cdk/aws-eks/test/test.cluster.ts index 907cd12ec0adb..f94bafa8f9798 100644 --- a/packages/@aws-cdk/aws-eks/test/test.cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/test.cluster.ts @@ -1310,7 +1310,7 @@ export = { expect(stack).to(haveResource(eks.HelmChart.RESOURCE_TYPE, { Release: 'stackclusterchartspotinterrupthandlerdec62e07', Chart: 'aws-node-termination-handler', - Values: '{\"nodeSelector.lifecycle\":\"Ec2Spot\"}', + Values: '{\"nodeSelector\":{\"lifecycle\":\"Ec2Spot\"}}', Namespace: 'kube-system', Repository: 'https://aws.github.io/eks-charts', })); From a81aecaeb2f51c747553e8988d102c8051204020 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 09:36:36 +0000 Subject: [PATCH 30/54] chore(deps-dev): bump esbuild from 0.8.31 to 0.8.32 (#12502) Bumps [esbuild](https://github.com/evanw/esbuild) from 0.8.31 to 0.8.32. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/master/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.8.31...v0.8.32) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- packages/@aws-cdk/aws-lambda-nodejs/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/package.json b/packages/@aws-cdk/aws-lambda-nodejs/package.json index 75587e031f666..604169b7d65ba 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/package.json +++ b/packages/@aws-cdk/aws-lambda-nodejs/package.json @@ -69,7 +69,7 @@ "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "delay": "4.4.0", - "esbuild": "^0.8.31", + "esbuild": "^0.8.32", "pkglint": "0.0.0" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index 554bb813e6092..f93eb67abe0e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3943,10 +3943,10 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -esbuild@^0.8.31: - version "0.8.31" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.31.tgz#c21e7adb3ad283c951a53de7ad64a5ae2df2ed34" - integrity sha512-7EIU0VdUxltwivjVezX3HgeNzeIVR1snkrAo57WdUnuBMykdzin5rTrxwCDM6xQqj0RL/HjOEm3wFr2ijHKeaA== +esbuild@^0.8.32: + version "0.8.32" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.32.tgz#d3d679ea417925f7afaab37555e52070df317355" + integrity sha512-5IzQapMW/wFy5oxziHCJzawk26K3xeyrIAQPnPN3c0Q84hqRw6IfGDGfGWOdJNw5tAx77yvwqZ4r1QMpo6emJA== escalade@^3.1.1: version "3.1.1" From 1724da758666ec92f7b923c899d2f2f439083ba2 Mon Sep 17 00:00:00 2001 From: Ross Date: Thu, 14 Jan 2021 10:45:59 +0000 Subject: [PATCH 31/54] feat(apigatewayv2): http api - disable execute api endpoint (#12426) Support DisableExecuteApiEndpoint property on HTTP APIs. Closes #12241 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-apigatewayv2/README.md | 8 ++++- .../@aws-cdk/aws-apigatewayv2/lib/http/api.ts | 31 +++++++++++++++++-- .../aws-apigatewayv2/test/http/api.test.ts | 24 ++++++++++++++ 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/packages/@aws-cdk/aws-apigatewayv2/README.md b/packages/@aws-cdk/aws-apigatewayv2/README.md index 297ec5ce2bfdb..1fda5a731ff40 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/README.md +++ b/packages/@aws-cdk/aws-apigatewayv2/README.md @@ -95,7 +95,13 @@ httpApi.addRoutes({ }); ``` -The URL to the endpoint can be retrieved via the `apiEndpoint` attribute. +The URL to the endpoint can be retrieved via the `apiEndpoint` attribute. By default this URL is enabled for clients. Use `disableExecuteApiEndpoint` to disable it. + +```ts +const httpApi = new HttpApi(stack, 'HttpApi', { + disableExecuteApiEndpoint: true, +}); +``` The `defaultIntegration` option while defining HTTP APIs lets you create a default catch-all integration that is matched when a client reaches a route that is not explicitly defined. diff --git a/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts b/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts index cc2e646443f0e..5ced1f20f18a0 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts @@ -128,6 +128,15 @@ export interface HttpApiProps { * @default - no default domain mapping configured. meaningless if `createDefaultStage` is `false`. */ readonly defaultDomainMapping?: DefaultDomainMappingOptions; + + /** + * Specifies whether clients can invoke your API using the default endpoint. + * By default, clients can invoke your API with the default + * `https://{api_id}.execute-api.{region}.amazonaws.com` endpoint. Enable + * this if you would like clients to use your custom domain name. + * @default false execute-api endpoint enabled. + */ + readonly disableExecuteApiEndpoint?: boolean; } /** @@ -283,17 +292,24 @@ export class HttpApi extends HttpApiBase { */ public readonly httpApiName?: string; public readonly httpApiId: string; - public readonly apiEndpoint: string; + + /** + * Specifies whether clients can invoke this HTTP API by using the default execute-api endpoint. + */ + public readonly disableExecuteApiEndpoint?: boolean; /** * default stage of the api resource */ public readonly defaultStage: HttpStage | undefined; + private readonly _apiEndpoint: string; + constructor(scope: Construct, id: string, props?: HttpApiProps) { super(scope, id); this.httpApiName = props?.apiName ?? id; + this.disableExecuteApiEndpoint = props?.disableExecuteApiEndpoint; let corsConfiguration: CfnApi.CorsProperty | undefined; if (props?.corsPreflight) { @@ -324,11 +340,12 @@ export class HttpApi extends HttpApiBase { protocolType: 'HTTP', corsConfiguration, description: props?.description, + disableExecuteApiEndpoint: this.disableExecuteApiEndpoint, }; const resource = new CfnApi(this, 'Resource', apiProps); this.httpApiId = resource.ref; - this.apiEndpoint = resource.attrApiEndpoint; + this._apiEndpoint = resource.attrApiEndpoint; if (props?.defaultIntegration) { new HttpRoute(this, 'DefaultRoute', { @@ -357,6 +374,16 @@ export class HttpApi extends HttpApiBase { } } + /** + * Get the default endpoint for this API. + */ + public get apiEndpoint(): string { + if (this.disableExecuteApiEndpoint) { + throw new Error('apiEndpoint is not accessible when disableExecuteApiEndpoint is set to true.'); + } + return this._apiEndpoint; + } + /** * Get the URL to the default stage of this API. * Returns `undefined` if `createDefaultStage` is unset. diff --git a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts index b061f613f4ca3..70bc45000ddec 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts @@ -215,6 +215,19 @@ describe('HttpApi', () => { }); }); + test('disableExecuteApiEndpoint is enabled', () => { + const stack = new Stack(); + new HttpApi(stack, 'api', { + disableExecuteApiEndpoint: true, + }); + + expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { + Name: 'api', + ProtocolType: 'HTTP', + DisableExecuteApiEndpoint: true, + }); + }); + test('can add a vpc links', () => { // GIVEN const stack = new Stack(); @@ -261,6 +274,17 @@ describe('HttpApi', () => { expect(api.apiEndpoint).toBeDefined(); }); + test('throws when accessing apiEndpoint and disableExecuteApiEndpoint is true', () => { + const stack = new Stack(); + const api = new HttpApi(stack, 'api', { + disableExecuteApiEndpoint: true, + }); + + expect(() => api.apiEndpoint).toThrow( + /apiEndpoint is not accessible when disableExecuteApiEndpoint is set to true./, + ); + }); + test('apiEndpoint for imported', () => { const stack = new Stack(); const api = HttpApi.fromHttpApiAttributes(stack, 'imported', { httpApiId: 'api-1234' }); From 54f0ac670d10b44c9d8bde4735ae158a77ade6c1 Mon Sep 17 00:00:00 2001 From: jumi-dev <61919471+jumi-dev@users.noreply.github.com> Date: Thu, 14 Jan 2021 12:23:11 +0100 Subject: [PATCH 32/54] chore(lambda): update links to language-specific APIs in readme (#12182) In the readme file, Node.js and Python language-specific APIs were linked to the github page. I replaced the links by the corresponding pages in the CDK docs. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-lambda/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda/README.md b/packages/@aws-cdk/aws-lambda/README.md index 54e7811688134..5b7ee7cd3240e 100644 --- a/packages/@aws-cdk/aws-lambda/README.md +++ b/packages/@aws-cdk/aws-lambda/README.md @@ -458,5 +458,5 @@ new lambda.Function(this, 'Function', { Language-specific higher level constructs are provided in separate modules: -* Node.js: [`@aws-cdk/aws-lambda-nodejs`](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-nodejs) -* Python: [`@aws-cdk/aws-lambda-python`](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-python) +* `@aws-cdk/aws-lambda-nodejs`: [Github](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-nodejs) & [CDK Docs](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) +* `@aws-cdk/aws-lambda-python`: [Github](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-python) & [CDK Docs](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-python-readme.html) From f50f92880bbc219c331c858eaace712e0757507d Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Thu, 14 Jan 2021 15:24:33 +0200 Subject: [PATCH 33/54] fix(s3-deployment): stop using deprecated API's that will cause breakage post 01/31/21 (#12491) We currently use deprecated API's from the Lambda runtime that will be removed on January 30 2021. This PR replaces those API usages with direct `urllib` usage, which is a built-in module available in any python installation. Fixes https://github.com/aws/aws-cdk/issues/12219 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../ec2/integ.environment-file.expected.json | 26 +++++++++---------- .../aws-s3-deployment/lib/lambda/index.py | 8 +++--- ...bucket-deployment-cloudfront.expected.json | 22 ++++++++-------- .../integ.bucket-deployment.expected.json | 22 ++++++++-------- .../aws-s3-deployment/test/lambda/test.py | 22 +++++++++++----- 5 files changed, 55 insertions(+), 45 deletions(-) diff --git a/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json b/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json index 7ba376073123b..34017cbb94b10 100644 --- a/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json +++ b/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json @@ -711,14 +711,12 @@ "Code": { "ZipFile": "import boto3, json, os, time\n\necs = boto3.client('ecs')\nautoscaling = boto3.client('autoscaling')\n\n\ndef lambda_handler(event, context):\n print(json.dumps(event))\n cluster = os.environ['CLUSTER']\n snsTopicArn = event['Records'][0]['Sns']['TopicArn']\n lifecycle_event = json.loads(event['Records'][0]['Sns']['Message'])\n instance_id = lifecycle_event.get('EC2InstanceId')\n if not instance_id:\n print('Got event without EC2InstanceId: %s', json.dumps(event))\n return\n\n instance_arn = container_instance_arn(cluster, instance_id)\n print('Instance %s has container instance ARN %s' % (lifecycle_event['EC2InstanceId'], instance_arn))\n\n if not instance_arn:\n return\n\n while has_tasks(cluster, instance_arn):\n time.sleep(10)\n\n try:\n print('Terminating instance %s' % instance_id)\n autoscaling.complete_lifecycle_action(\n LifecycleActionResult='CONTINUE',\n **pick(lifecycle_event, 'LifecycleHookName', 'LifecycleActionToken', 'AutoScalingGroupName'))\n except Exception as e:\n # Lifecycle action may have already completed.\n print(str(e))\n\n\ndef container_instance_arn(cluster, instance_id):\n \"\"\"Turn an instance ID into a container instance ARN.\"\"\"\n arns = ecs.list_container_instances(cluster=cluster, filter='ec2InstanceId==' + instance_id)['containerInstanceArns']\n if not arns:\n return None\n return arns[0]\n\n\ndef has_tasks(cluster, instance_arn):\n \"\"\"Return True if the instance is running tasks for the given cluster.\"\"\"\n instances = ecs.describe_container_instances(cluster=cluster, containerInstances=[instance_arn])['containerInstances']\n if not instances:\n return False\n instance = instances[0]\n\n if instance['status'] == 'ACTIVE':\n # Start draining, then try again later\n set_container_instance_to_draining(cluster, instance_arn)\n return True\n\n tasks = instance['runningTasksCount'] + instance['pendingTasksCount']\n print('Instance %s has %s tasks' % (instance_arn, tasks))\n\n return tasks > 0\n\n\ndef set_container_instance_to_draining(cluster, instance_arn):\n ecs.update_container_instances_state(\n cluster=cluster,\n containerInstances=[instance_arn], status='DRAINING')\n\n\ndef pick(dct, *keys):\n \"\"\"Pick a subset of a dict.\"\"\"\n return {k: v for k, v in dct.items() if k in keys}\n" }, - "Handler": "index.lambda_handler", "Role": { "Fn::GetAtt": [ "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA", "Arn" ] }, - "Runtime": "python3.6", "Environment": { "Variables": { "CLUSTER": { @@ -726,6 +724,8 @@ } } }, + "Handler": "index.lambda_handler", + "Runtime": "python3.6", "Tags": [ { "Key": "Name", @@ -1219,7 +1219,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00" }, "S3Key": { "Fn::Join": [ @@ -1232,7 +1232,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" } ] } @@ -1245,7 +1245,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" } ] } @@ -1255,19 +1255,19 @@ ] } }, - "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "Arn" ] }, - "Runtime": "python3.6", + "Handler": "index.handler", "Layers": [ { "Ref": "EnvFileDeploymentAwsCliLayerA8FC897D" } ], + "Runtime": "python3.6", "Timeout": 900 }, "DependsOn": [ @@ -1348,17 +1348,17 @@ "Type": "String", "Description": "Artifact hash for asset \"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": { "Type": "String", - "Description": "S3 bucket for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "S3 bucket for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": { "Type": "String", - "Description": "S3 key for asset version \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "S3 key for asset version \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7ArtifactHash8926088E": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": { "Type": "String", - "Description": "Artifact hash for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "Artifact hash for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, "AssetParameters972240f9dd6e036a93d5f081af9a24315b2053828ac049b3b19b2fa12d7ae64aS3Bucket1F1A8472": { "Type": "String", diff --git a/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py b/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py index 34a2da1681f4d..bf16d84608517 100644 --- a/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py +++ b/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py @@ -7,10 +7,11 @@ import logging import shutil import boto3 +import contextlib from datetime import datetime from uuid import uuid4 -from botocore.vendored import requests +from urllib.request import Request, urlopen from zipfile import ZipFile logger = logging.getLogger() @@ -212,8 +213,9 @@ def cfn_send(event, context, responseStatus, responseData={}, physicalResourceId } try: - response = requests.put(responseUrl, data=body, headers=headers) - logger.info("| status code: " + response.reason) + request = Request(responseUrl, method='PUT', data=bytes(body.encode('utf-8')), headers=headers) + with contextlib.closing(urlopen(request)) as response: + logger.info("| status code: " + response.reason) except Exception as e: logger.error("| unable to send response to CloudFormation") logger.exception(e) diff --git a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json index aa8c7fddd60c7..3e138f405e0d6 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json +++ b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json @@ -295,7 +295,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00" }, "S3Key": { "Fn::Join": [ @@ -308,7 +308,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" } ] } @@ -321,7 +321,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" } ] } @@ -331,19 +331,19 @@ ] } }, - "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "Arn" ] }, - "Runtime": "python3.6", + "Handler": "index.handler", "Layers": [ { "Ref": "DeployWithInvalidationAwsCliLayerDEDD5787" } ], + "Runtime": "python3.6", "Timeout": 900 }, "DependsOn": [ @@ -365,17 +365,17 @@ "Type": "String", "Description": "Artifact hash for asset \"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": { "Type": "String", - "Description": "S3 bucket for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "S3 bucket for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": { "Type": "String", - "Description": "S3 key for asset version \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "S3 key for asset version \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7ArtifactHash8926088E": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": { "Type": "String", - "Description": "Artifact hash for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "Artifact hash for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, "AssetParametersfc4481abf279255619ff7418faa5d24456fef3432ea0da59c95542578ff0222eS3Bucket9CD8B20A": { "Type": "String", diff --git a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json index 267c6eaa23476..9d52b89269f5a 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json +++ b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json @@ -304,7 +304,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00" }, "S3Key": { "Fn::Join": [ @@ -317,7 +317,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" } ] } @@ -330,7 +330,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" } ] } @@ -340,19 +340,19 @@ ] } }, - "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "Arn" ] }, - "Runtime": "python3.6", + "Handler": "index.handler", "Layers": [ { "Ref": "DeployMeAwsCliLayer5F9219E9" } ], + "Runtime": "python3.6", "Timeout": 900 }, "DependsOn": [ @@ -700,17 +700,17 @@ "Type": "String", "Description": "Artifact hash for asset \"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": { "Type": "String", - "Description": "S3 bucket for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "S3 bucket for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": { "Type": "String", - "Description": "S3 key for asset version \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "S3 key for asset version \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, - "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7ArtifactHash8926088E": { + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": { "Type": "String", - "Description": "Artifact hash for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" + "Description": "Artifact hash for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" }, "AssetParametersfc4481abf279255619ff7418faa5d24456fef3432ea0da59c95542578ff0222eS3Bucket9CD8B20A": { "Type": "String", diff --git a/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py b/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py index cd88eaf6a5269..fcd79f18af4d5 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py +++ b/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py @@ -425,7 +425,7 @@ def read_aws_out(): # resourceProps: map to pass to "ResourceProperties" # expected_status: "SUCCESS" or "FAILED" def invoke_handler(requestType, resourceProps, old_resource_props=None, physical_id=None, expected_status='SUCCESS'): - response_url = '' + response_url = 'http://' event={ 'ResponseURL': response_url, @@ -443,25 +443,33 @@ def invoke_handler(requestType, resourceProps, old_resource_props=None, physical event['PhysicalResourceId'] = physical_id class ContextMock: log_stream_name = 'log_stream' - class ResponseMock: reason = 'OK' + class ResponseMock: + reason = 'OK' + # needed because the context manager calls this + close = lambda _: _ context = ContextMock() - requests.put = MagicMock(return_value=ResponseMock()) + index.urlopen = MagicMock(return_value=ResponseMock()) #-------------------- # invoke the handler #-------------------- index.handler(event, context) - requests.put.assert_called_once() - (pos_args, kw_args) = requests.put.call_args + index.urlopen.assert_called_once() + (pos_args, _) = index.urlopen.call_args - actual_url = pos_args[0] - actual_data = kw_args['data'] + actual_request = pos_args[0] + actual_url = actual_request.full_url + actual_data = actual_request.data + actual_method = actual_request.method if actual_url != response_url: raise Exception("Invalid url used for sending CFN response. expected=%s actual=%s" % (response_url, actual_url)) + if actual_method != 'PUT': + raise Exception("Invalid method used for sending CFN response. expected=PUT actual=%s" % (actual_method,)) + resp = json.loads(actual_data) def assert_field(name, expect=None): From f8963ed86ba0cb3f935b9c29a3ac7f17ecd67114 Mon Sep 17 00:00:00 2001 From: AWS CDK Team Date: Thu, 14 Jan 2021 18:33:41 +0000 Subject: [PATCH 34/54] chore(release): 1.85.0 --- CHANGELOG.md | 19 +++++++++++++++++++ version.v1.json | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c6ffbb423465..5cdabb856ed10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.85.0](https://github.com/aws/aws-cdk/compare/v1.84.0...v1.85.0) (2021-01-14) + + +### Features + +* **apigatewayv2:** http api - disable execute api endpoint ([#12426](https://github.com/aws/aws-cdk/issues/12426)) ([1724da7](https://github.com/aws/aws-cdk/commit/1724da758666ec92f7b923c899d2f2f439083ba2)), closes [#12241](https://github.com/aws/aws-cdk/issues/12241) +* **appmesh:** add listener TLS certificates for VirtualNodes and VirtualGateways ([#11863](https://github.com/aws/aws-cdk/issues/11863)) ([175a257](https://github.com/aws/aws-cdk/commit/175a2570465d484aa0a73a7bded34e686da493ed)), closes [#10051](https://github.com/aws/aws-cdk/issues/10051) +* **cfnspec:** CloudFormation resource specification update to v23.0.0 ([#12490](https://github.com/aws/aws-cdk/issues/12490)) ([a7a2236](https://github.com/aws/aws-cdk/commit/a7a2236367f8f01b00b6d90f1d3fe7bf674b1aee)) + + +### Bug Fixes + +* **appsync:** rds data source configured with cluster arn ([#12255](https://github.com/aws/aws-cdk/issues/12255)) ([d0305f3](https://github.com/aws/aws-cdk/commit/d0305f33da41ce1f07a5d571eb21c0ee9ea852d0)), closes [#11536](https://github.com/aws/aws-cdk/issues/11536) +* **aws-ecs:** Support configuring Windows capacity for cluster ASGs ([#12365](https://github.com/aws/aws-cdk/issues/12365)) ([6d9a0f1](https://github.com/aws/aws-cdk/commit/6d9a0f1ea0c05e7902ccca4d0fc4040e688846e5)) +* **eks:** aws-node-termination-handler incorrectly deployed to on-demand instances as well ([#12369](https://github.com/aws/aws-cdk/issues/12369)) ([05c0b5f](https://github.com/aws/aws-cdk/commit/05c0b5f5a31c3fe89c47c6db8d9051f7165641a9)), closes [#12368](https://github.com/aws/aws-cdk/issues/12368) +* **s3:** Bucket.grantWrite() no longer adds s3:PutObject* permission ([#12391](https://github.com/aws/aws-cdk/issues/12391)) ([cd437cf](https://github.com/aws/aws-cdk/commit/cd437cf630266086a3ddf9e326f215b5d1acdfd7)) +* **s3-deployment:** stop using deprecated API's that will cause breakage post 01/31/21 ([#12491](https://github.com/aws/aws-cdk/issues/12491)) ([f50f928](https://github.com/aws/aws-cdk/commit/f50f92880bbc219c331c858eaace712e0757507d)) +* **sns:** require topic name for fifo topic [#12386](https://github.com/aws/aws-cdk/issues/12386) ([#12437](https://github.com/aws/aws-cdk/issues/12437)) ([37d8ccc](https://github.com/aws/aws-cdk/commit/37d8ccc763f532999bc9f114264f3d29725b0f28)) + ## [1.84.0](https://github.com/aws/aws-cdk/compare/v1.83.0...v1.84.0) (2021-01-12) diff --git a/version.v1.json b/version.v1.json index 5ccb440326d66..e9e06b8086b92 100644 --- a/version.v1.json +++ b/version.v1.json @@ -1,3 +1,3 @@ { - "version": "1.84.0" + "version": "1.85.0" } From 7ab8dd71f3b4f60acfb99bb90e0022ed2877613a Mon Sep 17 00:00:00 2001 From: Neta Nir Date: Thu, 14 Jan 2021 11:32:37 -0800 Subject: [PATCH 35/54] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cdabb856ed10..1e2dedad85932 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file. See [standa ## [1.85.0](https://github.com/aws/aws-cdk/compare/v1.84.0...v1.85.0) (2021-01-14) +* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deperaction of the request module in boto, more details ar available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/), Note, users of versions < `1.81.0` will not be impacted by this depreciation, but are still encoraged to upgrade to the latest version. + ### Features From 19999fa6583de4c5d6e4e66f166f966a97287151 Mon Sep 17 00:00:00 2001 From: Neta Nir Date: Thu, 14 Jan 2021 11:33:53 -0800 Subject: [PATCH 36/54] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e2dedad85932..95878a3429419 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. See [standa ## [1.85.0](https://github.com/aws/aws-cdk/compare/v1.84.0...v1.85.0) (2021-01-14) -* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deperaction of the request module in boto, more details ar available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/), Note, users of versions < `1.81.0` will not be impacted by this depreciation, but are still encoraged to upgrade to the latest version. +* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deperaction of the request module in boto, more details are available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/). Note, users of versions < `1.81.0` will not be impacted by this depreciation, but are still encoraged to upgrade to the latest version. ### Features From 9a27828a08d4a7a73a3eeeab270cae90b29a0a11 Mon Sep 17 00:00:00 2001 From: Neta Nir Date: Thu, 14 Jan 2021 11:43:26 -0800 Subject: [PATCH 37/54] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95878a3429419..dbbfb613500bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. See [standa ## [1.85.0](https://github.com/aws/aws-cdk/compare/v1.84.0...v1.85.0) (2021-01-14) -* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deperaction of the request module in boto, more details are available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/). Note, users of versions < `1.81.0` will not be impacted by this depreciation, but are still encoraged to upgrade to the latest version. +* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deperaction of the request module in boto, more details are available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/). Note, users of versions < `1.81.0` will not be impacted by this deprecation, but are still encoraged to upgrade to the latest version. ### Features From ccf30b47395bc76a4096cf00948279d485a4d554 Mon Sep 17 00:00:00 2001 From: Neta Nir Date: Thu, 14 Jan 2021 14:39:31 -0800 Subject: [PATCH 38/54] Update CHANGELOG.md --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dbbfb613500bd..731ddcf6c5e4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,7 @@ All notable changes to this project will be documented in this file. See [standa ## [1.85.0](https://github.com/aws/aws-cdk/compare/v1.84.0...v1.85.0) (2021-01-14) -* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deperaction of the request module in boto, more details are available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/). Note, users of versions < `1.81.0` will not be impacted by this deprecation, but are still encoraged to upgrade to the latest version. - +* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deprecation of the request module in boto, more details are available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/). Note, users of versions < `1.81.0` will not be impacted by this deprecation, but are still encouraged to upgrade to the latest version. ### Features From 737bab3536407245448b7af8fb1d569051820322 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 23:55:28 +0000 Subject: [PATCH 39/54] chore(deps-dev): bump typescript-json-schema from 0.46.0 to 0.47.0 (#12508) Bumps [typescript-json-schema](https://github.com/YousefED/typescript-json-schema) from 0.46.0 to 0.47.0. - [Release notes](https://github.com/YousefED/typescript-json-schema/releases) - [Commits](https://github.com/YousefED/typescript-json-schema/compare/v0.46.0...v0.47.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- packages/@aws-cdk/cloud-assembly-schema/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/@aws-cdk/cloud-assembly-schema/package.json b/packages/@aws-cdk/cloud-assembly-schema/package.json index f14d8ad679b71..8c00c98860b9f 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/package.json +++ b/packages/@aws-cdk/cloud-assembly-schema/package.json @@ -66,7 +66,7 @@ "jest": "^26.6.3", "mock-fs": "^4.13.0", "pkglint": "0.0.0", - "typescript-json-schema": "^0.46.0" + "typescript-json-schema": "^0.47.0" }, "repository": { "url": "https://github.com/aws/aws-cdk.git", diff --git a/yarn.lock b/yarn.lock index f93eb67abe0e5..71b4c9102456f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9923,10 +9923,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript-json-schema@^0.46.0: - version "0.46.0" - resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.46.0.tgz#45204ba80915db3608d01de5b839c470c053e716" - integrity sha512-9ktZr69Yh6iGTWVa3Ln0J+H6RyAoED9e68tz8k+0lIiCR+UZLvpvs9PqsSsE7aZ7Olvg0p161ls7JHldlA0Ocg== +typescript-json-schema@^0.47.0: + version "0.47.0" + resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.47.0.tgz#84dde5460b127c6774da81bf70b23c7e04857b13" + integrity sha512-A6NVwSOTSsNDHfaqDcDeKwwyXEeKqBHoAr20jcetnYj4e8C6zVFofAVhAuwsBXCRYiWEE/lyHrcxpsSpbIk0Mg== dependencies: "@types/json-schema" "^7.0.6" glob "^7.1.6" From 83b8df8c390a27e10bf362f49babfb24ee425506 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Fri, 15 Jan 2021 09:12:54 +0200 Subject: [PATCH 40/54] chore: eliminate the use of `xxx.Construct` to reduce v2 merge conflicts (#12504) Introduce an eslint rule & fix all instances in our code which refer to `@aws-cdk/core.Construct` using a qualified namespace (e.g. `core.Construct`, `cdk.Construct`, etc). In v2, `Construct` will refer to `constructs.Construct` so it will reduce the chances for merge issues. The rule fixer automatically adds an `import` statement (separated from the main import group) and replaces the usage. If the file already imports `constructs.Construct`, then the new import will alias as `CoreConstruct`. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../ecs-service-extensions/lib/environment.ts | 14 +- .../lib/extensions/appmesh.ts | 6 +- .../assign-public-ip/assign-public-ip.ts | 7 +- .../assign-public-ip/task-record-manager.ts | 8 +- .../lib/extensions/cloudwatch-agent.ts | 9 +- .../lib/extensions/container.ts | 9 +- .../lib/extensions/extension-interfaces.ts | 6 +- .../lib/extensions/firelens.ts | 6 +- .../lib/extensions/http-load-balancer.ts | 6 +- .../lib/extensions/xray.ts | 6 +- .../ecs-service-extensions/lib/service.ts | 8 +- .../lib/pipeline-deploy-stack-action.ts | 6 +- .../aws-apigateway/lib/api-definition.ts | 13 +- .../aws-apigateway/lib/apigatewayv2.ts | 26 ++-- .../lib/base-scalable-attribute.ts | 7 +- .../lib/step-scaling-action.ts | 6 +- .../lib/step-scaling-policy.ts | 8 +- .../lib/target-tracking-scaling-policy.ts | 6 +- .../@aws-cdk/aws-appmesh/lib/client-policy.ts | 9 +- .../aws-appmesh/lib/gateway-route-spec.ts | 11 +- .../@aws-cdk/aws-appmesh/lib/route-spec.ts | 13 +- .../aws-appmesh/lib/service-discovery.ts | 11 +- .../aws-appmesh/lib/shared-interfaces.ts | 8 +- .../aws-appmesh/lib/tls-certificate.ts | 11 +- .../lib/virtual-gateway-listener.ts | 8 +- .../aws-appmesh/lib/virtual-node-listener.ts | 8 +- .../lib/virtual-router-listener.ts | 9 +- .../aws-autoscaling/test/scaling.test.ts | 6 +- .../aws-cloudformation/lib/custom-resource.ts | 10 +- .../aws-cloudformation/lib/nested-stack.ts | 6 +- .../test/integ.trivial-lambda-resource.ts | 8 +- .../aws-cloudformation/test/test.resource.ts | 8 +- .../aws-cloudfront-origins/lib/s3-origin.ts | 8 +- .../aws-cloudwatch-actions/lib/appscaling.ts | 7 +- .../aws-cloudwatch-actions/lib/autoscaling.ts | 7 +- .../@aws-cdk/aws-cloudwatch/lib/metric.ts | 8 +- .../lib/linux-gpu-build-image.ts | 6 +- .../lib/cloudformation/pipeline-actions.ts | 18 ++- .../lib/codebuild/build-action.ts | 6 +- .../lib/custom-action-registration.ts | 9 +- .../lib/jenkins/jenkins-provider.ts | 6 +- .../lib/manual-approval-action.ts | 7 +- .../lib/stepfunctions/invoke-action.ts | 6 +- .../lib/private/cross-region-support-stack.ts | 10 +- .../lib/aws-dynamodb-global.ts | 8 +- .../lib/global-table-coordinator.ts | 6 +- .../aws-ec2/test/integ.share-vpcs.lit.ts | 6 +- .../application-load-balanced-service-base.ts | 8 +- .../network-load-balanced-service-base.ts | 8 +- .../aws-ecs/lib/container-definition.ts | 6 +- .../lib/drain-hook/instance-drain-hook.ts | 6 +- .../images/tag-parameter-container-image.ts | 6 +- .../@aws-cdk/aws-ecs/lib/linux-parameters.ts | 6 +- .../alb/application-listener-certificate.ts | 7 +- .../lib/alb/application-listener-rule.ts | 6 +- .../lib/shared/base-target-group.ts | 6 +- .../lib/shared/imported.ts | 6 +- .../test/helpers.ts | 7 +- .../lib/elasticsearch-access-policy.ts | 7 +- .../lib/log-group-resource-policy.ts | 7 +- .../lib/log-group-resource-policy.ts | 6 +- .../lib/endpoint-group.ts | 6 +- .../aws-iam/test/example.attaching.lit.ts | 6 +- .../aws-iam/test/example.external-id.lit.ts | 7 +- .../aws-iam/test/example.managedpolicy.lit.ts | 7 +- .../@aws-cdk/aws-iam/test/example.role.lit.ts | 7 +- .../aws-lambda-nodejs/lib/function.ts | 7 +- .../aws-lambda-python/lib/function.ts | 7 +- .../@aws-cdk/aws-lambda-python/lib/layer.ts | 7 +- packages/@aws-cdk/aws-lambda/lib/code.ts | 18 ++- .../aws-logs/lib/cross-account-destination.ts | 6 +- .../@aws-cdk/aws-logs/lib/log-retention.ts | 8 +- .../@aws-cdk/aws-rds/lib/cluster-engine.ts | 21 +-- .../@aws-cdk/aws-rds/lib/instance-engine.ts | 15 +- packages/@aws-cdk/aws-s3-assets/lib/asset.ts | 6 +- .../lib/bucket-deployment.ts | 6 +- .../@aws-cdk/aws-s3-deployment/lib/source.ts | 11 +- packages/@aws-cdk/aws-s3/lib/destination.ts | 6 +- .../notifications-resource-handler.ts | 10 +- .../notifications-resource.ts | 8 +- .../lib/state-machine-fragment.ts | 7 +- .../aws-stepfunctions/lib/states/state.ts | 7 +- .../aws-custom-resource.ts | 6 +- packages/monocdk/package.json | 2 - tools/cdk-build-tools/bin/cdk-build.ts | 9 +- tools/cdk-build-tools/config/eslintrc.js | 1 + tools/eslint-plugin-cdk/lib/index.ts | 1 + .../lib/private/import-cache.ts | 4 + .../lib/rules/no-qualified-construct.ts | 134 ++++++++++++++++++ 89 files changed, 639 insertions(+), 194 deletions(-) create mode 100644 tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts index dcff0d28960b4..d83c286f0cdd6 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts @@ -3,6 +3,10 @@ import * as ecs from '@aws-cdk/aws-ecs'; import * as cdk from '@aws-cdk/core'; import { EnvironmentCapacityType } from './extensions/extension-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Settings for the environment you want to deploy. * services within. @@ -64,11 +68,11 @@ export interface IEnvironment { * or it can create it's own VPC and cluster. By default it will create * a cluster with Fargate capacity. */ -export class Environment extends cdk.Construct implements IEnvironment { +export class Environment extends Construct implements IEnvironment { /** * Import an existing environment from its attributes. */ - public static fromEnvironmentAttributes(scope: cdk.Construct, id: string, attrs: EnvironmentAttributes): IEnvironment { + public static fromEnvironmentAttributes(scope: Construct, id: string, attrs: EnvironmentAttributes): IEnvironment { return new ImportedEnvironment(scope, id, attrs); } @@ -94,7 +98,7 @@ export class Environment extends cdk.Construct implements IEnvironment { private readonly scope: cdk.Construct; - constructor(scope: cdk.Construct, id: string, props?: EnvironmentProps) { + constructor(scope: Construct, id: string, props?: EnvironmentProps) { super(scope, id); this.scope = scope; @@ -139,13 +143,13 @@ export interface EnvironmentAttributes { cluster: ecs.ICluster; } -export class ImportedEnvironment extends cdk.Construct implements IEnvironment { +export class ImportedEnvironment extends Construct implements IEnvironment { public readonly capacityType: EnvironmentCapacityType; public readonly cluster: ecs.ICluster; public readonly id: string; public readonly vpc: ec2.IVpc; - constructor(scope: cdk.Construct, id: string, props: EnvironmentAttributes) { + constructor(scope: Construct, id: string, props: EnvironmentAttributes) { super(scope, id); this.id = id; diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts index 65f77a81c9fac..fb93375423798 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts @@ -9,6 +9,10 @@ import { Service } from '../service'; import { Container } from './container'; import { ServiceExtension, ServiceBuild } from './extension-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + // The version of the App Mesh envoy sidecar to add to the task. const APP_MESH_ENVOY_SIDECAR_VERSION = 'v1.15.1.0-prod'; @@ -63,7 +67,7 @@ export class AppMeshExtension extends ServiceExtension { } } - public prehook(service: Service, scope: cdk.Construct) { + public prehook(service: Service, scope: Construct) { this.parentService = service; this.scope = scope; diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/assign-public-ip.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/assign-public-ip.ts index 57f71764019b8..3c019d44867b4 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/assign-public-ip.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/assign-public-ip.ts @@ -1,12 +1,15 @@ import * as ec2 from '@aws-cdk/aws-ec2'; import * as ecs from '@aws-cdk/aws-ecs'; import * as route53 from '@aws-cdk/aws-route53'; -import * as cdk from '@aws-cdk/core'; import { Service } from '../../service'; import { Container } from '../container'; import { ServiceExtension, ServiceBuild, EnvironmentCapacityType } from '../extension-interfaces'; import { TaskRecordManager } from './task-record-manager'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + export interface AssignPublicIpExtensionOptions { /** * Enable publishing task public IPs to a recordset in a Route 53 hosted zone. @@ -52,7 +55,7 @@ export class AssignPublicIpExtension extends ServiceExtension { return Boolean(this.dns); } - public prehook(service: Service, _scope: cdk.Construct) { + public prehook(service: Service, _scope: Construct) { super.prehook(service, _scope); if (service.capacityType != EnvironmentCapacityType.FARGATE) { diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts index 3772f4432cc04..67db42400ee5b 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts @@ -11,6 +11,10 @@ import * as sqs from '@aws-cdk/aws-sqs'; import * as cdk from '@aws-cdk/core'; import * as customresources from '@aws-cdk/custom-resources'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + export interface TaskRecordManagerProps { service: ecs.Ec2Service | ecs.FargateService; dnsZone: route53.IHostedZone; @@ -21,8 +25,8 @@ export interface TaskRecordManagerProps { * An event-driven serverless app to maintain a list of public ips in a Route 53 * hosted zone. */ -export class TaskRecordManager extends cdk.Construct { - constructor(scope: cdk.Construct, id: string, props: TaskRecordManagerProps) { +export class TaskRecordManager extends Construct { + constructor(scope: Construct, id: string, props: TaskRecordManagerProps) { super(scope, id); // Poison pills go here. diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts index cd59b24f27860..ceed938e995cb 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts @@ -1,9 +1,12 @@ import * as ecs from '@aws-cdk/aws-ecs'; import * as iam from '@aws-cdk/aws-iam'; -import * as cdk from '@aws-cdk/core'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + const CLOUDWATCH_AGENT_IMAGE = 'amazon/cloudwatch-agent:latest'; /** @@ -28,7 +31,7 @@ export class CloudwatchAgentExtension extends ServiceExtension { super('cloudwatchAgent'); } - public prehook(service: Service, scope: cdk.Construct) { + public prehook(service: Service, scope: Construct) { this.parentService = service; this.scope = scope; } @@ -70,4 +73,4 @@ export class CloudwatchAgentExtension extends ServiceExtension { }); } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts index 3ae65bfe6994b..1bbc61ff4f8f7 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts @@ -1,8 +1,11 @@ import * as ecs from '@aws-cdk/aws-ecs'; -import * as cdk from '@aws-cdk/core'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Setting for the main application container of a service */ @@ -59,7 +62,7 @@ export class Container extends ServiceExtension { } // @ts-ignore - Ignore unused params that are required for abstract class extend - public prehook(service: Service, scope: cdk.Construct) { + public prehook(service: Service, scope: Construct) { this.parentService = service; } @@ -142,4 +145,4 @@ export class Container extends ServiceExtension { }); } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts index bf1b213a25ba3..fa0d42602c563 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts @@ -2,6 +2,10 @@ import * as ecs from '@aws-cdk/aws-ecs'; import * as cdk from '@aws-cdk/core'; import { Service } from '../service'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * A list of the capacity types that are supported. These * capacity types may change the behavior of an extension. @@ -154,7 +158,7 @@ export abstract class ServiceExtension { * @param parent - The parent service which this extension has been added to * @param scope - The scope that this extension should create resources in */ - public prehook(parent: Service, scope: cdk.Construct) { + public prehook(parent: Service, scope: Construct) { this.parentService = parent; this.scope = scope; } diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts index 03c23e015eaf7..1dfc8e1f1b0b0 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts @@ -5,6 +5,10 @@ import { Service } from '../service'; import { Container } from './container'; import { ContainerMutatingHook, ServiceExtension } from './extension-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Settings for the hook which mutates the application container * to route logs through FireLens @@ -63,7 +67,7 @@ export class FireLensExtension extends ServiceExtension { super('firelens'); } - public prehook(service: Service, scope: cdk.Construct) { + public prehook(service: Service, scope: Construct) { this.parentService = service; // Create a log group for the service, into which FireLens diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts index c00481d1f424c..884477b4d38db 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts @@ -4,6 +4,10 @@ import * as cdk from '@aws-cdk/core'; import { Service } from '../service'; import { ServiceExtension, ServiceBuild } from './extension-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * This extension add a public facing load balancer for sending traffic * to one or more replicas of the application container @@ -17,7 +21,7 @@ export class HttpLoadBalancerExtension extends ServiceExtension { } // Before the service is created go ahead and create the load balancer itself. - public prehook(service: Service, scope: cdk.Construct) { + public prehook(service: Service, scope: Construct) { this.parentService = service; this.loadBalancer = new alb.ApplicationLoadBalancer(scope, `${this.parentService.id}-load-balancer`, { diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts index 3ba344f4133d8..5e9affe0ffa3a 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts @@ -4,6 +4,10 @@ import * as cdk from '@aws-cdk/core'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + const XRAY_DAEMON_IMAGE = 'amazon/aws-xray-daemon:latest'; /** @@ -17,7 +21,7 @@ export class XRayExtension extends ServiceExtension { } // @ts-ignore - Ignore unused params that are required for abstract class extend - public prehook(service: Service, scope: cdk.Construct) { + public prehook(service: Service, scope: Construct) { this.parentService = service; } diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts index 29134a8c83260..c988c0592b6bf 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts @@ -5,6 +5,10 @@ import { IEnvironment } from './environment'; import { EnvironmentCapacityType, ServiceBuild } from './extensions/extension-interfaces'; import { ServiceDescription } from './service-description'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * The settings for an ECS Service */ @@ -24,7 +28,7 @@ export interface ServiceProps { * A service builder class. This construct support various extensions * which can construct an ECS service progressively. */ -export class Service extends cdk.Construct { +export class Service extends Construct { /** * The underlying ECS service that was created */ @@ -74,7 +78,7 @@ export class Service extends cdk.Construct { private readonly scope: cdk.Construct; - constructor(scope: cdk.Construct, id: string, props: ServiceProps) { + constructor(scope: Construct, id: string, props: ServiceProps) { super(scope, id); this.scope = scope; diff --git a/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts b/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts index 03685cfc9c413..cd7f97e6629a1 100644 --- a/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts +++ b/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts @@ -6,6 +6,10 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cxschema from '@aws-cdk/cloud-assembly-schema'; import * as cdk from '@aws-cdk/core'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + export interface PipelineDeployStackActionProps { /** * The CDK stack to be deployed. @@ -147,7 +151,7 @@ export class PipelineDeployStackAction implements codepipeline.IAction { }); } - public bind(scope: cdk.Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + public bind(scope: Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { if (this.stack.environment !== cdk.Stack.of(scope).environment) { // FIXME: Add the necessary to extend to stacks in a different account diff --git a/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts b/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts index 652c531de9c38..01be9ebd17c59 100644 --- a/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts +++ b/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts @@ -1,6 +1,9 @@ import * as s3 from '@aws-cdk/aws-s3'; import * as s3_assets from '@aws-cdk/aws-s3-assets'; -import * as cdk from '@aws-cdk/core'; + +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; /** * Represents an OpenAPI definition asset. @@ -80,7 +83,7 @@ export abstract class ApiDefinition { * @param scope The binding scope. Don't be smart about trying to down-cast or * assume it's initialized. You may just use it as a construct scope. */ - public abstract bind(scope: cdk.Construct): ApiDefinitionConfig; + public abstract bind(scope: Construct): ApiDefinitionConfig; } /** @@ -136,7 +139,7 @@ export class S3ApiDefinition extends ApiDefinition { this.bucketName = bucket.bucketName; } - public bind(_scope: cdk.Construct): ApiDefinitionConfig { + public bind(_scope: Construct): ApiDefinitionConfig { return { s3Location: { bucket: this.bucketName, @@ -164,7 +167,7 @@ export class InlineApiDefinition extends ApiDefinition { } } - public bind(_scope: cdk.Construct): ApiDefinitionConfig { + public bind(_scope: Construct): ApiDefinitionConfig { return { inlineDefinition: this.definition, }; @@ -182,7 +185,7 @@ export class AssetApiDefinition extends ApiDefinition { super(); } - public bind(scope: cdk.Construct): ApiDefinitionConfig { + public bind(scope: Construct): ApiDefinitionConfig { // If the same AssetAPIDefinition is used multiple times, retain only the first instantiation. if (this.asset === undefined) { this.asset = new s3_assets.Asset(scope, 'APIDefinition', { diff --git a/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts b/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts index e04bcef476fca..98ee1ba04acbf 100644 --- a/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts +++ b/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts @@ -5,6 +5,10 @@ import * as cdk from '@aws-cdk/core'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for defining a `AWS::ApiGatewayV2::Api` * @@ -288,7 +292,7 @@ export class CfnApiV2 extends cdk.CfnResource implements cdk.IInspectable { * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnApiV2Props = {}) { + constructor(scope: Construct, id: string, props: CfnApiV2Props = {}) { super(scope, id, { type: CfnApiV2.CFN_RESOURCE_TYPE_NAME, properties: props }); this.apiKeySelectionExpression = props.apiKeySelectionExpression; @@ -616,7 +620,7 @@ export class CfnApiMappingV2 extends cdk.CfnResource implements cdk.IInspectable * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnApiMappingV2Props) { + constructor(scope: Construct, id: string, props: CfnApiMappingV2Props) { super(scope, id, { type: CfnApiMappingV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'domainName', this); @@ -842,7 +846,7 @@ export class CfnAuthorizerV2 extends cdk.CfnResource implements cdk.IInspectable * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnAuthorizerV2Props) { + constructor(scope: Construct, id: string, props: CfnAuthorizerV2Props) { super(scope, id, { type: CfnAuthorizerV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'authorizerType', this); @@ -1047,7 +1051,7 @@ export class CfnDeploymentV2 extends cdk.CfnResource implements cdk.IInspectable * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnDeploymentV2Props) { + constructor(scope: Construct, id: string, props: CfnDeploymentV2Props) { super(scope, id, { type: CfnDeploymentV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); @@ -1192,7 +1196,7 @@ export class CfnDomainNameV2 extends cdk.CfnResource implements cdk.IInspectable * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnDomainNameV2Props) { + constructor(scope: Construct, id: string, props: CfnDomainNameV2Props) { super(scope, id, { type: CfnDomainNameV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'domainName', this); this.attrRegionalDomainName = cdk.Token.asString(this.getAtt('RegionalDomainName')); @@ -1546,7 +1550,7 @@ export class CfnIntegrationV2 extends cdk.CfnResource implements cdk.IInspectabl * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnIntegrationV2Props) { + constructor(scope: Construct, id: string, props: CfnIntegrationV2Props) { super(scope, id, { type: CfnIntegrationV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'integrationType', this); @@ -1762,7 +1766,7 @@ export class CfnIntegrationResponseV2 extends cdk.CfnResource implements cdk.IIn * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnIntegrationResponseV2Props) { + constructor(scope: Construct, id: string, props: CfnIntegrationResponseV2Props) { super(scope, id, { type: CfnIntegrationResponseV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'integrationId', this); @@ -1937,7 +1941,7 @@ export class CfnModelV2 extends cdk.CfnResource implements cdk.IInspectable { * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnModelV2Props) { + constructor(scope: Construct, id: string, props: CfnModelV2Props) { super(scope, id, { type: CfnModelV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'name', this); @@ -2205,7 +2209,7 @@ export class CfnRouteV2 extends cdk.CfnResource implements cdk.IInspectable { * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnRouteV2Props) { + constructor(scope: Construct, id: string, props: CfnRouteV2Props) { super(scope, id, { type: CfnRouteV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'routeKey', this); @@ -2452,7 +2456,7 @@ export class CfnRouteResponseV2 extends cdk.CfnResource implements cdk.IInspecta * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnRouteResponseV2Props) { + constructor(scope: Construct, id: string, props: CfnRouteResponseV2Props) { super(scope, id, { type: CfnRouteResponseV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'routeId', this); @@ -2757,7 +2761,7 @@ export class CfnStageV2 extends cdk.CfnResource implements cdk.IInspectable { * @param id - scoped id of the resource * @param props - resource properties */ - constructor(scope: cdk.Construct, id: string, props: CfnStageV2Props) { + constructor(scope: Construct, id: string, props: CfnStageV2Props) { super(scope, id, { type: CfnStageV2.CFN_RESOURCE_TYPE_NAME, properties: props }); cdk.requireProperty(props, 'apiId', this); cdk.requireProperty(props, 'stageName', this); diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts index ee955d6d120d1..762da275c33a5 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts @@ -1,10 +1,13 @@ import * as iam from '@aws-cdk/aws-iam'; -import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { ScalableTarget, ScalingSchedule, ServiceNamespace } from './scalable-target'; import { BasicStepScalingPolicyProps } from './step-scaling-policy'; import { BasicTargetTrackingScalingPolicyProps } from './target-tracking-scaling-policy'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Properties for a ScalableTableAttribute */ @@ -44,7 +47,7 @@ export interface BaseScalableAttributeProps extends EnableScalingProps { * - Don't expose all scaling methods (for example Dynamo tables don't support * Step Scaling, so the Dynamo subclass won't expose this method). */ -export abstract class BaseScalableAttribute extends cdk.Construct { +export abstract class BaseScalableAttribute extends CoreConstruct { private target: ScalableTarget; public constructor(scope: Construct, id: string, protected readonly props: BaseScalableAttributeProps) { diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-action.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-action.ts index 4cb7aa2328ebc..67021e74f71bf 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-action.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-action.ts @@ -3,6 +3,10 @@ import { Construct } from 'constructs'; import { CfnScalingPolicy } from './applicationautoscaling.generated'; import { IScalableTarget } from './scalable-target'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Properties for a scaling policy */ @@ -67,7 +71,7 @@ export interface StepScalingActionProps { * * This Action must be used as the target of a CloudWatch alarm to take effect. */ -export class StepScalingAction extends cdk.Construct { +export class StepScalingAction extends CoreConstruct { /** * ARN of the scaling policy */ diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts index 455e9ebbbd9e9..417ecf34f1970 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts @@ -5,6 +5,10 @@ import { Construct } from 'constructs'; import { IScalableTarget } from './scalable-target'; import { AdjustmentType, MetricAggregationType, StepScalingAction } from './step-scaling-action'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + export interface BasicStepScalingPolicyProps { /** * Metric to scale on. @@ -63,7 +67,7 @@ export interface StepScalingPolicyProps extends BasicStepScalingPolicyProps { * * Implemented using one or more CloudWatch alarms and Step Scaling Policies. */ -export class StepScalingPolicy extends cdk.Construct { +export class StepScalingPolicy extends CoreConstruct { public readonly lowerAlarm?: cloudwatch.Alarm; public readonly lowerAction?: StepScalingAction; public readonly upperAlarm?: cloudwatch.Alarm; @@ -210,7 +214,7 @@ class StepScalingAlarmAction implements cloudwatch.IAlarmAction { constructor(private readonly stepScalingAction: StepScalingAction) { } - public bind(_scope: cdk.Construct, _alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { + public bind(_scope: CoreConstruct, _alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { return { alarmActionArn: this.stepScalingAction.scalingPolicyArn }; } } diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts index 65146b754757b..2262f53e03522 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts @@ -4,6 +4,10 @@ import { Construct } from 'constructs'; import { CfnScalingPolicy } from './applicationautoscaling.generated'; import { IScalableTarget } from './scalable-target'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Base interface for target tracking props * @@ -115,7 +119,7 @@ export interface TargetTrackingScalingPolicyProps extends BasicTargetTrackingSca readonly scalingTarget: IScalableTarget; } -export class TargetTrackingScalingPolicy extends cdk.Construct { +export class TargetTrackingScalingPolicy extends CoreConstruct { /** * ARN of the scaling policy */ diff --git a/packages/@aws-cdk/aws-appmesh/lib/client-policy.ts b/packages/@aws-cdk/aws-appmesh/lib/client-policy.ts index 03236ee1c8f32..8f39b88399111 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/client-policy.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/client-policy.ts @@ -1,7 +1,10 @@ import * as acmpca from '@aws-cdk/aws-acmpca'; -import * as cdk from '@aws-cdk/core'; import { CfnVirtualNode } from './appmesh.generated'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + enum CertificateType { ACMPCA = 'acm', FILE = 'file', @@ -71,7 +74,7 @@ export abstract class ClientPolicy { /** * Returns Trust context based on trust type. */ - public abstract bind(scope: cdk.Construct): ClientPolicyConfig; + public abstract bind(scope: Construct): ClientPolicyConfig; } @@ -81,7 +84,7 @@ class ClientPolicyImpl extends ClientPolicy { private readonly certificateChain: string | undefined, private readonly certificateAuthorityArns: acmpca.ICertificateAuthority[] | undefined) { super(); } - public bind(_scope: cdk.Construct): ClientPolicyConfig { + public bind(_scope: Construct): ClientPolicyConfig { if (this.certificateType === CertificateType.ACMPCA && this.certificateAuthorityArns?.map(certificateArn => certificateArn.certificateAuthorityArn).length === 0) { throw new Error('You must provide at least one Certificate Authority when creating an ACM Trust ClientPolicy'); diff --git a/packages/@aws-cdk/aws-appmesh/lib/gateway-route-spec.ts b/packages/@aws-cdk/aws-appmesh/lib/gateway-route-spec.ts index 525bc4d2ba7e0..0a90fb1632ff9 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/gateway-route-spec.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/gateway-route-spec.ts @@ -1,8 +1,11 @@ -import * as cdk from '@aws-cdk/core'; import { CfnGatewayRoute } from './appmesh.generated'; import { Protocol } from './shared-interfaces'; import { IVirtualService } from './virtual-service'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * The criterion for determining a request match for this GatewayRoute */ @@ -119,7 +122,7 @@ export abstract class GatewayRouteSpec { * Called when the GatewayRouteSpec type is initialized. Can be used to enforce * mutual exclusivity with future properties */ - public abstract bind(scope: cdk.Construct): GatewayRouteSpecConfig; + public abstract bind(scope: Construct): GatewayRouteSpecConfig; } class HttpGatewayRouteSpec extends GatewayRouteSpec { @@ -147,7 +150,7 @@ class HttpGatewayRouteSpec extends GatewayRouteSpec { this.match = options.match; } - public bind(_scope: cdk.Construct): GatewayRouteSpecConfig { + public bind(_scope: Construct): GatewayRouteSpecConfig { const prefixPath = this.match ? this.match.prefixPath : '/'; if (prefixPath[0] != '/') { throw new Error(`Prefix Path must start with \'/\', got: ${prefixPath}`); @@ -190,7 +193,7 @@ class GrpcGatewayRouteSpec extends GatewayRouteSpec { this.routeTarget = options.routeTarget; } - public bind(_scope: cdk.Construct): GatewayRouteSpecConfig { + public bind(_scope: Construct): GatewayRouteSpecConfig { return { grpcSpecConfig: { action: { diff --git a/packages/@aws-cdk/aws-appmesh/lib/route-spec.ts b/packages/@aws-cdk/aws-appmesh/lib/route-spec.ts index b3ce09f0c0031..74b16976b69ca 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/route-spec.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/route-spec.ts @@ -1,8 +1,11 @@ -import * as cdk from '@aws-cdk/core'; import { CfnRoute } from './appmesh.generated'; import { Protocol, HttpTimeout, GrpcTimeout, TcpTimeout } from './shared-interfaces'; import { IVirtualNode } from './virtual-node'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for the Weighted Targets in the route */ @@ -176,7 +179,7 @@ export abstract class RouteSpec { * Called when the GatewayRouteSpec type is initialized. Can be used to enforce * mutual exclusivity with future properties */ - public abstract bind(scope: cdk.Construct): RouteSpecConfig; + public abstract bind(scope: Construct): RouteSpecConfig; } class HttpRouteSpec extends RouteSpec { @@ -208,7 +211,7 @@ class HttpRouteSpec extends RouteSpec { this.timeout = props.timeout; } - public bind(_scope: cdk.Construct): RouteSpecConfig { + public bind(_scope: Construct): RouteSpecConfig { const prefixPath = this.match ? this.match.prefixPath : '/'; if (prefixPath[0] != '/') { throw new Error(`Prefix Path must start with \'/\', got: ${prefixPath}`); @@ -246,7 +249,7 @@ class TcpRouteSpec extends RouteSpec { this.timeout = props.timeout; } - public bind(_scope: cdk.Construct): RouteSpecConfig { + public bind(_scope: Construct): RouteSpecConfig { return { tcpRouteSpec: { action: { @@ -270,7 +273,7 @@ class GrpcRouteSpec extends RouteSpec { this.timeout = props.timeout; } - public bind(_scope: cdk.Construct): RouteSpecConfig { + public bind(_scope: Construct): RouteSpecConfig { return { grpcRouteSpec: { action: { diff --git a/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts b/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts index b5fca6525c851..961357945a16b 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts @@ -1,7 +1,10 @@ import * as cloudmap from '@aws-cdk/aws-servicediscovery'; -import * as cdk from '@aws-cdk/core'; import { CfnVirtualNode } from './appmesh.generated'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Represents the properties needed to define CloudMap Service Discovery @@ -63,7 +66,7 @@ export abstract class ServiceDiscovery { /** * Binds the current object when adding Service Discovery to a VirtualNode */ - public abstract bind(scope: cdk.Construct): ServiceDiscoveryConfig; + public abstract bind(scope: Construct): ServiceDiscoveryConfig; } class DnsServiceDiscovery extends ServiceDiscovery { @@ -74,7 +77,7 @@ class DnsServiceDiscovery extends ServiceDiscovery { this.hostname = hostname; } - public bind(_scope: cdk.Construct): ServiceDiscoveryConfig { + public bind(_scope: Construct): ServiceDiscoveryConfig { return { dns: { hostname: this.hostname, @@ -93,7 +96,7 @@ class CloudMapServiceDiscovery extends ServiceDiscovery { this.instanceAttributes = options.instanceAttributes; } - public bind(_scope: cdk.Construct): ServiceDiscoveryConfig { + public bind(_scope: Construct): ServiceDiscoveryConfig { return { cloudmap: { namespaceName: this.service.namespace.namespaceName, diff --git a/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts b/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts index cbd574489f9c4..831db66e49e0c 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts @@ -1,6 +1,10 @@ import * as cdk from '@aws-cdk/core'; import { CfnVirtualGateway, CfnVirtualNode } from './appmesh.generated'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Represents timeouts for HTTP protocols. */ @@ -155,7 +159,7 @@ export abstract class AccessLog { * Called when the AccessLog type is initialized. Can be used to enforce * mutual exclusivity with future properties */ - public abstract bind(scope: cdk.Construct): AccessLogConfig; + public abstract bind(scope: Construct): AccessLogConfig; } /** @@ -174,7 +178,7 @@ class FileAccessLog extends AccessLog { this.filePath = filePath; } - public bind(_scope: cdk.Construct): AccessLogConfig { + public bind(_scope: Construct): AccessLogConfig { return { virtualNodeAccessLog: { file: { diff --git a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts index 524eb079d8702..ec227fb13df99 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts @@ -1,7 +1,10 @@ import * as acm from '@aws-cdk/aws-certificatemanager'; -import * as cdk from '@aws-cdk/core'; import { CfnVirtualNode } from './appmesh.generated'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Enum of supported TLS modes */ @@ -93,7 +96,7 @@ export abstract class TlsCertificate { /** * Returns TLS certificate based provider. */ - public abstract bind(_scope: cdk.Construct): TlsCertificateConfig; + public abstract bind(_scope: Construct): TlsCertificateConfig; } @@ -119,7 +122,7 @@ class AcmTlsCertificate extends TlsCertificate { this.acmCertificate = props.certificate; } - bind(_scope: cdk.Construct): TlsCertificateConfig { + bind(_scope: Construct): TlsCertificateConfig { return { tlsCertificate: { acm: { @@ -159,7 +162,7 @@ class FileTlsCertificate extends TlsCertificate { this.privateKey = props.privateKeyPath; } - bind(_scope: cdk.Construct): TlsCertificateConfig { + bind(_scope: Construct): TlsCertificateConfig { return { tlsCertificate: { file: { diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts index afe21479ede0c..9f081ffdefd60 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts @@ -4,6 +4,10 @@ import { validateHealthChecks } from './private/utils'; import { HealthCheck, Protocol } from './shared-interfaces'; import { TlsCertificate, TlsCertificateConfig } from './tls-certificate'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Represents the properties needed to define HTTP Listeners for a VirtualGateway */ @@ -95,7 +99,7 @@ export abstract class VirtualGatewayListener { * Called when the GatewayListener type is initialized. Can be used to enforce * mutual exclusivity */ - public abstract bind(scope: cdk.Construct): VirtualGatewayListenerConfig; + public abstract bind(scope: Construct): VirtualGatewayListenerConfig; } /** @@ -114,7 +118,7 @@ class VirtualGatewayListenerImpl extends VirtualGatewayListener { * Called when the GatewayListener type is initialized. Can be used to enforce * mutual exclusivity */ - public bind(scope: cdk.Construct): VirtualGatewayListenerConfig { + public bind(scope: Construct): VirtualGatewayListenerConfig { const tlsConfig = this.tlsCertificate?.bind(scope); return { listener: { diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts index 332e7c5771d15..883d05583d5c7 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts @@ -4,6 +4,10 @@ import { validateHealthChecks } from './private/utils'; import { HealthCheck, Protocol, HttpTimeout, GrpcTimeout, TcpTimeout } from './shared-interfaces'; import { TlsCertificate, TlsCertificateConfig } from './tls-certificate'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for a VirtualNode listener */ @@ -111,7 +115,7 @@ export abstract class VirtualNodeListener { /** * Binds the current object when adding Listener to a VirtualNode */ - public abstract bind(scope: cdk.Construct): VirtualNodeListenerConfig; + public abstract bind(scope: Construct): VirtualNodeListenerConfig; } @@ -122,7 +126,7 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { private readonly port: number = 8080, private readonly tlsCertificate: TlsCertificate | undefined) { super(); } - public bind(scope: cdk.Construct): VirtualNodeListenerConfig { + public bind(scope: Construct): VirtualNodeListenerConfig { const tlsConfig = this.tlsCertificate?.bind(scope); return { listener: { diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-router-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-router-listener.ts index 7a5e867d0b7c9..ced6279d78664 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-router-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-router-listener.ts @@ -1,7 +1,10 @@ -import * as cdk from '@aws-cdk/core'; import { CfnVirtualRouter } from './appmesh.generated'; import { Protocol } from './shared-interfaces'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for a VirtualRouter listener */ @@ -56,7 +59,7 @@ export abstract class VirtualRouterListener { * Called when the VirtualRouterListener type is initialized. Can be used to enforce * mutual exclusivity */ - public abstract bind(scope: cdk.Construct): VirtualRouterListenerConfig; + public abstract bind(scope: Construct): VirtualRouterListenerConfig; } class VirtualRouterListenerImpl extends VirtualRouterListener { @@ -69,7 +72,7 @@ class VirtualRouterListenerImpl extends VirtualRouterListener { this.port = port ?? 8080; } - bind(_scope: cdk.Construct): VirtualRouterListenerConfig { + bind(_scope: Construct): VirtualRouterListenerConfig { return { listener: { portMapping: { diff --git a/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts b/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts index 86604a52d3404..5207897cd1786 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts +++ b/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts @@ -7,6 +7,10 @@ import * as constructs from 'constructs'; import { nodeunitShim, Test } from 'nodeunit-shim'; import * as autoscaling from '../lib'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + nodeunitShim({ 'target tracking policies': { 'cpu utilization'(test: Test) { @@ -273,7 +277,7 @@ nodeunitShim({ }, }); -class ASGFixture extends cdk.Construct { +class ASGFixture extends Construct { public readonly vpc: ec2.Vpc; public readonly asg: autoscaling.AutoScalingGroup; diff --git a/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts b/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts index 93ac7d4b9913a..a36411c8504f3 100644 --- a/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts +++ b/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts @@ -2,6 +2,10 @@ import * as lambda from '@aws-cdk/aws-lambda'; import * as sns from '@aws-cdk/aws-sns'; import * as core from '@aws-cdk/core'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Collection of arbitrary properties */ @@ -28,7 +32,7 @@ export interface ICustomResourceProvider { * @param scope The resource that uses this provider. * @returns provider configuration */ - bind(scope: core.Construct): CustomResourceProviderConfig; + bind(scope: Construct): CustomResourceProviderConfig; } /** @@ -68,7 +72,7 @@ export class CustomResourceProvider implements ICustomResourceProvider { */ private constructor(public readonly serviceToken: string) { } - public bind(_: core.Construct): CustomResourceProviderConfig { + public bind(_: Construct): CustomResourceProviderConfig { return { serviceToken: this.serviceToken }; } } @@ -151,7 +155,7 @@ export interface CustomResourceProps { * @deprecated use `core.CustomResource` */ export class CustomResource extends core.CustomResource { - constructor(scope: core.Construct, id: string, props: CustomResourceProps) { + constructor(scope: Construct, id: string, props: CustomResourceProps) { super(scope, id, { pascalCaseProperties: true, properties: props.properties, diff --git a/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts b/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts index bb9481d2a75c2..81487ac1470b4 100644 --- a/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts +++ b/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts @@ -1,6 +1,10 @@ import * as sns from '@aws-cdk/aws-sns'; import * as core from '@aws-cdk/core'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Initialization props for the `NestedStack` construct. * @@ -63,7 +67,7 @@ export interface NestedStackProps { * @experimental */ export class NestedStack extends core.NestedStack { - constructor(scope: core.Construct, id: string, props: NestedStackProps = { }) { + constructor(scope: Construct, id: string, props: NestedStackProps = { }) { super(scope, id, { parameters: props.parameters, timeout: props.timeout, diff --git a/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts b/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts index e18bafe3736a8..5d2b63f9b88b0 100644 --- a/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts +++ b/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts @@ -3,6 +3,10 @@ import * as lambda from '@aws-cdk/aws-lambda'; import * as cdk from '@aws-cdk/core'; import { CustomResource, CustomResourceProvider } from '../lib'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /* eslint-disable cdk/no-core-construct */ interface DemoResourceProps { @@ -17,10 +21,10 @@ interface DemoResourceProps { failCreate?: boolean; } -class DemoResource extends cdk.Construct { +class DemoResource extends Construct { public readonly response: string; - constructor(scope: cdk.Construct, id: string, props: DemoResourceProps) { + constructor(scope: Construct, id: string, props: DemoResourceProps) { super(scope, id); const resource = new CustomResource(this, 'Resource', { diff --git a/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts b/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts index 9f90779190d71..7015fe21bf948 100644 --- a/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts +++ b/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts @@ -5,6 +5,10 @@ import * as cdk from '@aws-cdk/core'; import { Test, testCase } from 'nodeunit'; import { CustomResource, CustomResourceProvider } from '../lib'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /* eslint-disable cdk/no-core-construct */ /* eslint-disable quote-props */ @@ -212,10 +216,10 @@ export = testCase({ }, }); -class TestCustomResource extends cdk.Construct { +class TestCustomResource extends Construct { public readonly resource: CustomResource; - constructor(scope: cdk.Construct, id: string, opts: { removalPolicy?: cdk.RemovalPolicy } = {}) { + constructor(scope: Construct, id: string, opts: { removalPolicy?: cdk.RemovalPolicy } = {}) { super(scope, id); const singletonLambda = new lambda.SingletonFunction(this, 'Lambda', { diff --git a/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts b/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts index 948b3390ebea1..518e3e728ec1a 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts +++ b/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts @@ -3,6 +3,10 @@ import * as s3 from '@aws-cdk/aws-s3'; import * as cdk from '@aws-cdk/core'; import { HttpOrigin } from './http-origin'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties to use to customize an S3 Origin. */ @@ -41,7 +45,7 @@ export class S3Origin implements cloudfront.IOrigin { new S3BucketOrigin(bucket, props); } - public bind(scope: cdk.Construct, options: cloudfront.OriginBindOptions): cloudfront.OriginBindConfig { + public bind(scope: Construct, options: cloudfront.OriginBindOptions): cloudfront.OriginBindConfig { return this.origin.bind(scope, options); } } @@ -61,7 +65,7 @@ class S3BucketOrigin extends cloudfront.OriginBase { } } - public bind(scope: cdk.Construct, options: cloudfront.OriginBindOptions): cloudfront.OriginBindConfig { + public bind(scope: Construct, options: cloudfront.OriginBindOptions): cloudfront.OriginBindConfig { if (!this.originAccessIdentity) { // Using a bucket from another stack creates a cyclic reference with // the bucket taking a dependency on the generated S3CanonicalUserId when `grantRead` is called, diff --git a/packages/@aws-cdk/aws-cloudwatch-actions/lib/appscaling.ts b/packages/@aws-cdk/aws-cloudwatch-actions/lib/appscaling.ts index 2241796f47d2b..a37f6badf5ecb 100644 --- a/packages/@aws-cdk/aws-cloudwatch-actions/lib/appscaling.ts +++ b/packages/@aws-cdk/aws-cloudwatch-actions/lib/appscaling.ts @@ -1,6 +1,9 @@ import * as appscaling from '@aws-cdk/aws-applicationautoscaling'; import * as cloudwatch from '@aws-cdk/aws-cloudwatch'; -import * as cdk from '@aws-cdk/core'; + +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; /** * Use an ApplicationAutoScaling StepScalingAction as an Alarm Action @@ -13,7 +16,7 @@ export class ApplicationScalingAction implements cloudwatch.IAlarmAction { * Returns an alarm action configuration to use an ApplicationScaling StepScalingAction * as an alarm action */ - public bind(_scope: cdk.Construct, _alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { + public bind(_scope: Construct, _alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { return { alarmActionArn: this.stepScalingAction.scalingPolicyArn }; } } diff --git a/packages/@aws-cdk/aws-cloudwatch-actions/lib/autoscaling.ts b/packages/@aws-cdk/aws-cloudwatch-actions/lib/autoscaling.ts index 5ec6e62fe246c..2ce075d4cd129 100644 --- a/packages/@aws-cdk/aws-cloudwatch-actions/lib/autoscaling.ts +++ b/packages/@aws-cdk/aws-cloudwatch-actions/lib/autoscaling.ts @@ -1,6 +1,9 @@ import * as autoscaling from '@aws-cdk/aws-autoscaling'; import * as cloudwatch from '@aws-cdk/aws-cloudwatch'; -import * as cdk from '@aws-cdk/core'; + +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; /** * Use an AutoScaling StepScalingAction as an Alarm Action @@ -13,7 +16,7 @@ export class AutoScalingAction implements cloudwatch.IAlarmAction { * Returns an alarm action configuration to use an AutoScaling StepScalingAction * as an alarm action */ - public bind(_scope: cdk.Construct, _alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { + public bind(_scope: Construct, _alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { return { alarmActionArn: this.stepScalingAction.scalingPolicyArn }; } } diff --git a/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts b/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts index 3cc51050341b0..fa900333ef0fa 100644 --- a/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts +++ b/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts @@ -6,6 +6,10 @@ import { Dimension, IMetric, MetricAlarmConfig, MetricConfig, MetricGraphConfig, import { dispatchMetric, metricKey } from './private/metric-util'; import { normalizeStatistic, parseStatistic } from './private/statistic'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + export type DimensionHash = {[dim: string]: any}; /** @@ -351,7 +355,7 @@ export class Metric implements IMetric { * Combines both properties that may adjust the metric (aggregation) as well * as alarm properties. */ - public createAlarm(scope: cdk.Construct, id: string, props: CreateAlarmOptions): Alarm { + public createAlarm(scope: Construct, id: string, props: CreateAlarmOptions): Alarm { return new Alarm(scope, id, { metric: this.with({ statistic: props.statistic, @@ -503,7 +507,7 @@ export class MathExpression implements IMetric { * Combines both properties that may adjust the metric (aggregation) as well * as alarm properties. */ - public createAlarm(scope: cdk.Construct, id: string, props: CreateAlarmOptions): Alarm { + public createAlarm(scope: Construct, id: string, props: CreateAlarmOptions): Alarm { return new Alarm(scope, id, { metric: this.with({ period: props.period, diff --git a/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts b/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts index b3f4c1d6dad61..6cbf5bcfc2f7e 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts @@ -8,6 +8,10 @@ import { ImagePullPrincipalType, IProject, } from './project'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + const mappingName = 'AwsDeepLearningContainersRepositoriesAccounts'; /** @@ -99,7 +103,7 @@ export class LinuxGpuBuildImage implements IBindableBuildImage { this.imageId = `${this.accountExpression}.dkr.ecr.${core.Aws.REGION}.${core.Aws.URL_SUFFIX}/${repositoryName}:${tag}`; } - public bind(scope: core.Construct, project: IProject, _options: BuildImageBindOptions): BuildImageConfig { + public bind(scope: Construct, project: IProject, _options: BuildImageBindOptions): BuildImageConfig { if (!this.account) { const scopeStack = core.Stack.of(scope); // Unfortunately, the account IDs of the DLC repositories are not the same in all regions. diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts index 1ba14d469120d..b4a300d887ad4 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts @@ -4,6 +4,10 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; import { Action } from '../action'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties common to all CloudFormation actions */ @@ -82,7 +86,7 @@ abstract class CloudFormationAction extends Action { this.props = props; } - protected bound(_scope: cdk.Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(_scope: Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { const singletonPolicy = SingletonPolicy.forRole(options.role); @@ -123,7 +127,7 @@ export class CloudFormationExecuteChangeSetAction extends CloudFormationAction { this.props2 = props; } - protected bound(scope: cdk.Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(scope: Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { SingletonPolicy.forRole(options.role).grantExecuteChangeSet(this.props2); @@ -259,7 +263,7 @@ abstract class CloudFormationDeployAction extends CloudFormationAction { return this.getDeploymentRole('property role()'); } - protected bound(scope: cdk.Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(scope: Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { if (this.props2.deploymentRole) { this._deploymentRole = this.props2.deploymentRole; @@ -359,7 +363,7 @@ export class CloudFormationCreateReplaceChangeSetAction extends CloudFormationDe this.props3 = props; } - protected bound(scope: cdk.Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(scope: Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { // the super call order is to preserve the existing order of statements in policies const actionConfig = super.bound(scope, stage, options); @@ -428,7 +432,7 @@ export class CloudFormationCreateUpdateStackAction extends CloudFormationDeployA this.props3 = props; } - protected bound(scope: cdk.Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(scope: Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { // the super call order is to preserve the existing order of statements in policies const actionConfig = super.bound(scope, stage, options); @@ -467,7 +471,7 @@ export class CloudFormationDeleteStackAction extends CloudFormationDeployAction this.props3 = props; } - protected bound(scope: cdk.Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(scope: Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { // the super call order is to preserve the existing order of statements in policies const actionConfig = super.bound(scope, stage, options); @@ -493,7 +497,7 @@ export class CloudFormationDeleteStackAction extends CloudFormationDeployAction * Statements created outside of this class are not considered when adding new * permissions. */ -class SingletonPolicy extends cdk.Construct implements iam.IGrantable { +class SingletonPolicy extends Construct implements iam.IGrantable { /** * Obtain a SingletonPolicy for a given role. * @param role the Role this policy is bound to. diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts index aa2d3be190029..b55d9742c514b 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts @@ -5,6 +5,10 @@ import * as cdk from '@aws-cdk/core'; import { BitBucketSourceAction } from '..'; import { Action } from '../action'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * The type of the CodeBuild action that determines its CodePipeline Category - * Build, or Test. @@ -132,7 +136,7 @@ export class CodeBuildAction extends Action { return this.variableExpression(variableName); } - protected bound(scope: cdk.Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(scope: Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { // check for a cross-account action if there are any outputs if ((this.actionProperties.outputs || []).length > 0) { diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/custom-action-registration.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/custom-action-registration.ts index ae75a1adeb5c0..41e34ac8a0b5d 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/custom-action-registration.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/custom-action-registration.ts @@ -1,5 +1,8 @@ import * as codepipeline from '@aws-cdk/aws-codepipeline'; -import * as cdk from '@aws-cdk/core'; + +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; /** * The creation attributes used for defining a configuration property @@ -109,8 +112,8 @@ export interface CustomActionRegistrationProps { * representing your custom Action, extending the Action class, * and taking the `actionProperties` as properly typed, construction properties. */ -export class CustomActionRegistration extends cdk.Construct { - constructor(parent: cdk.Construct, id: string, props: CustomActionRegistrationProps) { +export class CustomActionRegistration extends Construct { + constructor(parent: Construct, id: string, props: CustomActionRegistrationProps) { super(parent, id); new codepipeline.CfnCustomActionType(this, 'Resource', { diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/jenkins/jenkins-provider.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/jenkins/jenkins-provider.ts index a739fc2f0ec6a..923b1a1e39e7c 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/jenkins/jenkins-provider.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/jenkins/jenkins-provider.ts @@ -3,6 +3,10 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CustomActionRegistration } from '../custom-action-registration'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * A Jenkins provider. * @@ -103,7 +107,7 @@ export interface JenkinsProviderProps { readonly forTest?: boolean; } -export abstract class BaseJenkinsProvider extends cdk.Construct implements IJenkinsProvider { +export abstract class BaseJenkinsProvider extends CoreConstruct implements IJenkinsProvider { public abstract readonly providerName: string; public abstract readonly serverUrl: string; public readonly version: string; diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/manual-approval-action.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/manual-approval-action.ts index 5ddfdb974c4e9..bf91f75b7359b 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/manual-approval-action.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/manual-approval-action.ts @@ -1,9 +1,12 @@ import * as codepipeline from '@aws-cdk/aws-codepipeline'; import * as sns from '@aws-cdk/aws-sns'; import * as subs from '@aws-cdk/aws-sns-subscriptions'; -import * as cdk from '@aws-cdk/core'; import { Action } from './action'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Construction properties of the {@link ManualApprovalAction}. */ @@ -60,7 +63,7 @@ export class ManualApprovalAction extends Action { return this._notificationTopic; } - protected bound(scope: cdk.Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(scope: Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { if (this.props.notificationTopic) { this._notificationTopic = this.props.notificationTopic; diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts index ae05cd093892f..bf6c34ab505a8 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts @@ -4,6 +4,10 @@ import * as stepfunction from '@aws-cdk/aws-stepfunctions'; import * as cdk from '@aws-cdk/core'; import { Action } from '../action'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Represents the input for the StateMachine. */ @@ -121,7 +125,7 @@ export class StepFunctionInvokeAction extends Action { this.props = props; } - protected bound(_scope: cdk.Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): + protected bound(_scope: Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions): codepipeline.ActionConfig { // allow pipeline to invoke this step function options.role.addToPolicy(new iam.PolicyStatement({ diff --git a/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts b/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts index 33a81467a23d9..e52e6c7f68a40 100644 --- a/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts +++ b/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts @@ -2,6 +2,10 @@ import * as kms from '@aws-cdk/aws-kms'; import * as s3 from '@aws-cdk/aws-s3'; import * as cdk from '@aws-cdk/core'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + const REQUIRED_ALIAS_PREFIX = 'alias/'; /** @@ -42,10 +46,10 @@ export interface CrossRegionSupportConstructProps { readonly createKmsKey?: boolean; } -export class CrossRegionSupportConstruct extends cdk.Construct { +export class CrossRegionSupportConstruct extends Construct { public readonly replicationBucket: s3.IBucket; - constructor(scope: cdk.Construct, id: string, props: CrossRegionSupportConstructProps = {}) { + constructor(scope: Construct, id: string, props: CrossRegionSupportConstructProps = {}) { super(scope, id); const createKmsKey = props.createKmsKey ?? true; @@ -114,7 +118,7 @@ export class CrossRegionSupportStack extends cdk.Stack { */ public readonly replicationBucket: s3.IBucket; - constructor(scope: cdk.Construct, id: string, props: CrossRegionSupportStackProps) { + constructor(scope: Construct, id: string, props: CrossRegionSupportStackProps) { super(scope, id, { stackName: generateStackName(props), env: { diff --git a/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts b/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts index a76e2b8940abc..caa9eedec0c4d 100644 --- a/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts +++ b/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts @@ -2,6 +2,10 @@ import * as dynamodb from '@aws-cdk/aws-dynamodb'; import * as cdk from '@aws-cdk/core'; import { GlobalTableCoordinator } from './global-table-coordinator'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for the multiple DynamoDB tables to mash together into a * global table @@ -26,7 +30,7 @@ export interface GlobalTableProps extends cdk.StackProps, dynamodb.TableOptions * * @deprecated use `@aws-cdk/aws-dynamodb.Table.replicationRegions` instead */ -export class GlobalTable extends cdk.Construct { +export class GlobalTable extends Construct { /** * Creates the cloudformation custom resource that launches a lambda to tie it all together */ @@ -37,7 +41,7 @@ export class GlobalTable extends cdk.Construct { */ private readonly _regionalTables = new Array(); - constructor(scope: cdk.Construct, id: string, props: GlobalTableProps) { + constructor(scope: Construct, id: string, props: GlobalTableProps) { super(scope, id); cdk.Annotations.of(this).addWarning('The @aws-cdk/aws-dynamodb-global module has been deprecated in favor of @aws-cdk/aws-dynamodb.Table.replicationRegions'); diff --git a/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts b/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts index 0d1f8c3b42835..0acd9b1cdc3d6 100644 --- a/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts +++ b/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts @@ -4,12 +4,16 @@ import * as lambda from '@aws-cdk/aws-lambda'; import * as cdk from '@aws-cdk/core'; import { GlobalTableProps } from './aws-dynamodb-global'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * A stack that will make a Lambda that will launch a lambda to glue * together all the DynamoDB tables into a global table */ export class GlobalTableCoordinator extends cdk.Stack { - constructor(scope: cdk.Construct, id: string, props: GlobalTableProps) { + constructor(scope: Construct, id: string, props: GlobalTableProps) { super(scope, id, props); const lambdaFunction = new lambda.SingletonFunction(this, 'SingletonLambda', { code: lambda.Code.fromAsset(path.resolve(__dirname, '../', 'lambda-packages', 'aws-global-table-coordinator', 'lib')), diff --git a/packages/@aws-cdk/aws-ec2/test/integ.share-vpcs.lit.ts b/packages/@aws-cdk/aws-ec2/test/integ.share-vpcs.lit.ts index 0ea254d29afa7..e7c65834019cc 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.share-vpcs.lit.ts +++ b/packages/@aws-cdk/aws-ec2/test/integ.share-vpcs.lit.ts @@ -3,13 +3,17 @@ import * as cdk from '@aws-cdk/core'; import * as constructs from 'constructs'; import * as ec2 from '../lib'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + const app = new cdk.App(); interface ConstructThatTakesAVpcProps { vpc: ec2.IVpc; } -class ConstructThatTakesAVpc extends cdk.Construct { +class ConstructThatTakesAVpc extends Construct { constructor(scope: constructs.Construct, id: string, _props: ConstructThatTakesAVpcProps) { super(scope, id); diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts index 3bcade2f49a73..769756999ad0c 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/base/application-load-balanced-service-base.ts @@ -11,6 +11,10 @@ import { LoadBalancerTarget } from '@aws-cdk/aws-route53-targets'; import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Describes the type of DNS record the service should create */ @@ -306,7 +310,7 @@ export interface ApplicationLoadBalancedTaskImageOptions { /** * The base class for ApplicationLoadBalancedEc2Service and ApplicationLoadBalancedFargateService services. */ -export abstract class ApplicationLoadBalancedServiceBase extends cdk.Construct { +export abstract class ApplicationLoadBalancedServiceBase extends CoreConstruct { /** * The desired number of instantiations of the task definition to keep running on the service. @@ -467,7 +471,7 @@ export abstract class ApplicationLoadBalancedServiceBase extends cdk.Construct { /** * Returns the default cluster. */ - protected getDefaultCluster(scope: cdk.Construct, vpc?: IVpc): Cluster { + protected getDefaultCluster(scope: CoreConstruct, vpc?: IVpc): Cluster { // magic string to avoid collision with user-defined constructs const DEFAULT_CLUSTER_ID = `EcsDefaultClusterMnL3mNNYN${vpc ? vpc.node.id : ''}`; const stack = cdk.Stack.of(scope); diff --git a/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts b/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts index 8329db85f2792..ffdcb3b75912a 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts +++ b/packages/@aws-cdk/aws-ecs-patterns/lib/base/network-load-balanced-service-base.ts @@ -7,6 +7,10 @@ import { LoadBalancerTarget } from '@aws-cdk/aws-route53-targets'; import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Describes the type of DNS record the service should create */ @@ -256,7 +260,7 @@ export interface NetworkLoadBalancedTaskImageOptions { /** * The base class for NetworkLoadBalancedEc2Service and NetworkLoadBalancedFargateService services. */ -export abstract class NetworkLoadBalancedServiceBase extends cdk.Construct { +export abstract class NetworkLoadBalancedServiceBase extends CoreConstruct { /** * The desired number of instantiations of the task definition to keep running on the service. */ @@ -361,7 +365,7 @@ export abstract class NetworkLoadBalancedServiceBase extends cdk.Construct { /** * Returns the default cluster. */ - protected getDefaultCluster(scope: cdk.Construct, vpc?: IVpc): Cluster { + protected getDefaultCluster(scope: CoreConstruct, vpc?: IVpc): Cluster { // magic string to avoid collision with user-defined constructs const DEFAULT_CLUSTER_ID = `EcsDefaultClusterMnL3mNNYN${vpc ? vpc.node.id : ''}`; const stack = cdk.Stack.of(scope); diff --git a/packages/@aws-cdk/aws-ecs/lib/container-definition.ts b/packages/@aws-cdk/aws-ecs/lib/container-definition.ts index 1ac4ec541df85..b4d31c56133fc 100644 --- a/packages/@aws-cdk/aws-ecs/lib/container-definition.ts +++ b/packages/@aws-cdk/aws-ecs/lib/container-definition.ts @@ -10,6 +10,10 @@ import { EnvironmentFile, EnvironmentFileConfig } from './environment-file'; import { LinuxParameters } from './linux-parameters'; import { LogDriver, LogDriverConfig } from './log-drivers/log-driver'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * A secret environment variable. */ @@ -301,7 +305,7 @@ export interface ContainerDefinitionProps extends ContainerDefinitionOptions { /** * A container definition is used in a task definition to describe the containers that are launched as part of a task. */ -export class ContainerDefinition extends cdk.Construct { +export class ContainerDefinition extends CoreConstruct { /** * The Linux-specific modifications that are applied to the container, such as Linux kernel capabilities. */ diff --git a/packages/@aws-cdk/aws-ecs/lib/drain-hook/instance-drain-hook.ts b/packages/@aws-cdk/aws-ecs/lib/drain-hook/instance-drain-hook.ts index a11b6dce3bbb8..cb0f9a57d6288 100644 --- a/packages/@aws-cdk/aws-ecs/lib/drain-hook/instance-drain-hook.ts +++ b/packages/@aws-cdk/aws-ecs/lib/drain-hook/instance-drain-hook.ts @@ -9,6 +9,10 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { ICluster } from '../cluster'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + // Reference for the source in this package: // // https://github.com/aws-samples/ecs-refarch-cloudformation/blob/master/infrastructure/lifecyclehook.yaml @@ -49,7 +53,7 @@ export interface InstanceDrainHookProps { /** * A hook to drain instances from ECS traffic before they're terminated */ -export class InstanceDrainHook extends cdk.Construct { +export class InstanceDrainHook extends CoreConstruct { /** * Constructs a new instance of the InstanceDrainHook class. diff --git a/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts b/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts index de738d3c562e3..b033e8783a514 100644 --- a/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts +++ b/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts @@ -3,6 +3,10 @@ import * as cdk from '@aws-cdk/core'; import { ContainerDefinition } from '../container-definition'; import { ContainerImage, ContainerImageConfig } from '../container-image'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * A special type of {@link ContainerImage} that uses an ECR repository for the image, * but a CloudFormation Parameter for the tag of the image in that repository. @@ -21,7 +25,7 @@ export class TagParameterContainerImage extends ContainerImage { this.repository = repository; } - public bind(scope: cdk.Construct, containerDefinition: ContainerDefinition): ContainerImageConfig { + public bind(scope: Construct, containerDefinition: ContainerDefinition): ContainerImageConfig { this.repository.grantPull(containerDefinition.taskDefinition.obtainExecutionRole()); const imageTagParameter = new cdk.CfnParameter(scope, 'ImageTagParam'); this.imageTagParameter = imageTagParameter; diff --git a/packages/@aws-cdk/aws-ecs/lib/linux-parameters.ts b/packages/@aws-cdk/aws-ecs/lib/linux-parameters.ts index 45e792126fd20..b83b208552b95 100644 --- a/packages/@aws-cdk/aws-ecs/lib/linux-parameters.ts +++ b/packages/@aws-cdk/aws-ecs/lib/linux-parameters.ts @@ -2,6 +2,10 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CfnTaskDefinition } from './ecs.generated'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * The properties for defining Linux-specific options that are applied to the container. */ @@ -24,7 +28,7 @@ export interface LinuxParametersProps { /** * Linux-specific options that are applied to the container. */ -export class LinuxParameters extends cdk.Construct { +export class LinuxParameters extends CoreConstruct { /** * Whether the init process is enabled */ diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-certificate.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-certificate.ts index 4dab6b23ba2b0..2ff867a4721a2 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-certificate.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-certificate.ts @@ -1,9 +1,12 @@ -import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CfnListenerCertificate } from '../elasticloadbalancingv2.generated'; import { IListenerCertificate } from '../shared/listener-certificate'; import { IApplicationListener } from './application-listener'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Properties for adding a set of certificates to a listener */ @@ -36,7 +39,7 @@ export interface ApplicationListenerCertificateProps { /** * Add certificates to a listener */ -export class ApplicationListenerCertificate extends cdk.Construct { +export class ApplicationListenerCertificate extends CoreConstruct { constructor(scope: Construct, id: string, props: ApplicationListenerCertificateProps) { super(scope, id); diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-rule.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-rule.ts index edc0e04551f46..e109bc7624f9c 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-rule.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/alb/application-listener-rule.ts @@ -7,6 +7,10 @@ import { ListenerAction } from './application-listener-action'; import { IApplicationTargetGroup } from './application-target-group'; import { ListenerCondition } from './conditions'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Basic properties for defining a rule on a listener */ @@ -194,7 +198,7 @@ export interface RedirectResponse { /** * Define a new listener rule */ -export class ApplicationListenerRule extends cdk.Construct { +export class ApplicationListenerRule extends CoreConstruct { /** * The ARN of this rule */ diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/base-target-group.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/base-target-group.ts index f9155bb1430eb..0ff63805aab90 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/base-target-group.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/base-target-group.ts @@ -5,6 +5,10 @@ import { CfnTargetGroup } from '../elasticloadbalancingv2.generated'; import { Protocol, TargetType } from './enums'; import { Attributes, renderAttributes } from './util'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Basic properties of both Application and Network Target Groups */ @@ -145,7 +149,7 @@ export interface HealthCheck { /** * Define the target of a load balancer */ -export abstract class TargetGroupBase extends cdk.Construct implements ITargetGroup { +export abstract class TargetGroupBase extends CoreConstruct implements ITargetGroup { /** * The ARN of the target group */ diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/imported.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/imported.ts index 52643b49a97cd..59594c636d118 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/imported.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/imported.ts @@ -2,10 +2,14 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { ITargetGroup, TargetGroupImportProps } from './base-target-group'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Base internal class for existing target groups */ -export abstract class ImportedTargetGroupBase extends cdk.Construct implements ITargetGroup { +export abstract class ImportedTargetGroupBase extends CoreConstruct implements ITargetGroup { /** * ARN of the target group */ diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/helpers.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/helpers.ts index 8fa9d3361db33..6378f8ac0c8ed 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/helpers.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/helpers.ts @@ -1,9 +1,12 @@ import * as ec2 from '@aws-cdk/aws-ec2'; -import * as cdk from '@aws-cdk/core'; import * as constructs from 'constructs'; import * as elbv2 from '../lib'; -export class FakeSelfRegisteringTarget extends cdk.Construct implements elbv2.IApplicationLoadBalancerTarget, elbv2.INetworkLoadBalancerTarget, +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + +export class FakeSelfRegisteringTarget extends Construct implements elbv2.IApplicationLoadBalancerTarget, elbv2.INetworkLoadBalancerTarget, ec2.IConnectable { public readonly securityGroup: ec2.SecurityGroup; public readonly connections: ec2.Connections; diff --git a/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts b/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts index 78e0e4e8c5003..bb5a530211719 100644 --- a/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts +++ b/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts @@ -1,7 +1,10 @@ import * as iam from '@aws-cdk/aws-iam'; -import * as cdk from '@aws-cdk/core'; import * as cr from '@aws-cdk/custom-resources'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Construction properties for ElasticsearchAccessPolicy */ @@ -26,7 +29,7 @@ export interface ElasticsearchAccessPolicyProps { * Creates LogGroup resource policies. */ export class ElasticsearchAccessPolicy extends cr.AwsCustomResource { - constructor(scope: cdk.Construct, id: string, props: ElasticsearchAccessPolicyProps) { + constructor(scope: Construct, id: string, props: ElasticsearchAccessPolicyProps) { const policyDocument = new iam.PolicyDocument({ statements: props.accessPolicies, }); diff --git a/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts b/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts index 949f03aa61baa..e53eb9a913540 100644 --- a/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts +++ b/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts @@ -1,7 +1,10 @@ import * as iam from '@aws-cdk/aws-iam'; -import * as cdk from '@aws-cdk/core'; import * as cr from '@aws-cdk/custom-resources'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Construction properties for LogGroupResourcePolicy */ @@ -20,7 +23,7 @@ export interface LogGroupResourcePolicyProps { * Creates LogGroup resource policies. */ export class LogGroupResourcePolicy extends cr.AwsCustomResource { - constructor(scope: cdk.Construct, id: string, props: LogGroupResourcePolicyProps) { + constructor(scope: Construct, id: string, props: LogGroupResourcePolicyProps) { const policyDocument = new iam.PolicyDocument({ statements: props.policyStatements, }); diff --git a/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts b/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts index d0bbaca87f689..a4fdccd042e8f 100644 --- a/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts +++ b/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts @@ -2,6 +2,10 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; import * as cr from '@aws-cdk/custom-resources'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties to configure a log group resource policy */ @@ -20,7 +24,7 @@ export interface LogGroupResourcePolicyProps { * Creates LogGroup resource policies. */ export class LogGroupResourcePolicy extends cr.AwsCustomResource { - constructor(scope: cdk.Construct, id: string, props: LogGroupResourcePolicyProps) { + constructor(scope: Construct, id: string, props: LogGroupResourcePolicyProps) { const policyDocument = new iam.PolicyDocument({ statements: props.policyStatements, }); diff --git a/packages/@aws-cdk/aws-globalaccelerator/lib/endpoint-group.ts b/packages/@aws-cdk/aws-globalaccelerator/lib/endpoint-group.ts index a2532aecdffa0..b5c96bcd547ba 100644 --- a/packages/@aws-cdk/aws-globalaccelerator/lib/endpoint-group.ts +++ b/packages/@aws-cdk/aws-globalaccelerator/lib/endpoint-group.ts @@ -3,6 +3,10 @@ import { Construct } from 'constructs'; import * as ga from './globalaccelerator.generated'; import { IListener } from './listener'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * The interface of the EndpointGroup */ @@ -113,7 +117,7 @@ export interface EndpointGroupProps { /** * The class for endpoint configuration */ -export class EndpointConfiguration extends cdk.Construct { +export class EndpointConfiguration extends CoreConstruct { /** * The property containing all the configuration to be rendered */ diff --git a/packages/@aws-cdk/aws-iam/test/example.attaching.lit.ts b/packages/@aws-cdk/aws-iam/test/example.attaching.lit.ts index 5b04bac60cd3f..f85f7514c91b6 100644 --- a/packages/@aws-cdk/aws-iam/test/example.attaching.lit.ts +++ b/packages/@aws-cdk/aws-iam/test/example.attaching.lit.ts @@ -2,7 +2,11 @@ import * as cdk from '@aws-cdk/core'; import * as constructs from 'constructs'; import { Group, Policy, User } from '../lib'; -export class ExampleConstruct extends cdk.Construct { +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + +export class ExampleConstruct extends Construct { constructor(scope: constructs.Construct, id: string) { super(scope, id); diff --git a/packages/@aws-cdk/aws-iam/test/example.external-id.lit.ts b/packages/@aws-cdk/aws-iam/test/example.external-id.lit.ts index ddbcb4cd5ea07..f13fae1c0837b 100644 --- a/packages/@aws-cdk/aws-iam/test/example.external-id.lit.ts +++ b/packages/@aws-cdk/aws-iam/test/example.external-id.lit.ts @@ -1,8 +1,11 @@ -import * as cdk from '@aws-cdk/core'; import * as constructs from 'constructs'; import * as iam from '../lib'; -export class ExampleConstruct extends cdk.Construct { +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + +export class ExampleConstruct extends Construct { constructor(scope: constructs.Construct, id: string) { super(scope, id); diff --git a/packages/@aws-cdk/aws-iam/test/example.managedpolicy.lit.ts b/packages/@aws-cdk/aws-iam/test/example.managedpolicy.lit.ts index 8eb514aae90da..6e2859ad24a60 100644 --- a/packages/@aws-cdk/aws-iam/test/example.managedpolicy.lit.ts +++ b/packages/@aws-cdk/aws-iam/test/example.managedpolicy.lit.ts @@ -1,8 +1,11 @@ -import * as cdk from '@aws-cdk/core'; import * as constructs from 'constructs'; import { Group, ManagedPolicy } from '../lib'; -export class ExampleConstruct extends cdk.Construct { +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + +export class ExampleConstruct extends Construct { constructor(scope: constructs.Construct, id: string) { super(scope, id); diff --git a/packages/@aws-cdk/aws-iam/test/example.role.lit.ts b/packages/@aws-cdk/aws-iam/test/example.role.lit.ts index 92ff9d2a96127..0a2c6eb9ecb48 100644 --- a/packages/@aws-cdk/aws-iam/test/example.role.lit.ts +++ b/packages/@aws-cdk/aws-iam/test/example.role.lit.ts @@ -1,8 +1,11 @@ -import * as cdk from '@aws-cdk/core'; import * as constructs from 'constructs'; import { PolicyStatement, Role, ServicePrincipal } from '../lib'; -export class ExampleConstruct extends cdk.Construct { +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + +export class ExampleConstruct extends Construct { constructor(scope: constructs.Construct, id: string) { super(scope, id); diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/function.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/function.ts index 5e4e160eaa717..680a6f7330356 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/function.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/function.ts @@ -1,11 +1,14 @@ import * as fs from 'fs'; import * as path from 'path'; import * as lambda from '@aws-cdk/aws-lambda'; -import * as cdk from '@aws-cdk/core'; import { Bundling } from './bundling'; import { BundlingOptions } from './types'; import { callsites, findUp, LockFile, nodeMajorVersion } from './util'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for a NodejsFunction */ @@ -76,7 +79,7 @@ export interface NodejsFunctionProps extends lambda.FunctionOptions { * A Node.js Lambda function bundled using esbuild */ export class NodejsFunction extends lambda.Function { - constructor(scope: cdk.Construct, id: string, props: NodejsFunctionProps = {}) { + constructor(scope: Construct, id: string, props: NodejsFunctionProps = {}) { if (props.runtime && props.runtime.family !== lambda.RuntimeFamily.NODEJS) { throw new Error('Only `NODEJS` runtimes are supported.'); } diff --git a/packages/@aws-cdk/aws-lambda-python/lib/function.ts b/packages/@aws-cdk/aws-lambda-python/lib/function.ts index 77f794704e967..267245738cbe6 100644 --- a/packages/@aws-cdk/aws-lambda-python/lib/function.ts +++ b/packages/@aws-cdk/aws-lambda-python/lib/function.ts @@ -1,9 +1,12 @@ import * as fs from 'fs'; import * as path from 'path'; import * as lambda from '@aws-cdk/aws-lambda'; -import * as cdk from '@aws-cdk/core'; import { bundle } from './bundling'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for a PythonFunction */ @@ -40,7 +43,7 @@ export interface PythonFunctionProps extends lambda.FunctionOptions { * A Python Lambda function */ export class PythonFunction extends lambda.Function { - constructor(scope: cdk.Construct, id: string, props: PythonFunctionProps) { + constructor(scope: Construct, id: string, props: PythonFunctionProps) { if (props.runtime && props.runtime.family !== lambda.RuntimeFamily.PYTHON) { throw new Error('Only `PYTHON` runtimes are supported.'); } diff --git a/packages/@aws-cdk/aws-lambda-python/lib/layer.ts b/packages/@aws-cdk/aws-lambda-python/lib/layer.ts index 8b090eed6a989..3299781bb413c 100644 --- a/packages/@aws-cdk/aws-lambda-python/lib/layer.ts +++ b/packages/@aws-cdk/aws-lambda-python/lib/layer.ts @@ -1,8 +1,11 @@ import * as path from 'path'; import * as lambda from '@aws-cdk/aws-lambda'; -import * as cdk from '@aws-cdk/core'; import { bundle } from './bundling'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Properties for PythonLayerVersion */ @@ -26,7 +29,7 @@ export interface PythonLayerVersionProps extends lambda.LayerVersionOptions { * @experimental */ export class PythonLayerVersion extends lambda.LayerVersion { - constructor(scope: cdk.Construct, id: string, props: PythonLayerVersionProps) { + constructor(scope: Construct, id: string, props: PythonLayerVersionProps) { const compatibleRuntimes = props.compatibleRuntimes ?? [lambda.Runtime.PYTHON_3_7]; // Ensure that all compatible runtimes are python diff --git a/packages/@aws-cdk/aws-lambda/lib/code.ts b/packages/@aws-cdk/aws-lambda/lib/code.ts index b2323008bb5fd..29cd3d02ae4de 100644 --- a/packages/@aws-cdk/aws-lambda/lib/code.ts +++ b/packages/@aws-cdk/aws-lambda/lib/code.ts @@ -5,6 +5,10 @@ import * as s3 from '@aws-cdk/aws-s3'; import * as s3_assets from '@aws-cdk/aws-s3-assets'; import * as cdk from '@aws-cdk/core'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Represents the Lambda Handler Code. */ @@ -112,7 +116,7 @@ export abstract class Code { * @param scope The binding scope. Don't be smart about trying to down-cast or * assume it's initialized. You may just use it as a construct scope. */ - public abstract bind(scope: cdk.Construct): CodeConfig; + public abstract bind(scope: Construct): CodeConfig; /** * Called after the CFN function resource has been created to allow the code @@ -191,7 +195,7 @@ export class S3Code extends Code { this.bucketName = bucket.bucketName; } - public bind(_scope: cdk.Construct): CodeConfig { + public bind(_scope: Construct): CodeConfig { return { s3Location: { bucketName: this.bucketName, @@ -220,7 +224,7 @@ export class InlineCode extends Code { } } - public bind(_scope: cdk.Construct): CodeConfig { + public bind(_scope: Construct): CodeConfig { return { inlineCode: this.code, }; @@ -241,7 +245,7 @@ export class AssetCode extends Code { super(); } - public bind(scope: cdk.Construct): CodeConfig { + public bind(scope: Construct): CodeConfig { // If the same AssetCode is used multiple times, retain only the first instantiation. if (!this.asset) { this.asset = new s3_assets.Asset(scope, 'Code', { @@ -327,7 +331,7 @@ export class CfnParametersCode extends Code { this._objectKeyParam = props.objectKeyParam; } - public bind(scope: cdk.Construct): CodeConfig { + public bind(scope: Construct): CodeConfig { if (!this._bucketNameParam) { this._bucketNameParam = new cdk.CfnParameter(scope, 'LambdaSourceBucketNameParameter', { type: 'String', @@ -422,7 +426,7 @@ export class EcrImageCode extends Code { super(); } - public bind(_: cdk.Construct): CodeConfig { + public bind(_: Construct): CodeConfig { this.repository.grantPull(new iam.ServicePrincipal('lambda.amazonaws.com')); return { @@ -467,7 +471,7 @@ export class AssetImageCode extends Code { super(); } - public bind(scope: cdk.Construct): CodeConfig { + public bind(scope: Construct): CodeConfig { const asset = new ecr_assets.DockerImageAsset(scope, 'AssetImage', { directory: this.directory, ...this.props, diff --git a/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts b/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts index f9dfefdfed9f6..2d024ad8e88e1 100644 --- a/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts +++ b/packages/@aws-cdk/aws-logs/lib/cross-account-destination.ts @@ -5,6 +5,10 @@ import { ILogGroup } from './log-group'; import { CfnDestination } from './logs.generated'; import { ILogSubscriptionDestination, LogSubscriptionDestinationConfig } from './subscription-filter'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Properties for a CrossAccountDestination */ @@ -93,7 +97,7 @@ export class CrossAccountDestination extends cdk.Resource implements ILogSubscri this.policyDocument.addStatements(statement); } - public bind(_scope: cdk.Construct, _sourceLogGroup: ILogGroup): LogSubscriptionDestinationConfig { + public bind(_scope: CoreConstruct, _sourceLogGroup: ILogGroup): LogSubscriptionDestinationConfig { return { arn: this.destinationArn }; } diff --git a/packages/@aws-cdk/aws-logs/lib/log-retention.ts b/packages/@aws-cdk/aws-logs/lib/log-retention.ts index 44f36e5891cbe..4056c0a0f09c9 100644 --- a/packages/@aws-cdk/aws-logs/lib/log-retention.ts +++ b/packages/@aws-cdk/aws-logs/lib/log-retention.ts @@ -5,6 +5,10 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { RetentionDays } from './log-group'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Construction properties for a LogRetention. */ @@ -65,7 +69,7 @@ export interface LogRetentionRetryOptions { * Log group can be created in the region that is different from stack region by * specifying `logGroupRegion` */ -export class LogRetention extends cdk.Construct { +export class LogRetention extends CoreConstruct { /** * The ARN of the LogGroup. @@ -124,7 +128,7 @@ export class LogRetention extends cdk.Construct { /** * Private provider Lambda function to support the log retention custom resource. */ -class LogRetentionFunction extends cdk.Construct { +class LogRetentionFunction extends CoreConstruct { public readonly functionArn: cdk.Reference; constructor(scope: Construct, id: string, props: LogRetentionProps) { diff --git a/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts b/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts index 9905362f4669a..9c2645f64ab43 100644 --- a/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts +++ b/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts @@ -1,10 +1,13 @@ import * as iam from '@aws-cdk/aws-iam'; import * as secretsmanager from '@aws-cdk/aws-secretsmanager'; -import * as core from '@aws-cdk/core'; import { IEngine } from './engine'; import { EngineVersion } from './engine-version'; import { IParameterGroup, ParameterGroup } from './parameter-group'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * The extra options passed to the {@link IClusterEngine.bindToCluster} method. */ @@ -97,7 +100,7 @@ export interface IClusterEngine extends IEngine { /** * Method called when the engine is used to create a new cluster. */ - bindToCluster(scope: core.Construct, options: ClusterEngineBindOptions): ClusterEngineConfig; + bindToCluster(scope: Construct, options: ClusterEngineBindOptions): ClusterEngineConfig; } interface ClusterEngineBaseProps { @@ -130,7 +133,7 @@ abstract class ClusterEngineBase implements IClusterEngine { this.parameterGroupFamily = this.engineVersion ? `${this.engineType}${this.engineVersion.majorVersion}` : undefined; } - public bindToCluster(scope: core.Construct, options: ClusterEngineBindOptions): ClusterEngineConfig { + public bindToCluster(scope: Construct, options: ClusterEngineBindOptions): ClusterEngineConfig { const parameterGroup = options.parameterGroup ?? this.defaultParameterGroup(scope); return { parameterGroup, @@ -144,7 +147,7 @@ abstract class ClusterEngineBase implements IClusterEngine { * possibly an imported one, * if one wasn't provided by the customer explicitly. */ - protected abstract defaultParameterGroup(scope: core.Construct): IParameterGroup | undefined; + protected abstract defaultParameterGroup(scope: Construct): IParameterGroup | undefined; } interface MysqlClusterEngineBaseProps { @@ -166,7 +169,7 @@ abstract class MySqlClusterEngineBase extends ClusterEngineBase { }); } - public bindToCluster(scope: core.Construct, options: ClusterEngineBindOptions): ClusterEngineConfig { + public bindToCluster(scope: Construct, options: ClusterEngineBindOptions): ClusterEngineConfig { const config = super.bindToCluster(scope, options); const parameterGroup = options.parameterGroup ?? (options.s3ImportRole || options.s3ExportRole ? new ParameterGroup(scope, 'ClusterParameterGroup', { @@ -271,7 +274,7 @@ class AuroraClusterEngine extends MySqlClusterEngineBase { }); } - protected defaultParameterGroup(_scope: core.Construct): IParameterGroup | undefined { + protected defaultParameterGroup(_scope: Construct): IParameterGroup | undefined { // the default.aurora5.6 ParameterGroup is actually the default, // so just return undefined in this case return undefined; @@ -380,7 +383,7 @@ class AuroraMysqlClusterEngine extends MySqlClusterEngineBase { }); } - protected defaultParameterGroup(scope: core.Construct): IParameterGroup | undefined { + protected defaultParameterGroup(scope: Construct): IParameterGroup | undefined { return ParameterGroup.fromParameterGroupName(scope, 'AuroraMySqlDatabaseClusterEngineDefaultParameterGroup', `default.${this.parameterGroupFamily}`); } @@ -536,7 +539,7 @@ class AuroraPostgresClusterEngine extends ClusterEngineBase { }); } - public bindToCluster(scope: core.Construct, options: ClusterEngineBindOptions): ClusterEngineConfig { + public bindToCluster(scope: Construct, options: ClusterEngineBindOptions): ClusterEngineConfig { const config = super.bindToCluster(scope, options); // skip validation for unversioned as it might be supported/unsupported. we cannot reliably tell at compile-time if (this.engineVersion?.fullVersion) { @@ -550,7 +553,7 @@ class AuroraPostgresClusterEngine extends ClusterEngineBase { return config; } - protected defaultParameterGroup(scope: core.Construct): IParameterGroup | undefined { + protected defaultParameterGroup(scope: Construct): IParameterGroup | undefined { if (!this.parameterGroupFamily) { throw new Error('Could not create a new ParameterGroup for an unversioned aurora-postgresql cluster engine. ' + 'Please either use a versioned engine, or pass an explicit ParameterGroup when creating the cluster'); diff --git a/packages/@aws-cdk/aws-rds/lib/instance-engine.ts b/packages/@aws-cdk/aws-rds/lib/instance-engine.ts index f3f41a00df8b7..e2e425eb71736 100644 --- a/packages/@aws-cdk/aws-rds/lib/instance-engine.ts +++ b/packages/@aws-cdk/aws-rds/lib/instance-engine.ts @@ -1,10 +1,13 @@ import * as iam from '@aws-cdk/aws-iam'; import * as secretsmanager from '@aws-cdk/aws-secretsmanager'; -import * as core from '@aws-cdk/core'; import { IEngine } from './engine'; import { EngineVersion } from './engine-version'; import { IOptionGroup, OptionGroup } from './option-group'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * The options passed to {@link IInstanceEngine.bind}. */ @@ -100,7 +103,7 @@ export interface IInstanceEngine extends IEngine { /** * Method called when the engine is used to create a new instance. */ - bindToInstance(scope: core.Construct, options: InstanceEngineBindOptions): InstanceEngineConfig; + bindToInstance(scope: Construct, options: InstanceEngineBindOptions): InstanceEngineConfig; } interface InstanceEngineBaseProps { @@ -134,7 +137,7 @@ abstract class InstanceEngineBase implements IInstanceEngine { this.engineFamily = props.engineFamily; } - public bindToInstance(_scope: core.Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { + public bindToInstance(_scope: Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { if (options.timezone && !this.supportsTimezone) { throw new Error(`timezone property can not be configured for ${this.engineType}`); } @@ -261,7 +264,7 @@ class MariaDbInstanceEngine extends InstanceEngineBase { }); } - public bindToInstance(scope: core.Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { + public bindToInstance(scope: Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { if (options.domain) { throw new Error(`domain property cannot be configured for ${this.engineType}`); } @@ -828,7 +831,7 @@ abstract class OracleInstanceEngineBase extends InstanceEngineBase { }); } - public bindToInstance(scope: core.Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { + public bindToInstance(scope: Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { const config = super.bindToInstance(scope, options); let optionGroup = options.optionGroup; @@ -1097,7 +1100,7 @@ abstract class SqlServerInstanceEngineBase extends InstanceEngineBase { }); } - public bindToInstance(scope: core.Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { + public bindToInstance(scope: Construct, options: InstanceEngineBindOptions): InstanceEngineConfig { const config = super.bindToInstance(scope, options); let optionGroup = options.optionGroup; diff --git a/packages/@aws-cdk/aws-s3-assets/lib/asset.ts b/packages/@aws-cdk/aws-s3-assets/lib/asset.ts index cc730b82170de..938778d1381f4 100644 --- a/packages/@aws-cdk/aws-s3-assets/lib/asset.ts +++ b/packages/@aws-cdk/aws-s3-assets/lib/asset.ts @@ -9,6 +9,10 @@ import * as cxapi from '@aws-cdk/cx-api'; import { Construct } from 'constructs'; import { toSymlinkFollow } from './compat'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + const ARCHIVE_EXTENSIONS = ['.zip', '.jar']; export interface AssetOptions extends assets.CopyOptions, cdk.AssetOptions { @@ -54,7 +58,7 @@ export interface AssetProps extends AssetOptions { * An asset represents a local file or directory, which is automatically uploaded to S3 * and then can be referenced within a CDK application. */ -export class Asset extends cdk.Construct implements cdk.IAsset { +export class Asset extends CoreConstruct implements cdk.IAsset { /** * Attribute that represents the name of the bucket this asset exists in. */ diff --git a/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts b/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts index 352f350b91600..9e1c20ae02ef7 100644 --- a/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts +++ b/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts @@ -9,6 +9,10 @@ import { AwsCliLayer } from '@aws-cdk/lambda-layer-awscli'; import { Construct } from 'constructs'; import { ISource, SourceConfig } from './source'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + export interface BucketDeploymentProps { /** * The sources from which to deploy the contents of this bucket. @@ -175,7 +179,7 @@ export interface BucketDeploymentProps { readonly vpcSubnets?: ec2.SubnetSelection; } -export class BucketDeployment extends cdk.Construct { +export class BucketDeployment extends CoreConstruct { constructor(scope: Construct, id: string, props: BucketDeploymentProps) { super(scope, id); diff --git a/packages/@aws-cdk/aws-s3-deployment/lib/source.ts b/packages/@aws-cdk/aws-s3-deployment/lib/source.ts index 6f0f877662891..558c32556c25c 100644 --- a/packages/@aws-cdk/aws-s3-deployment/lib/source.ts +++ b/packages/@aws-cdk/aws-s3-deployment/lib/source.ts @@ -1,7 +1,10 @@ import * as iam from '@aws-cdk/aws-iam'; import * as s3 from '@aws-cdk/aws-s3'; import * as s3_assets from '@aws-cdk/aws-s3-assets'; -import * as cdk from '@aws-cdk/core'; + +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; export interface SourceConfig { /** @@ -33,7 +36,7 @@ export interface ISource { * Binds the source to a bucket deployment. * @param scope The construct tree context. */ - bind(scope: cdk.Construct, context?: DeploymentSourceContext): SourceConfig; + bind(scope: Construct, context?: DeploymentSourceContext): SourceConfig; } /** @@ -54,7 +57,7 @@ export class Source { */ public static bucket(bucket: s3.IBucket, zipObjectKey: string): ISource { return { - bind: (_: cdk.Construct, context?: DeploymentSourceContext) => { + bind: (_: Construct, context?: DeploymentSourceContext) => { if (!context) { throw new Error('To use a Source.bucket(), context must be provided'); } @@ -71,7 +74,7 @@ export class Source { */ public static asset(path: string, options?: s3_assets.AssetOptions): ISource { return { - bind(scope: cdk.Construct, context?: DeploymentSourceContext): SourceConfig { + bind(scope: Construct, context?: DeploymentSourceContext): SourceConfig { if (!context) { throw new Error('To use a Source.asset(), context must be provided'); } diff --git a/packages/@aws-cdk/aws-s3/lib/destination.ts b/packages/@aws-cdk/aws-s3/lib/destination.ts index 31a7ac94ef9ac..021aa80a803c4 100644 --- a/packages/@aws-cdk/aws-s3/lib/destination.ts +++ b/packages/@aws-cdk/aws-s3/lib/destination.ts @@ -1,6 +1,10 @@ import * as cdk from '@aws-cdk/core'; import { IBucket } from './bucket'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Implemented by constructs that can be used as bucket notification destinations. */ @@ -12,7 +16,7 @@ export interface IBucketNotificationDestination { * idempotency in each destination. * @param bucket The bucket object to bind to */ - bind(scope: cdk.Construct, bucket: IBucket): BucketNotificationDestinationConfig; + bind(scope: Construct, bucket: IBucket): BucketNotificationDestinationConfig; } /** diff --git a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts index 4ceced2e93e2d..cd7427a5cbc6f 100644 --- a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts +++ b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts @@ -1,6 +1,10 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * A Lambda-based custom resource handler that provisions S3 bucket * notifications for a bucket. @@ -18,14 +22,14 @@ import * as cdk from '@aws-cdk/core'; * Sadly, we can't use @aws-cdk/aws-lambda as it will introduce a dependency * cycle, so this uses raw `cdk.Resource`s. */ -export class NotificationsResourceHandler extends cdk.Construct { +export class NotificationsResourceHandler extends Construct { /** * Defines a stack-singleton lambda function with the logic for a CloudFormation custom * resource that provisions bucket notification configuration for a bucket. * * @returns The ARN of the custom resource lambda function. */ - public static singleton(context: cdk.Construct) { + public static singleton(context: Construct) { const root = cdk.Stack.of(context); // well-known logical id to ensure stack singletonity @@ -44,7 +48,7 @@ export class NotificationsResourceHandler extends cdk.Construct { */ public readonly functionArn: string; - constructor(scope: cdk.Construct, id: string) { + constructor(scope: Construct, id: string) { super(scope, id); const role = new iam.Role(this, 'Role', { diff --git a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts index 91bb688b28857..3c2194ddf7eb9 100644 --- a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts +++ b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts @@ -3,6 +3,10 @@ import { Bucket, EventType, NotificationKeyFilter } from '../bucket'; import { BucketNotificationDestinationType, IBucketNotificationDestination } from '../destination'; import { NotificationsResourceHandler } from './notifications-resource-handler'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + interface NotificationsProps { /** * The bucket to manage notifications for. @@ -28,14 +32,14 @@ interface NotificationsProps { * @see * https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html */ -export class BucketNotifications extends cdk.Construct { +export class BucketNotifications extends Construct { private readonly lambdaNotifications = new Array(); private readonly queueNotifications = new Array(); private readonly topicNotifications = new Array(); private resource?: cdk.CfnResource; private readonly bucket: Bucket; - constructor(scope: cdk.Construct, id: string, props: NotificationsProps) { + constructor(scope: Construct, id: string, props: NotificationsProps) { super(scope, id); this.bucket = props.bucket; } diff --git a/packages/@aws-cdk/aws-stepfunctions/lib/state-machine-fragment.ts b/packages/@aws-cdk/aws-stepfunctions/lib/state-machine-fragment.ts index 929aed5b22219..0103ceb735499 100644 --- a/packages/@aws-cdk/aws-stepfunctions/lib/state-machine-fragment.ts +++ b/packages/@aws-cdk/aws-stepfunctions/lib/state-machine-fragment.ts @@ -1,13 +1,16 @@ -import * as cdk from '@aws-cdk/core'; import { Chain } from './chain'; import { Parallel, ParallelProps } from './states/parallel'; import { State } from './states/state'; import { IChainable, INextable } from './types'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct } from '@aws-cdk/core'; + /** * Base class for reusable state machine fragments */ -export abstract class StateMachineFragment extends cdk.Construct implements IChainable { +export abstract class StateMachineFragment extends Construct implements IChainable { /** * The start state of this state machine fragment */ diff --git a/packages/@aws-cdk/aws-stepfunctions/lib/states/state.ts b/packages/@aws-cdk/aws-stepfunctions/lib/states/state.ts index c43a7bec159a8..02cceb6e64ed2 100644 --- a/packages/@aws-cdk/aws-stepfunctions/lib/states/state.ts +++ b/packages/@aws-cdk/aws-stepfunctions/lib/states/state.ts @@ -1,10 +1,13 @@ -import * as cdk from '@aws-cdk/core'; import { IConstruct, Construct, Node } from 'constructs'; import { Condition } from '../condition'; import { JsonPath } from '../fields'; import { StateGraph } from '../state-graph'; import { CatchProps, Errors, IChainable, INextable, RetryProps } from '../types'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Properties shared by all states */ @@ -60,7 +63,7 @@ export interface StateProps { /** * Base class for all other state classes */ -export abstract class State extends cdk.Construct implements IChainable { +export abstract class State extends CoreConstruct implements IChainable { /** * Add a prefix to the stateId of all States found in a construct tree */ diff --git a/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts b/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts index 7a6e48a583d69..3a92062b779cb 100644 --- a/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts +++ b/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts @@ -7,6 +7,10 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { PHYSICAL_RESOURCE_ID_REFERENCE, flatten } from './runtime'; +// keep this import separate from other imports to reduce chance for merge conflicts with v2-main +// eslint-disable-next-line no-duplicate-imports, import/order +import { Construct as CoreConstruct } from '@aws-cdk/core'; + /** * Reference to the physical resource id that can be passed to the AWS operation as a parameter. */ @@ -274,7 +278,7 @@ export interface AwsCustomResourceProps { * You can specify exactly which calls are invoked for the 'CREATE', 'UPDATE' and 'DELETE' life cycle events. * */ -export class AwsCustomResource extends cdk.Construct implements iam.IGrantable { +export class AwsCustomResource extends CoreConstruct implements iam.IGrantable { private static breakIgnoreErrorsCircuit(sdkCalls: Array, caller: string) { diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 9b5c9e5580d99..8fe9748d9a862 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -277,8 +277,6 @@ "@aws-cdk/pipelines": "0.0.0", "@aws-cdk/region-info": "0.0.0", "@aws-cdk/yaml-cfn": "0.0.0", - "@aws-cdk/lambda-layer-awscli": "0.0.0", - "@aws-cdk/lambda-layer-kubectl": "0.0.0", "@types/fs-extra": "^8.1.1", "@types/node": "^10.17.48", "cdk-build-tools": "0.0.0", diff --git a/tools/cdk-build-tools/bin/cdk-build.ts b/tools/cdk-build-tools/bin/cdk-build.ts index d745de50aa2be..b4a5b38542292 100644 --- a/tools/cdk-build-tools/bin/cdk-build.ts +++ b/tools/cdk-build-tools/bin/cdk-build.ts @@ -26,9 +26,14 @@ async function main() { }) .option('gen', { type: 'boolean', - desc: 'execute gen script', + desc: 'Execute gen script', default: true, }) + .option('fix', { + type: 'boolean', + desc: 'Fix linter errors', + default: false, + }) .argv; const options = cdkBuildOptions(); @@ -46,7 +51,7 @@ async function main() { const overrides: CompilerOverrides = { eslint: args.eslint, jsii: args.jsii, tsc: args.tsc }; await compileCurrentPackage(options, timers, overrides); - await lintCurrentPackage(options, overrides); + await lintCurrentPackage(options, { ...overrides, fix: args.fix }); if (options.post) { await shell(options.post, { timers, env }); diff --git a/tools/cdk-build-tools/config/eslintrc.js b/tools/cdk-build-tools/config/eslintrc.js index 63608e69161a3..446af2c2e2ff4 100644 --- a/tools/cdk-build-tools/config/eslintrc.js +++ b/tools/cdk-build-tools/config/eslintrc.js @@ -42,6 +42,7 @@ module.exports = { ignorePatterns: ['*.js', '*.d.ts', 'node_modules/', '*.generated.ts'], rules: { 'cdk/no-core-construct': [ 'error' ], + 'cdk/no-qualified-construct': [ 'error' ], // Require use of the `import { foo } from 'bar';` form instead of `import foo = require('bar');` '@typescript-eslint/no-require-imports': ['error'], '@typescript-eslint/indent': ['error', 2], diff --git a/tools/eslint-plugin-cdk/lib/index.ts b/tools/eslint-plugin-cdk/lib/index.ts index aae510df35d54..94eef4dd8f57f 100644 --- a/tools/eslint-plugin-cdk/lib/index.ts +++ b/tools/eslint-plugin-cdk/lib/index.ts @@ -1,3 +1,4 @@ export const rules = { 'no-core-construct': require('./rules/no-core-construct'), + 'no-qualified-construct': require('./rules/no-qualified-construct'), }; diff --git a/tools/eslint-plugin-cdk/lib/private/import-cache.ts b/tools/eslint-plugin-cdk/lib/private/import-cache.ts index 7d78b2a421e93..04325645fdb5d 100644 --- a/tools/eslint-plugin-cdk/lib/private/import-cache.ts +++ b/tools/eslint-plugin-cdk/lib/private/import-cache.ts @@ -29,6 +29,10 @@ export class ImportCache { public find(key: ImportCacheKey): ImportCacheRecord | undefined { return this.records[hashed(key)]; } + + public get imports(): ImportCacheRecord[] { + return Object.values(this.records); + } } function hashed(key: {}): string { diff --git a/tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts b/tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts new file mode 100644 index 0000000000000..eb8a418cab58e --- /dev/null +++ b/tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts @@ -0,0 +1,134 @@ +// +// This rule ensures that the `@aws-cdk/core.Construct` class is always +// referenced without a namespace qualifier (`Construct` instead of +// `xxx.Construct`). The fixer will automatically add an `import` statement +// separated from the main import group to reduce the chance for merge conflicts +// with v2-main. +// +// If there is already an import of `constructs.Construct` under the name +// `Construct`, we will import `core.Construct` as the alias `CoreConstruct` +// instead. +// + +import { AST, Rule } from 'eslint'; +import { ImportCache } from '../private/import-cache'; + +const importCache = new ImportCache(); + +export function create(context: Rule.RuleContext): Rule.NodeListener { + // skip core + if (context.getFilename().includes('@aws-cdk/core')) { + return {}; + } + + return { + // collect all "import" statements. we will later use them to determine + // exactly how to import `core.Construct`. + ImportDeclaration: node => { + for (const s of node.specifiers) { + const typeName = () => { + switch (s.type) { + case 'ImportSpecifier': return s.imported.name; + case 'ImportDefaultSpecifier': return s.local.name; + case 'ImportNamespaceSpecifier': return s.local.name; + } + }; + + importCache.record({ + fileName: context.getFilename(), + typeName: typeName(), + importNode: node, + localName: `${node.source.value}.${s.local.name}` + }); + } + }, + + // this captures `class X extends xxx.Construct` + ClassDeclaration: node => { + if (node.superClass?.type === 'MemberExpression') { + const sc = node.superClass; + // const qualifier = sc.object.type === 'Identifier' ? sc.object.name : undefined; + const baseClass = sc.property.type === 'Identifier' ? sc.property.name : undefined; + if (baseClass === 'Construct' && sc.range) { + report(context, node, sc.range); + } + } + }, + + // this captures using `xxx.Construct` as an identifier + Identifier: node => { + const typeAnnotation = (node as any).typeAnnotation?.typeAnnotation; + const type = typeAnnotation?.typeName; + if (type?.type === 'TSQualifiedName' && type?.right.name === 'Construct' && type?.left.name !== 'constructs') { + report(context, node, typeAnnotation.range); + } + }, + } +} + +/** + * Reports an error indicating that we found `xxx.Construct` usage, and apply + * the appropriate fix. + * @param context Rule context + * @param node Rule node (for the report) + * @param replaceRange Text range to replace + */ +function report(context: Rule.RuleContext, node: Rule.Node, replaceRange: AST.Range) { + context.report({ + message: 'To avoid merge conflicts with the v2-main branch, the "Construct" type must be referenced without a qualifier (e.g. "Construct" instead of "CoreConstruct")', + node, + fix: fixer => { + const imports = importCache.imports.filter(x => x.fileName === context.getFilename()); + const findImport = (x: string) => imports.find(i => i.localName === x); + + const coreConstruct = findImport('@aws-cdk/core.Construct') + const coreCoreConstruct = findImport('@aws-cdk/core.CoreConstruct'); + const constructsConstruct = findImport('constructs.Construct'); + + // determines whether we will replace with `Construct` or `CoreConstruct` + // based on whether this file already imported `constructs.Construct`. + let replaceBy: string | undefined; + + // determines whether an "import" statement should be added and it's + // contents. + let addImport: string | undefined; + + if (coreConstruct) { + // we already import `core.Construct` as `Construct` + replaceBy = 'Construct'; + } else if (coreCoreConstruct) { + // we already import `core.Construct` as `CoreConstruct` + replaceBy = 'CoreConstruct' + } else if (constructsConstruct) { + // we import `constructs.Construct`, so import and replace + // `core.Construct` with `CoreConstruct` + replaceBy = 'CoreConstruct'; + addImport = `import { Construct as ${replaceBy} } from '@aws-cdk/core';`; + } else { + // import `core.Construct` as `Construct` and replace + replaceBy = 'Construct'; + addImport = `import { ${replaceBy} } from '@aws-cdk/core';`; + } + + const fixes: Rule.Fix[] = [ + fixer.replaceTextRange(replaceRange, replaceBy) + ]; + + if (addImport) { + // find the last import statement in the file and add our import immediately after + const lastImport = imports[imports.length - 1]; + if (lastImport) { + fixes.push(fixer.insertTextAfter(lastImport.importNode, [ + "", + "", + "// keep this import separate from other imports to reduce chance for merge conflicts with v2-main", + "// eslint-disable-next-line no-duplicate-imports, import/order", + addImport, + ].join('\n'))); + } + } + + return fixes; + }, + }); +} \ No newline at end of file From f5ade6e821e618763cff111251440958ea9fcd54 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 15 Jan 2021 14:01:50 +0000 Subject: [PATCH 41/54] chore(deps): bump aws-sdk from 2.827.0 to 2.828.0 (#12533) Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.827.0 to 2.828.0. - [Release notes](https://github.com/aws/aws-sdk-js/releases) - [Changelog](https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-js/compare/v2.827.0...v2.828.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- packages/@aws-cdk/aws-cloudfront-origins/package.json | 2 +- packages/@aws-cdk/aws-cloudfront/package.json | 2 +- packages/@aws-cdk/aws-cloudtrail/package.json | 2 +- packages/@aws-cdk/aws-codebuild/package.json | 2 +- packages/@aws-cdk/aws-codecommit/package.json | 2 +- packages/@aws-cdk/aws-dynamodb/package.json | 2 +- packages/@aws-cdk/aws-eks/package.json | 2 +- packages/@aws-cdk/aws-events-targets/package.json | 2 +- packages/@aws-cdk/aws-logs/package.json | 2 +- packages/@aws-cdk/aws-route53/package.json | 2 +- packages/@aws-cdk/aws-sqs/package.json | 2 +- packages/@aws-cdk/custom-resources/package.json | 2 +- packages/aws-cdk/package.json | 2 +- packages/cdk-assets/package.json | 2 +- yarn.lock | 8 ++++---- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/@aws-cdk/aws-cloudfront-origins/package.json b/packages/@aws-cdk/aws-cloudfront-origins/package.json index f2d620b5f80d7..b3419cd50dc72 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/package.json +++ b/packages/@aws-cdk/aws-cloudfront-origins/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "pkglint": "0.0.0" diff --git a/packages/@aws-cdk/aws-cloudfront/package.json b/packages/@aws-cdk/aws-cloudfront/package.json index 47af43c3bf2ca..4f5ec15954600 100644 --- a/packages/@aws-cdk/aws-cloudfront/package.json +++ b/packages/@aws-cdk/aws-cloudfront/package.json @@ -74,7 +74,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-cloudtrail/package.json b/packages/@aws-cdk/aws-cloudtrail/package.json index b3577f87bbe06..ad98a6beca88b 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -74,7 +74,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-codebuild/package.json b/packages/@aws-cdk/aws-codebuild/package.json index 3d6f1f2ae1765..2c58723909180 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -80,7 +80,7 @@ "@aws-cdk/aws-sns": "0.0.0", "@aws-cdk/aws-sqs": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-codecommit/package.json b/packages/@aws-cdk/aws-codecommit/package.json index f5169ac4b65b3..723f56a228152 100644 --- a/packages/@aws-cdk/aws-codecommit/package.json +++ b/packages/@aws-cdk/aws-codecommit/package.json @@ -80,7 +80,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-sns": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-dynamodb/package.json b/packages/@aws-cdk/aws-dynamodb/package.json index d5897ede6d0cf..c21a2a3ba515a 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -75,7 +75,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/jest": "^26.0.15", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-eks/package.json b/packages/@aws-cdk/aws-eks/package.json index 914143934e167..457a6d0ffd62e 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -75,7 +75,7 @@ "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", "@types/yaml": "1.9.6", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-events-targets/package.json b/packages/@aws-cdk/aws-events-targets/package.json index 1c1438f8584bd..202ac319b1951 100644 --- a/packages/@aws-cdk/aws-events-targets/package.json +++ b/packages/@aws-cdk/aws-events-targets/package.json @@ -76,7 +76,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-codecommit": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-logs/package.json b/packages/@aws-cdk/aws-logs/package.json index b412ac28e8369..7cf4617c3c2fd 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-route53/package.json b/packages/@aws-cdk/aws-route53/package.json index 27f771de7a6db..6267c3373e21f 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-sqs/package.json b/packages/@aws-cdk/aws-sqs/package.json index a434141cd88bf..97e36a6cc3731 100644 --- a/packages/@aws-cdk/aws-sqs/package.json +++ b/packages/@aws-cdk/aws-sqs/package.json @@ -75,7 +75,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/custom-resources/package.json b/packages/@aws-cdk/custom-resources/package.json index ab2f3cad05299..8b283c2441a34 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -80,7 +80,7 @@ "@types/aws-lambda": "^8.10.64", "@types/fs-extra": "^8.1.1", "@types/sinon": "^9.0.9", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index c33e690bacc8c..37f206db1b134 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -73,7 +73,7 @@ "@aws-cdk/region-info": "0.0.0", "@aws-cdk/yaml-cfn": "0.0.0", "archiver": "^5.2.0", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "camelcase": "^6.2.0", "cdk-assets": "0.0.0", "colors": "^1.4.0", diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index dda6f1ce2cb64..9ee9bf9e392a2 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -47,7 +47,7 @@ "@aws-cdk/cloud-assembly-schema": "0.0.0", "@aws-cdk/cx-api": "0.0.0", "archiver": "^5.2.0", - "aws-sdk": "^2.827.0", + "aws-sdk": "^2.828.0", "glob": "^7.1.6", "yargs": "^16.2.0" }, diff --git a/yarn.lock b/yarn.lock index 71b4c9102456f..981684a1a6065 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2309,10 +2309,10 @@ aws-sdk-mock@^5.1.0: sinon "^9.0.1" traverse "^0.6.6" -aws-sdk@^2.637.0, aws-sdk@^2.827.0: - version "2.827.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.827.0.tgz#372e37cabf0e8351de6d8f07a8f519bfaaeeae2a" - integrity sha512-71PWS1dqJ65/SeNgDQWEgbJ6oKCuB+Ypq30TM3EyzbAHaxl69WjQRK71oJ2bjhdIHfGQJtOV0G9wg4zpge4Erg== +aws-sdk@^2.637.0, aws-sdk@^2.828.0: + version "2.828.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.828.0.tgz#6aa599c3582f219568f41fb287eb65753e4a9234" + integrity sha512-JoDujGdncSIF9ka+XFZjop/7G+fNGucwPwYj7OHYMmFIOV5p7YmqomdbVmH/vIzd988YZz8oLOinWc4jM6vvhg== dependencies: buffer "4.9.2" events "1.1.1" From 4aa64c82b6849b06ee6d18ad040d5dbaef6d8732 Mon Sep 17 00:00:00 2001 From: Niranjan Jayakar Date: Fri, 15 Jan 2021 14:51:29 +0000 Subject: [PATCH 42/54] chore(aws-cdk-lib): minimum supported node version is now v14 (#11964) This is the current active LTS version and is a good minimum requirement. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .yarnrc | 1 + tools/pkglint/lib/rules.ts | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.yarnrc b/.yarnrc index 591e9c3d57b96..46241e3f5e5bc 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1 +1,2 @@ --install.check-files true # install will verify file tree of packages for consistency +ignore-engines true # the 'engines' key for 'aws-cdk-lib' has specifies node14 as min while v1 will remain at node10 diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index 88688249729a6..fc7336c261d7a 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -1079,7 +1079,11 @@ export class MustHaveNodeEnginesDeclaration extends ValidationRule { public readonly name = 'package-info/engines'; public validate(pkg: PackageJson): void { - expectJSON(this.name, pkg, 'engines.node', '>= 10.13.0 <13 || >=13.7.0'); + if (cdkMajorVersion() === 2) { + expectJSON(this.name, pkg, 'engines.node', '>= 14.15.0'); + } else { + expectJSON(this.name, pkg, 'engines.node', '>= 10.13.0 <13 || >=13.7.0'); + } } } @@ -1508,9 +1512,7 @@ export class UbergenPackageVisibility extends ValidationRule { ]; public validate(pkg: PackageJson): void { - // eslint-disable-next-line @typescript-eslint/no-require-imports - const releaseJson = require(`${__dirname}/../../../release.json`); - if (releaseJson.majorVersion === 2) { + if (cdkMajorVersion() === 2) { // Only packages in the publicPackages list should be "public". Everything else should be private. if (this.publicPackages.includes(pkg.json.name) && pkg.json.private === true) { pkg.report({ @@ -1613,3 +1615,9 @@ function toRegExp(str: string): RegExp { function readBannerFile(file: string): string { return fs.readFileSync(path.join(__dirname, 'banners', file), { encoding: 'utf-8' }).trim(); } + +function cdkMajorVersion() { + // eslint-disable-next-line @typescript-eslint/no-require-imports + const releaseJson = require(`${__dirname}/../../../release.json`); + return releaseJson.majorVersion as number; +} From f2520516b639a727434b32e5893f987b2d729e75 Mon Sep 17 00:00:00 2001 From: Niranjan Jayakar Date: Fri, 15 Jan 2021 15:32:17 +0000 Subject: [PATCH 43/54] chore(scripts): compat check will compare against last published version (#12509) The script currently does not support publishing CDKv2. Update the script so as to read the baseline version by resolving the version from the repo's current state (from `resolve-version.js`). If the resolved version is not present in NPM, usually because the version is not *yet* published, fallback to an environment variable `NPM_DISTTAG` that specifies the dist tag to use. ref: aws/cdk-ops#1151 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- scripts/check-api-compatibility.sh | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/scripts/check-api-compatibility.sh b/scripts/check-api-compatibility.sh index e49d684e8b98c..8c260d248f02e 100755 --- a/scripts/check-api-compatibility.sh +++ b/scripts/check-api-compatibility.sh @@ -55,15 +55,22 @@ if ! ${SKIP_DOWNLOAD:-false}; then existing_names=$(echo "$jsii_package_dirs" | xargs -n1 -P4 -I {} bash -c 'dirs_to_existing_names "$@"' _ {}) echo " Done." >&2 - current_version=$(node -p 'require("./lerna.json").version') - echo "Current version in lerna.json is $current_version" - if ! ${DOWNLOAD_LATEST:-false} && package_exists_on_npm aws-cdk $current_version; then - echo "Using package version ${current_version} as baseline" - existing_names=$(echo "$existing_names" | sed -e "s/$/@$current_version/") - else - echo "However, using the latest version from NPM as the baseline" + version=$(node -p 'require("./scripts/resolve-version.js").version') + echo "Current version is $version." + + if ! package_exists_on_npm aws-cdk $version; then + # occurs within a release PR where the version is bumped but is not yet published to npm. + if [ -z ${NPM_DISTTAG:-} ]; then + echo "env variable NPM_DISTTAG is not set. Failing." + exit 1 + fi + echo "Current version not published. Setting version to NPM_DISTTAG (${NPM_DISTTAG})." + version=$NPM_DISTTAG fi + echo "Using version '$version' as the baseline..." + existing_names=$(echo "$existing_names" | sed -e "s/$/@$version/") + rm -rf $tmpdir mkdir -p $tmpdir From 37fc08c103f9d16a9c9515ca2a5cdd9bff33a47d Mon Sep 17 00:00:00 2001 From: Dirk Nilius Date: Fri, 15 Jan 2021 17:08:35 +0100 Subject: [PATCH 44/54] chore(eks): updated the eks launch template support topic in the docs (#12272) Closes https://github.com/aws/aws-cdk/issues/12256 Clarified the usage of custom user data with default or custom AMI by adding another example and pointing out the differences. Changed the launch template reference in the examples to use the latest version rather than the default. If you don't know the difference it would be unexpected for the user to change the user data without having it applied to the nodes after deploy. Removed unnecessary wrapping of instance type string with typed version and calling toString. Make the sentence about defining instance type either in launch template or node group more understandable. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-eks/README.md | 42 +++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/README.md b/packages/@aws-cdk/aws-eks/README.md index 27f9eda6f0d16..35fc9c24c244e 100644 --- a/packages/@aws-cdk/aws-eks/README.md +++ b/packages/@aws-cdk/aws-eks/README.md @@ -232,8 +232,40 @@ cluster.addNodegroupCapacity('extra-ng-spot', { #### Launch Template Support -You can specify a launch template that the node group will use. Note that when using a custom AMI, Amazon EKS doesn't merge any user data. -Rather, You are responsible for supplying the required bootstrap commands for nodes to join the cluster. +You can specify a launch template that the node group will use. For example, this can be useful if you want to use +a custom AMI or add custom user data. + +When supplying a custom user data script, it must be encoded in the MIME multi-part archive format, since Amazon EKS merges with its own user data. Visit the [Launch Template Docs](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-user-data) +for mode details. + +```ts +const userData = `MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" + +--==MYBOUNDARY== +Content-Type: text/x-shellscript; charset="us-ascii" + +#!/bin/bash +echo "Running custom user data script" + +--==MYBOUNDARY==--\\ +`; +const lt = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', { + launchTemplateData: { + instanceType: 't3.small', + userData: Fn.base64(userData), + }, +}); +cluster.addNodegroupCapacity('extra-ng', { + launchTemplateSpec: { + id: lt.ref, + version: lt.attrLatestVersionNumber, + }, +}); + +``` + +Note that when using a custom AMI, Amazon EKS doesn't merge any user data. Which means you do not need the multi-part encoding. and are responsible for supplying the required bootstrap commands for nodes to join the cluster. In the following example, `/ect/eks/bootstrap.sh` from the AMI will be used to bootstrap the node. ```ts @@ -245,19 +277,19 @@ userData.addCommands( const lt = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', { launchTemplateData: { imageId: 'some-ami-id', // custom AMI - instanceType: new ec2.InstanceType('t3.small').toString(), + instanceType: 't3.small', userData: Fn.base64(userData.render()), }, }); cluster.addNodegroupCapacity('extra-ng', { launchTemplateSpec: { id: lt.ref, - version: lt.attrDefaultVersionNumber, + version: lt.attrLatestVersionNumber, }, }); ``` -You may specify one or instance types in either the `instanceTypes` property of `NodeGroup` or in the launch template, **but not both**. +You may specify one `instanceType` in the launch template or multiple `instanceTypes` in the node group, **but not both**. > For more details visit [Launch Template Support](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html). From 4ba06440a6cec2f66d2482ad827142d7f277fc15 Mon Sep 17 00:00:00 2001 From: Adam Ruka Date: Fri, 15 Jan 2021 10:21:13 -0800 Subject: [PATCH 45/54] chore(pkglint): validate that package `maturity` is correct (#12519) We were missing a few cases where we did not validate that a package had the correct `maturity` set: - A package with L2s could still have a `maturity` of 'cfn-only' - A package with only L1s could still have a non-'cfn-only' `maturity` Fix that in the linter, along with the violations discovered. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/alexa-ask/README.md | 8 ----- packages/@aws-cdk/alexa-ask/package.json | 2 +- packages/@aws-cdk/aws-acmpca/README.md | 8 +++++ packages/@aws-cdk/aws-acmpca/package.json | 2 +- .../@aws-cdk/aws-route53resolver/README.md | 8 ----- .../@aws-cdk/aws-route53resolver/package.json | 2 +- tools/pkglint/lib/rules.ts | 30 +++++++++++++++++-- 7 files changed, 39 insertions(+), 21 deletions(-) diff --git a/packages/@aws-cdk/alexa-ask/README.md b/packages/@aws-cdk/alexa-ask/README.md index 125b909867ec7..766afeef6d3cd 100644 --- a/packages/@aws-cdk/alexa-ask/README.md +++ b/packages/@aws-cdk/alexa-ask/README.md @@ -9,14 +9,6 @@ > > [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib -![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) - -> The APIs of higher level constructs in this module are experimental and under active development. -> They are subject to non-backward compatible changes or removal in any future version. These are -> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be -> announced in the release notes. This means that while you may use them, you may need to update -> your source code when upgrading to a newer version of this package. - --- diff --git a/packages/@aws-cdk/alexa-ask/package.json b/packages/@aws-cdk/alexa-ask/package.json index 1233a4a1993ea..7775d413a997b 100644 --- a/packages/@aws-cdk/alexa-ask/package.json +++ b/packages/@aws-cdk/alexa-ask/package.json @@ -91,7 +91,7 @@ "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", - "maturity": "experimental", + "maturity": "cfn-only", "awscdkio": { "announce": false } diff --git a/packages/@aws-cdk/aws-acmpca/README.md b/packages/@aws-cdk/aws-acmpca/README.md index fd3c39c9f5e4c..04d167836539c 100644 --- a/packages/@aws-cdk/aws-acmpca/README.md +++ b/packages/@aws-cdk/aws-acmpca/README.md @@ -9,6 +9,14 @@ > > [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib +![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) + +> The APIs of higher level constructs in this module are experimental and under active development. +> They are subject to non-backward compatible changes or removal in any future version. These are +> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be +> announced in the release notes. This means that while you may use them, you may need to update +> your source code when upgrading to a newer version of this package. + --- diff --git a/packages/@aws-cdk/aws-acmpca/package.json b/packages/@aws-cdk/aws-acmpca/package.json index 3baab6e8894b3..3d66f73810462 100644 --- a/packages/@aws-cdk/aws-acmpca/package.json +++ b/packages/@aws-cdk/aws-acmpca/package.json @@ -92,7 +92,7 @@ "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", - "maturity": "cfn-only", + "maturity": "experimental", "awscdkio": { "announce": false } diff --git a/packages/@aws-cdk/aws-route53resolver/README.md b/packages/@aws-cdk/aws-route53resolver/README.md index f6eea77064f22..9cf4ab7748b3d 100644 --- a/packages/@aws-cdk/aws-route53resolver/README.md +++ b/packages/@aws-cdk/aws-route53resolver/README.md @@ -9,14 +9,6 @@ > > [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib -![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) - -> The APIs of higher level constructs in this module are experimental and under active development. -> They are subject to non-backward compatible changes or removal in any future version. These are -> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be -> announced in the release notes. This means that while you may use them, you may need to update -> your source code when upgrading to a newer version of this package. - --- diff --git a/packages/@aws-cdk/aws-route53resolver/package.json b/packages/@aws-cdk/aws-route53resolver/package.json index 027c64fba0408..f1de5b042dd0e 100644 --- a/packages/@aws-cdk/aws-route53resolver/package.json +++ b/packages/@aws-cdk/aws-route53resolver/package.json @@ -91,7 +91,7 @@ "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", - "maturity": "experimental", + "maturity": "cfn-only", "awscdkio": { "announce": false } diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index fc7336c261d7a..e059ad52cb7f0 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -284,8 +284,32 @@ export class MaturitySetting extends ValidationRule { maturity = 'deprecated'; } + const packageLevels = this.determinePackageLevels(pkg); + + const hasL1s = packageLevels.some(level => level === 'l1'); + const hasL2s = packageLevels.some(level => level === 'l2'); + if (hasL2s) { + // validate that a package that contains L2s does not declare a 'cfn-only' maturity + if (maturity === 'cfn-only') { + pkg.report({ + ruleName: this.name, + message: "Package that contains any L2s cannot declare a 'cfn-only' maturity", + fix: () => pkg.json.maturity = 'experimental', + }); + } + } else if (hasL1s) { + // validate that a package that contains only L1s declares a 'cfn-only' maturity + if (maturity !== 'cfn-only') { + pkg.report({ + ruleName: this.name, + message: "Package that contains only L1s cannot declare a maturity other than 'cfn-only'", + fix: () => pkg.json.maturity = 'cfn-only', + }); + } + } + if (maturity) { - this.validateReadmeHasBanner(pkg, maturity, this.determinePackageLevels(pkg)); + this.validateReadmeHasBanner(pkg, maturity, packageLevels); } } @@ -342,7 +366,9 @@ export class MaturitySetting extends ValidationRule { // to see if this package has L1s. const hasL1 = !!pkg.json['cdk-build']?.cloudformation; - const libFiles = glob.sync('lib/*.ts'); + const libFiles = glob.sync('lib/**/*.ts', { + ignore: 'lib/**/*.d.ts', // ignore the generated TS declaration files + }); const hasL2 = libFiles.some(f => !f.endsWith('.generated.ts') && !f.endsWith('index.ts')); return [ From ea67c545740019efaf81103950981ae8241d390c Mon Sep 17 00:00:00 2001 From: Ben Limmer Date: Fri, 15 Jan 2021 15:07:07 -0700 Subject: [PATCH 46/54] docs(codebuild): clarify BuildEnvironmentVariable `value` property (#12539) Relates to #12478 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-codebuild/lib/project.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-codebuild/lib/project.ts b/packages/@aws-cdk/aws-codebuild/lib/project.ts index 13df5688ee151..796422b379782 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/project.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/project.ts @@ -1778,8 +1778,10 @@ export interface BuildEnvironmentVariable { readonly type?: BuildEnvironmentVariableType; /** - * The value of the environment variable (or the name of the parameter in - * the SSM parameter store.) + * The value of the environment variable. + * For plain-text variables (the default), this is the literal value of variable. + * For SSM parameter variables, pass the name of the parameter here (`parameterName` property of `IParameter`). + * For SecretsManager variables secrets, pass the secret name here (`secretName` property of `ISecret`). */ readonly value: any; } From fdbe06de5d40bc3d4df09c9f7743632d9383f85a Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Sun, 17 Jan 2021 10:51:28 +0200 Subject: [PATCH 47/54] remove old imports --- .../ecs-service-extensions/lib/environment.ts | 4 ---- .../ecs-service-extensions/lib/extensions/appmesh.ts | 4 ---- .../lib/extensions/assign-public-ip/task-record-manager.ts | 4 ---- .../ecs-service-extensions/lib/extensions/container.ts | 4 ---- .../lib/extensions/extension-interfaces.ts | 4 ---- .../ecs-service-extensions/lib/extensions/firelens.ts | 4 ---- .../lib/extensions/http-load-balancer.ts | 4 ---- .../ecs-service-extensions/lib/extensions/xray.ts | 5 +---- .../ecs-service-extensions/lib/service.ts | 4 ---- .../app-delivery/lib/pipeline-deploy-stack-action.ts | 4 ---- packages/@aws-cdk/aws-apigateway/lib/api-definition.ts | 3 --- packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts | 4 ---- .../lib/base-scalable-attribute.ts | 5 +---- packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts | 4 ---- packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts | 4 ---- packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts | 4 ---- packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts | 4 ---- packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts | 4 ---- .../aws-cloudformation/test/integ.trivial-lambda-resource.ts | 4 ---- packages/@aws-cdk/aws-cloudformation/test/test.resource.ts | 4 ---- packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts | 4 ---- packages/@aws-cdk/aws-cloudwatch/lib/metric.ts | 4 ---- packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts | 4 ---- .../lib/cloudformation/pipeline-actions.ts | 4 ---- .../aws-codepipeline-actions/lib/codebuild/build-action.ts | 4 ---- .../lib/stepfunctions/invoke-action.ts | 4 ---- .../lib/private/cross-region-support-stack.ts | 4 ---- .../@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts | 4 ---- .../aws-dynamodb-global/lib/global-table-coordinator.ts | 4 ---- .../aws-ecs/lib/images/tag-parameter-container-image.ts | 4 ---- .../aws-elasticsearch/lib/elasticsearch-access-policy.ts | 4 ---- .../aws-elasticsearch/lib/log-group-resource-policy.ts | 4 ---- .../aws-events-targets/lib/log-group-resource-policy.ts | 4 ---- packages/@aws-cdk/aws-lambda/lib/code.ts | 4 ---- packages/@aws-cdk/aws-s3/lib/destination.ts | 4 ---- .../notifications-resource/notifications-resource-handler.ts | 4 ---- .../lib/notifications-resource/notifications-resource.ts | 4 ---- 37 files changed, 2 insertions(+), 147 deletions(-) diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts index c1cee07b9bba7..68d4671a83432 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/environment.ts @@ -3,10 +3,6 @@ import * as ecs from '@aws-cdk/aws-ecs'; import { Construct } from 'constructs'; import { EnvironmentCapacityType } from './extensions/extension-interfaces'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Settings for the environment you want to deploy. * services within. diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts index 65f83b5d7f438..59c653f656b02 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/appmesh.ts @@ -10,10 +10,6 @@ import { Service } from '../service'; import { Container } from './container'; import { ServiceExtension, ServiceBuild } from './extension-interfaces'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - // The version of the App Mesh envoy sidecar to add to the task. const APP_MESH_ENVOY_SIDECAR_VERSION = 'v1.15.1.0-prod'; diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts index 9561d6732657d..dd0bd0718d2e9 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/assign-public-ip/task-record-manager.ts @@ -12,10 +12,6 @@ import * as cdk from '@aws-cdk/core'; import * as customresources from '@aws-cdk/custom-resources'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - export interface TaskRecordManagerProps { service: ecs.Ec2Service | ecs.FargateService; dnsZone: route53.IHostedZone; diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts index 1bbc61ff4f8f7..1d7cd817d088d 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts @@ -2,10 +2,6 @@ import * as ecs from '@aws-cdk/aws-ecs'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Setting for the main application container of a service */ diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts index 5c17f8e874068..14bf499d13ce5 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/extension-interfaces.ts @@ -3,10 +3,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { Service } from '../service'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * A list of the capacity types that are supported. These * capacity types may change the behavior of an extension. diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts index 0e88bb0ef8e87..bb11e3df49a4f 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/firelens.ts @@ -6,10 +6,6 @@ import { Service } from '../service'; import { Container } from './container'; import { ContainerMutatingHook, ServiceExtension } from './extension-interfaces'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Settings for the hook which mutates the application container * to route logs through FireLens diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts index a52285937f31d..af54a305cc699 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/http-load-balancer.ts @@ -5,10 +5,6 @@ import { Construct } from 'constructs'; import { Service } from '../service'; import { ServiceExtension, ServiceBuild } from './extension-interfaces'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * This extension add a public facing load balancer for sending traffic * to one or more replicas of the application container diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts index 5e9affe0ffa3a..652d6a5dd8b7d 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts @@ -1,13 +1,10 @@ import * as ecs from '@aws-cdk/aws-ecs'; import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; +import { Construct } from 'constructs'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - const XRAY_DAEMON_IMAGE = 'amazon/aws-xray-daemon:latest'; /** diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts index 3e842af2c9b6c..63af3d586e34a 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/service.ts @@ -5,10 +5,6 @@ import { IEnvironment } from './environment'; import { EnvironmentCapacityType, ServiceBuild } from './extensions/extension-interfaces'; import { ServiceDescription } from './service-description'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * The settings for an ECS Service */ diff --git a/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts b/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts index 8ee47285a9b5a..047c006e5dff1 100644 --- a/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts +++ b/packages/@aws-cdk/app-delivery/lib/pipeline-deploy-stack-action.ts @@ -7,10 +7,6 @@ import * as cxschema from '@aws-cdk/cloud-assembly-schema'; import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - export interface PipelineDeployStackActionProps { /** * The CDK stack to be deployed. diff --git a/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts b/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts index 3ad7af208d92e..7efbe5440779f 100644 --- a/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts +++ b/packages/@aws-cdk/aws-apigateway/lib/api-definition.ts @@ -1,8 +1,5 @@ import * as s3 from '@aws-cdk/aws-s3'; import * as s3_assets from '@aws-cdk/aws-s3-assets'; - -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order import { Construct } from 'constructs'; /** diff --git a/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts b/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts index 0a6d0a3711148..df8213aa37c10 100644 --- a/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts +++ b/packages/@aws-cdk/aws-apigateway/lib/apigatewayv2.ts @@ -6,10 +6,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Properties for defining a `AWS::ApiGatewayV2::Api` * diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts index 5bf2cfa9ee842..ab79f246c2d08 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/base-scalable-attribute.ts @@ -1,12 +1,9 @@ import * as iam from '@aws-cdk/aws-iam'; +import { Construct } from 'constructs'; import { ScalableTarget, ScalingSchedule, ServiceNamespace } from './scalable-target'; import { BasicStepScalingPolicyProps } from './step-scaling-policy'; import { BasicTargetTrackingScalingPolicyProps } from './target-tracking-scaling-policy'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from 'constructs'; - /** * Properties for a ScalableTableAttribute */ diff --git a/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts b/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts index c6b16a3cb15d7..01a103cb2dee9 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts @@ -2,10 +2,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CfnVirtualGateway, CfnVirtualNode } from './appmesh.generated'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Represents timeouts for HTTP protocols. */ diff --git a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts index ec227fb13df99..f58cc62487c95 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts @@ -1,10 +1,6 @@ import * as acm from '@aws-cdk/aws-certificatemanager'; import { CfnVirtualNode } from './appmesh.generated'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Enum of supported TLS modes */ diff --git a/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts b/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts index 60569554c7d46..b5f395540dcd0 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts +++ b/packages/@aws-cdk/aws-autoscaling/test/scaling.test.ts @@ -7,10 +7,6 @@ import { Construct } from 'constructs'; import { nodeunitShim, Test } from 'nodeunit-shim'; import * as autoscaling from '../lib'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - nodeunitShim({ 'target tracking policies': { 'cpu utilization'(test: Test) { diff --git a/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts b/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts index b284a17b2500a..cc59db35c6c0f 100644 --- a/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts +++ b/packages/@aws-cdk/aws-cloudformation/lib/custom-resource.ts @@ -3,10 +3,6 @@ import * as sns from '@aws-cdk/aws-sns'; import * as core from '@aws-cdk/core'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Collection of arbitrary properties */ diff --git a/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts b/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts index 26b5e6a8c4877..0f32579101427 100644 --- a/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts +++ b/packages/@aws-cdk/aws-cloudformation/lib/nested-stack.ts @@ -2,10 +2,6 @@ import * as sns from '@aws-cdk/aws-sns'; import * as core from '@aws-cdk/core'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Initialization props for the `NestedStack` construct. * diff --git a/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts b/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts index de3a4d0f4ed90..9870d063f5cba 100644 --- a/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts +++ b/packages/@aws-cdk/aws-cloudformation/test/integ.trivial-lambda-resource.ts @@ -4,10 +4,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CustomResource, CustomResourceProvider } from '../lib'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /* eslint-disable cdk/no-core-construct */ interface DemoResourceProps { diff --git a/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts b/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts index b467add177637..566978ec0d4d9 100644 --- a/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts +++ b/packages/@aws-cdk/aws-cloudformation/test/test.resource.ts @@ -6,10 +6,6 @@ import { Construct } from 'constructs'; import { Test, testCase } from 'nodeunit'; import { CustomResource, CustomResourceProvider } from '../lib'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /* eslint-disable cdk/no-core-construct */ /* eslint-disable quote-props */ diff --git a/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts b/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts index 779f9cc120261..c71e47507b1c7 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts +++ b/packages/@aws-cdk/aws-cloudfront-origins/lib/s3-origin.ts @@ -4,10 +4,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { HttpOrigin } from './http-origin'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Properties to use to customize an S3 Origin. */ diff --git a/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts b/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts index 50a2182662a79..d378f22c7f393 100644 --- a/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts +++ b/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts @@ -6,10 +6,6 @@ import { Dimension, IMetric, MetricAlarmConfig, MetricConfig, MetricGraphConfig, import { dispatchMetric, metricKey } from './private/metric-util'; import { normalizeStatistic, parseStatistic } from './private/statistic'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - export type DimensionHash = {[dim: string]: any}; /** diff --git a/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts b/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts index 87e1ba0fb0c3c..b96beebc4c3c5 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/linux-gpu-build-image.ts @@ -9,10 +9,6 @@ import { ImagePullPrincipalType, IProject, } from './project'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - const mappingName = 'AwsDeepLearningContainersRepositoriesAccounts'; /** diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts index 596496cc7dbf6..ad73e1465b9dd 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts @@ -5,10 +5,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { Action } from '../action'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Properties common to all CloudFormation actions */ diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts index b8f703e498d30..f3b8d0e15463a 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/codebuild/build-action.ts @@ -6,10 +6,6 @@ import { Construct } from 'constructs'; import { BitBucketSourceAction } from '..'; import { Action } from '../action'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * The type of the CodeBuild action that determines its CodePipeline Category - * Build, or Test. diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts index 44b08c48b0d5d..7332bb861be3c 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/stepfunctions/invoke-action.ts @@ -5,10 +5,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { Action } from '../action'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Represents the input for the StateMachine. */ diff --git a/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts b/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts index dc8fe8dd75451..ee3a4958f32a5 100644 --- a/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts +++ b/packages/@aws-cdk/aws-codepipeline/lib/private/cross-region-support-stack.ts @@ -3,10 +3,6 @@ import * as s3 from '@aws-cdk/aws-s3'; import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - const REQUIRED_ALIAS_PREFIX = 'alias/'; /** diff --git a/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts b/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts index c5d9e82b46420..576228502bb27 100644 --- a/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts +++ b/packages/@aws-cdk/aws-dynamodb-global/lib/aws-dynamodb-global.ts @@ -3,10 +3,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { GlobalTableCoordinator } from './global-table-coordinator'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Properties for the multiple DynamoDB tables to mash together into a * global table diff --git a/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts b/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts index f399e3820e5e7..520e44fe12067 100644 --- a/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts +++ b/packages/@aws-cdk/aws-dynamodb-global/lib/global-table-coordinator.ts @@ -5,10 +5,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { GlobalTableProps } from './aws-dynamodb-global'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * A stack that will make a Lambda that will launch a lambda to glue * together all the DynamoDB tables into a global table diff --git a/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts b/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts index 42a655e432159..42ddbb2769943 100644 --- a/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts +++ b/packages/@aws-cdk/aws-ecs/lib/images/tag-parameter-container-image.ts @@ -4,10 +4,6 @@ import { Construct } from 'constructs'; import { ContainerDefinition } from '../container-definition'; import { ContainerImage, ContainerImageConfig } from '../container-image'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * A special type of {@link ContainerImage} that uses an ECR repository for the image, * but a CloudFormation Parameter for the tag of the image in that repository. diff --git a/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts b/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts index 2b77682d0b3d2..88a45a1dd191d 100644 --- a/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts +++ b/packages/@aws-cdk/aws-elasticsearch/lib/elasticsearch-access-policy.ts @@ -2,10 +2,6 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cr from '@aws-cdk/custom-resources'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Construction properties for ElasticsearchAccessPolicy */ diff --git a/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts b/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts index c2c5cd212cf63..0a88658e1cf42 100644 --- a/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts +++ b/packages/@aws-cdk/aws-elasticsearch/lib/log-group-resource-policy.ts @@ -2,10 +2,6 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cr from '@aws-cdk/custom-resources'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Construction properties for LogGroupResourcePolicy */ diff --git a/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts b/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts index 42d089aa42469..6d43362f8908f 100644 --- a/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts +++ b/packages/@aws-cdk/aws-events-targets/lib/log-group-resource-policy.ts @@ -3,10 +3,6 @@ import * as cdk from '@aws-cdk/core'; import * as cr from '@aws-cdk/custom-resources'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Properties to configure a log group resource policy */ diff --git a/packages/@aws-cdk/aws-lambda/lib/code.ts b/packages/@aws-cdk/aws-lambda/lib/code.ts index 25708a56c7938..af8b9d6dc26fd 100644 --- a/packages/@aws-cdk/aws-lambda/lib/code.ts +++ b/packages/@aws-cdk/aws-lambda/lib/code.ts @@ -6,10 +6,6 @@ import * as s3_assets from '@aws-cdk/aws-s3-assets'; import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Represents the Lambda Handler Code. */ diff --git a/packages/@aws-cdk/aws-s3/lib/destination.ts b/packages/@aws-cdk/aws-s3/lib/destination.ts index 5a507ecd4c4cd..d8b8e1aa55e85 100644 --- a/packages/@aws-cdk/aws-s3/lib/destination.ts +++ b/packages/@aws-cdk/aws-s3/lib/destination.ts @@ -2,10 +2,6 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { IBucket } from './bucket'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * Implemented by constructs that can be used as bucket notification destinations. */ diff --git a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts index 59041ad8c3285..fc411429799f5 100644 --- a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts +++ b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts @@ -2,10 +2,6 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - /** * A Lambda-based custom resource handler that provisions S3 bucket * notifications for a bucket. diff --git a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts index 41da53334507e..ce00ad0696ee4 100644 --- a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts +++ b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource.ts @@ -4,10 +4,6 @@ import { Bucket, EventType, NotificationKeyFilter } from '../bucket'; import { BucketNotificationDestinationType, IBucketNotificationDestination } from '../destination'; import { NotificationsResourceHandler } from './notifications-resource-handler'; -// keep this import separate from other imports to reduce chance for merge conflicts with v2-main -// eslint-disable-next-line no-duplicate-imports, import/order -import { Construct } from '@aws-cdk/core'; - interface NotificationsProps { /** * The bucket to manage notifications for. From bf3e46d965a68e01a8c5a9272b43f61b631a1992 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Sun, 17 Jan 2021 11:06:01 +0200 Subject: [PATCH 48/54] pkglint fixes --- .../ecs-service-extensions/package.json | 2 +- packages/@aws-cdk/alexa-ask/package.json | 2 +- packages/@aws-cdk/app-delivery/package.json | 2 +- packages/@aws-cdk/assert/package.json | 2 +- packages/@aws-cdk/assets/package.json | 2 +- packages/@aws-cdk/aws-accessanalyzer/package.json | 2 +- packages/@aws-cdk/aws-acmpca/package.json | 2 +- packages/@aws-cdk/aws-amazonmq/package.json | 2 +- packages/@aws-cdk/aws-amplify/package.json | 2 +- packages/@aws-cdk/aws-apigateway/package.json | 2 +- .../aws-apigatewayv2-integrations/package.json | 2 +- packages/@aws-cdk/aws-apigatewayv2/package.json | 2 +- packages/@aws-cdk/aws-appconfig/package.json | 2 +- packages/@aws-cdk/aws-appflow/package.json | 2 +- .../@aws-cdk/aws-applicationautoscaling/package.json | 2 +- .../@aws-cdk/aws-applicationinsights/package.json | 2 +- packages/@aws-cdk/aws-appmesh/package.json | 2 +- packages/@aws-cdk/aws-appstream/package.json | 2 +- packages/@aws-cdk/aws-appsync/package.json | 2 +- packages/@aws-cdk/aws-athena/package.json | 2 +- packages/@aws-cdk/aws-auditmanager/package.json | 11 +++++++---- packages/@aws-cdk/aws-autoscaling-common/package.json | 2 +- .../@aws-cdk/aws-autoscaling-hooktargets/package.json | 2 +- packages/@aws-cdk/aws-autoscaling/package.json | 2 +- packages/@aws-cdk/aws-autoscalingplans/package.json | 2 +- packages/@aws-cdk/aws-backup/package.json | 2 +- packages/@aws-cdk/aws-batch/package.json | 2 +- packages/@aws-cdk/aws-budgets/package.json | 2 +- packages/@aws-cdk/aws-cassandra/package.json | 2 +- packages/@aws-cdk/aws-ce/package.json | 2 +- packages/@aws-cdk/aws-certificatemanager/package.json | 2 +- packages/@aws-cdk/aws-chatbot/package.json | 2 +- packages/@aws-cdk/aws-cloud9/package.json | 2 +- packages/@aws-cdk/aws-cloudformation/package.json | 2 +- packages/@aws-cdk/aws-cloudfront-origins/package.json | 2 +- packages/@aws-cdk/aws-cloudfront/package.json | 2 +- packages/@aws-cdk/aws-cloudtrail/package.json | 2 +- packages/@aws-cdk/aws-cloudwatch-actions/package.json | 2 +- packages/@aws-cdk/aws-cloudwatch/package.json | 2 +- packages/@aws-cdk/aws-codeartifact/package.json | 2 +- packages/@aws-cdk/aws-codebuild/package.json | 2 +- packages/@aws-cdk/aws-codecommit/package.json | 2 +- packages/@aws-cdk/aws-codedeploy/package.json | 2 +- packages/@aws-cdk/aws-codeguruprofiler/package.json | 2 +- packages/@aws-cdk/aws-codegurureviewer/package.json | 2 +- .../@aws-cdk/aws-codepipeline-actions/package.json | 2 +- packages/@aws-cdk/aws-codepipeline/package.json | 2 +- packages/@aws-cdk/aws-codestar/package.json | 2 +- .../@aws-cdk/aws-codestarconnections/package.json | 2 +- .../@aws-cdk/aws-codestarnotifications/package.json | 2 +- packages/@aws-cdk/aws-cognito/package.json | 2 +- packages/@aws-cdk/aws-config/package.json | 2 +- packages/@aws-cdk/aws-databrew/package.json | 2 +- packages/@aws-cdk/aws-datapipeline/package.json | 2 +- packages/@aws-cdk/aws-datasync/package.json | 11 +++++++---- packages/@aws-cdk/aws-dax/package.json | 2 +- packages/@aws-cdk/aws-detective/package.json | 2 +- packages/@aws-cdk/aws-devopsguru/package.json | 2 +- packages/@aws-cdk/aws-directoryservice/package.json | 2 +- packages/@aws-cdk/aws-dlm/package.json | 2 +- packages/@aws-cdk/aws-dms/package.json | 2 +- packages/@aws-cdk/aws-docdb/package.json | 2 +- packages/@aws-cdk/aws-dynamodb-global/package.json | 2 +- packages/@aws-cdk/aws-dynamodb/package.json | 2 +- packages/@aws-cdk/aws-ec2/package.json | 2 +- packages/@aws-cdk/aws-ecr-assets/package.json | 2 +- packages/@aws-cdk/aws-ecr/package.json | 2 +- packages/@aws-cdk/aws-ecs-patterns/package.json | 2 +- packages/@aws-cdk/aws-ecs/package.json | 2 +- packages/@aws-cdk/aws-efs/package.json | 2 +- packages/@aws-cdk/aws-eks-legacy/package.json | 2 +- packages/@aws-cdk/aws-eks/package.json | 2 +- packages/@aws-cdk/aws-elasticache/package.json | 2 +- packages/@aws-cdk/aws-elasticbeanstalk/package.json | 2 +- .../@aws-cdk/aws-elasticloadbalancing/package.json | 2 +- .../aws-elasticloadbalancingv2-actions/package.json | 2 +- .../aws-elasticloadbalancingv2-targets/package.json | 2 +- .../@aws-cdk/aws-elasticloadbalancingv2/package.json | 2 +- packages/@aws-cdk/aws-elasticsearch/package.json | 2 +- packages/@aws-cdk/aws-emr/package.json | 2 +- packages/@aws-cdk/aws-events-targets/package.json | 2 +- packages/@aws-cdk/aws-events/package.json | 2 +- packages/@aws-cdk/aws-eventschemas/package.json | 2 +- packages/@aws-cdk/aws-fms/package.json | 2 +- packages/@aws-cdk/aws-fsx/package.json | 2 +- packages/@aws-cdk/aws-gamelift/package.json | 2 +- packages/@aws-cdk/aws-globalaccelerator/package.json | 2 +- packages/@aws-cdk/aws-glue/package.json | 2 +- packages/@aws-cdk/aws-greengrass/package.json | 2 +- packages/@aws-cdk/aws-greengrassv2/package.json | 2 +- packages/@aws-cdk/aws-guardduty/package.json | 2 +- packages/@aws-cdk/aws-iam/package.json | 2 +- packages/@aws-cdk/aws-imagebuilder/package.json | 2 +- packages/@aws-cdk/aws-inspector/package.json | 2 +- packages/@aws-cdk/aws-iot/package.json | 2 +- packages/@aws-cdk/aws-iot1click/package.json | 2 +- packages/@aws-cdk/aws-iotanalytics/package.json | 2 +- packages/@aws-cdk/aws-iotevents/package.json | 2 +- packages/@aws-cdk/aws-iotsitewise/package.json | 2 +- packages/@aws-cdk/aws-iotthingsgraph/package.json | 2 +- packages/@aws-cdk/aws-iotwireless/package.json | 2 +- packages/@aws-cdk/aws-ivs/package.json | 2 +- packages/@aws-cdk/aws-kendra/package.json | 2 +- packages/@aws-cdk/aws-kinesis/package.json | 2 +- packages/@aws-cdk/aws-kinesisanalytics/package.json | 2 +- packages/@aws-cdk/aws-kinesisfirehose/package.json | 2 +- packages/@aws-cdk/aws-kms/package.json | 2 +- packages/@aws-cdk/aws-lakeformation/package.json | 2 +- .../@aws-cdk/aws-lambda-destinations/package.json | 2 +- .../@aws-cdk/aws-lambda-event-sources/package.json | 2 +- packages/@aws-cdk/aws-lambda-nodejs/package.json | 2 +- packages/@aws-cdk/aws-lambda-python/package.json | 2 +- packages/@aws-cdk/aws-lambda/package.json | 2 +- packages/@aws-cdk/aws-licensemanager/package.json | 2 +- packages/@aws-cdk/aws-logs-destinations/package.json | 2 +- packages/@aws-cdk/aws-logs/package.json | 2 +- packages/@aws-cdk/aws-macie/package.json | 2 +- packages/@aws-cdk/aws-managedblockchain/package.json | 2 +- packages/@aws-cdk/aws-mediaconnect/package.json | 11 +++++++---- packages/@aws-cdk/aws-mediaconvert/package.json | 2 +- packages/@aws-cdk/aws-medialive/package.json | 2 +- packages/@aws-cdk/aws-mediapackage/package.json | 2 +- packages/@aws-cdk/aws-mediastore/package.json | 2 +- packages/@aws-cdk/aws-msk/package.json | 2 +- packages/@aws-cdk/aws-mwaa/package.json | 2 +- packages/@aws-cdk/aws-neptune/package.json | 2 +- packages/@aws-cdk/aws-networkfirewall/package.json | 2 +- packages/@aws-cdk/aws-networkmanager/package.json | 2 +- packages/@aws-cdk/aws-opsworks/package.json | 2 +- packages/@aws-cdk/aws-opsworkscm/package.json | 2 +- packages/@aws-cdk/aws-pinpoint/package.json | 2 +- packages/@aws-cdk/aws-pinpointemail/package.json | 2 +- packages/@aws-cdk/aws-qldb/package.json | 2 +- packages/@aws-cdk/aws-ram/package.json | 2 +- packages/@aws-cdk/aws-rds/package.json | 2 +- packages/@aws-cdk/aws-redshift/package.json | 2 +- packages/@aws-cdk/aws-resourcegroups/package.json | 2 +- packages/@aws-cdk/aws-robomaker/package.json | 2 +- packages/@aws-cdk/aws-route53-patterns/package.json | 2 +- packages/@aws-cdk/aws-route53-targets/package.json | 2 +- packages/@aws-cdk/aws-route53/package.json | 2 +- packages/@aws-cdk/aws-route53resolver/package.json | 2 +- packages/@aws-cdk/aws-s3-assets/package.json | 2 +- packages/@aws-cdk/aws-s3-deployment/package.json | 2 +- packages/@aws-cdk/aws-s3-notifications/package.json | 2 +- packages/@aws-cdk/aws-s3/package.json | 2 +- packages/@aws-cdk/aws-sagemaker/package.json | 2 +- packages/@aws-cdk/aws-sam/package.json | 2 +- packages/@aws-cdk/aws-sdb/package.json | 2 +- packages/@aws-cdk/aws-secretsmanager/package.json | 2 +- packages/@aws-cdk/aws-securityhub/package.json | 2 +- packages/@aws-cdk/aws-servicecatalog/package.json | 2 +- packages/@aws-cdk/aws-servicediscovery/package.json | 2 +- packages/@aws-cdk/aws-ses-actions/package.json | 2 +- packages/@aws-cdk/aws-ses/package.json | 2 +- packages/@aws-cdk/aws-signer/package.json | 2 +- packages/@aws-cdk/aws-sns-subscriptions/package.json | 2 +- packages/@aws-cdk/aws-sns/package.json | 2 +- packages/@aws-cdk/aws-sqs/package.json | 2 +- packages/@aws-cdk/aws-ssm/package.json | 2 +- packages/@aws-cdk/aws-sso/package.json | 2 +- .../@aws-cdk/aws-stepfunctions-tasks/package.json | 2 +- packages/@aws-cdk/aws-stepfunctions/package.json | 2 +- packages/@aws-cdk/aws-synthetics/package.json | 2 +- packages/@aws-cdk/aws-timestream/package.json | 2 +- packages/@aws-cdk/aws-transfer/package.json | 2 +- packages/@aws-cdk/aws-waf/package.json | 2 +- packages/@aws-cdk/aws-wafregional/package.json | 2 +- packages/@aws-cdk/aws-wafv2/package.json | 2 +- packages/@aws-cdk/aws-workspaces/package.json | 2 +- packages/@aws-cdk/cdk-assets-schema/package.json | 2 +- packages/@aws-cdk/cloud-assembly-schema/package.json | 2 +- packages/@aws-cdk/cloudformation-diff/package.json | 2 +- packages/@aws-cdk/cloudformation-include/package.json | 2 +- packages/@aws-cdk/core/package.json | 2 +- packages/@aws-cdk/custom-resources/package.json | 2 +- packages/@aws-cdk/cx-api/package.json | 2 +- .../@aws-cdk/example-construct-library/package.json | 2 +- packages/@aws-cdk/lambda-layer-awscli/package.json | 2 +- packages/@aws-cdk/lambda-layer-kubectl/package.json | 2 +- packages/@aws-cdk/pipelines/package.json | 2 +- packages/@aws-cdk/region-info/package.json | 2 +- packages/@aws-cdk/yaml-cfn/package.json | 2 +- .../@monocdk-experiment/rewrite-imports/package.json | 2 +- packages/aws-cdk-lib/package.json | 2 +- packages/aws-cdk/package.json | 2 +- packages/awslint/package.json | 2 +- packages/cdk-assets/package.json | 2 +- packages/monocdk/package.json | 2 +- tools/cdk-build-tools/package.json | 2 +- tools/cdk-integ-tools/package.json | 2 +- tools/cfn2ts/package.json | 2 +- tools/pkgtools/package.json | 2 +- tools/ubergen/package.json | 2 +- tools/yarn-cling/package.json | 2 +- 195 files changed, 213 insertions(+), 204 deletions(-) diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/package.json b/packages/@aws-cdk-containers/ecs-service-extensions/package.json index eea2d3553aa45..4b2e3f0a2de28 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/package.json +++ b/packages/@aws-cdk-containers/ecs-service-extensions/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awscdkio": { "announce": false diff --git a/packages/@aws-cdk/alexa-ask/package.json b/packages/@aws-cdk/alexa-ask/package.json index f58ea7c1ff4ce..b14e11df91d8e 100644 --- a/packages/@aws-cdk/alexa-ask/package.json +++ b/packages/@aws-cdk/alexa-ask/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/app-delivery/package.json b/packages/@aws-cdk/app-delivery/package.json index 50ec9c01b73cf..929246d143257 100644 --- a/packages/@aws-cdk/app-delivery/package.json +++ b/packages/@aws-cdk/app-delivery/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "deprecated", "maturity": "deprecated", diff --git a/packages/@aws-cdk/assert/package.json b/packages/@aws-cdk/assert/package.json index c2444a9ede633..c5178d691e66a 100644 --- a/packages/@aws-cdk/assert/package.json +++ b/packages/@aws-cdk/assert/package.json @@ -51,7 +51,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/assets/package.json b/packages/@aws-cdk/assets/package.json index b1791d6fa0963..7c2d554666f99 100644 --- a/packages/@aws-cdk/assets/package.json +++ b/packages/@aws-cdk/assets/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "deprecated", "maturity": "deprecated", diff --git a/packages/@aws-cdk/aws-accessanalyzer/package.json b/packages/@aws-cdk/aws-accessanalyzer/package.json index 5d1c39ee62e43..f71b75a9da62d 100644 --- a/packages/@aws-cdk/aws-accessanalyzer/package.json +++ b/packages/@aws-cdk/aws-accessanalyzer/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-acmpca/package.json b/packages/@aws-cdk/aws-acmpca/package.json index 12e5b5f04d101..d462cce372238 100644 --- a/packages/@aws-cdk/aws-acmpca/package.json +++ b/packages/@aws-cdk/aws-acmpca/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-amazonmq/package.json b/packages/@aws-cdk/aws-amazonmq/package.json index 9676bb176e4f2..9402b6afcc479 100644 --- a/packages/@aws-cdk/aws-amazonmq/package.json +++ b/packages/@aws-cdk/aws-amazonmq/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-amplify/package.json b/packages/@aws-cdk/aws-amplify/package.json index 1fd6faa048cb4..49f6496d7ae0f 100644 --- a/packages/@aws-cdk/aws-amplify/package.json +++ b/packages/@aws-cdk/aws-amplify/package.json @@ -101,7 +101,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-apigateway/package.json b/packages/@aws-cdk/aws-apigateway/package.json index 109bb8bbf704a..976a0d8cad79f 100644 --- a/packages/@aws-cdk/aws-apigateway/package.json +++ b/packages/@aws-cdk/aws-apigateway/package.json @@ -112,7 +112,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "nyc": { "exclude": [ diff --git a/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json b/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json index 49b9cbb3cd2ae..70cd006b9282b 100644 --- a/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json +++ b/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-apigatewayv2/package.json b/packages/@aws-cdk/aws-apigatewayv2/package.json index 2273b4773d06f..47d08c5f18ce5 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/package.json +++ b/packages/@aws-cdk/aws-apigatewayv2/package.json @@ -102,7 +102,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-appconfig/package.json b/packages/@aws-cdk/aws-appconfig/package.json index 2b53f982ac627..a5a4ff2cffeaf 100644 --- a/packages/@aws-cdk/aws-appconfig/package.json +++ b/packages/@aws-cdk/aws-appconfig/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-appflow/package.json b/packages/@aws-cdk/aws-appflow/package.json index 77ecabd32dfc7..c4c9e0656ece7 100644 --- a/packages/@aws-cdk/aws-appflow/package.json +++ b/packages/@aws-cdk/aws-appflow/package.json @@ -87,7 +87,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-applicationautoscaling/package.json b/packages/@aws-cdk/aws-applicationautoscaling/package.json index a05d2c8d7a96b..9fdb2bc837af4 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/package.json +++ b/packages/@aws-cdk/aws-applicationautoscaling/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "nyc": { "branches": 65, diff --git a/packages/@aws-cdk/aws-applicationinsights/package.json b/packages/@aws-cdk/aws-applicationinsights/package.json index 046e2e03399c8..143f9273c9f58 100644 --- a/packages/@aws-cdk/aws-applicationinsights/package.json +++ b/packages/@aws-cdk/aws-applicationinsights/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-appmesh/package.json b/packages/@aws-cdk/aws-appmesh/package.json index 06c4e4f859071..b2dd882828beb 100644 --- a/packages/@aws-cdk/aws-appmesh/package.json +++ b/packages/@aws-cdk/aws-appmesh/package.json @@ -105,7 +105,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-appstream/package.json b/packages/@aws-cdk/aws-appstream/package.json index dc58f32d7dfe0..bd25e2530059d 100644 --- a/packages/@aws-cdk/aws-appstream/package.json +++ b/packages/@aws-cdk/aws-appstream/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-appsync/package.json b/packages/@aws-cdk/aws-appsync/package.json index 675b7dd08f3a7..1f4779edad008 100644 --- a/packages/@aws-cdk/aws-appsync/package.json +++ b/packages/@aws-cdk/aws-appsync/package.json @@ -108,7 +108,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-athena/package.json b/packages/@aws-cdk/aws-athena/package.json index 60190909b1eb7..636e7e0db2440 100644 --- a/packages/@aws-cdk/aws-athena/package.json +++ b/packages/@aws-cdk/aws-athena/package.json @@ -91,7 +91,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-auditmanager/package.json b/packages/@aws-cdk/aws-auditmanager/package.json index 35a6fdbe08a93..6ba8246bf99e5 100644 --- a/packages/@aws-cdk/aws-auditmanager/package.json +++ b/packages/@aws-cdk/aws-auditmanager/package.json @@ -81,17 +81,20 @@ "pkglint": "0.0.0" }, "dependencies": { - "@aws-cdk/core": "0.0.0" + "@aws-cdk/core": "0.0.0", + "constructs": "10.0.0-pre.5" }, "peerDependencies": { - "@aws-cdk/core": "0.0.0" + "@aws-cdk/core": "0.0.0", + "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", "awscdkio": { "announce": false - } + }, + "private": true } diff --git a/packages/@aws-cdk/aws-autoscaling-common/package.json b/packages/@aws-cdk/aws-autoscaling-common/package.json index 74ee22b8e4e68..d2a4727f8dd5f 100644 --- a/packages/@aws-cdk/aws-autoscaling-common/package.json +++ b/packages/@aws-cdk/aws-autoscaling-common/package.json @@ -106,7 +106,7 @@ ] }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json b/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json index 92243308c0f6f..817a72b2a57df 100644 --- a/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json +++ b/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-autoscaling/package.json b/packages/@aws-cdk/aws-autoscaling/package.json index d3ae544c25854..866ab4faa891b 100644 --- a/packages/@aws-cdk/aws-autoscaling/package.json +++ b/packages/@aws-cdk/aws-autoscaling/package.json @@ -107,7 +107,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-autoscalingplans/package.json b/packages/@aws-cdk/aws-autoscalingplans/package.json index dc3f19ca4eacb..3471d9669f49d 100644 --- a/packages/@aws-cdk/aws-autoscalingplans/package.json +++ b/packages/@aws-cdk/aws-autoscalingplans/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-backup/package.json b/packages/@aws-cdk/aws-backup/package.json index 73e4aea43bad6..aaab59716d22d 100644 --- a/packages/@aws-cdk/aws-backup/package.json +++ b/packages/@aws-cdk/aws-backup/package.json @@ -107,7 +107,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-batch/package.json b/packages/@aws-cdk/aws-batch/package.json index 1138c735829cb..a0466afc56ced 100644 --- a/packages/@aws-cdk/aws-batch/package.json +++ b/packages/@aws-cdk/aws-batch/package.json @@ -103,7 +103,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-budgets/package.json b/packages/@aws-cdk/aws-budgets/package.json index 9e6337dacca2e..14b8c8e6a27dd 100644 --- a/packages/@aws-cdk/aws-budgets/package.json +++ b/packages/@aws-cdk/aws-budgets/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-cassandra/package.json b/packages/@aws-cdk/aws-cassandra/package.json index 260bf21b88421..52e56a27d2e4d 100644 --- a/packages/@aws-cdk/aws-cassandra/package.json +++ b/packages/@aws-cdk/aws-cassandra/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-ce/package.json b/packages/@aws-cdk/aws-ce/package.json index cea361aa5330e..846c609faa1f8 100644 --- a/packages/@aws-cdk/aws-ce/package.json +++ b/packages/@aws-cdk/aws-ce/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-certificatemanager/package.json b/packages/@aws-cdk/aws-certificatemanager/package.json index 1408d12da5030..186844eba2905 100644 --- a/packages/@aws-cdk/aws-certificatemanager/package.json +++ b/packages/@aws-cdk/aws-certificatemanager/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-chatbot/package.json b/packages/@aws-cdk/aws-chatbot/package.json index 411d86b8decf6..fd0bd2e678b02 100644 --- a/packages/@aws-cdk/aws-chatbot/package.json +++ b/packages/@aws-cdk/aws-chatbot/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-cloud9/package.json b/packages/@aws-cdk/aws-cloud9/package.json index 75392c444cc7b..f03ea8fc68eb4 100644 --- a/packages/@aws-cdk/aws-cloud9/package.json +++ b/packages/@aws-cdk/aws-cloud9/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-cloudformation/package.json b/packages/@aws-cdk/aws-cloudformation/package.json index 5eb0f585689bb..7d6b8ce021e9c 100644 --- a/packages/@aws-cdk/aws-cloudformation/package.json +++ b/packages/@aws-cdk/aws-cloudformation/package.json @@ -104,7 +104,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-cloudfront-origins/package.json b/packages/@aws-cdk/aws-cloudfront-origins/package.json index eb6908473c01c..8ba4f39f0d7b3 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/package.json +++ b/packages/@aws-cdk/aws-cloudfront-origins/package.json @@ -95,7 +95,7 @@ "@aws-cdk/aws-elasticloadbalancingv2": "0.0.0" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-cloudfront/package.json b/packages/@aws-cdk/aws-cloudfront/package.json index 8b255441cc1c4..d75c587889e3d 100644 --- a/packages/@aws-cdk/aws-cloudfront/package.json +++ b/packages/@aws-cdk/aws-cloudfront/package.json @@ -108,7 +108,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-cloudtrail/package.json b/packages/@aws-cdk/aws-cloudtrail/package.json index d2c3b21697bb0..1d2e72f08a587 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -112,7 +112,7 @@ ] }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-cloudwatch-actions/package.json b/packages/@aws-cdk/aws-cloudwatch-actions/package.json index a500201df2b70..0ec045589ab34 100644 --- a/packages/@aws-cdk/aws-cloudwatch-actions/package.json +++ b/packages/@aws-cdk/aws-cloudwatch-actions/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-cloudwatch/package.json b/packages/@aws-cdk/aws-cloudwatch/package.json index 145245299dde3..ef6b44705ebc5 100644 --- a/packages/@aws-cdk/aws-cloudwatch/package.json +++ b/packages/@aws-cdk/aws-cloudwatch/package.json @@ -115,7 +115,7 @@ ] }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-codeartifact/package.json b/packages/@aws-cdk/aws-codeartifact/package.json index f7ecfab89b381..af2f92dc4d913 100644 --- a/packages/@aws-cdk/aws-codeartifact/package.json +++ b/packages/@aws-cdk/aws-codeartifact/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-codebuild/package.json b/packages/@aws-cdk/aws-codebuild/package.json index e68b7b6be514e..c6695504192d0 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -126,7 +126,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codecommit/package.json b/packages/@aws-cdk/aws-codecommit/package.json index d47b568fb74b2..b6984776ef19a 100644 --- a/packages/@aws-cdk/aws-codecommit/package.json +++ b/packages/@aws-cdk/aws-codecommit/package.json @@ -102,7 +102,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-codedeploy/package.json b/packages/@aws-cdk/aws-codedeploy/package.json index f148fda75d9a7..30f68f86a19a6 100644 --- a/packages/@aws-cdk/aws-codedeploy/package.json +++ b/packages/@aws-cdk/aws-codedeploy/package.json @@ -112,7 +112,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codeguruprofiler/package.json b/packages/@aws-cdk/aws-codeguruprofiler/package.json index de619dff0c1ce..427d99cfccf4e 100644 --- a/packages/@aws-cdk/aws-codeguruprofiler/package.json +++ b/packages/@aws-cdk/aws-codeguruprofiler/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-codegurureviewer/package.json b/packages/@aws-cdk/aws-codegurureviewer/package.json index ff9b04bf1dcca..9aa4f8c52be08 100644 --- a/packages/@aws-cdk/aws-codegurureviewer/package.json +++ b/packages/@aws-cdk/aws-codegurureviewer/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/package.json b/packages/@aws-cdk/aws-codepipeline-actions/package.json index d083acbf9cefd..7461f76edf534 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/package.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/package.json @@ -127,7 +127,7 @@ "case" ], "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-codepipeline/package.json b/packages/@aws-cdk/aws-codepipeline/package.json index 26bce804351c9..bf8f9fee5a456 100644 --- a/packages/@aws-cdk/aws-codepipeline/package.json +++ b/packages/@aws-cdk/aws-codepipeline/package.json @@ -107,7 +107,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codestar/package.json b/packages/@aws-cdk/aws-codestar/package.json index 56bac132e6acf..7e71ddca2b7b9 100644 --- a/packages/@aws-cdk/aws-codestar/package.json +++ b/packages/@aws-cdk/aws-codestar/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codestarconnections/package.json b/packages/@aws-cdk/aws-codestarconnections/package.json index 761c8e42b7df2..ad88fe1cda03b 100644 --- a/packages/@aws-cdk/aws-codestarconnections/package.json +++ b/packages/@aws-cdk/aws-codestarconnections/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-codestarnotifications/package.json b/packages/@aws-cdk/aws-codestarnotifications/package.json index 9c8feaf505dc3..6b6ee628a1565 100644 --- a/packages/@aws-cdk/aws-codestarnotifications/package.json +++ b/packages/@aws-cdk/aws-codestarnotifications/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-cognito/package.json b/packages/@aws-cdk/aws-cognito/package.json index 26064cc93dce1..085ef0953d4b7 100644 --- a/packages/@aws-cdk/aws-cognito/package.json +++ b/packages/@aws-cdk/aws-cognito/package.json @@ -104,7 +104,7 @@ "punycode" ], "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-config/package.json b/packages/@aws-cdk/aws-config/package.json index 5b8812acb1d8f..8c03cccbc41ef 100644 --- a/packages/@aws-cdk/aws-config/package.json +++ b/packages/@aws-cdk/aws-config/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-databrew/package.json b/packages/@aws-cdk/aws-databrew/package.json index 6a42329c36617..f516110f39116 100644 --- a/packages/@aws-cdk/aws-databrew/package.json +++ b/packages/@aws-cdk/aws-databrew/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-datapipeline/package.json b/packages/@aws-cdk/aws-datapipeline/package.json index 377bace5f77f4..f612b24e4bde1 100644 --- a/packages/@aws-cdk/aws-datapipeline/package.json +++ b/packages/@aws-cdk/aws-datapipeline/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-datasync/package.json b/packages/@aws-cdk/aws-datasync/package.json index 2b97e1d28dc2e..65d0fc8fab75a 100644 --- a/packages/@aws-cdk/aws-datasync/package.json +++ b/packages/@aws-cdk/aws-datasync/package.json @@ -81,17 +81,20 @@ "pkglint": "0.0.0" }, "dependencies": { - "@aws-cdk/core": "0.0.0" + "@aws-cdk/core": "0.0.0", + "constructs": "10.0.0-pre.5" }, "peerDependencies": { - "@aws-cdk/core": "0.0.0" + "@aws-cdk/core": "0.0.0", + "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", "awscdkio": { "announce": false - } + }, + "private": true } diff --git a/packages/@aws-cdk/aws-dax/package.json b/packages/@aws-cdk/aws-dax/package.json index b61cf80ba6694..6582f4fc69a19 100644 --- a/packages/@aws-cdk/aws-dax/package.json +++ b/packages/@aws-cdk/aws-dax/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-detective/package.json b/packages/@aws-cdk/aws-detective/package.json index c1f1e091807c4..bcc38a1b454ac 100644 --- a/packages/@aws-cdk/aws-detective/package.json +++ b/packages/@aws-cdk/aws-detective/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "awscdkio": { diff --git a/packages/@aws-cdk/aws-devopsguru/package.json b/packages/@aws-cdk/aws-devopsguru/package.json index 409a0d2a6b9c6..590085c5a5fed 100644 --- a/packages/@aws-cdk/aws-devopsguru/package.json +++ b/packages/@aws-cdk/aws-devopsguru/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-directoryservice/package.json b/packages/@aws-cdk/aws-directoryservice/package.json index 948fac3e84ef0..a3aaed26eb565 100644 --- a/packages/@aws-cdk/aws-directoryservice/package.json +++ b/packages/@aws-cdk/aws-directoryservice/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-dlm/package.json b/packages/@aws-cdk/aws-dlm/package.json index 6a816e5ee5590..d9bca4e2cd251 100644 --- a/packages/@aws-cdk/aws-dlm/package.json +++ b/packages/@aws-cdk/aws-dlm/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-dms/package.json b/packages/@aws-cdk/aws-dms/package.json index 1c3ff387a3029..40fa193c0c1d8 100644 --- a/packages/@aws-cdk/aws-dms/package.json +++ b/packages/@aws-cdk/aws-dms/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-docdb/package.json b/packages/@aws-cdk/aws-docdb/package.json index f16c155a95439..32aef49367ea5 100644 --- a/packages/@aws-cdk/aws-docdb/package.json +++ b/packages/@aws-cdk/aws-docdb/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-dynamodb-global/package.json b/packages/@aws-cdk/aws-dynamodb-global/package.json index 8bfdc673ae756..11ac33a37de9d 100644 --- a/packages/@aws-cdk/aws-dynamodb-global/package.json +++ b/packages/@aws-cdk/aws-dynamodb-global/package.json @@ -88,7 +88,7 @@ "rosetta:extract": "yarn --silent jsii-rosetta extract" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/@aws-cdk/aws-dynamodb/package.json b/packages/@aws-cdk/aws-dynamodb/package.json index 5637c871a4f55..c05531dbc3da4 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -108,7 +108,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-ec2/package.json b/packages/@aws-cdk/aws-ec2/package.json index afd9d1ae25081..9aa676bc06c33 100644 --- a/packages/@aws-cdk/aws-ec2/package.json +++ b/packages/@aws-cdk/aws-ec2/package.json @@ -113,7 +113,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ecr-assets/package.json b/packages/@aws-cdk/aws-ecr-assets/package.json index 0fa09d212e9b2..0129b307f72de 100644 --- a/packages/@aws-cdk/aws-ecr-assets/package.json +++ b/packages/@aws-cdk/aws-ecr-assets/package.json @@ -100,7 +100,7 @@ "statements": 70 }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "bundledDependencies": [ "minimatch" diff --git a/packages/@aws-cdk/aws-ecr/package.json b/packages/@aws-cdk/aws-ecr/package.json index 396c853a88c17..1b9f1a81f3c6a 100644 --- a/packages/@aws-cdk/aws-ecr/package.json +++ b/packages/@aws-cdk/aws-ecr/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ecs-patterns/package.json b/packages/@aws-cdk/aws-ecs-patterns/package.json index 5aa12690e1955..330a3466e1198 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/package.json +++ b/packages/@aws-cdk/aws-ecs-patterns/package.json @@ -109,7 +109,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-ecs/package.json b/packages/@aws-cdk/aws-ecs/package.json index b1a530e41c624..fbaf5bb20cc2c 100644 --- a/packages/@aws-cdk/aws-ecs/package.json +++ b/packages/@aws-cdk/aws-ecs/package.json @@ -143,7 +143,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-efs/package.json b/packages/@aws-cdk/aws-efs/package.json index 559a961679bc1..8ef7ebb087d9e 100644 --- a/packages/@aws-cdk/aws-efs/package.json +++ b/packages/@aws-cdk/aws-efs/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-eks-legacy/package.json b/packages/@aws-cdk/aws-eks-legacy/package.json index ca92246e41c7c..b5adddcd25205 100644 --- a/packages/@aws-cdk/aws-eks-legacy/package.json +++ b/packages/@aws-cdk/aws-eks-legacy/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-eks/package.json b/packages/@aws-cdk/aws-eks/package.json index 5f6e730dfdb33..773a62c580d25 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -118,7 +118,7 @@ "@aws-cdk/lambda-layer-kubectl": "0.0.0" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-elasticache/package.json b/packages/@aws-cdk/aws-elasticache/package.json index 8f89a5c5b7238..c28539b5b06b5 100644 --- a/packages/@aws-cdk/aws-elasticache/package.json +++ b/packages/@aws-cdk/aws-elasticache/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-elasticbeanstalk/package.json b/packages/@aws-cdk/aws-elasticbeanstalk/package.json index da4ed4bc4f320..c112c9280c718 100644 --- a/packages/@aws-cdk/aws-elasticbeanstalk/package.json +++ b/packages/@aws-cdk/aws-elasticbeanstalk/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-elasticloadbalancing/package.json b/packages/@aws-cdk/aws-elasticloadbalancing/package.json index 42612b65ae9ea..7792b2c813531 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancing/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancing/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "nyc": { "statements": 75 diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json b/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json index f0df897f6db29..ae4c86ed370c7 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json b/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json index 2c5de8a263103..a3813eea37f1d 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json b/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json index 25f2a85c1d082..141302e37b87a 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json @@ -108,7 +108,7 @@ "@aws-cdk/region-info": "0.0.0" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-elasticsearch/package.json b/packages/@aws-cdk/aws-elasticsearch/package.json index 07c8b997db14c..00cf8c59b320d 100644 --- a/packages/@aws-cdk/aws-elasticsearch/package.json +++ b/packages/@aws-cdk/aws-elasticsearch/package.json @@ -104,7 +104,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-emr/package.json b/packages/@aws-cdk/aws-emr/package.json index 184ed9060344a..12827772ad057 100644 --- a/packages/@aws-cdk/aws-emr/package.json +++ b/packages/@aws-cdk/aws-emr/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-events-targets/package.json b/packages/@aws-cdk/aws-events-targets/package.json index f11e930390fd6..b7f6923e10b0d 100644 --- a/packages/@aws-cdk/aws-events-targets/package.json +++ b/packages/@aws-cdk/aws-events-targets/package.json @@ -126,7 +126,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-events/package.json b/packages/@aws-cdk/aws-events/package.json index 4f4831fcd03c3..6ce0c48eb34db 100644 --- a/packages/@aws-cdk/aws-events/package.json +++ b/packages/@aws-cdk/aws-events/package.json @@ -94,7 +94,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-eventschemas/package.json b/packages/@aws-cdk/aws-eventschemas/package.json index c6430908d2217..a1f8138f6e3bf 100644 --- a/packages/@aws-cdk/aws-eventschemas/package.json +++ b/packages/@aws-cdk/aws-eventschemas/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-fms/package.json b/packages/@aws-cdk/aws-fms/package.json index 168a95167750b..37db1822688df 100644 --- a/packages/@aws-cdk/aws-fms/package.json +++ b/packages/@aws-cdk/aws-fms/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-fsx/package.json b/packages/@aws-cdk/aws-fsx/package.json index 39cac9ed7ffc0..62a572c56f0f1 100644 --- a/packages/@aws-cdk/aws-fsx/package.json +++ b/packages/@aws-cdk/aws-fsx/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-gamelift/package.json b/packages/@aws-cdk/aws-gamelift/package.json index fda4f58696f60..dbf22cc3ba4ce 100644 --- a/packages/@aws-cdk/aws-gamelift/package.json +++ b/packages/@aws-cdk/aws-gamelift/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-globalaccelerator/package.json b/packages/@aws-cdk/aws-globalaccelerator/package.json index 331ba5ddea4fc..40b1013bc82b8 100644 --- a/packages/@aws-cdk/aws-globalaccelerator/package.json +++ b/packages/@aws-cdk/aws-globalaccelerator/package.json @@ -96,7 +96,7 @@ "@aws-cdk/custom-resources": "0.0.0" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-glue/package.json b/packages/@aws-cdk/aws-glue/package.json index 1d50c80e32441..4a4a540875740 100644 --- a/packages/@aws-cdk/aws-glue/package.json +++ b/packages/@aws-cdk/aws-glue/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-greengrass/package.json b/packages/@aws-cdk/aws-greengrass/package.json index 93dfabe51ee99..606c143dbe8f3 100644 --- a/packages/@aws-cdk/aws-greengrass/package.json +++ b/packages/@aws-cdk/aws-greengrass/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-greengrassv2/package.json b/packages/@aws-cdk/aws-greengrassv2/package.json index 635baceaae643..d653e6304a4c4 100644 --- a/packages/@aws-cdk/aws-greengrassv2/package.json +++ b/packages/@aws-cdk/aws-greengrassv2/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-guardduty/package.json b/packages/@aws-cdk/aws-guardduty/package.json index 26a7e84f19f97..ffad049d9738a 100644 --- a/packages/@aws-cdk/aws-guardduty/package.json +++ b/packages/@aws-cdk/aws-guardduty/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iam/package.json b/packages/@aws-cdk/aws-iam/package.json index 1697e6f640398..ebb1a574fe55c 100644 --- a/packages/@aws-cdk/aws-iam/package.json +++ b/packages/@aws-cdk/aws-iam/package.json @@ -101,7 +101,7 @@ }, "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-imagebuilder/package.json b/packages/@aws-cdk/aws-imagebuilder/package.json index ff0ed2bbe9678..452e2f6ed8fa2 100644 --- a/packages/@aws-cdk/aws-imagebuilder/package.json +++ b/packages/@aws-cdk/aws-imagebuilder/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-inspector/package.json b/packages/@aws-cdk/aws-inspector/package.json index 72920e0d8da05..d767da5c11463 100644 --- a/packages/@aws-cdk/aws-inspector/package.json +++ b/packages/@aws-cdk/aws-inspector/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iot/package.json b/packages/@aws-cdk/aws-iot/package.json index 1a93905cc3e9f..ecb5945f55aba 100644 --- a/packages/@aws-cdk/aws-iot/package.json +++ b/packages/@aws-cdk/aws-iot/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iot1click/package.json b/packages/@aws-cdk/aws-iot1click/package.json index 6ca9e533cc1ea..5b2e454c8cb81 100644 --- a/packages/@aws-cdk/aws-iot1click/package.json +++ b/packages/@aws-cdk/aws-iot1click/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotanalytics/package.json b/packages/@aws-cdk/aws-iotanalytics/package.json index 4b630c634fb92..6d575f2a93943 100644 --- a/packages/@aws-cdk/aws-iotanalytics/package.json +++ b/packages/@aws-cdk/aws-iotanalytics/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotevents/package.json b/packages/@aws-cdk/aws-iotevents/package.json index 270da397bb18a..adba82161f209 100644 --- a/packages/@aws-cdk/aws-iotevents/package.json +++ b/packages/@aws-cdk/aws-iotevents/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotsitewise/package.json b/packages/@aws-cdk/aws-iotsitewise/package.json index 9a2540e65c512..aa3c45d292f89 100644 --- a/packages/@aws-cdk/aws-iotsitewise/package.json +++ b/packages/@aws-cdk/aws-iotsitewise/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotthingsgraph/package.json b/packages/@aws-cdk/aws-iotthingsgraph/package.json index 69732aa3d083e..2c4767ead3820 100644 --- a/packages/@aws-cdk/aws-iotthingsgraph/package.json +++ b/packages/@aws-cdk/aws-iotthingsgraph/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotwireless/package.json b/packages/@aws-cdk/aws-iotwireless/package.json index 0c23c066e878b..3fb0230c95f8a 100644 --- a/packages/@aws-cdk/aws-iotwireless/package.json +++ b/packages/@aws-cdk/aws-iotwireless/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-ivs/package.json b/packages/@aws-cdk/aws-ivs/package.json index 1d7d8f8ee01ab..185b02bf71af2 100644 --- a/packages/@aws-cdk/aws-ivs/package.json +++ b/packages/@aws-cdk/aws-ivs/package.json @@ -101,7 +101,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-kendra/package.json b/packages/@aws-cdk/aws-kendra/package.json index 85d72f4303039..155a344e95d7c 100644 --- a/packages/@aws-cdk/aws-kendra/package.json +++ b/packages/@aws-cdk/aws-kendra/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-kinesis/package.json b/packages/@aws-cdk/aws-kinesis/package.json index 5e19c404ba772..23b368db79eb4 100644 --- a/packages/@aws-cdk/aws-kinesis/package.json +++ b/packages/@aws-cdk/aws-kinesis/package.json @@ -96,7 +96,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-kinesisanalytics/package.json b/packages/@aws-cdk/aws-kinesisanalytics/package.json index 2daa7d2bd9f2b..58e6fff01d6f0 100644 --- a/packages/@aws-cdk/aws-kinesisanalytics/package.json +++ b/packages/@aws-cdk/aws-kinesisanalytics/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-kinesisfirehose/package.json b/packages/@aws-cdk/aws-kinesisfirehose/package.json index 471d30713a914..da5ce87c6c6c7 100644 --- a/packages/@aws-cdk/aws-kinesisfirehose/package.json +++ b/packages/@aws-cdk/aws-kinesisfirehose/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-kms/package.json b/packages/@aws-cdk/aws-kms/package.json index 16df28eb2ec90..6fa29b998daa0 100644 --- a/packages/@aws-cdk/aws-kms/package.json +++ b/packages/@aws-cdk/aws-kms/package.json @@ -94,7 +94,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-lakeformation/package.json b/packages/@aws-cdk/aws-lakeformation/package.json index 0282c39139f47..bf47bee33119f 100644 --- a/packages/@aws-cdk/aws-lakeformation/package.json +++ b/packages/@aws-cdk/aws-lakeformation/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-lambda-destinations/package.json b/packages/@aws-cdk/aws-lambda-destinations/package.json index 50e53b0389e75..9ff5c4376d83f 100644 --- a/packages/@aws-cdk/aws-lambda-destinations/package.json +++ b/packages/@aws-cdk/aws-lambda-destinations/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-lambda-event-sources/package.json b/packages/@aws-cdk/aws-lambda-event-sources/package.json index 332e03d15e83c..d633b09927b32 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/package.json +++ b/packages/@aws-cdk/aws-lambda-event-sources/package.json @@ -104,7 +104,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-lambda-nodejs/package.json b/packages/@aws-cdk/aws-lambda-nodejs/package.json index f7f5de7096541..daf110688f6fd 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/package.json +++ b/packages/@aws-cdk/aws-lambda-nodejs/package.json @@ -85,7 +85,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-lambda-python/package.json b/packages/@aws-cdk/aws-lambda-python/package.json index 5cab113b0f8f6..70a147b834984 100644 --- a/packages/@aws-cdk/aws-lambda-python/package.json +++ b/packages/@aws-cdk/aws-lambda-python/package.json @@ -84,7 +84,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-lambda/package.json b/packages/@aws-cdk/aws-lambda/package.json index 8c5def823b223..c67ad82ff7f74 100644 --- a/packages/@aws-cdk/aws-lambda/package.json +++ b/packages/@aws-cdk/aws-lambda/package.json @@ -128,7 +128,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-licensemanager/package.json b/packages/@aws-cdk/aws-licensemanager/package.json index 42d765826a30d..d20a899707fa0 100644 --- a/packages/@aws-cdk/aws-licensemanager/package.json +++ b/packages/@aws-cdk/aws-licensemanager/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-logs-destinations/package.json b/packages/@aws-cdk/aws-logs-destinations/package.json index 5185d7075e1e3..13e6a5543905c 100644 --- a/packages/@aws-cdk/aws-logs-destinations/package.json +++ b/packages/@aws-cdk/aws-logs-destinations/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-logs/package.json b/packages/@aws-cdk/aws-logs/package.json index 15041b63bc392..b8df0773819e7 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -103,7 +103,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-macie/package.json b/packages/@aws-cdk/aws-macie/package.json index 3d47c18c61083..b406426cc12e2 100644 --- a/packages/@aws-cdk/aws-macie/package.json +++ b/packages/@aws-cdk/aws-macie/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-managedblockchain/package.json b/packages/@aws-cdk/aws-managedblockchain/package.json index f9afaaef1e147..fa719693e2864 100644 --- a/packages/@aws-cdk/aws-managedblockchain/package.json +++ b/packages/@aws-cdk/aws-managedblockchain/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mediaconnect/package.json b/packages/@aws-cdk/aws-mediaconnect/package.json index 7c6fa4af10a93..cba3f940f3510 100644 --- a/packages/@aws-cdk/aws-mediaconnect/package.json +++ b/packages/@aws-cdk/aws-mediaconnect/package.json @@ -81,17 +81,20 @@ "pkglint": "0.0.0" }, "dependencies": { - "@aws-cdk/core": "0.0.0" + "@aws-cdk/core": "0.0.0", + "constructs": "10.0.0-pre.5" }, "peerDependencies": { - "@aws-cdk/core": "0.0.0" + "@aws-cdk/core": "0.0.0", + "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", "awscdkio": { "announce": false - } + }, + "private": true } diff --git a/packages/@aws-cdk/aws-mediaconvert/package.json b/packages/@aws-cdk/aws-mediaconvert/package.json index 0a44b32b9d184..de7f37a53ca1d 100644 --- a/packages/@aws-cdk/aws-mediaconvert/package.json +++ b/packages/@aws-cdk/aws-mediaconvert/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-medialive/package.json b/packages/@aws-cdk/aws-medialive/package.json index c6d5d99df2a29..8a6e1a6ed4095 100644 --- a/packages/@aws-cdk/aws-medialive/package.json +++ b/packages/@aws-cdk/aws-medialive/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mediapackage/package.json b/packages/@aws-cdk/aws-mediapackage/package.json index bfe6be1316e52..e8da81e9330ed 100644 --- a/packages/@aws-cdk/aws-mediapackage/package.json +++ b/packages/@aws-cdk/aws-mediapackage/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mediastore/package.json b/packages/@aws-cdk/aws-mediastore/package.json index a519de117fded..25fb05a01edb9 100644 --- a/packages/@aws-cdk/aws-mediastore/package.json +++ b/packages/@aws-cdk/aws-mediastore/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-msk/package.json b/packages/@aws-cdk/aws-msk/package.json index a65ca6e875c4d..62603ab056c80 100644 --- a/packages/@aws-cdk/aws-msk/package.json +++ b/packages/@aws-cdk/aws-msk/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mwaa/package.json b/packages/@aws-cdk/aws-mwaa/package.json index dc9b81df0ed47..1fa969e08b06d 100644 --- a/packages/@aws-cdk/aws-mwaa/package.json +++ b/packages/@aws-cdk/aws-mwaa/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-neptune/package.json b/packages/@aws-cdk/aws-neptune/package.json index a3ec119e4387a..1f006cbc69c52 100644 --- a/packages/@aws-cdk/aws-neptune/package.json +++ b/packages/@aws-cdk/aws-neptune/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-networkfirewall/package.json b/packages/@aws-cdk/aws-networkfirewall/package.json index f5bd7120e51ed..ca8c3ecf2bf30 100644 --- a/packages/@aws-cdk/aws-networkfirewall/package.json +++ b/packages/@aws-cdk/aws-networkfirewall/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-networkmanager/package.json b/packages/@aws-cdk/aws-networkmanager/package.json index a78f59a812e28..f15f61d559b79 100644 --- a/packages/@aws-cdk/aws-networkmanager/package.json +++ b/packages/@aws-cdk/aws-networkmanager/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-opsworks/package.json b/packages/@aws-cdk/aws-opsworks/package.json index cd7725a8fb859..ea9d4e937e706 100644 --- a/packages/@aws-cdk/aws-opsworks/package.json +++ b/packages/@aws-cdk/aws-opsworks/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-opsworkscm/package.json b/packages/@aws-cdk/aws-opsworkscm/package.json index 1a6ac9dc50b12..7d7647e4df78d 100644 --- a/packages/@aws-cdk/aws-opsworkscm/package.json +++ b/packages/@aws-cdk/aws-opsworkscm/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-pinpoint/package.json b/packages/@aws-cdk/aws-pinpoint/package.json index 1d5d4678eb364..779029d2c56a6 100644 --- a/packages/@aws-cdk/aws-pinpoint/package.json +++ b/packages/@aws-cdk/aws-pinpoint/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-pinpointemail/package.json b/packages/@aws-cdk/aws-pinpointemail/package.json index 1c1f984d535f2..c496a4050238b 100644 --- a/packages/@aws-cdk/aws-pinpointemail/package.json +++ b/packages/@aws-cdk/aws-pinpointemail/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-qldb/package.json b/packages/@aws-cdk/aws-qldb/package.json index cf6b0007c39ac..4ba97349e2de4 100644 --- a/packages/@aws-cdk/aws-qldb/package.json +++ b/packages/@aws-cdk/aws-qldb/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-ram/package.json b/packages/@aws-cdk/aws-ram/package.json index 97889d4010649..1d4706a60e3bd 100644 --- a/packages/@aws-cdk/aws-ram/package.json +++ b/packages/@aws-cdk/aws-ram/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-rds/package.json b/packages/@aws-cdk/aws-rds/package.json index ea25b5bd99d77..4505e29e5da29 100644 --- a/packages/@aws-cdk/aws-rds/package.json +++ b/packages/@aws-cdk/aws-rds/package.json @@ -109,7 +109,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-redshift/package.json b/packages/@aws-cdk/aws-redshift/package.json index 7347b516e04dd..5ce179a8c1419 100644 --- a/packages/@aws-cdk/aws-redshift/package.json +++ b/packages/@aws-cdk/aws-redshift/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-resourcegroups/package.json b/packages/@aws-cdk/aws-resourcegroups/package.json index 189f725467b50..47984d69dd1b1 100644 --- a/packages/@aws-cdk/aws-resourcegroups/package.json +++ b/packages/@aws-cdk/aws-resourcegroups/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-robomaker/package.json b/packages/@aws-cdk/aws-robomaker/package.json index 242d9f031ba37..f8485776136d7 100644 --- a/packages/@aws-cdk/aws-robomaker/package.json +++ b/packages/@aws-cdk/aws-robomaker/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-route53-patterns/package.json b/packages/@aws-cdk/aws-route53-patterns/package.json index 0e34f572424a9..b510696b08f54 100644 --- a/packages/@aws-cdk/aws-route53-patterns/package.json +++ b/packages/@aws-cdk/aws-route53-patterns/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-route53-targets/package.json b/packages/@aws-cdk/aws-route53-targets/package.json index 4aede2b1be6c8..c7ef229dc3407 100644 --- a/packages/@aws-cdk/aws-route53-targets/package.json +++ b/packages/@aws-cdk/aws-route53-targets/package.json @@ -106,7 +106,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-route53/package.json b/packages/@aws-cdk/aws-route53/package.json index 598fa93e424f3..f91398736574e 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -101,7 +101,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-route53resolver/package.json b/packages/@aws-cdk/aws-route53resolver/package.json index f13069a85a3f8..d1dcd3718c83c 100644 --- a/packages/@aws-cdk/aws-route53resolver/package.json +++ b/packages/@aws-cdk/aws-route53resolver/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-s3-assets/package.json b/packages/@aws-cdk/aws-s3-assets/package.json index 10dfc20dc1cd4..c3254542be8af 100644 --- a/packages/@aws-cdk/aws-s3-assets/package.json +++ b/packages/@aws-cdk/aws-s3-assets/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-s3-deployment/package.json b/packages/@aws-cdk/aws-s3-deployment/package.json index 0ae5312216d20..1c6a156813c45 100644 --- a/packages/@aws-cdk/aws-s3-deployment/package.json +++ b/packages/@aws-cdk/aws-s3-deployment/package.json @@ -111,7 +111,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-s3-notifications/package.json b/packages/@aws-cdk/aws-s3-notifications/package.json index 89d5fa86793b1..7f5bb8ab5a193 100644 --- a/packages/@aws-cdk/aws-s3-notifications/package.json +++ b/packages/@aws-cdk/aws-s3-notifications/package.json @@ -91,7 +91,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-s3/package.json b/packages/@aws-cdk/aws-s3/package.json index d6c0bfd1c0d8f..5fd6bb04be7b9 100644 --- a/packages/@aws-cdk/aws-s3/package.json +++ b/packages/@aws-cdk/aws-s3/package.json @@ -99,7 +99,7 @@ "@aws-cdk/cx-api": "0.0.0" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-sagemaker/package.json b/packages/@aws-cdk/aws-sagemaker/package.json index d6c58403a5414..e4981ab8180e0 100644 --- a/packages/@aws-cdk/aws-sagemaker/package.json +++ b/packages/@aws-cdk/aws-sagemaker/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-sam/package.json b/packages/@aws-cdk/aws-sam/package.json index e4ccbaa37c62f..fd6cd8628a312 100644 --- a/packages/@aws-cdk/aws-sam/package.json +++ b/packages/@aws-cdk/aws-sam/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-sdb/package.json b/packages/@aws-cdk/aws-sdb/package.json index 2ae25527bbcbf..c536472f8c508 100644 --- a/packages/@aws-cdk/aws-sdb/package.json +++ b/packages/@aws-cdk/aws-sdb/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-secretsmanager/package.json b/packages/@aws-cdk/aws-secretsmanager/package.json index 0420b2402529c..fd74429eddca2 100644 --- a/packages/@aws-cdk/aws-secretsmanager/package.json +++ b/packages/@aws-cdk/aws-secretsmanager/package.json @@ -102,7 +102,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-securityhub/package.json b/packages/@aws-cdk/aws-securityhub/package.json index cddae0a79b9b0..cdcd56d59ba6d 100644 --- a/packages/@aws-cdk/aws-securityhub/package.json +++ b/packages/@aws-cdk/aws-securityhub/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-servicecatalog/package.json b/packages/@aws-cdk/aws-servicecatalog/package.json index 535b2205ee518..ccbf4b26d856d 100644 --- a/packages/@aws-cdk/aws-servicecatalog/package.json +++ b/packages/@aws-cdk/aws-servicecatalog/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-servicediscovery/package.json b/packages/@aws-cdk/aws-servicediscovery/package.json index a2f12ab225ebc..99ee44935b839 100644 --- a/packages/@aws-cdk/aws-servicediscovery/package.json +++ b/packages/@aws-cdk/aws-servicediscovery/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ses-actions/package.json b/packages/@aws-cdk/aws-ses-actions/package.json index 31d1cfa549e39..a4b0472f346c3 100644 --- a/packages/@aws-cdk/aws-ses-actions/package.json +++ b/packages/@aws-cdk/aws-ses-actions/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-ses/package.json b/packages/@aws-cdk/aws-ses/package.json index bd5b41df2ce40..c44c7e3c4ef78 100644 --- a/packages/@aws-cdk/aws-ses/package.json +++ b/packages/@aws-cdk/aws-ses/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-signer/package.json b/packages/@aws-cdk/aws-signer/package.json index 26ae15e0fec33..1c8fdfa9efa8d 100644 --- a/packages/@aws-cdk/aws-signer/package.json +++ b/packages/@aws-cdk/aws-signer/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-sns-subscriptions/package.json b/packages/@aws-cdk/aws-sns-subscriptions/package.json index 7dfacbe739f40..8c39536ed26f0 100644 --- a/packages/@aws-cdk/aws-sns-subscriptions/package.json +++ b/packages/@aws-cdk/aws-sns-subscriptions/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-sns/package.json b/packages/@aws-cdk/aws-sns/package.json index b79497e6e998a..1e701393a8cff 100644 --- a/packages/@aws-cdk/aws-sns/package.json +++ b/packages/@aws-cdk/aws-sns/package.json @@ -105,7 +105,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-sqs/package.json b/packages/@aws-cdk/aws-sqs/package.json index bc9c7b928e5b9..7be27a709ae75 100644 --- a/packages/@aws-cdk/aws-sqs/package.json +++ b/packages/@aws-cdk/aws-sqs/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ssm/package.json b/packages/@aws-cdk/aws-ssm/package.json index 43b5bdc958e03..38f62f0bb40f3 100644 --- a/packages/@aws-cdk/aws-ssm/package.json +++ b/packages/@aws-cdk/aws-ssm/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-sso/package.json b/packages/@aws-cdk/aws-sso/package.json index ea7aaa1d2c45b..02842e0bbb53d 100644 --- a/packages/@aws-cdk/aws-sso/package.json +++ b/packages/@aws-cdk/aws-sso/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/package.json b/packages/@aws-cdk/aws-stepfunctions-tasks/package.json index 3176bf2829eb5..05e29937628d3 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/package.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/package.json @@ -118,7 +118,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-stepfunctions/package.json b/packages/@aws-cdk/aws-stepfunctions/package.json index 81c0056c5c017..9f20f1437939c 100644 --- a/packages/@aws-cdk/aws-stepfunctions/package.json +++ b/packages/@aws-cdk/aws-stepfunctions/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-synthetics/package.json b/packages/@aws-cdk/aws-synthetics/package.json index 2a4bc2170c834..e9c168a03b00d 100644 --- a/packages/@aws-cdk/aws-synthetics/package.json +++ b/packages/@aws-cdk/aws-synthetics/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "developer-preview", diff --git a/packages/@aws-cdk/aws-timestream/package.json b/packages/@aws-cdk/aws-timestream/package.json index c9c5c606d1361..40af4cde4d161 100644 --- a/packages/@aws-cdk/aws-timestream/package.json +++ b/packages/@aws-cdk/aws-timestream/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-transfer/package.json b/packages/@aws-cdk/aws-transfer/package.json index 5f30d3ad91603..e7537ca2a0c04 100644 --- a/packages/@aws-cdk/aws-transfer/package.json +++ b/packages/@aws-cdk/aws-transfer/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-waf/package.json b/packages/@aws-cdk/aws-waf/package.json index 907e68f31eb51..7bbbbd97f7287 100644 --- a/packages/@aws-cdk/aws-waf/package.json +++ b/packages/@aws-cdk/aws-waf/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-wafregional/package.json b/packages/@aws-cdk/aws-wafregional/package.json index 60f7c2052c232..f07a701b7d05f 100644 --- a/packages/@aws-cdk/aws-wafregional/package.json +++ b/packages/@aws-cdk/aws-wafregional/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-wafv2/package.json b/packages/@aws-cdk/aws-wafv2/package.json index f06a0b25d4d39..264600e14ddd5 100644 --- a/packages/@aws-cdk/aws-wafv2/package.json +++ b/packages/@aws-cdk/aws-wafv2/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-workspaces/package.json b/packages/@aws-cdk/aws-workspaces/package.json index 4c14d7649c0d7..d8dc39a0c53d1 100644 --- a/packages/@aws-cdk/aws-workspaces/package.json +++ b/packages/@aws-cdk/aws-workspaces/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/cdk-assets-schema/package.json b/packages/@aws-cdk/cdk-assets-schema/package.json index d38f3fb7674b5..041fcf748eea0 100644 --- a/packages/@aws-cdk/cdk-assets-schema/package.json +++ b/packages/@aws-cdk/cdk-assets-schema/package.json @@ -69,7 +69,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "deprecated", "awscdkio": { diff --git a/packages/@aws-cdk/cloud-assembly-schema/package.json b/packages/@aws-cdk/cloud-assembly-schema/package.json index 8c00c98860b9f..e24e4cab83995 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/package.json +++ b/packages/@aws-cdk/cloud-assembly-schema/package.json @@ -83,7 +83,7 @@ "semver" ], "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/cloudformation-diff/package.json b/packages/@aws-cdk/cloudformation-diff/package.json index 7179ae4210672..c317644bef177 100644 --- a/packages/@aws-cdk/cloudformation-diff/package.json +++ b/packages/@aws-cdk/cloudformation-diff/package.json @@ -49,7 +49,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index ada5611fdd6a4..6241f01c2e4b7 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -377,7 +377,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/core/package.json b/packages/@aws-cdk/core/package.json index b24326e58d238..c7162a5e3f31a 100644 --- a/packages/@aws-cdk/core/package.json +++ b/packages/@aws-cdk/core/package.json @@ -214,7 +214,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/custom-resources/package.json b/packages/@aws-cdk/custom-resources/package.json index 753f286cdf658..71e4ed01390f8 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -113,7 +113,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/cx-api/package.json b/packages/@aws-cdk/cx-api/package.json index e21884db8398c..248d5118d7f53 100644 --- a/packages/@aws-cdk/cx-api/package.json +++ b/packages/@aws-cdk/cx-api/package.json @@ -88,7 +88,7 @@ "semver" ], "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/example-construct-library/package.json b/packages/@aws-cdk/example-construct-library/package.json index 826d9b02e1b8b..4299e4b45bca1 100644 --- a/packages/@aws-cdk/example-construct-library/package.json +++ b/packages/@aws-cdk/example-construct-library/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/lambda-layer-awscli/package.json b/packages/@aws-cdk/lambda-layer-awscli/package.json index 44e7ed826958f..8b9cb0ffdb65e 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/package.json +++ b/packages/@aws-cdk/lambda-layer-awscli/package.json @@ -83,7 +83,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/lambda-layer-kubectl/package.json b/packages/@aws-cdk/lambda-layer-kubectl/package.json index 3b7c09f51e0af..a1a5a7d7b6e63 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/package.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/pipelines/package.json b/packages/@aws-cdk/pipelines/package.json index 59af9ff1fe5cf..507a60267d194 100644 --- a/packages/@aws-cdk/pipelines/package.json +++ b/packages/@aws-cdk/pipelines/package.json @@ -79,7 +79,7 @@ "delivery" ], "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "license": "Apache-2.0", "stability": "experimental", diff --git a/packages/@aws-cdk/region-info/package.json b/packages/@aws-cdk/region-info/package.json index 9db12073061e5..d0a1744c7cfee 100644 --- a/packages/@aws-cdk/region-info/package.json +++ b/packages/@aws-cdk/region-info/package.json @@ -72,7 +72,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/yaml-cfn/package.json b/packages/@aws-cdk/yaml-cfn/package.json index 873f32ac59a96..34b5c0f72363c 100644 --- a/packages/@aws-cdk/yaml-cfn/package.json +++ b/packages/@aws-cdk/yaml-cfn/package.json @@ -82,7 +82,7 @@ "jest": true }, "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@monocdk-experiment/rewrite-imports/package.json b/packages/@monocdk-experiment/rewrite-imports/package.json index 874cb01ecc201..8da599c16cc53 100644 --- a/packages/@monocdk-experiment/rewrite-imports/package.json +++ b/packages/@monocdk-experiment/rewrite-imports/package.json @@ -52,6 +52,6 @@ "stability": "experimental", "maturity": "developer-preview", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" } } diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 86d32e47c6f5c..d9e1b2e2d6aec 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -290,7 +290,7 @@ }, "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "keywords": [ "aws", diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index 93d6c0d5915a9..eb1351446e05e 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -103,7 +103,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "stability": "stable", "maturity": "stable" diff --git a/packages/awslint/package.json b/packages/awslint/package.json index 7e9ed60a7b4b3..14b68795adfba 100644 --- a/packages/awslint/package.json +++ b/packages/awslint/package.json @@ -48,6 +48,6 @@ "maturity": "developer-preview", "stability": "experimental", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" } } diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index 9ee9bf9e392a2..6968bb005fd02 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -62,7 +62,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "cdk-package": { "shrinkWrap": true diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 5679549505cc0..27803e34806af 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -293,7 +293,7 @@ }, "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "keywords": [ "aws", diff --git a/tools/cdk-build-tools/package.json b/tools/cdk-build-tools/package.json index 226ba63a75b81..e43def68cf890 100644 --- a/tools/cdk-build-tools/package.json +++ b/tools/cdk-build-tools/package.json @@ -67,7 +67,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "ubergen": { "exclude": true diff --git a/tools/cdk-integ-tools/package.json b/tools/cdk-integ-tools/package.json index 8685d8435f8dc..f5ce70a844cf5 100644 --- a/tools/cdk-integ-tools/package.json +++ b/tools/cdk-integ-tools/package.json @@ -48,7 +48,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "peerDependencies": { "@aws-cdk/assert": "0.0.0" diff --git a/tools/cfn2ts/package.json b/tools/cfn2ts/package.json index 785d1a52c18b0..f808cfaabe092 100644 --- a/tools/cfn2ts/package.json +++ b/tools/cfn2ts/package.json @@ -49,7 +49,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "ubergen": { "exclude": true diff --git a/tools/pkgtools/package.json b/tools/pkgtools/package.json index d5255e81d465d..f9130019bdc41 100644 --- a/tools/pkgtools/package.json +++ b/tools/pkgtools/package.json @@ -44,7 +44,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "ubergen": { "exclude": true diff --git a/tools/ubergen/package.json b/tools/ubergen/package.json index 483d7ecfa4dfa..77bb68c7a3d0b 100644 --- a/tools/ubergen/package.json +++ b/tools/ubergen/package.json @@ -41,7 +41,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "ubergen": { "exclude": true diff --git a/tools/yarn-cling/package.json b/tools/yarn-cling/package.json index aefba13ff8ee0..02516633ef5f5 100644 --- a/tools/yarn-cling/package.json +++ b/tools/yarn-cling/package.json @@ -54,7 +54,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" + "node": ">= 14.15.0" }, "ubergen": { "exclude": true From 14c3027b648282c04e027b40b121c811888c9f0b Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Sun, 17 Jan 2021 11:52:50 +0200 Subject: [PATCH 49/54] add import --- packages/@aws-cdk/aws-s3/lib/bucket.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-s3/lib/bucket.ts b/packages/@aws-cdk/aws-s3/lib/bucket.ts index c904a840782ed..4dbda84d6b34d 100644 --- a/packages/@aws-cdk/aws-s3/lib/bucket.ts +++ b/packages/@aws-cdk/aws-s3/lib/bucket.ts @@ -4,7 +4,7 @@ import * as events from '@aws-cdk/aws-events'; import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; import { - Fn, IResource, Lazy, RemovalPolicy, Resource, Stack, Token, + Fn, IResource, Lazy, RemovalPolicy, Resource, ResourceProps, Stack, Token, CustomResource, CustomResourceProvider, CustomResourceProviderRuntime, FeatureFlags, } from '@aws-cdk/core'; import * as cxapi from '@aws-cdk/cx-api'; From d35fcac33657296e8c4cffe01fbe59703032d259 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Sun, 17 Jan 2021 13:14:04 +0200 Subject: [PATCH 50/54] add import --- packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts index f58cc62487c95..8fde7e8b7694f 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts @@ -1,4 +1,5 @@ import * as acm from '@aws-cdk/aws-certificatemanager'; +import { Construct } from 'constructs'; import { CfnVirtualNode } from './appmesh.generated'; /** From fea7d8adecadb9234008830f365643e5bf91ab43 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Sun, 17 Jan 2021 14:29:33 +0200 Subject: [PATCH 51/54] fix appmesh --- packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts index 9c31598bf2709..9428b2fd41748 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts @@ -115,7 +115,8 @@ class VirtualGatewayListenerImpl extends VirtualGatewayListener { * Called when the GatewayListener type is initialized. Can be used to enforce * mutual exclusivity */ - public bind(_scope: Construct): VirtualGatewayListenerConfig { + public bind(scope: Construct): VirtualGatewayListenerConfig { + const tlsConfig = this.tlsCertificate?.bind(scope); return { listener: { portMapping: { From 3ce0f16772ce9b71145def77a7460e4d83f1e152 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Sun, 17 Jan 2021 14:31:13 +0200 Subject: [PATCH 52/54] more appmesh fixes --- packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts index d7f3674346307..f918fb9443228 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts @@ -123,7 +123,8 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { private readonly port: number = 8080, private readonly tlsCertificate: TlsCertificate | undefined) { super(); } - public bind(_scope: Construct): VirtualNodeListenerConfig { + public bind(scope: Construct): VirtualNodeListenerConfig { + const tlsConfig = this.tlsCertificate?.bind(scope); return { listener: { portMapping: { From ac0908c00c20edf6be43fce5fc1dd1bedb5cc054 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Sun, 17 Jan 2021 14:56:12 +0200 Subject: [PATCH 53/54] fix --- .../ecs-service-extensions/lib/extensions/container.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts index 1d7cd817d088d..0635c24c6f759 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts @@ -1,4 +1,5 @@ import * as ecs from '@aws-cdk/aws-ecs'; +import { Construct } from 'constructs'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; From 156b8512d17e3b6fcc6c63ef6695347b09630db5 Mon Sep 17 00:00:00 2001 From: Nick Lynch Date: Mon, 18 Jan 2021 11:51:14 +0000 Subject: [PATCH 54/54] Revert "chore: forward merge 'master' to 'v2-main' (#12552)" This reverts commit fe1da26f113d25ec908d9ea893d4d4634ea1ef65. --- .../auto-approve-v2-merge-forward.yml | 4 +- .yarnrc | 1 - CHANGELOG.md | 51 - allowed-breaking-changes.txt | 4 - .../lib/extensions/cloudwatch-agent.ts | 2 +- .../lib/extensions/container.ts | 6 +- .../lib/extensions/xray.ts | 3 +- .../ecs-service-extensions/package.json | 2 +- packages/@aws-cdk/alexa-ask/README.md | 8 + packages/@aws-cdk/alexa-ask/package.json | 4 +- packages/@aws-cdk/app-delivery/package.json | 2 +- packages/@aws-cdk/assert/package.json | 2 +- packages/@aws-cdk/assets/package.json | 2 +- .../@aws-cdk/aws-accessanalyzer/package.json | 2 +- packages/@aws-cdk/aws-acmpca/README.md | 8 - packages/@aws-cdk/aws-acmpca/package.json | 4 +- packages/@aws-cdk/aws-amazonmq/package.json | 2 +- packages/@aws-cdk/aws-amplify/package.json | 2 +- packages/@aws-cdk/aws-apigateway/package.json | 2 +- .../package.json | 2 +- packages/@aws-cdk/aws-apigatewayv2/README.md | 8 +- .../@aws-cdk/aws-apigatewayv2/lib/http/api.ts | 31 +- .../@aws-cdk/aws-apigatewayv2/package.json | 2 +- .../aws-apigatewayv2/test/http/api.test.ts | 24 - packages/@aws-cdk/aws-appconfig/package.json | 2 +- packages/@aws-cdk/aws-appflow/package.json | 2 +- .../lib/step-scaling-policy.ts | 2 +- .../aws-applicationautoscaling/package.json | 2 +- .../aws-applicationinsights/package.json | 2 +- packages/@aws-cdk/aws-appmesh/README.md | 38 - packages/@aws-cdk/aws-appmesh/lib/index.ts | 1 - .../aws-appmesh/lib/service-discovery.ts | 1 + .../aws-appmesh/lib/tls-certificate.ts | 173 - .../lib/virtual-gateway-listener.ts | 115 +- .../aws-appmesh/lib/virtual-node-listener.ts | 34 +- packages/@aws-cdk/aws-appmesh/package.json | 4 +- .../aws-appmesh/test/integ.mesh.expected.json | 30 - .../@aws-cdk/aws-appmesh/test/integ.mesh.ts | 14 - .../aws-appmesh/test/test.virtual-gateway.ts | 138 +- .../aws-appmesh/test/test.virtual-node.ts | 143 - packages/@aws-cdk/aws-appstream/package.json | 2 +- packages/@aws-cdk/aws-appsync/README.md | 13 +- .../@aws-cdk/aws-appsync/lib/data-source.ts | 14 +- packages/@aws-cdk/aws-appsync/package.json | 2 +- .../aws-appsync/test/appsync-rds.test.ts | 26 - packages/@aws-cdk/aws-athena/package.json | 2 +- .../@aws-cdk/aws-auditmanager/.eslintrc.js | 3 - packages/@aws-cdk/aws-auditmanager/.gitignore | 19 - packages/@aws-cdk/aws-auditmanager/.npmignore | 28 - packages/@aws-cdk/aws-auditmanager/LICENSE | 201 -- packages/@aws-cdk/aws-auditmanager/NOTICE | 2 - packages/@aws-cdk/aws-auditmanager/README.md | 20 - .../@aws-cdk/aws-auditmanager/jest.config.js | 2 - .../@aws-cdk/aws-auditmanager/lib/index.ts | 2 - .../@aws-cdk/aws-auditmanager/package.json | 100 - .../test/auditmanager.test.ts | 6 - .../aws-autoscaling-common/package.json | 2 +- .../aws-autoscaling-hooktargets/package.json | 2 +- .../@aws-cdk/aws-autoscaling/package.json | 2 +- .../aws-autoscalingplans/package.json | 2 +- packages/@aws-cdk/aws-backup/package.json | 2 +- packages/@aws-cdk/aws-batch/package.json | 2 +- packages/@aws-cdk/aws-budgets/package.json | 2 +- packages/@aws-cdk/aws-cassandra/package.json | 2 +- packages/@aws-cdk/aws-ce/package.json | 2 +- .../aws-certificatemanager/package.json | 2 +- packages/@aws-cdk/aws-chatbot/package.json | 2 +- packages/@aws-cdk/aws-cloud9/package.json | 2 +- .../@aws-cdk/aws-cloudformation/package.json | 2 +- .../aws-cloudfront-origins/package.json | 4 +- packages/@aws-cdk/aws-cloudfront/package.json | 4 +- packages/@aws-cdk/aws-cloudtrail/package.json | 4 +- .../aws-cloudwatch-actions/package.json | 2 +- packages/@aws-cdk/aws-cloudwatch/package.json | 2 +- .../@aws-cdk/aws-codeartifact/package.json | 2 +- .../@aws-cdk/aws-codebuild/lib/project.ts | 8 +- packages/@aws-cdk/aws-codebuild/package.json | 4 +- packages/@aws-cdk/aws-codecommit/package.json | 4 +- packages/@aws-cdk/aws-codedeploy/package.json | 2 +- .../aws-codeguruprofiler/package.json | 2 +- .../aws-codegurureviewer/package.json | 2 +- .../lib/s3/deploy-action.ts | 6 - .../aws-codepipeline-actions/package.json | 2 +- .../integ.pipeline-s3-deploy.expected.json | 231 +- .../test/integ.pipeline-s3-deploy.ts | 5 +- .../@aws-cdk/aws-codepipeline/package.json | 2 +- packages/@aws-cdk/aws-codestar/package.json | 2 +- .../aws-codestarconnections/package.json | 2 +- .../aws-codestarnotifications/package.json | 2 +- packages/@aws-cdk/aws-cognito/package.json | 2 +- packages/@aws-cdk/aws-config/package.json | 2 +- packages/@aws-cdk/aws-databrew/package.json | 2 +- .../@aws-cdk/aws-datapipeline/package.json | 2 +- packages/@aws-cdk/aws-datasync/.eslintrc.js | 3 - packages/@aws-cdk/aws-datasync/.gitignore | 19 - packages/@aws-cdk/aws-datasync/.npmignore | 28 - packages/@aws-cdk/aws-datasync/LICENSE | 201 -- packages/@aws-cdk/aws-datasync/NOTICE | 2 - packages/@aws-cdk/aws-datasync/README.md | 20 - packages/@aws-cdk/aws-datasync/jest.config.js | 2 - packages/@aws-cdk/aws-datasync/lib/index.ts | 2 - packages/@aws-cdk/aws-datasync/package.json | 100 - .../aws-datasync/test/datasync.test.ts | 6 - packages/@aws-cdk/aws-dax/package.json | 2 +- packages/@aws-cdk/aws-detective/package.json | 2 +- packages/@aws-cdk/aws-devopsguru/package.json | 2 +- .../aws-directoryservice/package.json | 2 +- packages/@aws-cdk/aws-dlm/package.json | 2 +- packages/@aws-cdk/aws-dms/package.json | 2 +- packages/@aws-cdk/aws-docdb/package.json | 2 +- .../@aws-cdk/aws-dynamodb-global/package.json | 2 +- packages/@aws-cdk/aws-dynamodb/package.json | 4 +- .../@aws-cdk/aws-ec2/lib/security-group.ts | 7 - packages/@aws-cdk/aws-ec2/package.json | 2 +- packages/@aws-cdk/aws-ecr-assets/package.json | 2 +- packages/@aws-cdk/aws-ecr/package.json | 2 +- .../@aws-cdk/aws-ecs-patterns/package.json | 2 +- packages/@aws-cdk/aws-ecs/lib/cluster.ts | 93 +- packages/@aws-cdk/aws-ecs/package.json | 2 +- .../ec2/integ.environment-file.expected.json | 26 +- .../@aws-cdk/aws-ecs/test/test.ecs-cluster.ts | 53 - packages/@aws-cdk/aws-efs/package.json | 2 +- packages/@aws-cdk/aws-eks-legacy/package.json | 2 +- packages/@aws-cdk/aws-eks/README.md | 44 +- packages/@aws-cdk/aws-eks/lib/cluster.ts | 24 +- .../@aws-cdk/aws-eks/lib/managed-nodegroup.ts | 54 +- packages/@aws-cdk/aws-eks/package.json | 4 +- .../test/integ.eks-cluster.expected.json | 2 +- .../@aws-cdk/aws-eks/test/test.cluster.ts | 44 +- .../@aws-cdk/aws-eks/test/test.nodegroup.ts | 86 - .../@aws-cdk/aws-elasticache/package.json | 2 +- .../aws-elasticbeanstalk/package.json | 2 +- .../aws-elasticloadbalancing/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../aws-elasticloadbalancingv2/package.json | 2 +- .../@aws-cdk/aws-elasticsearch/lib/domain.ts | 49 +- .../@aws-cdk/aws-elasticsearch/package.json | 2 +- .../aws-elasticsearch/test/domain.test.ts | 105 +- ...asticsearch.advancedsecurity.expected.json | 15 +- ...elasticsearch.custom-kms-key.expected.json | 8 +- .../test/integ.elasticsearch.expected.json | 14 +- ...sticsearch.unsignedbasicauth.expected.json | 19 +- packages/@aws-cdk/aws-emr/package.json | 2 +- .../@aws-cdk/aws-events-targets/package.json | 4 +- packages/@aws-cdk/aws-events/package.json | 2 +- .../@aws-cdk/aws-eventschemas/package.json | 2 +- packages/@aws-cdk/aws-fms/package.json | 2 +- packages/@aws-cdk/aws-fsx/package.json | 2 +- packages/@aws-cdk/aws-gamelift/package.json | 2 +- .../aws-globalaccelerator/package.json | 2 +- packages/@aws-cdk/aws-glue/package.json | 2 +- packages/@aws-cdk/aws-greengrass/package.json | 2 +- .../@aws-cdk/aws-greengrassv2/package.json | 2 +- packages/@aws-cdk/aws-guardduty/package.json | 2 +- packages/@aws-cdk/aws-iam/README.md | 28 - packages/@aws-cdk/aws-iam/lib/user.ts | 44 +- packages/@aws-cdk/aws-iam/package.json | 2 +- .../aws-iam/test/integ.user.expected.json | 13 +- packages/@aws-cdk/aws-iam/test/integ.user.ts | 14 +- packages/@aws-cdk/aws-iam/test/user.test.ts | 28 +- .../@aws-cdk/aws-imagebuilder/package.json | 2 +- packages/@aws-cdk/aws-inspector/package.json | 2 +- packages/@aws-cdk/aws-iot/package.json | 2 +- packages/@aws-cdk/aws-iot1click/package.json | 2 +- .../@aws-cdk/aws-iotanalytics/package.json | 2 +- packages/@aws-cdk/aws-iotevents/package.json | 2 +- .../@aws-cdk/aws-iotsitewise/package.json | 2 +- .../@aws-cdk/aws-iotthingsgraph/package.json | 2 +- .../@aws-cdk/aws-iotwireless/package.json | 2 +- packages/@aws-cdk/aws-ivs/package.json | 2 +- packages/@aws-cdk/aws-kendra/package.json | 2 +- packages/@aws-cdk/aws-kinesis/package.json | 2 +- .../aws-kinesisanalytics/package.json | 2 +- .../@aws-cdk/aws-kinesisfirehose/package.json | 2 +- packages/@aws-cdk/aws-kms/package.json | 2 +- .../@aws-cdk/aws-lakeformation/package.json | 2 +- .../aws-lambda-destinations/package.json | 2 +- .../aws-lambda-event-sources/package.json | 2 +- .../@aws-cdk/aws-lambda-nodejs/package.json | 4 +- .../@aws-cdk/aws-lambda-python/package.json | 2 +- packages/@aws-cdk/aws-lambda/README.md | 4 +- packages/@aws-cdk/aws-lambda/lib/code.ts | 3 - packages/@aws-cdk/aws-lambda/package.json | 2 +- .../@aws-cdk/aws-lambda/test/code.test.ts | 20 - .../@aws-cdk/aws-licensemanager/package.json | 2 +- .../aws-logs-destinations/package.json | 2 +- packages/@aws-cdk/aws-logs/package.json | 4 +- packages/@aws-cdk/aws-macie/package.json | 2 +- .../aws-managedblockchain/package.json | 2 +- .../@aws-cdk/aws-mediaconnect/.eslintrc.js | 3 - packages/@aws-cdk/aws-mediaconnect/.gitignore | 19 - packages/@aws-cdk/aws-mediaconnect/.npmignore | 28 - packages/@aws-cdk/aws-mediaconnect/LICENSE | 201 -- packages/@aws-cdk/aws-mediaconnect/NOTICE | 2 - packages/@aws-cdk/aws-mediaconnect/README.md | 20 - .../@aws-cdk/aws-mediaconnect/jest.config.js | 2 - .../@aws-cdk/aws-mediaconnect/lib/index.ts | 2 - .../@aws-cdk/aws-mediaconnect/package.json | 100 - .../test/mediaconnect.test.ts | 6 - .../@aws-cdk/aws-mediaconvert/package.json | 2 +- packages/@aws-cdk/aws-medialive/package.json | 2 +- .../@aws-cdk/aws-mediapackage/package.json | 2 +- packages/@aws-cdk/aws-mediastore/package.json | 2 +- packages/@aws-cdk/aws-msk/package.json | 2 +- packages/@aws-cdk/aws-mwaa/package.json | 2 +- packages/@aws-cdk/aws-neptune/package.json | 2 +- .../@aws-cdk/aws-networkfirewall/package.json | 2 +- .../@aws-cdk/aws-networkmanager/package.json | 2 +- packages/@aws-cdk/aws-opsworks/package.json | 2 +- packages/@aws-cdk/aws-opsworkscm/package.json | 2 +- packages/@aws-cdk/aws-pinpoint/package.json | 2 +- .../@aws-cdk/aws-pinpointemail/package.json | 2 +- packages/@aws-cdk/aws-qldb/package.json | 2 +- packages/@aws-cdk/aws-ram/package.json | 2 +- .../@aws-cdk/aws-rds/lib/cluster-engine.ts | 8 - packages/@aws-cdk/aws-rds/package.json | 2 +- packages/@aws-cdk/aws-redshift/package.json | 2 +- .../@aws-cdk/aws-resourcegroups/package.json | 2 +- packages/@aws-cdk/aws-robomaker/package.json | 2 +- .../aws-route53-patterns/package.json | 2 +- .../@aws-cdk/aws-route53-targets/package.json | 2 +- packages/@aws-cdk/aws-route53/package.json | 4 +- .../@aws-cdk/aws-route53resolver/README.md | 8 + .../@aws-cdk/aws-route53resolver/package.json | 4 +- packages/@aws-cdk/aws-s3-assets/package.json | 2 +- .../aws-s3-deployment/lib/lambda/index.py | 8 +- .../@aws-cdk/aws-s3-deployment/package.json | 2 +- ...bucket-deployment-cloudfront.expected.json | 22 +- .../integ.bucket-deployment.expected.json | 22 +- .../aws-s3-deployment/test/lambda/test.py | 22 +- .../aws-s3-notifications/package.json | 2 +- packages/@aws-cdk/aws-s3/lib/bucket.ts | 39 +- packages/@aws-cdk/aws-s3/lib/perms.ts | 16 +- packages/@aws-cdk/aws-s3/package.json | 8 +- packages/@aws-cdk/aws-s3/test/bucket.test.ts | 400 +-- packages/@aws-cdk/aws-sagemaker/package.json | 2 +- packages/@aws-cdk/aws-sam/package.json | 2 +- packages/@aws-cdk/aws-sdb/package.json | 2 +- .../@aws-cdk/aws-secretsmanager/package.json | 2 +- .../@aws-cdk/aws-securityhub/package.json | 2 +- .../@aws-cdk/aws-servicecatalog/package.json | 2 +- .../aws-servicediscovery/package.json | 2 +- .../@aws-cdk/aws-ses-actions/package.json | 2 +- packages/@aws-cdk/aws-ses/package.json | 2 +- packages/@aws-cdk/aws-signer/package.json | 2 +- .../aws-sns-subscriptions/package.json | 2 +- packages/@aws-cdk/aws-sns/README.md | 3 - packages/@aws-cdk/aws-sns/lib/topic.ts | 15 +- packages/@aws-cdk/aws-sns/package.json | 2 +- .../@aws-cdk/aws-sns/test/integ.sns-fifo.ts | 2 +- packages/@aws-cdk/aws-sns/test/test.sns.ts | 64 +- packages/@aws-cdk/aws-sqs/package.json | 4 +- packages/@aws-cdk/aws-ssm/package.json | 2 +- packages/@aws-cdk/aws-sso/package.json | 2 +- .../aws-stepfunctions-tasks/README.md | 2 +- .../aws-stepfunctions-tasks/package.json | 2 +- .../@aws-cdk/aws-stepfunctions/package.json | 2 +- packages/@aws-cdk/aws-synthetics/package.json | 2 +- packages/@aws-cdk/aws-timestream/package.json | 2 +- packages/@aws-cdk/aws-transfer/package.json | 2 +- packages/@aws-cdk/aws-waf/package.json | 2 +- .../@aws-cdk/aws-wafregional/package.json | 2 +- packages/@aws-cdk/aws-wafv2/package.json | 2 +- packages/@aws-cdk/aws-workspaces/package.json | 2 +- .../@aws-cdk/cdk-assets-schema/package.json | 2 +- packages/@aws-cdk/cfnspec/CHANGELOG.md | 469 --- .../build-tools/create-missing-libraries.ts | 2 +- packages/@aws-cdk/cfnspec/cfn.version | 2 +- ...0_CloudFormationResourceSpecification.json | 2778 ++++------------- .../cfnspec/spec-source/000_sam.spec.json | 30 +- ...ngTemplate_Tags_CorrectItemType_patch.json | 21 + .../570_Athena_Workgroup_Tags_patch.json | 36 + .../610_IoT_Authorizer_Tags_patch.json | 16 + ...figuration_Tags_CorrectItemType_patch.json | 21 + .../711_AuditMgr_Assesment_patch.json | 13 + .../lib/assets/docker-image-asset.ts | 18 +- .../lib/assets/file-asset.ts | 15 +- .../cloud-assembly-schema/package.json | 4 +- .../schema/assets.schema.json | 36 +- .../schema/cloud-assembly.version.json | 2 +- .../cloud-assembly-schema/test/assets.test.ts | 46 +- .../@aws-cdk/cloudformation-diff/package.json | 2 +- .../cloudformation-include/package.json | 8 +- packages/@aws-cdk/core/README.md | 8 - packages/@aws-cdk/core/lib/assets.ts | 36 +- .../stack-synthesizers/default-synthesizer.ts | 37 +- .../core/lib/stack-synthesizers/legacy.ts | 8 - packages/@aws-cdk/core/lib/stack.ts | 25 - packages/@aws-cdk/core/package.json | 2 +- packages/@aws-cdk/core/test/stack.test.ts | 62 - .../@aws-cdk/custom-resources/package.json | 4 +- packages/@aws-cdk/cx-api/lib/features.ts | 11 - packages/@aws-cdk/cx-api/package.json | 2 +- .../example-construct-library/package.json | 2 +- .../@aws-cdk/lambda-layer-awscli/package.json | 2 +- .../lambda-layer-kubectl/package.json | 2 +- packages/@aws-cdk/pipelines/package.json | 2 +- packages/@aws-cdk/region-info/package.json | 2 +- packages/@aws-cdk/yaml-cfn/package.json | 2 +- .../rewrite-imports/package.json | 2 +- packages/aws-cdk-lib/package.json | 5 +- packages/aws-cdk/README.md | 3 - packages/aws-cdk/bin/cdk.ts | 5 +- packages/aws-cdk/lib/cdk-toolkit.ts | 7 +- .../v1/app/python/.template.gitignore | 1 - packages/aws-cdk/lib/settings.ts | 3 +- packages/aws-cdk/package.json | 6 +- packages/aws-cdk/test/cdk-toolkit.test.ts | 10 - packages/aws-cdk/test/usersettings.test.ts | 72 - packages/awslint/package.json | 2 +- packages/cdk-assets/README.md | 35 - .../lib/private/handlers/container-images.ts | 95 +- .../cdk-assets/lib/private/handlers/files.ts | 65 +- .../cdk-assets/lib/private/handlers/index.ts | 2 +- packages/cdk-assets/package.json | 4 +- .../cdk-assets/test/docker-images.test.ts | 67 +- packages/cdk-assets/test/files.test.ts | 64 +- .../cdk-assets/test/mock-child_process.ts | 8 +- packages/decdk/package.json | 3 - packages/monocdk/package.json | 5 +- scripts/check-api-compatibility.sh | 21 +- tools/cdk-build-tools/bin/cdk-build.ts | 9 +- tools/cdk-build-tools/config/eslintrc.js | 1 - tools/cdk-build-tools/package.json | 2 +- tools/cdk-integ-tools/package.json | 2 +- tools/cfn2ts/package.json | 2 +- tools/eslint-plugin-cdk/lib/index.ts | 1 - .../lib/private/import-cache.ts | 4 - .../lib/rules/no-qualified-construct.ts | 134 - tools/pkglint/lib/rules.ts | 46 +- tools/pkgtools/package.json | 2 +- tools/ubergen/package.json | 2 +- tools/yarn-cling/package.json | 2 +- version.v1.json | 2 +- yarn.lock | 29 +- 336 files changed, 1729 insertions(+), 6813 deletions(-) delete mode 100644 packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts delete mode 100644 packages/@aws-cdk/aws-auditmanager/.eslintrc.js delete mode 100644 packages/@aws-cdk/aws-auditmanager/.gitignore delete mode 100644 packages/@aws-cdk/aws-auditmanager/.npmignore delete mode 100644 packages/@aws-cdk/aws-auditmanager/LICENSE delete mode 100644 packages/@aws-cdk/aws-auditmanager/NOTICE delete mode 100644 packages/@aws-cdk/aws-auditmanager/README.md delete mode 100644 packages/@aws-cdk/aws-auditmanager/jest.config.js delete mode 100644 packages/@aws-cdk/aws-auditmanager/lib/index.ts delete mode 100644 packages/@aws-cdk/aws-auditmanager/package.json delete mode 100644 packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts delete mode 100644 packages/@aws-cdk/aws-datasync/.eslintrc.js delete mode 100644 packages/@aws-cdk/aws-datasync/.gitignore delete mode 100644 packages/@aws-cdk/aws-datasync/.npmignore delete mode 100644 packages/@aws-cdk/aws-datasync/LICENSE delete mode 100644 packages/@aws-cdk/aws-datasync/NOTICE delete mode 100644 packages/@aws-cdk/aws-datasync/README.md delete mode 100644 packages/@aws-cdk/aws-datasync/jest.config.js delete mode 100644 packages/@aws-cdk/aws-datasync/lib/index.ts delete mode 100644 packages/@aws-cdk/aws-datasync/package.json delete mode 100644 packages/@aws-cdk/aws-datasync/test/datasync.test.ts delete mode 100644 packages/@aws-cdk/aws-mediaconnect/.eslintrc.js delete mode 100644 packages/@aws-cdk/aws-mediaconnect/.gitignore delete mode 100644 packages/@aws-cdk/aws-mediaconnect/.npmignore delete mode 100644 packages/@aws-cdk/aws-mediaconnect/LICENSE delete mode 100644 packages/@aws-cdk/aws-mediaconnect/NOTICE delete mode 100644 packages/@aws-cdk/aws-mediaconnect/README.md delete mode 100644 packages/@aws-cdk/aws-mediaconnect/jest.config.js delete mode 100644 packages/@aws-cdk/aws-mediaconnect/lib/index.ts delete mode 100644 packages/@aws-cdk/aws-mediaconnect/package.json delete mode 100644 packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts create mode 100644 packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json create mode 100644 packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json create mode 100644 packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json create mode 100644 packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json create mode 100644 packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json delete mode 100644 packages/aws-cdk/test/usersettings.test.ts delete mode 100644 tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts diff --git a/.github/workflows/auto-approve-v2-merge-forward.yml b/.github/workflows/auto-approve-v2-merge-forward.yml index f05cd6753316c..96dd3d0837e6e 100644 --- a/.github/workflows/auto-approve-v2-merge-forward.yml +++ b/.github/workflows/auto-approve-v2-merge-forward.yml @@ -1,7 +1,7 @@ # Automatically approve PRs that merge master forward to v2-main # # Only does approvals! mergify takes care of the actual merge. -name: Auto-approve automated PRs around CDK v2 +name: Auto-approve forward merges onto v2-main on: pull_request: types: @@ -21,6 +21,6 @@ jobs: if: > github.event.pull_request.user.login == 'aws-cdk-automation' && github.event.pull_request.base.ref == 'v2-main' - && contains(github.event.pull_request.labels.*.name, 'pr/auto-approve') + && contains(github.event.pull_request.labels.*.name, 'pr/forward-merge') with: github-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.yarnrc b/.yarnrc index 46241e3f5e5bc..591e9c3d57b96 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1,2 +1 @@ --install.check-files true # install will verify file tree of packages for consistency -ignore-engines true # the 'engines' key for 'aws-cdk-lib' has specifies node14 as min while v1 will remain at node10 diff --git a/CHANGELOG.md b/CHANGELOG.md index 731ddcf6c5e4f..4f5ba6592ea70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,57 +2,6 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. -## [1.85.0](https://github.com/aws/aws-cdk/compare/v1.84.0...v1.85.0) (2021-01-14) - -* **s3-deployment**: This version includes an important update, please upgrade to prevent deployment failure. This is in prepartion of Lambda deprecation of the request module in boto, more details are available in [AWS blog](https://aws.amazon.com/blogs/compute/upcoming-changes-to-the-python-sdk-in-aws-lambda/). Note, users of versions < `1.81.0` will not be impacted by this deprecation, but are still encouraged to upgrade to the latest version. - -### Features - -* **apigatewayv2:** http api - disable execute api endpoint ([#12426](https://github.com/aws/aws-cdk/issues/12426)) ([1724da7](https://github.com/aws/aws-cdk/commit/1724da758666ec92f7b923c899d2f2f439083ba2)), closes [#12241](https://github.com/aws/aws-cdk/issues/12241) -* **appmesh:** add listener TLS certificates for VirtualNodes and VirtualGateways ([#11863](https://github.com/aws/aws-cdk/issues/11863)) ([175a257](https://github.com/aws/aws-cdk/commit/175a2570465d484aa0a73a7bded34e686da493ed)), closes [#10051](https://github.com/aws/aws-cdk/issues/10051) -* **cfnspec:** CloudFormation resource specification update to v23.0.0 ([#12490](https://github.com/aws/aws-cdk/issues/12490)) ([a7a2236](https://github.com/aws/aws-cdk/commit/a7a2236367f8f01b00b6d90f1d3fe7bf674b1aee)) - - -### Bug Fixes - -* **appsync:** rds data source configured with cluster arn ([#12255](https://github.com/aws/aws-cdk/issues/12255)) ([d0305f3](https://github.com/aws/aws-cdk/commit/d0305f33da41ce1f07a5d571eb21c0ee9ea852d0)), closes [#11536](https://github.com/aws/aws-cdk/issues/11536) -* **aws-ecs:** Support configuring Windows capacity for cluster ASGs ([#12365](https://github.com/aws/aws-cdk/issues/12365)) ([6d9a0f1](https://github.com/aws/aws-cdk/commit/6d9a0f1ea0c05e7902ccca4d0fc4040e688846e5)) -* **eks:** aws-node-termination-handler incorrectly deployed to on-demand instances as well ([#12369](https://github.com/aws/aws-cdk/issues/12369)) ([05c0b5f](https://github.com/aws/aws-cdk/commit/05c0b5f5a31c3fe89c47c6db8d9051f7165641a9)), closes [#12368](https://github.com/aws/aws-cdk/issues/12368) -* **s3:** Bucket.grantWrite() no longer adds s3:PutObject* permission ([#12391](https://github.com/aws/aws-cdk/issues/12391)) ([cd437cf](https://github.com/aws/aws-cdk/commit/cd437cf630266086a3ddf9e326f215b5d1acdfd7)) -* **s3-deployment:** stop using deprecated API's that will cause breakage post 01/31/21 ([#12491](https://github.com/aws/aws-cdk/issues/12491)) ([f50f928](https://github.com/aws/aws-cdk/commit/f50f92880bbc219c331c858eaace712e0757507d)) -* **sns:** require topic name for fifo topic [#12386](https://github.com/aws/aws-cdk/issues/12386) ([#12437](https://github.com/aws/aws-cdk/issues/12437)) ([37d8ccc](https://github.com/aws/aws-cdk/commit/37d8ccc763f532999bc9f114264f3d29725b0f28)) - -## [1.84.0](https://github.com/aws/aws-cdk/compare/v1.83.0...v1.84.0) (2021-01-12) - - -### ⚠ BREAKING CHANGES TO EXPERIMENTAL FEATURES - -* **apigatewayv2:** `subnets` prop in `VpcLink` resource now takes `SubnetSelection` instead of `ISubnet[]` - -### Features - -* **aws-lambda-nodejs:** add esbuild `define` bundling option ([#12424](https://github.com/aws/aws-cdk/issues/12424)) ([581f6af](https://github.com/aws/aws-cdk/commit/581f6af3d1f71737ca93b6ecb9b004bdade149a8)), closes [#12423](https://github.com/aws/aws-cdk/issues/12423) -* **cdk-assets:** add external asset support ([#12259](https://github.com/aws/aws-cdk/issues/12259)) ([05a9980](https://github.com/aws/aws-cdk/commit/05a998065b3333854715c456b20b7cc5d5daac67)) -* **cli:** `--quiet` does not print template in `cdk synth` ([#12178](https://github.com/aws/aws-cdk/issues/12178)) ([74458a0](https://github.com/aws/aws-cdk/commit/74458a0e9eebce4ee254673aad8933d39588d843)), closes [#11970](https://github.com/aws/aws-cdk/issues/11970) -* **codebuild:** support Standard 5.0 ([#12434](https://github.com/aws/aws-cdk/issues/12434)) ([422dc8e](https://github.com/aws/aws-cdk/commit/422dc8e9d50105af4e710d409a4f301079d43f3f)), closes [#12433](https://github.com/aws/aws-cdk/issues/12433) -* **core:** validate maximum amount of resources in a stack ([#12193](https://github.com/aws/aws-cdk/issues/12193)) ([26121c8](https://github.com/aws/aws-cdk/commit/26121c81abf0fb92de97567c758a1ecf60f85f63)), closes [#276](https://github.com/aws/aws-cdk/issues/276) -* **eks:** spot interruption handler can be disabled for self managed nodes ([#12453](https://github.com/aws/aws-cdk/issues/12453)) ([6ac1f4f](https://github.com/aws/aws-cdk/commit/6ac1f4fdef5853785d8e57652ec4c4e1d770844d)), closes [#12451](https://github.com/aws/aws-cdk/issues/12451) -* **synthetics:** Update Cloudwatch Synthetics canaries NodeJS runtimes ([#11866](https://github.com/aws/aws-cdk/issues/11866)) ([4f6e377](https://github.com/aws/aws-cdk/commit/4f6e377ae3f35c3fa010e1597c3d71ef6e6e9a04)), closes [#11870](https://github.com/aws/aws-cdk/issues/11870) - - -### Bug Fixes - -* **apigatewayv2:** vpclink - explicit subnet specification still causes private subnets to be included ([#12401](https://github.com/aws/aws-cdk/issues/12401)) ([336a58f](https://github.com/aws/aws-cdk/commit/336a58f06a3b3a9f5db2a79350f8721244767e3b)), closes [#12083](https://github.com/aws/aws-cdk/issues/12083) -* **cli:** CLI doesn't read context from ~/.cdk.json ([#12394](https://github.com/aws/aws-cdk/issues/12394)) ([2389a9b](https://github.com/aws/aws-cdk/commit/2389a9b5742583f1d58c66a4f513ee4d833baab5)), closes [#10823](https://github.com/aws/aws-cdk/issues/10823) [#4802](https://github.com/aws/aws-cdk/issues/4802) -* **core:** DefaultStackSynthesizer bucket prefix missing for template assets ([#11855](https://github.com/aws/aws-cdk/issues/11855)) ([50a3d3a](https://github.com/aws/aws-cdk/commit/50a3d3acf3e413d9b4e51197d2be4ea1349c0955)), closes [#10710](https://github.com/aws/aws-cdk/issues/10710) [#11327](https://github.com/aws/aws-cdk/issues/11327) -* **dynamodb:** missing grantRead for ConditionCheckItem ([#12313](https://github.com/aws/aws-cdk/issues/12313)) ([e157007](https://github.com/aws/aws-cdk/commit/e1570072440b07b6b82219c1a4371386c541fb1c)) -* **ec2:** interface endpoint AZ lookup does not guard against broken situations ([#12033](https://github.com/aws/aws-cdk/issues/12033)) ([80f0bfd](https://github.com/aws/aws-cdk/commit/80f0bfd167430a015e71b00506e0ecc280068e86)) -* **eks:** nodegroup synthesis fails when configured with an AMI type that is not compatible to the default instance type ([#12441](https://github.com/aws/aws-cdk/issues/12441)) ([5f6f0f9](https://github.com/aws/aws-cdk/commit/5f6f0f9d46dbd460ac03dd5f9f4874eaa41611d8)), closes [#12389](https://github.com/aws/aws-cdk/issues/12389) -* **elasticsearch:** domain fails due to log publishing keys on unsupported cluster versions ([#11622](https://github.com/aws/aws-cdk/issues/11622)) ([e6bb96f](https://github.com/aws/aws-cdk/commit/e6bb96ff6bae96e3167c82f6de97807217ddb3be)) -* **elbv2:** can't import two application listeners into the same scope ([#12373](https://github.com/aws/aws-cdk/issues/12373)) ([6534dcf](https://github.com/aws/aws-cdk/commit/6534dcf3e04a55f5c6d28203192cbbddb5d119e6)), closes [#12132](https://github.com/aws/aws-cdk/issues/12132) -* **logs:** custom resource Lambda uses old NodeJS version ([#12228](https://github.com/aws/aws-cdk/issues/12228)) ([29c4943](https://github.com/aws/aws-cdk/commit/29c4943466f4a911f65a2a13cf9e776ade9b8dfe)) -* **stepfunctions-tasks:** EvaluateExpression does not support JSON paths with dash ([#12248](https://github.com/aws/aws-cdk/issues/12248)) ([da1ed08](https://github.com/aws/aws-cdk/commit/da1ed08a6a2de584f5ddf43dab4efbb530541419)), closes [#12221](https://github.com/aws/aws-cdk/issues/12221) - ## [1.83.0](https://github.com/aws/aws-cdk/compare/v1.82.0...v1.83.0) (2021-01-06) diff --git a/allowed-breaking-changes.txt b/allowed-breaking-changes.txt index 2ca2ca5b6067f..9120903b01912 100644 --- a/allowed-breaking-changes.txt +++ b/allowed-breaking-changes.txt @@ -52,7 +52,3 @@ incompatible-argument:@aws-cdk/aws-ecs.FargateTaskDefinition. incompatible-argument:@aws-cdk/aws-ecs.FargateTaskDefinition.addVolume incompatible-argument:@aws-cdk/aws-ecs.TaskDefinition. incompatible-argument:@aws-cdk/aws-ecs.TaskDefinition.addVolume - -# We made properties optional and it's really fine but our differ doesn't think so. -weakened:@aws-cdk/cloud-assembly-schema.DockerImageSource -weakened:@aws-cdk/cloud-assembly-schema.FileSource diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts index b4bbd4286ae9f..a6d6bd19e49c8 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/cloudwatch-agent.ts @@ -70,4 +70,4 @@ export class CloudwatchAgentExtension extends ServiceExtension { }); } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts index 0635c24c6f759..3ae65bfe6994b 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/container.ts @@ -1,5 +1,5 @@ import * as ecs from '@aws-cdk/aws-ecs'; -import { Construct } from 'constructs'; +import * as cdk from '@aws-cdk/core'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; @@ -59,7 +59,7 @@ export class Container extends ServiceExtension { } // @ts-ignore - Ignore unused params that are required for abstract class extend - public prehook(service: Service, scope: Construct) { + public prehook(service: Service, scope: cdk.Construct) { this.parentService = service; } @@ -142,4 +142,4 @@ export class Container extends ServiceExtension { }); } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts index 652d6a5dd8b7d..3ba344f4133d8 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts +++ b/packages/@aws-cdk-containers/ecs-service-extensions/lib/extensions/xray.ts @@ -1,7 +1,6 @@ import * as ecs from '@aws-cdk/aws-ecs'; import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; -import { Construct } from 'constructs'; import { Service } from '../service'; import { ServiceExtension } from './extension-interfaces'; @@ -18,7 +17,7 @@ export class XRayExtension extends ServiceExtension { } // @ts-ignore - Ignore unused params that are required for abstract class extend - public prehook(service: Service, scope: Construct) { + public prehook(service: Service, scope: cdk.Construct) { this.parentService = service; } diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/package.json b/packages/@aws-cdk-containers/ecs-service-extensions/package.json index 4b2e3f0a2de28..eea2d3553aa45 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/package.json +++ b/packages/@aws-cdk-containers/ecs-service-extensions/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awscdkio": { "announce": false diff --git a/packages/@aws-cdk/alexa-ask/README.md b/packages/@aws-cdk/alexa-ask/README.md index 766afeef6d3cd..125b909867ec7 100644 --- a/packages/@aws-cdk/alexa-ask/README.md +++ b/packages/@aws-cdk/alexa-ask/README.md @@ -9,6 +9,14 @@ > > [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib +![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) + +> The APIs of higher level constructs in this module are experimental and under active development. +> They are subject to non-backward compatible changes or removal in any future version. These are +> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be +> announced in the release notes. This means that while you may use them, you may need to update +> your source code when upgrading to a newer version of this package. + --- diff --git a/packages/@aws-cdk/alexa-ask/package.json b/packages/@aws-cdk/alexa-ask/package.json index b14e11df91d8e..7758e78a06c8a 100644 --- a/packages/@aws-cdk/alexa-ask/package.json +++ b/packages/@aws-cdk/alexa-ask/package.json @@ -89,10 +89,10 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", - "maturity": "cfn-only", + "maturity": "experimental", "awscdkio": { "announce": false } diff --git a/packages/@aws-cdk/app-delivery/package.json b/packages/@aws-cdk/app-delivery/package.json index 929246d143257..50ec9c01b73cf 100644 --- a/packages/@aws-cdk/app-delivery/package.json +++ b/packages/@aws-cdk/app-delivery/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "deprecated", "maturity": "deprecated", diff --git a/packages/@aws-cdk/assert/package.json b/packages/@aws-cdk/assert/package.json index c5178d691e66a..c2444a9ede633 100644 --- a/packages/@aws-cdk/assert/package.json +++ b/packages/@aws-cdk/assert/package.json @@ -51,7 +51,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/assets/package.json b/packages/@aws-cdk/assets/package.json index 7c2d554666f99..b1791d6fa0963 100644 --- a/packages/@aws-cdk/assets/package.json +++ b/packages/@aws-cdk/assets/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "deprecated", "maturity": "deprecated", diff --git a/packages/@aws-cdk/aws-accessanalyzer/package.json b/packages/@aws-cdk/aws-accessanalyzer/package.json index f71b75a9da62d..5d1c39ee62e43 100644 --- a/packages/@aws-cdk/aws-accessanalyzer/package.json +++ b/packages/@aws-cdk/aws-accessanalyzer/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-acmpca/README.md b/packages/@aws-cdk/aws-acmpca/README.md index 04d167836539c..fd3c39c9f5e4c 100644 --- a/packages/@aws-cdk/aws-acmpca/README.md +++ b/packages/@aws-cdk/aws-acmpca/README.md @@ -9,14 +9,6 @@ > > [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib -![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) - -> The APIs of higher level constructs in this module are experimental and under active development. -> They are subject to non-backward compatible changes or removal in any future version. These are -> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be -> announced in the release notes. This means that while you may use them, you may need to update -> your source code when upgrading to a newer version of this package. - --- diff --git a/packages/@aws-cdk/aws-acmpca/package.json b/packages/@aws-cdk/aws-acmpca/package.json index d462cce372238..5422e74d07d87 100644 --- a/packages/@aws-cdk/aws-acmpca/package.json +++ b/packages/@aws-cdk/aws-acmpca/package.json @@ -90,10 +90,10 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", - "maturity": "experimental", + "maturity": "cfn-only", "awscdkio": { "announce": false } diff --git a/packages/@aws-cdk/aws-amazonmq/package.json b/packages/@aws-cdk/aws-amazonmq/package.json index 9402b6afcc479..9676bb176e4f2 100644 --- a/packages/@aws-cdk/aws-amazonmq/package.json +++ b/packages/@aws-cdk/aws-amazonmq/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-amplify/package.json b/packages/@aws-cdk/aws-amplify/package.json index 49f6496d7ae0f..1fd6faa048cb4 100644 --- a/packages/@aws-cdk/aws-amplify/package.json +++ b/packages/@aws-cdk/aws-amplify/package.json @@ -101,7 +101,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-apigateway/package.json b/packages/@aws-cdk/aws-apigateway/package.json index 976a0d8cad79f..109bb8bbf704a 100644 --- a/packages/@aws-cdk/aws-apigateway/package.json +++ b/packages/@aws-cdk/aws-apigateway/package.json @@ -112,7 +112,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "nyc": { "exclude": [ diff --git a/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json b/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json index 70cd006b9282b..49b9cbb3cd2ae 100644 --- a/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json +++ b/packages/@aws-cdk/aws-apigatewayv2-integrations/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-apigatewayv2/README.md b/packages/@aws-cdk/aws-apigatewayv2/README.md index 1fda5a731ff40..297ec5ce2bfdb 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/README.md +++ b/packages/@aws-cdk/aws-apigatewayv2/README.md @@ -95,13 +95,7 @@ httpApi.addRoutes({ }); ``` -The URL to the endpoint can be retrieved via the `apiEndpoint` attribute. By default this URL is enabled for clients. Use `disableExecuteApiEndpoint` to disable it. - -```ts -const httpApi = new HttpApi(stack, 'HttpApi', { - disableExecuteApiEndpoint: true, -}); -``` +The URL to the endpoint can be retrieved via the `apiEndpoint` attribute. The `defaultIntegration` option while defining HTTP APIs lets you create a default catch-all integration that is matched when a client reaches a route that is not explicitly defined. diff --git a/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts b/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts index 5ced1f20f18a0..cc2e646443f0e 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/lib/http/api.ts @@ -128,15 +128,6 @@ export interface HttpApiProps { * @default - no default domain mapping configured. meaningless if `createDefaultStage` is `false`. */ readonly defaultDomainMapping?: DefaultDomainMappingOptions; - - /** - * Specifies whether clients can invoke your API using the default endpoint. - * By default, clients can invoke your API with the default - * `https://{api_id}.execute-api.{region}.amazonaws.com` endpoint. Enable - * this if you would like clients to use your custom domain name. - * @default false execute-api endpoint enabled. - */ - readonly disableExecuteApiEndpoint?: boolean; } /** @@ -292,24 +283,17 @@ export class HttpApi extends HttpApiBase { */ public readonly httpApiName?: string; public readonly httpApiId: string; - - /** - * Specifies whether clients can invoke this HTTP API by using the default execute-api endpoint. - */ - public readonly disableExecuteApiEndpoint?: boolean; + public readonly apiEndpoint: string; /** * default stage of the api resource */ public readonly defaultStage: HttpStage | undefined; - private readonly _apiEndpoint: string; - constructor(scope: Construct, id: string, props?: HttpApiProps) { super(scope, id); this.httpApiName = props?.apiName ?? id; - this.disableExecuteApiEndpoint = props?.disableExecuteApiEndpoint; let corsConfiguration: CfnApi.CorsProperty | undefined; if (props?.corsPreflight) { @@ -340,12 +324,11 @@ export class HttpApi extends HttpApiBase { protocolType: 'HTTP', corsConfiguration, description: props?.description, - disableExecuteApiEndpoint: this.disableExecuteApiEndpoint, }; const resource = new CfnApi(this, 'Resource', apiProps); this.httpApiId = resource.ref; - this._apiEndpoint = resource.attrApiEndpoint; + this.apiEndpoint = resource.attrApiEndpoint; if (props?.defaultIntegration) { new HttpRoute(this, 'DefaultRoute', { @@ -374,16 +357,6 @@ export class HttpApi extends HttpApiBase { } } - /** - * Get the default endpoint for this API. - */ - public get apiEndpoint(): string { - if (this.disableExecuteApiEndpoint) { - throw new Error('apiEndpoint is not accessible when disableExecuteApiEndpoint is set to true.'); - } - return this._apiEndpoint; - } - /** * Get the URL to the default stage of this API. * Returns `undefined` if `createDefaultStage` is unset. diff --git a/packages/@aws-cdk/aws-apigatewayv2/package.json b/packages/@aws-cdk/aws-apigatewayv2/package.json index 47d08c5f18ce5..2273b4773d06f 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/package.json +++ b/packages/@aws-cdk/aws-apigatewayv2/package.json @@ -102,7 +102,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts index 70bc45000ddec..b061f613f4ca3 100644 --- a/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts +++ b/packages/@aws-cdk/aws-apigatewayv2/test/http/api.test.ts @@ -215,19 +215,6 @@ describe('HttpApi', () => { }); }); - test('disableExecuteApiEndpoint is enabled', () => { - const stack = new Stack(); - new HttpApi(stack, 'api', { - disableExecuteApiEndpoint: true, - }); - - expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { - Name: 'api', - ProtocolType: 'HTTP', - DisableExecuteApiEndpoint: true, - }); - }); - test('can add a vpc links', () => { // GIVEN const stack = new Stack(); @@ -274,17 +261,6 @@ describe('HttpApi', () => { expect(api.apiEndpoint).toBeDefined(); }); - test('throws when accessing apiEndpoint and disableExecuteApiEndpoint is true', () => { - const stack = new Stack(); - const api = new HttpApi(stack, 'api', { - disableExecuteApiEndpoint: true, - }); - - expect(() => api.apiEndpoint).toThrow( - /apiEndpoint is not accessible when disableExecuteApiEndpoint is set to true./, - ); - }); - test('apiEndpoint for imported', () => { const stack = new Stack(); const api = HttpApi.fromHttpApiAttributes(stack, 'imported', { httpApiId: 'api-1234' }); diff --git a/packages/@aws-cdk/aws-appconfig/package.json b/packages/@aws-cdk/aws-appconfig/package.json index a5a4ff2cffeaf..2b53f982ac627 100644 --- a/packages/@aws-cdk/aws-appconfig/package.json +++ b/packages/@aws-cdk/aws-appconfig/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-appflow/package.json b/packages/@aws-cdk/aws-appflow/package.json index c4c9e0656ece7..77ecabd32dfc7 100644 --- a/packages/@aws-cdk/aws-appflow/package.json +++ b/packages/@aws-cdk/aws-appflow/package.json @@ -87,7 +87,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts index 092609125e70f..1949e53f771e2 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/step-scaling-policy.ts @@ -57,7 +57,7 @@ export interface StepScalingPolicyProps extends BasicStepScalingPolicyProps { } /** - * Define a scaling strategy which scales depending on absolute values of some metric. + * Define a acaling strategy which scales depending on absolute values of some metric. * * You can specify the scaling behavior for various values of the metric. * diff --git a/packages/@aws-cdk/aws-applicationautoscaling/package.json b/packages/@aws-cdk/aws-applicationautoscaling/package.json index 9fdb2bc837af4..a05d2c8d7a96b 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/package.json +++ b/packages/@aws-cdk/aws-applicationautoscaling/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "nyc": { "branches": 65, diff --git a/packages/@aws-cdk/aws-applicationinsights/package.json b/packages/@aws-cdk/aws-applicationinsights/package.json index 143f9273c9f58..046e2e03399c8 100644 --- a/packages/@aws-cdk/aws-applicationinsights/package.json +++ b/packages/@aws-cdk/aws-applicationinsights/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-appmesh/README.md b/packages/@aws-cdk/aws-appmesh/README.md index 2253b12d2987d..9a4fcddf386cc 100644 --- a/packages/@aws-cdk/aws-appmesh/README.md +++ b/packages/@aws-cdk/aws-appmesh/README.md @@ -241,44 +241,6 @@ The `backends` property can be added with `node.addBackend()`. We define a virtu The `backendsDefaultClientPolicy` property are added to the node while creating the virtual node. These are virtual node's service backends client policy defaults. -## Adding TLS to a listener - -The `tlsCertificate` property can be added to a Virtual Node listener or Virtual Gateway listener to add TLS configuration. -A certificate from AWS Certificate Manager can be incorporated or a customer provided certificate can be specified with a `certificateChain` path file and a `privateKey` file path. - -```typescript -import * as certificatemanager from '@aws-cdk/aws-certificatemanager'; - -// A Virtual Node with listener TLS from an ACM provided certificate -const cert = new certificatemanager.Certificate(this, 'cert', {...}); - -const node = new appmesh.VirtualNode(stack, 'node', { - mesh, - dnsHostName: 'node', - listeners: [appmesh.VirtualNodeListener.grpc({ - port: 80, - tlsCertificate: appmesh.TlsCertificate.acm({ - certificate: cert, - tlsMode: TlsMode.STRICT, - }), - })], -}); - -// A Virtual Gateway with listener TLS from a customer provided file certificate -const gateway = new appmesh.VirtualGateway(this, 'gateway', { - mesh: mesh, - listeners: [appmesh.VirtualGatewayListener.grpc({ - port: 8080, - tlsCertificate: appmesh.TlsCertificate.file({ - certificateChain: 'path/to/certChain', - privateKey: 'path/to/privateKey', - tlsMode: TlsMode.STRICT, - }), - })], - virtualGatewayName: 'gateway', -}); -``` - ## Adding a Route A `route` is associated with a virtual router, and it's used to match requests for a virtual router and distribute traffic accordingly to its associated virtual nodes. diff --git a/packages/@aws-cdk/aws-appmesh/lib/index.ts b/packages/@aws-cdk/aws-appmesh/lib/index.ts index 1f5ca87def34d..a10ef54aa977b 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/index.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/index.ts @@ -5,7 +5,6 @@ export * from './route'; export * from './service-discovery'; export * from './route-spec'; export * from './shared-interfaces'; -export * from './tls-certificate'; export * from './virtual-node'; export * from './virtual-router'; export * from './virtual-router-listener'; diff --git a/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts b/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts index 5793bbf746eda..91884cecb2550 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/service-discovery.ts @@ -2,6 +2,7 @@ import * as cloudmap from '@aws-cdk/aws-servicediscovery'; import { Construct } from 'constructs'; import { CfnVirtualNode } from './appmesh.generated'; + /** * Represents the properties needed to define CloudMap Service Discovery */ diff --git a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts b/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts deleted file mode 100644 index 8fde7e8b7694f..0000000000000 --- a/packages/@aws-cdk/aws-appmesh/lib/tls-certificate.ts +++ /dev/null @@ -1,173 +0,0 @@ -import * as acm from '@aws-cdk/aws-certificatemanager'; -import { Construct } from 'constructs'; -import { CfnVirtualNode } from './appmesh.generated'; - -/** - * Enum of supported TLS modes - */ -export enum TlsMode { - /** - * Only accept encrypted traffic - */ - STRICT = 'STRICT', - - /** - * Accept encrypted and plaintext traffic. - */ - PERMISSIVE = 'PERMISSIVE', - - /** - * TLS is disabled, only accept plaintext traffic. - */ - DISABLED = 'DISABLED', -} - -/** - * A wrapper for the tls config returned by {@link TlsCertificate.bind} - */ -export interface TlsCertificateConfig { - /** - * The CFN shape for a listener TLS certificate - */ - readonly tlsCertificate: CfnVirtualNode.ListenerTlsCertificateProperty, - - /** - * The TLS mode. - */ - readonly tlsMode: TlsMode; -} - -/** - * ACM Certificate Properties - */ -export interface AcmCertificateOptions { - /** - * The TLS mode. - */ - readonly tlsMode: TlsMode; - - /** - * The ACM certificate - */ - readonly certificate: acm.ICertificate; -} - -/** - * File Certificate Properties - */ -export interface FileCertificateOptions { - /** - * The TLS mode. - */ - readonly tlsMode: TlsMode; - - /** - * The file path of the certificate chain file. - */ - readonly certificateChainPath: string; - - /** - * The file path of the private key file. - */ - readonly privateKeyPath: string; -} - -/** - * Represents a TLS certificate - */ -export abstract class TlsCertificate { - /** - * Returns an File TLS Certificate - */ - public static file(props: FileCertificateOptions): TlsCertificate { - return new FileTlsCertificate(props); - } - - /** - * Returns an ACM TLS Certificate - */ - public static acm(props: AcmCertificateOptions): TlsCertificate { - return new AcmTlsCertificate(props); - } - - /** - * Returns TLS certificate based provider. - */ - public abstract bind(_scope: Construct): TlsCertificateConfig; - -} - -/** - * Represents a ACM provided TLS certificate - */ -class AcmTlsCertificate extends TlsCertificate { - /** - * The TLS mode. - * - * @default - TlsMode.DISABLED - */ - readonly tlsMode: TlsMode; - - /** - * The ARN of the ACM certificate - */ - readonly acmCertificate: acm.ICertificate; - - constructor(props: AcmCertificateOptions) { - super(); - this.tlsMode = props.tlsMode; - this.acmCertificate = props.certificate; - } - - bind(_scope: Construct): TlsCertificateConfig { - return { - tlsCertificate: { - acm: { - certificateArn: this.acmCertificate.certificateArn, - }, - }, - tlsMode: this.tlsMode, - }; - } -} - -/** - * Represents a file provided TLS certificate - */ -class FileTlsCertificate extends TlsCertificate { - /** - * The TLS mode. - * - * @default - TlsMode.DISABLED - */ - readonly tlsMode: TlsMode; - - /** - * The file path of the certificate chain file. - */ - readonly certificateChain: string; - - /** - * The file path of the private key file. - */ - readonly privateKey: string; - - constructor(props: FileCertificateOptions) { - super(); - this.tlsMode = props.tlsMode; - this.certificateChain = props.certificateChainPath; - this.privateKey = props.privateKeyPath; - } - - bind(_scope: Construct): TlsCertificateConfig { - return { - tlsCertificate: { - file: { - certificateChain: this.certificateChain, - privateKey: this.privateKey, - }, - }, - tlsMode: this.tlsMode, - }; - } -} diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts index 9428b2fd41748..0fdcbbf7e256a 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-gateway-listener.ts @@ -3,7 +3,6 @@ import { Construct } from 'constructs'; import { CfnVirtualGateway } from './appmesh.generated'; import { validateHealthChecks } from './private/utils'; import { HealthCheck, Protocol } from './shared-interfaces'; -import { TlsCertificate, TlsCertificateConfig } from './tls-certificate'; /** * Represents the properties needed to define HTTP Listeners for a VirtualGateway @@ -22,13 +21,6 @@ export interface HttpGatewayListenerOptions { * @default - no healthcheck */ readonly healthCheck?: HealthCheck; - - /** - * Represents the configuration for enabling TLS on a listener - * - * @default - none - */ - readonly tlsCertificate?: TlsCertificate; } /** @@ -48,13 +40,6 @@ export interface GrpcGatewayListenerOptions { * @default - no healthcheck */ readonly healthCheck?: HealthCheck; - - /** - * Represents the listener certificate - * - * @default - none - */ - readonly tlsCertificate?: TlsCertificate; } /** @@ -64,7 +49,7 @@ export interface VirtualGatewayListenerConfig { /** * Single listener config for a VirtualGateway */ - readonly listener: CfnVirtualGateway.VirtualGatewayListenerProperty; + readonly listener: CfnVirtualGateway.VirtualGatewayListenerProperty, } /** @@ -75,21 +60,21 @@ export abstract class VirtualGatewayListener { * Returns an HTTP Listener for a VirtualGateway */ public static http(options: HttpGatewayListenerOptions = {}): VirtualGatewayListener { - return new VirtualGatewayListenerImpl(Protocol.HTTP, options.healthCheck, options.port, options.tlsCertificate); + return new HttpGatewayListener(options); } /** * Returns an HTTP2 Listener for a VirtualGateway */ public static http2(options: HttpGatewayListenerOptions = {}): VirtualGatewayListener { - return new VirtualGatewayListenerImpl(Protocol.HTTP2, options.healthCheck, options.port, options.tlsCertificate); + return new Http2GatewayListener(options); } /** * Returns a GRPC Listener for a VirtualGateway */ public static grpc(options: GrpcGatewayListenerOptions = {}): VirtualGatewayListener { - return new VirtualGatewayListenerImpl(Protocol.GRPC, options.healthCheck, options.port, options.tlsCertificate); + return new GrpcGatewayListener(options); } /** @@ -102,21 +87,37 @@ export abstract class VirtualGatewayListener { /** * Represents the properties needed to define an HTTP Listener for a VirtualGateway */ -class VirtualGatewayListenerImpl extends VirtualGatewayListener { +class HttpGatewayListener extends VirtualGatewayListener { + /** + * Port to listen for connections on + * + * @default - 8080 + */ + readonly port: number; - constructor(private readonly protocol: Protocol, - private readonly healthCheck: HealthCheck | undefined, - private readonly port: number = 8080, - private readonly tlsCertificate: TlsCertificate | undefined) { + /** + * Health checking strategy upstream nodes should use when communicating with the listener + * + * @default - no healthcheck + */ + readonly healthCheck?: HealthCheck; + + /** + * Protocol the listener implements + */ + protected protocol: Protocol = Protocol.HTTP; + + constructor(options: HttpGatewayListenerOptions = {}) { super(); + this.port = options.port ? options.port : 8080; + this.healthCheck = options.healthCheck; } /** * Called when the GatewayListener type is initialized. Can be used to enforce * mutual exclusivity */ - public bind(scope: Construct): VirtualGatewayListenerConfig { - const tlsConfig = this.tlsCertificate?.bind(scope); + public bind(_scope: Construct): VirtualGatewayListenerConfig { return { listener: { portMapping: { @@ -124,25 +125,69 @@ class VirtualGatewayListenerImpl extends VirtualGatewayListener { protocol: this.protocol, }, healthCheck: this.healthCheck ? renderHealthCheck(this.healthCheck, this.protocol, this.port): undefined, - tls: tlsConfig ? renderTls(tlsConfig) : undefined, }, }; } +} +/** +* Represents the properties needed to define an HTTP2 Listener for a VirtualGateway +*/ +class Http2GatewayListener extends HttpGatewayListener { + constructor(options: HttpGatewayListenerOptions = {}) { + super(options); + this.protocol = Protocol.HTTP2; + } } /** - * Renders the TLS config for a listener + * Represents the properties needed to define a GRPC Listener for Virtual Gateway */ -function renderTls(tlsCertificateConfig: TlsCertificateConfig): CfnVirtualGateway.VirtualGatewayListenerTlsProperty { - return { - certificate: tlsCertificateConfig.tlsCertificate, - mode: tlsCertificateConfig.tlsMode.toString(), - }; +class GrpcGatewayListener extends VirtualGatewayListener { + /** + * Port to listen for connections on + * + * @default - 8080 + */ + readonly port: number; + + /** + * Health checking strategy upstream nodes should use when communicating with the listener + * + * @default - no healthcheck + */ + readonly healthCheck?: HealthCheck; + + /** + * Protocol the listener implements + */ + protected protocol: Protocol = Protocol.GRPC; + + constructor(options: HttpGatewayListenerOptions = {}) { + super(); + this.port = options.port ? options.port : 8080; + this.healthCheck = options.healthCheck; + } + + /** + * Called when the GatewayListener type is initialized. Can be used to enforce + * mutual exclusivity + */ + public bind(_scope: Construct): VirtualGatewayListenerConfig { + return { + listener: { + portMapping: { + port: this.port, + protocol: Protocol.GRPC, + }, + healthCheck: this.healthCheck ? renderHealthCheck(this.healthCheck, this.protocol, this.port): undefined, + }, + }; + } } -function renderHealthCheck(hc: HealthCheck, listenerProtocol: Protocol, - listenerPort: number): CfnVirtualGateway.VirtualGatewayHealthCheckPolicyProperty { +function renderHealthCheck( + hc: HealthCheck, listenerProtocol: Protocol, listenerPort: number): CfnVirtualGateway.VirtualGatewayHealthCheckPolicyProperty { if (hc.protocol === Protocol.TCP) { throw new Error('TCP health checks are not permitted for gateway listeners'); diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts index f918fb9443228..af690970ab192 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts @@ -3,7 +3,6 @@ import { Construct } from 'constructs'; import { CfnVirtualNode } from './appmesh.generated'; import { validateHealthChecks } from './private/utils'; import { HealthCheck, Protocol, HttpTimeout, GrpcTimeout, TcpTimeout } from './shared-interfaces'; -import { TlsCertificate, TlsCertificateConfig } from './tls-certificate'; /** * Properties for a VirtualNode listener @@ -32,13 +31,6 @@ interface VirtualNodeListenerCommonOptions { * @default - no healthcheck */ readonly healthCheck?: HealthCheck; - - /** - * Represents the configuration for enabling TLS on a listener - * - * @default - none - */ - readonly tlsCertificate?: TlsCertificate; } /** @@ -85,28 +77,28 @@ export abstract class VirtualNodeListener { * Returns an HTTP Listener for a VirtualNode */ public static http(props: HttpVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.HTTP, props.healthCheck, props.timeout, props.port, props.tlsCertificate); + return new VirtualNodeListenerImpl(Protocol.HTTP, props.healthCheck, props.timeout, props.port); } /** * Returns an HTTP2 Listener for a VirtualNode */ public static http2(props: HttpVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.HTTP2, props.healthCheck, props.timeout, props.port, props.tlsCertificate); + return new VirtualNodeListenerImpl(Protocol.HTTP2, props.healthCheck, props.timeout, props.port); } /** * Returns an GRPC Listener for a VirtualNode */ public static grpc(props: GrpcVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.GRPC, props.healthCheck, props.timeout, props.port, props.tlsCertificate); + return new VirtualNodeListenerImpl(Protocol.GRPC, props.healthCheck, props.timeout, props.port); } /** * Returns an TCP Listener for a VirtualNode */ public static tcp(props: TcpVirtualNodeListenerOptions = {}): VirtualNodeListener { - return new VirtualNodeListenerImpl(Protocol.TCP, props.healthCheck, props.timeout, props.port, props.tlsCertificate); + return new VirtualNodeListenerImpl(Protocol.TCP, props.healthCheck, props.timeout, props.port); } /** @@ -120,11 +112,9 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { constructor(private readonly protocol: Protocol, private readonly healthCheck: HealthCheck | undefined, private readonly timeout: HttpTimeout | undefined, - private readonly port: number = 8080, - private readonly tlsCertificate: TlsCertificate | undefined) { super(); } + private readonly port: number = 8080) { super(); } - public bind(scope: Construct): VirtualNodeListenerConfig { - const tlsConfig = this.tlsCertificate?.bind(scope); + public bind(_scope: Construct): VirtualNodeListenerConfig { return { listener: { portMapping: { @@ -133,21 +123,10 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { }, healthCheck: this.healthCheck ? this.renderHealthCheck(this.healthCheck) : undefined, timeout: this.timeout ? this.renderTimeout(this.timeout) : undefined, - tls: tlsConfig ? this.renderTls(tlsConfig) : undefined, }, }; } - /** - * Renders the TLS config for a listener - */ - private renderTls(tlsCertificateConfig: TlsCertificateConfig): CfnVirtualNode.ListenerTlsProperty { - return { - certificate: tlsCertificateConfig.tlsCertificate, - mode: tlsCertificateConfig.tlsMode.toString(), - }; - } - private renderHealthCheck(hc: HealthCheck): CfnVirtualNode.HealthCheckProperty | undefined { if (hc === undefined) { return undefined; } @@ -189,4 +168,3 @@ class VirtualNodeListenerImpl extends VirtualNodeListener { }); } } - diff --git a/packages/@aws-cdk/aws-appmesh/package.json b/packages/@aws-cdk/aws-appmesh/package.json index b2dd882828beb..d684ac2641dc2 100644 --- a/packages/@aws-cdk/aws-appmesh/package.json +++ b/packages/@aws-cdk/aws-appmesh/package.json @@ -88,7 +88,6 @@ }, "dependencies": { "@aws-cdk/aws-acmpca": "0.0.0", - "@aws-cdk/aws-certificatemanager": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-servicediscovery": "0.0.0", @@ -97,7 +96,6 @@ }, "peerDependencies": { "@aws-cdk/aws-acmpca": "0.0.0", - "@aws-cdk/aws-certificatemanager": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-servicediscovery": "0.0.0", @@ -105,7 +103,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json index db9277d071432..e642633387206 100644 --- a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json +++ b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.expected.json @@ -649,17 +649,6 @@ "VirtualServiceName": "service1.domain.local" } }, - "cert56CA94EB": { - "Type": "AWS::CertificateManager::Certificate", - "Properties": { - "DomainName":"node1.domain.local", - "DomainValidationOptions": [{ - "DomainName":"node1.domain.local", - "ValidationDomain":"local" - }], - "ValidationMethod": "EMAIL" - } - }, "meshnode726C787D": { "Type": "AWS::AppMesh::VirtualNode", "Properties": { @@ -706,16 +695,6 @@ "PortMapping": { "Port": 8080, "Protocol": "http" - }, - "TLS": { - "Certificate": { - "ACM": { - "CertificateArn": { - "Ref": "cert56CA94EB" - } - } - }, - "Mode": "STRICT" } } ], @@ -1040,15 +1019,6 @@ "PortMapping": { "Port": 443, "Protocol": "http" - }, - "TLS": { - "Certificate": { - "File": { - "CertificateChain": "path/to/certChain", - "PrivateKey": "path/to/privateKey" - } - }, - "Mode": "STRICT" } } ] diff --git a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts index 730418aef7970..2f1884b3f7e63 100644 --- a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts +++ b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts @@ -1,5 +1,4 @@ import * as acmpca from '@aws-cdk/aws-acmpca'; -import * as acm from '@aws-cdk/aws-certificatemanager'; import * as ec2 from '@aws-cdk/aws-ec2'; import * as cloudmap from '@aws-cdk/aws-servicediscovery'; import * as cdk from '@aws-cdk/core'; @@ -30,10 +29,6 @@ const virtualService = mesh.addVirtualService('service', { virtualServiceName: 'service1.domain.local', }); -const cert = new acm.Certificate(stack, 'cert', { - domainName: `node1.${namespace.namespaceName}`, -}); - const node = mesh.addVirtualNode('node', { serviceDiscovery: appmesh.ServiceDiscovery.dns(`node1.${namespace.namespaceName}`), listeners: [appmesh.VirtualNodeListener.http({ @@ -41,10 +36,6 @@ const node = mesh.addVirtualNode('node', { healthyThreshold: 3, path: '/check-path', }, - tlsCertificate: appmesh.TlsCertificate.acm({ - certificate: cert, - tlsMode: appmesh.TlsMode.STRICT, - }), })], backends: [ virtualService, @@ -164,11 +155,6 @@ new appmesh.VirtualGateway(stack, 'gateway2', { healthCheck: { interval: cdk.Duration.seconds(10), }, - tlsCertificate: appmesh.TlsCertificate.file({ - certificateChainPath: 'path/to/certChain', - privateKeyPath: 'path/to/privateKey', - tlsMode: appmesh.TlsMode.STRICT, - }), })], }); diff --git a/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts b/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts index 7b4a563c90d34..6207e49ce0be1 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.virtual-gateway.ts @@ -1,7 +1,7 @@ import { expect, haveResourceLike } from '@aws-cdk/assert'; -import * as acm from '@aws-cdk/aws-certificatemanager'; import * as cdk from '@aws-cdk/core'; import { Test } from 'nodeunit'; + import * as appmesh from '../lib'; export = { @@ -153,142 +153,6 @@ export = { })); test.done(); }, - - 'with an http listener with a TLS certificate from ACM'(test: Test) { - // GIVEN - const stack = new cdk.Stack(); - - // WHEN - const mesh = new appmesh.Mesh(stack, 'mesh', { - meshName: 'test-mesh', - }); - - const cert = new acm.Certificate(stack, 'cert', { - domainName: '', - }); - - new appmesh.VirtualGateway(stack, 'testGateway', { - virtualGatewayName: 'test-gateway', - mesh: mesh, - listeners: [appmesh.VirtualGatewayListener.http({ - port: 8080, - tlsCertificate: appmesh.TlsCertificate.acm({ - tlsMode: appmesh.TlsMode.STRICT, - certificate: cert, - }), - })], - }); - - // THEN - expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualGateway', { - Spec: { - Listeners: [ - { - TLS: { - Mode: appmesh.TlsMode.STRICT, - Certificate: { - ACM: { - CertificateArn: { - Ref: 'cert56CA94EB', - }, - }, - }, - }, - }, - ], - }, - })); - - test.done(); - }, - - 'with an grpc listener with a TLS certificate from file'(test: Test) { - // GIVEN - const stack = new cdk.Stack(); - - // WHEN - const mesh = new appmesh.Mesh(stack, 'mesh', { - meshName: 'test-mesh', - }); - - new appmesh.VirtualGateway(stack, 'testGateway', { - virtualGatewayName: 'test-gateway', - mesh: mesh, - listeners: [appmesh.VirtualGatewayListener.grpc({ - port: 8080, - tlsCertificate: appmesh.TlsCertificate.file({ - certificateChainPath: 'path/to/certChain', - privateKeyPath: 'path/to/privateKey', - tlsMode: appmesh.TlsMode.STRICT, - }), - })], - }); - - // THEN - expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualGateway', { - Spec: { - Listeners: [ - { - TLS: { - Mode: appmesh.TlsMode.STRICT, - Certificate: { - File: { - CertificateChain: 'path/to/certChain', - PrivateKey: 'path/to/privateKey', - }, - }, - }, - }, - ], - }, - })); - - test.done(); - }, - - 'with an grpc listener with the TLS mode permissive'(test: Test) { - // GIVEN - const stack = new cdk.Stack(); - - // WHEN - const mesh = new appmesh.Mesh(stack, 'mesh', { - meshName: 'test-mesh', - }); - - new appmesh.VirtualGateway(stack, 'testGateway', { - virtualGatewayName: 'test-gateway', - mesh: mesh, - listeners: [appmesh.VirtualGatewayListener.grpc({ - port: 8080, - tlsCertificate: appmesh.TlsCertificate.file({ - certificateChainPath: 'path/to/certChain', - privateKeyPath: 'path/to/privateKey', - tlsMode: appmesh.TlsMode.PERMISSIVE, - }), - })], - }); - - // THEN - expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualGateway', { - Spec: { - Listeners: [ - { - TLS: { - Mode: appmesh.TlsMode.PERMISSIVE, - Certificate: { - File: { - CertificateChain: 'path/to/certChain', - PrivateKey: 'path/to/privateKey', - }, - }, - }, - }, - ], - }, - })); - - test.done(); - }, }, 'When adding a gateway route to existing VirtualGateway ': { diff --git a/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts b/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts index 9fb05931a2a44..ffc7e60107ba1 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts @@ -1,6 +1,5 @@ import { expect, haveResourceLike } from '@aws-cdk/assert'; import * as acmpca from '@aws-cdk/aws-acmpca'; -import * as acm from '@aws-cdk/aws-certificatemanager'; import * as cdk from '@aws-cdk/core'; import { Test } from 'nodeunit'; import * as appmesh from '../lib'; @@ -358,149 +357,7 @@ export = { test.done(); }, }, - - 'when a grpc listener is added with a TLS certificate from ACM': { - 'the listener should include the TLS configuration'(test: Test) { - // GIVEN - const stack = new cdk.Stack(); - - // WHEN - const mesh = new appmesh.Mesh(stack, 'mesh', { - meshName: 'test-mesh', - }); - - const cert = new acm.Certificate(stack, 'cert', { - domainName: '', - }); - - new appmesh.VirtualNode(stack, 'test-node', { - mesh, - listeners: [appmesh.VirtualNodeListener.grpc({ - port: 80, - tlsCertificate: appmesh.TlsCertificate.acm({ - certificate: cert, - tlsMode: appmesh.TlsMode.STRICT, - }), - }, - )], - }); - - // THEN - - expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { - Spec: { - Listeners: [ - { - TLS: { - Mode: appmesh.TlsMode.STRICT, - Certificate: { - ACM: { - CertificateArn: { - Ref: 'cert56CA94EB', - }, - }, - }, - }, - }, - ], - }, - })); - - test.done(); - }, - }, - - 'when an http listener is added with a TLS certificate from file': { - 'the listener should include the TLS configuration'(test: Test) { - // GIVEN - const stack = new cdk.Stack(); - - // WHEN - const mesh = new appmesh.Mesh(stack, 'mesh', { - meshName: 'test-mesh', - }); - - new appmesh.VirtualNode(stack, 'test-node', { - mesh, - listeners: [appmesh.VirtualNodeListener.http({ - port: 80, - tlsCertificate: appmesh.TlsCertificate.file({ - certificateChainPath: 'path/to/certChain', - privateKeyPath: 'path/to/privateKey', - tlsMode: appmesh.TlsMode.STRICT, - }), - })], - }); - - // THEN - expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { - Spec: { - Listeners: [ - { - TLS: { - Mode: appmesh.TlsMode.STRICT, - Certificate: { - File: { - CertificateChain: 'path/to/certChain', - PrivateKey: 'path/to/privateKey', - }, - }, - }, - }, - ], - }, - })); - - test.done(); - }, - }, - - 'when an http listener is added with the TLS mode permissive': { - 'the listener should include the TLS configuration'(test: Test) { - // GIVEN - const stack = new cdk.Stack(); - - // WHEN - const mesh = new appmesh.Mesh(stack, 'mesh', { - meshName: 'test-mesh', - }); - - new appmesh.VirtualNode(stack, 'test-node', { - mesh, - listeners: [appmesh.VirtualNodeListener.http({ - port: 80, - tlsCertificate: appmesh.TlsCertificate.file({ - certificateChainPath: 'path/to/certChain', - privateKeyPath: 'path/to/privateKey', - tlsMode: appmesh.TlsMode.PERMISSIVE, - }), - })], - }); - - // THEN - expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { - Spec: { - Listeners: [ - { - TLS: { - Mode: appmesh.TlsMode.PERMISSIVE, - Certificate: { - File: { - CertificateChain: 'path/to/certChain', - PrivateKey: 'path/to/privateKey', - }, - }, - }, - }, - ], - }, - })); - - test.done(); - }, - }, }, - 'Can import Virtual Nodes using an ARN'(test: Test) { // GIVEN const stack = new cdk.Stack(); diff --git a/packages/@aws-cdk/aws-appstream/package.json b/packages/@aws-cdk/aws-appstream/package.json index bd25e2530059d..dc58f32d7dfe0 100644 --- a/packages/@aws-cdk/aws-appstream/package.json +++ b/packages/@aws-cdk/aws-appstream/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-appsync/README.md b/packages/@aws-cdk/aws-appsync/README.md index 61c4e797f5bb4..794cff6db3cda 100644 --- a/packages/@aws-cdk/aws-appsync/README.md +++ b/packages/@aws-cdk/aws-appsync/README.md @@ -75,23 +75,20 @@ const demoTable = new db.Table(stack, 'DemoTable', { const demoDS = api.addDynamoDbDataSource('demoDataSource', demoTable); -// Resolver for the Query "getDemos" that scans the DynamoDb table and returns the entire list. +// Resolver for the Query "getDemos" that scans the DyanmoDb table and returns the entire list. demoDS.createResolver({ typeName: 'Query', fieldName: 'getDemos', - requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(), - responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(), + requestMappingTemplate: MappingTemplate.dynamoDbScanTable(), + responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); // Resolver for the Mutation "addDemo" that puts the item into the DynamoDb table. demoDS.createResolver({ typeName: 'Mutation', fieldName: 'addDemo', - requestMappingTemplate: appsync.MappingTemplate.dynamoDbPutItem( - appsync.PrimaryKey.partition('id').auto(), - appsync.Values.projecting('demo') - ), - responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: MappingTemplate.dynamoDbPutItem(PrimaryKey.partition('id').auto(), Values.projecting('demo')), + responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); ``` diff --git a/packages/@aws-cdk/aws-appsync/lib/data-source.ts b/packages/@aws-cdk/aws-appsync/lib/data-source.ts index 0132de1534383..70e0576687de7 100644 --- a/packages/@aws-cdk/aws-appsync/lib/data-source.ts +++ b/packages/@aws-cdk/aws-appsync/lib/data-source.ts @@ -3,7 +3,7 @@ import { Grant, IGrantable, IPrincipal, IRole, Role, ServicePrincipal } from '@a import { IFunction } from '@aws-cdk/aws-lambda'; import { IDatabaseCluster } from '@aws-cdk/aws-rds'; import { ISecret } from '@aws-cdk/aws-secretsmanager'; -import { IResolvable, Lazy, Stack } from '@aws-cdk/core'; +import { IResolvable, Stack } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { BaseAppsyncFunctionProps, AppsyncFunction } from './appsync-function'; import { CfnDataSource } from './appsync.generated'; @@ -314,25 +314,17 @@ export class RdsDataSource extends BackedDataSource { relationalDatabaseConfig: { rdsHttpEndpointConfig: { awsRegion: props.databaseCluster.stack.region, - dbClusterIdentifier: Lazy.string({ - produce: () => { - return Stack.of(this).formatArn({ - service: 'rds', - resource: `cluster:${props.databaseCluster.clusterIdentifier}`, - }); - }, - }), + dbClusterIdentifier: props.databaseCluster.clusterIdentifier, awsSecretStoreArn: props.secretStore.secretArn, }, relationalDatabaseSourceType: 'RDS_HTTP_ENDPOINT', }, }); + props.secretStore.grantRead(this); const clusterArn = Stack.of(this).formatArn({ service: 'rds', resource: `cluster:${props.databaseCluster.clusterIdentifier}`, }); - props.secretStore.grantRead(this); - // Change to grant with RDS grant becomes implemented Grant.addToPrincipal({ grantee: this, diff --git a/packages/@aws-cdk/aws-appsync/package.json b/packages/@aws-cdk/aws-appsync/package.json index 1f4779edad008..675b7dd08f3a7 100644 --- a/packages/@aws-cdk/aws-appsync/package.json +++ b/packages/@aws-cdk/aws-appsync/package.json @@ -108,7 +108,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts index 97cea819de8f3..ba0d80d00037b 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts @@ -97,32 +97,6 @@ describe('Rds Data Source configuration', () => { }); }); - test('rds cluster arn saved to RdsHttpEndpointConfig', () => { - // WHEN - api.addRdsDataSource('ds', cluster, secret); - - // THEN - expect(stack).toHaveResourceLike('AWS::AppSync::DataSource', { - Type: 'RELATIONAL_DATABASE', - RelationalDatabaseConfig: { - RdsHttpEndpointConfig: { - AwsRegion: { Ref: 'AWS::Region' }, - AwsSecretStoreArn: { Ref: 'AuroraSecret41E6E877' }, - DbClusterIdentifier: { - 'Fn::Join': ['', ['arn:', - { Ref: 'AWS::Partition' }, - ':rds:', - { Ref: 'AWS::Region' }, - ':', - { Ref: 'AWS::AccountId' }, - ':cluster:', - { Ref: 'AuroraCluster23D869C0' }]], - }, - }, - }, - }); - }); - test('default configuration produces name identical to the id', () => { // WHEN api.addRdsDataSource('ds', cluster, secret); diff --git a/packages/@aws-cdk/aws-athena/package.json b/packages/@aws-cdk/aws-athena/package.json index 636e7e0db2440..60190909b1eb7 100644 --- a/packages/@aws-cdk/aws-athena/package.json +++ b/packages/@aws-cdk/aws-athena/package.json @@ -91,7 +91,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-auditmanager/.eslintrc.js b/packages/@aws-cdk/aws-auditmanager/.eslintrc.js deleted file mode 100644 index 61dd8dd001f63..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('cdk-build-tools/config/eslintrc'); -baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; -module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-auditmanager/.gitignore b/packages/@aws-cdk/aws-auditmanager/.gitignore deleted file mode 100644 index 62ebc95d75ce6..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -*.js -*.js.map -*.d.ts -tsconfig.json -node_modules -*.generated.ts -dist -.jsii - -.LAST_BUILD -.nyc_output -coverage -.nycrc -.LAST_PACKAGE -*.snk -nyc.config.js -!.eslintrc.js -!jest.config.js -junit.xml diff --git a/packages/@aws-cdk/aws-auditmanager/.npmignore b/packages/@aws-cdk/aws-auditmanager/.npmignore deleted file mode 100644 index e4486030fcb17..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/.npmignore +++ /dev/null @@ -1,28 +0,0 @@ -# Don't include original .ts files when doing `npm pack` -*.ts -!*.d.ts -coverage -.nyc_output -*.tgz - -dist -.LAST_PACKAGE -.LAST_BUILD -!*.js - -# Include .jsii -!.jsii - -*.snk - -*.tsbuildinfo - -tsconfig.json - -.eslintrc.js -jest.config.js - -# exclude cdk artifacts -**/cdk.out -junit.xml -test/ diff --git a/packages/@aws-cdk/aws-auditmanager/LICENSE b/packages/@aws-cdk/aws-auditmanager/LICENSE deleted file mode 100644 index 28e4bdcec77ec..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/@aws-cdk/aws-auditmanager/NOTICE b/packages/@aws-cdk/aws-auditmanager/NOTICE deleted file mode 100644 index 5fc3826926b5b..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/NOTICE +++ /dev/null @@ -1,2 +0,0 @@ -AWS Cloud Development Kit (AWS CDK) -Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-auditmanager/README.md b/packages/@aws-cdk/aws-auditmanager/README.md deleted file mode 100644 index ee34051ab78e3..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS::AuditManager Construct Library - - ---- - -![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) - -> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. -> -> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib - ---- - - - -This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. - -```ts -import auditmanager = require('@aws-cdk/aws-auditmanager'); -``` diff --git a/packages/@aws-cdk/aws-auditmanager/jest.config.js b/packages/@aws-cdk/aws-auditmanager/jest.config.js deleted file mode 100644 index 54e28beb9798b..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/jest.config.js +++ /dev/null @@ -1,2 +0,0 @@ -const baseConfig = require('cdk-build-tools/config/jest.config'); -module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-auditmanager/lib/index.ts b/packages/@aws-cdk/aws-auditmanager/lib/index.ts deleted file mode 100644 index f6234117e603f..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/lib/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// AWS::AuditManager CloudFormation Resources: -export * from './auditmanager.generated'; diff --git a/packages/@aws-cdk/aws-auditmanager/package.json b/packages/@aws-cdk/aws-auditmanager/package.json deleted file mode 100644 index 6ba8246bf99e5..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "name": "@aws-cdk/aws-auditmanager", - "version": "0.0.0", - "description": "The CDK Construct Library for AWS::AuditManager", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "jsii": { - "outdir": "dist", - "projectReferences": true, - "targets": { - "dotnet": { - "namespace": "Amazon.CDK.AWS.AuditManager", - "packageId": "Amazon.CDK.AWS.AuditManager", - "signAssembly": true, - "assemblyOriginatorKeyFile": "../../key.snk", - "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" - }, - "java": { - "package": "software.amazon.awscdk.services.auditmanager", - "maven": { - "groupId": "software.amazon.awscdk", - "artifactId": "auditmanager" - } - }, - "python": { - "classifiers": [ - "Framework :: AWS CDK", - "Framework :: AWS CDK :: 1" - ], - "distName": "aws-cdk.aws-auditmanager", - "module": "aws_cdk.aws_auditmanager" - } - } - }, - "repository": { - "type": "git", - "url": "https://github.com/aws/aws-cdk.git", - "directory": "packages/@aws-cdk/aws-auditmanager" - }, - "homepage": "https://github.com/aws/aws-cdk", - "scripts": { - "build": "cdk-build", - "watch": "cdk-watch", - "lint": "cdk-lint", - "test": "cdk-test", - "integ": "cdk-integ", - "pkglint": "pkglint -f", - "package": "cdk-package", - "awslint": "cdk-awslint", - "cfn2ts": "cfn2ts", - "build+test+package": "npm run build+test && npm run package", - "build+test": "npm run build && npm test", - "compat": "cdk-compat", - "gen": "cfn2ts", - "rosetta:extract": "yarn --silent jsii-rosetta extract" - }, - "cdk-build": { - "cloudformation": "AWS::AuditManager", - "jest": true, - "env": { - "AWSLINT_BASE_CONSTRUCT": "true" - } - }, - "keywords": [ - "aws", - "cdk", - "constructs", - "AWS::AuditManager", - "aws-auditmanager" - ], - "author": { - "name": "Amazon Web Services", - "url": "https://aws.amazon.com", - "organization": true - }, - "license": "Apache-2.0", - "devDependencies": { - "@aws-cdk/assert": "0.0.0", - "cdk-build-tools": "0.0.0", - "cfn2ts": "0.0.0", - "pkglint": "0.0.0" - }, - "dependencies": { - "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5" - }, - "peerDependencies": { - "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5" - }, - "engines": { - "node": ">= 14.15.0" - }, - "stability": "experimental", - "maturity": "cfn-only", - "awscdkio": { - "announce": false - }, - "private": true -} diff --git a/packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts b/packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts deleted file mode 100644 index e394ef336bfb4..0000000000000 --- a/packages/@aws-cdk/aws-auditmanager/test/auditmanager.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import '@aws-cdk/assert/jest'; -import {} from '../lib'; - -test('No tests are specified for this package', () => { - expect(true).toBe(true); -}); diff --git a/packages/@aws-cdk/aws-autoscaling-common/package.json b/packages/@aws-cdk/aws-autoscaling-common/package.json index d2a4727f8dd5f..74ee22b8e4e68 100644 --- a/packages/@aws-cdk/aws-autoscaling-common/package.json +++ b/packages/@aws-cdk/aws-autoscaling-common/package.json @@ -106,7 +106,7 @@ ] }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json b/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json index 817a72b2a57df..92243308c0f6f 100644 --- a/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json +++ b/packages/@aws-cdk/aws-autoscaling-hooktargets/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-autoscaling/package.json b/packages/@aws-cdk/aws-autoscaling/package.json index 866ab4faa891b..d3ae544c25854 100644 --- a/packages/@aws-cdk/aws-autoscaling/package.json +++ b/packages/@aws-cdk/aws-autoscaling/package.json @@ -107,7 +107,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-autoscalingplans/package.json b/packages/@aws-cdk/aws-autoscalingplans/package.json index 3471d9669f49d..dc3f19ca4eacb 100644 --- a/packages/@aws-cdk/aws-autoscalingplans/package.json +++ b/packages/@aws-cdk/aws-autoscalingplans/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-backup/package.json b/packages/@aws-cdk/aws-backup/package.json index aaab59716d22d..73e4aea43bad6 100644 --- a/packages/@aws-cdk/aws-backup/package.json +++ b/packages/@aws-cdk/aws-backup/package.json @@ -107,7 +107,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-batch/package.json b/packages/@aws-cdk/aws-batch/package.json index a0466afc56ced..1138c735829cb 100644 --- a/packages/@aws-cdk/aws-batch/package.json +++ b/packages/@aws-cdk/aws-batch/package.json @@ -103,7 +103,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-budgets/package.json b/packages/@aws-cdk/aws-budgets/package.json index 14b8c8e6a27dd..9e6337dacca2e 100644 --- a/packages/@aws-cdk/aws-budgets/package.json +++ b/packages/@aws-cdk/aws-budgets/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-cassandra/package.json b/packages/@aws-cdk/aws-cassandra/package.json index 52e56a27d2e4d..260bf21b88421 100644 --- a/packages/@aws-cdk/aws-cassandra/package.json +++ b/packages/@aws-cdk/aws-cassandra/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-ce/package.json b/packages/@aws-cdk/aws-ce/package.json index 846c609faa1f8..cea361aa5330e 100644 --- a/packages/@aws-cdk/aws-ce/package.json +++ b/packages/@aws-cdk/aws-ce/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-certificatemanager/package.json b/packages/@aws-cdk/aws-certificatemanager/package.json index 186844eba2905..1408d12da5030 100644 --- a/packages/@aws-cdk/aws-certificatemanager/package.json +++ b/packages/@aws-cdk/aws-certificatemanager/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-chatbot/package.json b/packages/@aws-cdk/aws-chatbot/package.json index fd0bd2e678b02..411d86b8decf6 100644 --- a/packages/@aws-cdk/aws-chatbot/package.json +++ b/packages/@aws-cdk/aws-chatbot/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-cloud9/package.json b/packages/@aws-cdk/aws-cloud9/package.json index f03ea8fc68eb4..75392c444cc7b 100644 --- a/packages/@aws-cdk/aws-cloud9/package.json +++ b/packages/@aws-cdk/aws-cloud9/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-cloudformation/package.json b/packages/@aws-cdk/aws-cloudformation/package.json index 7d6b8ce021e9c..5eb0f585689bb 100644 --- a/packages/@aws-cdk/aws-cloudformation/package.json +++ b/packages/@aws-cdk/aws-cloudformation/package.json @@ -104,7 +104,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-cloudfront-origins/package.json b/packages/@aws-cdk/aws-cloudfront-origins/package.json index 8ba4f39f0d7b3..2f54cd51caa60 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/package.json +++ b/packages/@aws-cdk/aws-cloudfront-origins/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "pkglint": "0.0.0" @@ -95,7 +95,7 @@ "@aws-cdk/aws-elasticloadbalancingv2": "0.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-cloudfront/package.json b/packages/@aws-cdk/aws-cloudfront/package.json index d75c587889e3d..eaee0e452a805 100644 --- a/packages/@aws-cdk/aws-cloudfront/package.json +++ b/packages/@aws-cdk/aws-cloudfront/package.json @@ -75,7 +75,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", @@ -108,7 +108,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-cloudtrail/package.json b/packages/@aws-cdk/aws-cloudtrail/package.json index 1d2e72f08a587..8a768f18b97c7 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -75,7 +75,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", @@ -112,7 +112,7 @@ ] }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-cloudwatch-actions/package.json b/packages/@aws-cdk/aws-cloudwatch-actions/package.json index 0ec045589ab34..a500201df2b70 100644 --- a/packages/@aws-cdk/aws-cloudwatch-actions/package.json +++ b/packages/@aws-cdk/aws-cloudwatch-actions/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-cloudwatch/package.json b/packages/@aws-cdk/aws-cloudwatch/package.json index ef6b44705ebc5..145245299dde3 100644 --- a/packages/@aws-cdk/aws-cloudwatch/package.json +++ b/packages/@aws-cdk/aws-cloudwatch/package.json @@ -115,7 +115,7 @@ ] }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-codeartifact/package.json b/packages/@aws-cdk/aws-codeartifact/package.json index af2f92dc4d913..f7ecfab89b381 100644 --- a/packages/@aws-cdk/aws-codeartifact/package.json +++ b/packages/@aws-cdk/aws-codeartifact/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-codebuild/lib/project.ts b/packages/@aws-cdk/aws-codebuild/lib/project.ts index fe3ab4424220d..656772bd6b188 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/project.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/project.ts @@ -1431,8 +1431,6 @@ export class LinuxBuildImage implements IBuildImage { public static readonly STANDARD_3_0 = LinuxBuildImage.codeBuildImage('aws/codebuild/standard:3.0'); /** The `aws/codebuild/standard:4.0` build image. */ public static readonly STANDARD_4_0 = LinuxBuildImage.codeBuildImage('aws/codebuild/standard:4.0'); - /** The `aws/codebuild/standard:5.0` build image. */ - public static readonly STANDARD_5_0 = LinuxBuildImage.codeBuildImage('aws/codebuild/standard:5.0'); public static readonly AMAZON_LINUX_2 = LinuxBuildImage.codeBuildImage('aws/codebuild/amazonlinux2-x86_64-standard:1.0'); public static readonly AMAZON_LINUX_2_2 = LinuxBuildImage.codeBuildImage('aws/codebuild/amazonlinux2-x86_64-standard:2.0'); @@ -1773,10 +1771,8 @@ export interface BuildEnvironmentVariable { readonly type?: BuildEnvironmentVariableType; /** - * The value of the environment variable. - * For plain-text variables (the default), this is the literal value of variable. - * For SSM parameter variables, pass the name of the parameter here (`parameterName` property of `IParameter`). - * For SecretsManager variables secrets, pass the secret name here (`secretName` property of `ISecret`). + * The value of the environment variable (or the name of the parameter in + * the SSM parameter store.) */ readonly value: any; } diff --git a/packages/@aws-cdk/aws-codebuild/package.json b/packages/@aws-cdk/aws-codebuild/package.json index c6695504192d0..caa6ea540bf3b 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -81,7 +81,7 @@ "@aws-cdk/aws-sns": "0.0.0", "@aws-cdk/aws-sqs": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", @@ -126,7 +126,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codecommit/package.json b/packages/@aws-cdk/aws-codecommit/package.json index b6984776ef19a..0b0a1e59e0067 100644 --- a/packages/@aws-cdk/aws-codecommit/package.json +++ b/packages/@aws-cdk/aws-codecommit/package.json @@ -81,7 +81,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-sns": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", @@ -102,7 +102,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-codedeploy/package.json b/packages/@aws-cdk/aws-codedeploy/package.json index 30f68f86a19a6..f148fda75d9a7 100644 --- a/packages/@aws-cdk/aws-codedeploy/package.json +++ b/packages/@aws-cdk/aws-codedeploy/package.json @@ -112,7 +112,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codeguruprofiler/package.json b/packages/@aws-cdk/aws-codeguruprofiler/package.json index 427d99cfccf4e..de619dff0c1ce 100644 --- a/packages/@aws-cdk/aws-codeguruprofiler/package.json +++ b/packages/@aws-cdk/aws-codeguruprofiler/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-codegurureviewer/package.json b/packages/@aws-cdk/aws-codegurureviewer/package.json index 9aa4f8c52be08..ff9b04bf1dcca 100644 --- a/packages/@aws-cdk/aws-codegurureviewer/package.json +++ b/packages/@aws-cdk/aws-codegurureviewer/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts b/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts index 0805ae2ab8cab..0273a1cafe827 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/lib/s3/deploy-action.ts @@ -112,12 +112,6 @@ export class S3DeployAction extends Action { // pipeline needs permissions to write to the S3 bucket this.props.bucket.grantWrite(options.role); - if (this.props.accessControl !== undefined) { - // we need to modify the ACL settings of objects within the Bucket, - // so grant the Action's Role permissions to do that - this.props.bucket.grantPutAcl(options.role); - } - // the Action Role also needs to read from the Pipeline's bucket options.bucket.grantRead(options.role); diff --git a/packages/@aws-cdk/aws-codepipeline-actions/package.json b/packages/@aws-cdk/aws-codepipeline-actions/package.json index 7461f76edf534..d083acbf9cefd 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/package.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/package.json @@ -127,7 +127,7 @@ "case" ], "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json index d37bdc0c6798c..d6bc02e90525c 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json @@ -12,9 +12,155 @@ }, "DeployBucket67E2C076": { "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "PipelineArtifactsBucketEncryptionKey01D58D69": { + "Type": "AWS::KMS::Key", + "Properties": { + "KeyPolicy": { + "Statement": [ + { + "Action": [ + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:GenerateDataKey", + "kms:TagResource", + "kms:UntagResource" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": "*" + }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "PipelineRoleD68726F7", + "Arn" + ] + } + }, + "Resource": "*" + }, + { + "Action": [ + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Decrypt" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "PipelineSourceCodePipelineActionRoleC6F9E7F5", + "Arn" + ] + } + }, + "Resource": "*" + }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "PipelineDeployDeployActionCodePipelineActionRole1C288A60", + "Arn" + ] + } + }, + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" }, + "PipelineArtifactsBucketEncryptionKeyAlias5C510EEE": { + "Type": "AWS::KMS::Alias", + "Properties": { + "AliasName": "alias/codepipeline-awscdkcodepipelines3deploypipeline907bf1e7", + "TargetKeyId": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKey01D58D69", + "Arn" + ] + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "PipelineArtifactsBucket22248F97": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "KMSMasterKeyID": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKey01D58D69", + "Arn" + ] + }, + "SSEAlgorithm": "aws:kms" + } + } + ] + }, + "PublicAccessBlockConfiguration": { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, "PipelineRoleD68726F7": { "Type": "AWS::IAM::Role", "Properties": { @@ -50,7 +196,7 @@ "Resource": [ { "Fn::GetAtt": [ - "PipelineBucketB967BD35", + "PipelineArtifactsBucket22248F97", "Arn" ] }, @@ -60,7 +206,7 @@ [ { "Fn::GetAtt": [ - "PipelineBucketB967BD35", + "PipelineArtifactsBucket22248F97", "Arn" ] }, @@ -70,6 +216,22 @@ } ] }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKey01D58D69", + "Arn" + ] + } + }, { "Action": "sts:AssumeRole", "Effect": "Allow", @@ -179,8 +341,17 @@ } ], "ArtifactStore": { + "EncryptionKey": { + "Id": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKey01D58D69", + "Arn" + ] + }, + "Type": "KMS" + }, "Location": { - "Ref": "PipelineBucketB967BD35" + "Ref": "PipelineArtifactsBucket22248F97" }, "Type": "S3" } @@ -267,7 +438,7 @@ "Resource": [ { "Fn::GetAtt": [ - "PipelineBucketB967BD35", + "PipelineArtifactsBucket22248F97", "Arn" ] }, @@ -277,7 +448,7 @@ [ { "Fn::GetAtt": [ - "PipelineBucketB967BD35", + "PipelineArtifactsBucket22248F97", "Arn" ] }, @@ -286,6 +457,21 @@ ] } ] + }, + { + "Action": [ + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Decrypt" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKey01D58D69", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -365,24 +551,6 @@ } ] }, - { - "Action": "s3:PutObjectAcl", - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "DeployBucket67E2C076", - "Arn" - ] - }, - "/*" - ] - ] - } - }, { "Action": [ "s3:GetObject*", @@ -393,7 +561,7 @@ "Resource": [ { "Fn::GetAtt": [ - "PipelineBucketB967BD35", + "PipelineArtifactsBucket22248F97", "Arn" ] }, @@ -403,7 +571,7 @@ [ { "Fn::GetAtt": [ - "PipelineBucketB967BD35", + "PipelineArtifactsBucket22248F97", "Arn" ] }, @@ -412,6 +580,19 @@ ] } ] + }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKey01D58D69", + "Arn" + ] + } } ], "Version": "2012-10-17" diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts index 5277170c0ca59..b012d6ff8aeb8 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.ts @@ -19,12 +19,9 @@ const sourceAction = new cpactions.S3SourceAction({ bucketKey: 'key', }); -const deployBucket = new s3.Bucket(stack, 'DeployBucket', { - removalPolicy: cdk.RemovalPolicy.DESTROY, -}); +const deployBucket = new s3.Bucket(stack, 'DeployBucket', {}); new codepipeline.Pipeline(stack, 'Pipeline', { - artifactBucket: bucket, stages: [ { stageName: 'Source', diff --git a/packages/@aws-cdk/aws-codepipeline/package.json b/packages/@aws-cdk/aws-codepipeline/package.json index bf8f9fee5a456..26bce804351c9 100644 --- a/packages/@aws-cdk/aws-codepipeline/package.json +++ b/packages/@aws-cdk/aws-codepipeline/package.json @@ -107,7 +107,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codestar/package.json b/packages/@aws-cdk/aws-codestar/package.json index 7e71ddca2b7b9..56bac132e6acf 100644 --- a/packages/@aws-cdk/aws-codestar/package.json +++ b/packages/@aws-cdk/aws-codestar/package.json @@ -93,7 +93,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-codestarconnections/package.json b/packages/@aws-cdk/aws-codestarconnections/package.json index ad88fe1cda03b..761c8e42b7df2 100644 --- a/packages/@aws-cdk/aws-codestarconnections/package.json +++ b/packages/@aws-cdk/aws-codestarconnections/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-codestarnotifications/package.json b/packages/@aws-cdk/aws-codestarnotifications/package.json index 6b6ee628a1565..9c8feaf505dc3 100644 --- a/packages/@aws-cdk/aws-codestarnotifications/package.json +++ b/packages/@aws-cdk/aws-codestarnotifications/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-cognito/package.json b/packages/@aws-cdk/aws-cognito/package.json index 085ef0953d4b7..26064cc93dce1 100644 --- a/packages/@aws-cdk/aws-cognito/package.json +++ b/packages/@aws-cdk/aws-cognito/package.json @@ -104,7 +104,7 @@ "punycode" ], "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-config/package.json b/packages/@aws-cdk/aws-config/package.json index 8c03cccbc41ef..5b8812acb1d8f 100644 --- a/packages/@aws-cdk/aws-config/package.json +++ b/packages/@aws-cdk/aws-config/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-databrew/package.json b/packages/@aws-cdk/aws-databrew/package.json index f516110f39116..6a42329c36617 100644 --- a/packages/@aws-cdk/aws-databrew/package.json +++ b/packages/@aws-cdk/aws-databrew/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-datapipeline/package.json b/packages/@aws-cdk/aws-datapipeline/package.json index f612b24e4bde1..377bace5f77f4 100644 --- a/packages/@aws-cdk/aws-datapipeline/package.json +++ b/packages/@aws-cdk/aws-datapipeline/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-datasync/.eslintrc.js b/packages/@aws-cdk/aws-datasync/.eslintrc.js deleted file mode 100644 index 61dd8dd001f63..0000000000000 --- a/packages/@aws-cdk/aws-datasync/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('cdk-build-tools/config/eslintrc'); -baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; -module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-datasync/.gitignore b/packages/@aws-cdk/aws-datasync/.gitignore deleted file mode 100644 index 62ebc95d75ce6..0000000000000 --- a/packages/@aws-cdk/aws-datasync/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -*.js -*.js.map -*.d.ts -tsconfig.json -node_modules -*.generated.ts -dist -.jsii - -.LAST_BUILD -.nyc_output -coverage -.nycrc -.LAST_PACKAGE -*.snk -nyc.config.js -!.eslintrc.js -!jest.config.js -junit.xml diff --git a/packages/@aws-cdk/aws-datasync/.npmignore b/packages/@aws-cdk/aws-datasync/.npmignore deleted file mode 100644 index e4486030fcb17..0000000000000 --- a/packages/@aws-cdk/aws-datasync/.npmignore +++ /dev/null @@ -1,28 +0,0 @@ -# Don't include original .ts files when doing `npm pack` -*.ts -!*.d.ts -coverage -.nyc_output -*.tgz - -dist -.LAST_PACKAGE -.LAST_BUILD -!*.js - -# Include .jsii -!.jsii - -*.snk - -*.tsbuildinfo - -tsconfig.json - -.eslintrc.js -jest.config.js - -# exclude cdk artifacts -**/cdk.out -junit.xml -test/ diff --git a/packages/@aws-cdk/aws-datasync/LICENSE b/packages/@aws-cdk/aws-datasync/LICENSE deleted file mode 100644 index 28e4bdcec77ec..0000000000000 --- a/packages/@aws-cdk/aws-datasync/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/@aws-cdk/aws-datasync/NOTICE b/packages/@aws-cdk/aws-datasync/NOTICE deleted file mode 100644 index 5fc3826926b5b..0000000000000 --- a/packages/@aws-cdk/aws-datasync/NOTICE +++ /dev/null @@ -1,2 +0,0 @@ -AWS Cloud Development Kit (AWS CDK) -Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-datasync/README.md b/packages/@aws-cdk/aws-datasync/README.md deleted file mode 100644 index ab865b0be83a8..0000000000000 --- a/packages/@aws-cdk/aws-datasync/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS::DataSync Construct Library - - ---- - -![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) - -> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. -> -> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib - ---- - - - -This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. - -```ts -import datasync = require('@aws-cdk/aws-datasync'); -``` diff --git a/packages/@aws-cdk/aws-datasync/jest.config.js b/packages/@aws-cdk/aws-datasync/jest.config.js deleted file mode 100644 index 54e28beb9798b..0000000000000 --- a/packages/@aws-cdk/aws-datasync/jest.config.js +++ /dev/null @@ -1,2 +0,0 @@ -const baseConfig = require('cdk-build-tools/config/jest.config'); -module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-datasync/lib/index.ts b/packages/@aws-cdk/aws-datasync/lib/index.ts deleted file mode 100644 index e6edd2b3a8a5f..0000000000000 --- a/packages/@aws-cdk/aws-datasync/lib/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// AWS::DataSync CloudFormation Resources: -export * from './datasync.generated'; diff --git a/packages/@aws-cdk/aws-datasync/package.json b/packages/@aws-cdk/aws-datasync/package.json deleted file mode 100644 index 65d0fc8fab75a..0000000000000 --- a/packages/@aws-cdk/aws-datasync/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "name": "@aws-cdk/aws-datasync", - "version": "0.0.0", - "description": "The CDK Construct Library for AWS::DataSync", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "jsii": { - "outdir": "dist", - "projectReferences": true, - "targets": { - "dotnet": { - "namespace": "Amazon.CDK.AWS.DataSync", - "packageId": "Amazon.CDK.AWS.DataSync", - "signAssembly": true, - "assemblyOriginatorKeyFile": "../../key.snk", - "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" - }, - "java": { - "package": "software.amazon.awscdk.services.datasync", - "maven": { - "groupId": "software.amazon.awscdk", - "artifactId": "datasync" - } - }, - "python": { - "classifiers": [ - "Framework :: AWS CDK", - "Framework :: AWS CDK :: 1" - ], - "distName": "aws-cdk.aws-datasync", - "module": "aws_cdk.aws_datasync" - } - } - }, - "repository": { - "type": "git", - "url": "https://github.com/aws/aws-cdk.git", - "directory": "packages/@aws-cdk/aws-datasync" - }, - "homepage": "https://github.com/aws/aws-cdk", - "scripts": { - "build": "cdk-build", - "watch": "cdk-watch", - "lint": "cdk-lint", - "test": "cdk-test", - "integ": "cdk-integ", - "pkglint": "pkglint -f", - "package": "cdk-package", - "awslint": "cdk-awslint", - "cfn2ts": "cfn2ts", - "build+test+package": "npm run build+test && npm run package", - "build+test": "npm run build && npm test", - "compat": "cdk-compat", - "gen": "cfn2ts", - "rosetta:extract": "yarn --silent jsii-rosetta extract" - }, - "cdk-build": { - "cloudformation": "AWS::DataSync", - "jest": true, - "env": { - "AWSLINT_BASE_CONSTRUCT": "true" - } - }, - "keywords": [ - "aws", - "cdk", - "constructs", - "AWS::DataSync", - "aws-datasync" - ], - "author": { - "name": "Amazon Web Services", - "url": "https://aws.amazon.com", - "organization": true - }, - "license": "Apache-2.0", - "devDependencies": { - "@aws-cdk/assert": "0.0.0", - "cdk-build-tools": "0.0.0", - "cfn2ts": "0.0.0", - "pkglint": "0.0.0" - }, - "dependencies": { - "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5" - }, - "peerDependencies": { - "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5" - }, - "engines": { - "node": ">= 14.15.0" - }, - "stability": "experimental", - "maturity": "cfn-only", - "awscdkio": { - "announce": false - }, - "private": true -} diff --git a/packages/@aws-cdk/aws-datasync/test/datasync.test.ts b/packages/@aws-cdk/aws-datasync/test/datasync.test.ts deleted file mode 100644 index e394ef336bfb4..0000000000000 --- a/packages/@aws-cdk/aws-datasync/test/datasync.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import '@aws-cdk/assert/jest'; -import {} from '../lib'; - -test('No tests are specified for this package', () => { - expect(true).toBe(true); -}); diff --git a/packages/@aws-cdk/aws-dax/package.json b/packages/@aws-cdk/aws-dax/package.json index 6582f4fc69a19..b61cf80ba6694 100644 --- a/packages/@aws-cdk/aws-dax/package.json +++ b/packages/@aws-cdk/aws-dax/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-detective/package.json b/packages/@aws-cdk/aws-detective/package.json index bcc38a1b454ac..c1f1e091807c4 100644 --- a/packages/@aws-cdk/aws-detective/package.json +++ b/packages/@aws-cdk/aws-detective/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "awscdkio": { diff --git a/packages/@aws-cdk/aws-devopsguru/package.json b/packages/@aws-cdk/aws-devopsguru/package.json index 590085c5a5fed..409a0d2a6b9c6 100644 --- a/packages/@aws-cdk/aws-devopsguru/package.json +++ b/packages/@aws-cdk/aws-devopsguru/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-directoryservice/package.json b/packages/@aws-cdk/aws-directoryservice/package.json index a3aaed26eb565..948fac3e84ef0 100644 --- a/packages/@aws-cdk/aws-directoryservice/package.json +++ b/packages/@aws-cdk/aws-directoryservice/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-dlm/package.json b/packages/@aws-cdk/aws-dlm/package.json index d9bca4e2cd251..6a816e5ee5590 100644 --- a/packages/@aws-cdk/aws-dlm/package.json +++ b/packages/@aws-cdk/aws-dlm/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-dms/package.json b/packages/@aws-cdk/aws-dms/package.json index 40fa193c0c1d8..1c3ff387a3029 100644 --- a/packages/@aws-cdk/aws-dms/package.json +++ b/packages/@aws-cdk/aws-dms/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-docdb/package.json b/packages/@aws-cdk/aws-docdb/package.json index 32aef49367ea5..f16c155a95439 100644 --- a/packages/@aws-cdk/aws-docdb/package.json +++ b/packages/@aws-cdk/aws-docdb/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-dynamodb-global/package.json b/packages/@aws-cdk/aws-dynamodb-global/package.json index 11ac33a37de9d..8bfdc673ae756 100644 --- a/packages/@aws-cdk/aws-dynamodb-global/package.json +++ b/packages/@aws-cdk/aws-dynamodb-global/package.json @@ -88,7 +88,7 @@ "rosetta:extract": "yarn --silent jsii-rosetta extract" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/@aws-cdk/aws-dynamodb/package.json b/packages/@aws-cdk/aws-dynamodb/package.json index c05531dbc3da4..7317cc34c981d 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -76,7 +76,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/jest": "^26.0.15", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", @@ -108,7 +108,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-ec2/lib/security-group.ts b/packages/@aws-cdk/aws-ec2/lib/security-group.ts index b5c3e4bf5cff2..62a0ceb19e0ca 100644 --- a/packages/@aws-cdk/aws-ec2/lib/security-group.ts +++ b/packages/@aws-cdk/aws-ec2/lib/security-group.ts @@ -321,13 +321,6 @@ export class SecurityGroup extends SecurityGroupBase { /** * Import an existing security group into this app. - * - * This method will assume that the Security Group has a rule in it which allows - * all outbound traffic, and so will not add egress rules to the imported Security - * Group (only ingress rules). - * - * If your existing Security Group needs to have egress rules added, pass the - * `allowAllOutbound: false` option on import. */ public static fromSecurityGroupId(scope: Construct, id: string, securityGroupId: string, options: SecurityGroupImportOptions = {}): ISecurityGroup { class MutableImport extends SecurityGroupBase { diff --git a/packages/@aws-cdk/aws-ec2/package.json b/packages/@aws-cdk/aws-ec2/package.json index 9aa676bc06c33..afd9d1ae25081 100644 --- a/packages/@aws-cdk/aws-ec2/package.json +++ b/packages/@aws-cdk/aws-ec2/package.json @@ -113,7 +113,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ecr-assets/package.json b/packages/@aws-cdk/aws-ecr-assets/package.json index 0129b307f72de..0fa09d212e9b2 100644 --- a/packages/@aws-cdk/aws-ecr-assets/package.json +++ b/packages/@aws-cdk/aws-ecr-assets/package.json @@ -100,7 +100,7 @@ "statements": 70 }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "bundledDependencies": [ "minimatch" diff --git a/packages/@aws-cdk/aws-ecr/package.json b/packages/@aws-cdk/aws-ecr/package.json index 1b9f1a81f3c6a..396c853a88c17 100644 --- a/packages/@aws-cdk/aws-ecr/package.json +++ b/packages/@aws-cdk/aws-ecr/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ecs-patterns/package.json b/packages/@aws-cdk/aws-ecs-patterns/package.json index 330a3466e1198..5aa12690e1955 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/package.json +++ b/packages/@aws-cdk/aws-ecs-patterns/package.json @@ -109,7 +109,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-ecs/lib/cluster.ts b/packages/@aws-cdk/aws-ecs/lib/cluster.ts index b27da8557b757..4b1f3cbc56aec 100644 --- a/packages/@aws-cdk/aws-ecs/lib/cluster.ts +++ b/packages/@aws-cdk/aws-ecs/lib/cluster.ts @@ -227,42 +227,38 @@ export class Cluster extends Resource implements ICluster { this._hasEc2Capacity = true; this.connections.connections.addSecurityGroup(...autoScalingGroup.connections.securityGroups); - if ( autoScalingGroup.osType === ec2.OperatingSystemType.WINDOWS ) { - this.configureWindowsAutoScalingGroup(autoScalingGroup, options); - } else { - // Tie instances to cluster - switch (options.machineImageType) { - // Bottlerocket AMI - case MachineImageType.BOTTLEROCKET: { - autoScalingGroup.addUserData( - // Connect to the cluster - // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#connecting-to-your-cluster - '[settings.ecs]', - `cluster = "${this.clusterName}"`, - ); - // Enabling SSM - // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#enabling-ssm - autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore')); - // required managed policy - autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonEC2ContainerServiceforEC2Role')); - break; - } - default: - // Amazon ECS-optimized AMI for Amazon Linux 2 - autoScalingGroup.addUserData(`echo ECS_CLUSTER=${this.clusterName} >> /etc/ecs/ecs.config`); - if (!options.canContainersAccessInstanceRole) { - // Deny containers access to instance metadata service - // Source: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html - autoScalingGroup.addUserData('sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP'); - autoScalingGroup.addUserData('sudo service iptables save'); - // The following is only for AwsVpc networking mode, but doesn't hurt for the other modes. - autoScalingGroup.addUserData('echo ECS_AWSVPC_BLOCK_IMDS=true >> /etc/ecs/ecs.config'); - } - - if (autoScalingGroup.spotPrice && options.spotInstanceDraining) { - autoScalingGroup.addUserData('echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config'); - } + // Tie instances to cluster + switch (options.machineImageType) { + // Bottlerocket AMI + case MachineImageType.BOTTLEROCKET: { + autoScalingGroup.addUserData( + // Connect to the cluster + // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#connecting-to-your-cluster + '[settings.ecs]', + `cluster = "${this.clusterName}"`, + ); + // Enabling SSM + // Source: https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#enabling-ssm + autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore')); + // required managed policy + autoScalingGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonEC2ContainerServiceforEC2Role')); + break; } + default: + // Amazon ECS-optimized AMI for Amazon Linux 2 + autoScalingGroup.addUserData(`echo ECS_CLUSTER=${this.clusterName} >> /etc/ecs/ecs.config`); + if (!options.canContainersAccessInstanceRole) { + // Deny containers access to instance metadata service + // Source: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html + autoScalingGroup.addUserData('sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP'); + autoScalingGroup.addUserData('sudo service iptables save'); + // The following is only for AwsVpc networking mode, but doesn't hurt for the other modes. + autoScalingGroup.addUserData('echo ECS_AWSVPC_BLOCK_IMDS=true >> /etc/ecs/ecs.config'); + } + + if (autoScalingGroup.spotPrice && options.spotInstanceDraining) { + autoScalingGroup.addUserData('echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config'); + } } // ECS instances must be able to do these things @@ -319,33 +315,6 @@ export class Cluster extends Resource implements ICluster { } } - private configureWindowsAutoScalingGroup(autoScalingGroup: autoscaling.AutoScalingGroup, options: AddAutoScalingGroupCapacityOptions = {}) { - // clear the cache of the agent - autoScalingGroup.addUserData('Remove-Item -Recurse C:\\ProgramData\\Amazon\\ECS\\Cache'); - - // pull the latest ECS Tools - autoScalingGroup.addUserData('Import-Module ECSTools'); - - // set the cluster name environment variable - autoScalingGroup.addUserData(`[Environment]::SetEnvironmentVariable("ECS_CLUSTER", "${this.clusterName}", "Machine")`); - autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", "true", "Machine")'); - // tslint:disable-next-line: max-line-length - autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_AVAILABLE_LOGGING_DRIVERS", "[\"json-file\",\"awslogs\"]", "Machine")'); - - // enable instance draining - if (autoScalingGroup.spotPrice && options.spotInstanceDraining) { - autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_ENABLE_SPOT_INSTANCE_DRAINING", "true", "Machine")'); - } - - // enable task iam role - if (!options.canContainersAccessInstanceRole) { - autoScalingGroup.addUserData('[Environment]::SetEnvironmentVariable("ECS_ENABLE_TASK_IAM_ROLE", "true", "Machine")'); - autoScalingGroup.addUserData(`Initialize-ECSAgent -Cluster '${this.clusterName}' -EnableTaskIAMRole'`); - } else { - autoScalingGroup.addUserData(`Initialize-ECSAgent -Cluster '${this.clusterName}'`); - } - } - /** * Getter for autoscaling group added to cluster */ diff --git a/packages/@aws-cdk/aws-ecs/package.json b/packages/@aws-cdk/aws-ecs/package.json index fbaf5bb20cc2c..b1a530e41c624 100644 --- a/packages/@aws-cdk/aws-ecs/package.json +++ b/packages/@aws-cdk/aws-ecs/package.json @@ -143,7 +143,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json b/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json index 34017cbb94b10..7ba376073123b 100644 --- a/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json +++ b/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json @@ -711,12 +711,14 @@ "Code": { "ZipFile": "import boto3, json, os, time\n\necs = boto3.client('ecs')\nautoscaling = boto3.client('autoscaling')\n\n\ndef lambda_handler(event, context):\n print(json.dumps(event))\n cluster = os.environ['CLUSTER']\n snsTopicArn = event['Records'][0]['Sns']['TopicArn']\n lifecycle_event = json.loads(event['Records'][0]['Sns']['Message'])\n instance_id = lifecycle_event.get('EC2InstanceId')\n if not instance_id:\n print('Got event without EC2InstanceId: %s', json.dumps(event))\n return\n\n instance_arn = container_instance_arn(cluster, instance_id)\n print('Instance %s has container instance ARN %s' % (lifecycle_event['EC2InstanceId'], instance_arn))\n\n if not instance_arn:\n return\n\n while has_tasks(cluster, instance_arn):\n time.sleep(10)\n\n try:\n print('Terminating instance %s' % instance_id)\n autoscaling.complete_lifecycle_action(\n LifecycleActionResult='CONTINUE',\n **pick(lifecycle_event, 'LifecycleHookName', 'LifecycleActionToken', 'AutoScalingGroupName'))\n except Exception as e:\n # Lifecycle action may have already completed.\n print(str(e))\n\n\ndef container_instance_arn(cluster, instance_id):\n \"\"\"Turn an instance ID into a container instance ARN.\"\"\"\n arns = ecs.list_container_instances(cluster=cluster, filter='ec2InstanceId==' + instance_id)['containerInstanceArns']\n if not arns:\n return None\n return arns[0]\n\n\ndef has_tasks(cluster, instance_arn):\n \"\"\"Return True if the instance is running tasks for the given cluster.\"\"\"\n instances = ecs.describe_container_instances(cluster=cluster, containerInstances=[instance_arn])['containerInstances']\n if not instances:\n return False\n instance = instances[0]\n\n if instance['status'] == 'ACTIVE':\n # Start draining, then try again later\n set_container_instance_to_draining(cluster, instance_arn)\n return True\n\n tasks = instance['runningTasksCount'] + instance['pendingTasksCount']\n print('Instance %s has %s tasks' % (instance_arn, tasks))\n\n return tasks > 0\n\n\ndef set_container_instance_to_draining(cluster, instance_arn):\n ecs.update_container_instances_state(\n cluster=cluster,\n containerInstances=[instance_arn], status='DRAINING')\n\n\ndef pick(dct, *keys):\n \"\"\"Pick a subset of a dict.\"\"\"\n return {k: v for k, v in dct.items() if k in keys}\n" }, + "Handler": "index.lambda_handler", "Role": { "Fn::GetAtt": [ "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA", "Arn" ] }, + "Runtime": "python3.6", "Environment": { "Variables": { "CLUSTER": { @@ -724,8 +726,6 @@ } } }, - "Handler": "index.lambda_handler", - "Runtime": "python3.6", "Tags": [ { "Key": "Name", @@ -1219,7 +1219,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152" }, "S3Key": { "Fn::Join": [ @@ -1232,7 +1232,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" } ] } @@ -1245,7 +1245,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" } ] } @@ -1255,19 +1255,19 @@ ] } }, + "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "Arn" ] }, - "Handler": "index.handler", + "Runtime": "python3.6", "Layers": [ { "Ref": "EnvFileDeploymentAwsCliLayerA8FC897D" } ], - "Runtime": "python3.6", "Timeout": 900 }, "DependsOn": [ @@ -1348,17 +1348,17 @@ "Type": "String", "Description": "Artifact hash for asset \"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152": { "Type": "String", - "Description": "S3 bucket for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "S3 bucket for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED": { "Type": "String", - "Description": "S3 key for asset version \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "S3 key for asset version \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7ArtifactHash8926088E": { "Type": "String", - "Description": "Artifact hash for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "Artifact hash for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, "AssetParameters972240f9dd6e036a93d5f081af9a24315b2053828ac049b3b19b2fa12d7ae64aS3Bucket1F1A8472": { "Type": "String", diff --git a/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts b/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts index b8f3b3621a71c..cbccd0683dd0d 100644 --- a/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts +++ b/packages/@aws-cdk/aws-ecs/test/test.ecs-cluster.ts @@ -755,59 +755,6 @@ export = { test.done(); }, - 'configures userdata with powershell if windows machine image is specified'(test: Test) { - // GIVEN - const stack = new cdk.Stack(); - const vpc = new ec2.Vpc(stack, 'MyVpc', {}); - - const cluster = new ecs.Cluster(stack, 'EcsCluster', { vpc }); - cluster.addCapacity('WindowsAutoScalingGroup', { - instanceType: new ec2.InstanceType('t2.micro'), - machineImage: new ecs.EcsOptimizedAmi({ - windowsVersion: ecs.WindowsOptimizedVersion.SERVER_2019, - }), - }); - - // THEN - expect(stack).to(haveResource('AWS::AutoScaling::LaunchConfiguration', { - ImageId: { - Ref: 'SsmParameterValueawsserviceecsoptimizedamiwindowsserver2019englishfullrecommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter', - }, - InstanceType: 't2.micro', - IamInstanceProfile: { - Ref: 'EcsClusterWindowsAutoScalingGroupInstanceProfile65DFA6BB', - }, - SecurityGroups: [ - { - 'Fn::GetAtt': [ - 'EcsClusterWindowsAutoScalingGroupInstanceSecurityGroupDA468DF1', - 'GroupId', - ], - }, - ], - UserData: { - 'Fn::Base64': { - 'Fn::Join': [ - '', - [ - 'Remove-Item -Recurse C:\\ProgramData\\Amazon\\ECS\\Cache\nImport-Module ECSTools\n[Environment]::SetEnvironmentVariable("ECS_CLUSTER", "', - { - Ref: 'EcsCluster97242B84', - }, - "\", \"Machine\")\n[Environment]::SetEnvironmentVariable(\"ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE\", \"true\", \"Machine\")\n[Environment]::SetEnvironmentVariable(\"ECS_AVAILABLE_LOGGING_DRIVERS\", \"[\"json-file\",\"awslogs\"]\", \"Machine\")\n[Environment]::SetEnvironmentVariable(\"ECS_ENABLE_TASK_IAM_ROLE\", \"true\", \"Machine\")\nInitialize-ECSAgent -Cluster '", - { - Ref: 'EcsCluster97242B84', - }, - "' -EnableTaskIAMRole'", - ], - ], - }, - }, - })); - - test.done(); - }, - /* * TODO:v2.0.0 BEGINNING OF OBSOLETE BLOCK */ diff --git a/packages/@aws-cdk/aws-efs/package.json b/packages/@aws-cdk/aws-efs/package.json index 8ef7ebb087d9e..559a961679bc1 100644 --- a/packages/@aws-cdk/aws-efs/package.json +++ b/packages/@aws-cdk/aws-efs/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-eks-legacy/package.json b/packages/@aws-cdk/aws-eks-legacy/package.json index b5adddcd25205..ca92246e41c7c 100644 --- a/packages/@aws-cdk/aws-eks-legacy/package.json +++ b/packages/@aws-cdk/aws-eks-legacy/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-eks/README.md b/packages/@aws-cdk/aws-eks/README.md index 35fc9c24c244e..0b92c183fb786 100644 --- a/packages/@aws-cdk/aws-eks/README.md +++ b/packages/@aws-cdk/aws-eks/README.md @@ -232,40 +232,8 @@ cluster.addNodegroupCapacity('extra-ng-spot', { #### Launch Template Support -You can specify a launch template that the node group will use. For example, this can be useful if you want to use -a custom AMI or add custom user data. - -When supplying a custom user data script, it must be encoded in the MIME multi-part archive format, since Amazon EKS merges with its own user data. Visit the [Launch Template Docs](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-user-data) -for mode details. - -```ts -const userData = `MIME-Version: 1.0 -Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" - ---==MYBOUNDARY== -Content-Type: text/x-shellscript; charset="us-ascii" - -#!/bin/bash -echo "Running custom user data script" - ---==MYBOUNDARY==--\\ -`; -const lt = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', { - launchTemplateData: { - instanceType: 't3.small', - userData: Fn.base64(userData), - }, -}); -cluster.addNodegroupCapacity('extra-ng', { - launchTemplateSpec: { - id: lt.ref, - version: lt.attrLatestVersionNumber, - }, -}); - -``` - -Note that when using a custom AMI, Amazon EKS doesn't merge any user data. Which means you do not need the multi-part encoding. and are responsible for supplying the required bootstrap commands for nodes to join the cluster. +You can specify a launch template that the node group will use. Note that when using a custom AMI, Amazon EKS doesn't merge any user data. +Rather, You are responsible for supplying the required bootstrap commands for nodes to join the cluster. In the following example, `/ect/eks/bootstrap.sh` from the AMI will be used to bootstrap the node. ```ts @@ -277,19 +245,19 @@ userData.addCommands( const lt = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', { launchTemplateData: { imageId: 'some-ami-id', // custom AMI - instanceType: 't3.small', + instanceType: new ec2.InstanceType('t3.small').toString(), userData: Fn.base64(userData.render()), }, }); cluster.addNodegroupCapacity('extra-ng', { launchTemplateSpec: { id: lt.ref, - version: lt.attrLatestVersionNumber, + version: lt.attrDefaultVersionNumber, }, }); ``` -You may specify one `instanceType` in the launch template or multiple `instanceTypes` in the node group, **but not both**. +You may specify one or instance types in either the `instanceTypes` property of `NodeGroup` or in the launch template, **but not both**. > For more details visit [Launch Template Support](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html). @@ -433,8 +401,6 @@ terminated. > > Chart Version: [0.9.5](https://github.com/aws/eks-charts/blob/v0.0.28/stable/aws-node-termination-handler/Chart.yaml) -To disable the installation of the termination handler, set the `spotInterruptHandler` property to `false`. This applies both to `addAutoScalingGroupCapacity` and `connectAutoScalingGroupCapacity`. - #### Bottlerocket [Bottlerocket](https://aws.amazon.com/bottlerocket/) is a Linux-based open-source operating system that is purpose-built by Amazon Web Services for running containers on virtual machines or bare metal hosts. diff --git a/packages/@aws-cdk/aws-eks/lib/cluster.ts b/packages/@aws-cdk/aws-eks/lib/cluster.ts index 0b221c8347b56..cb35a3c719283 100644 --- a/packages/@aws-cdk/aws-eks/lib/cluster.ts +++ b/packages/@aws-cdk/aws-eks/lib/cluster.ts @@ -1177,7 +1177,6 @@ export class Cluster extends ClusterBase { bootstrapOptions: options.bootstrapOptions, bootstrapEnabled: options.bootstrapEnabled, machineImageType: options.machineImageType, - spotInterruptHandler: options.spotInterruptHandler, }); if (nodeTypeForInstanceType(options.instanceType) === NodeType.INFERENTIA) { @@ -1287,9 +1286,8 @@ export class Cluster extends ClusterBase { }); } - const addSpotInterruptHandler = options.spotInterruptHandler ?? true; // if this is an ASG with spot instances, install the spot interrupt handler (only if kubectl is enabled). - if (autoScalingGroup.spotPrice && addSpotInterruptHandler) { + if (autoScalingGroup.spotPrice) { this.addSpotInterruptHandler(); } } @@ -1446,9 +1444,7 @@ export class Cluster extends ClusterBase { repository: 'https://aws.github.io/eks-charts', namespace: 'kube-system', values: { - nodeSelector: { - lifecycle: LifecycleLabel.SPOT, - }, + 'nodeSelector.lifecycle': LifecycleLabel.SPOT, }, }); } @@ -1580,14 +1576,6 @@ export interface AutoScalingGroupCapacityOptions extends autoscaling.CommonAutoS * @default MachineImageType.AMAZON_LINUX_2 */ readonly machineImageType?: MachineImageType; - - /** - * Installs the AWS spot instance interrupt handler on the cluster if it's not - * already added. Only relevant if `spotPrice` is used. - * - * @default true - */ - readonly spotInterruptHandler?: boolean; } /** @@ -1679,14 +1667,6 @@ export interface AutoScalingGroupOptions { * @default MachineImageType.AMAZON_LINUX_2 */ readonly machineImageType?: MachineImageType; - - /** - * Installs the AWS spot instance interrupt handler on the cluster if it's not - * already added. Only relevant if `spotPrice` is configured on the auto-scaling group. - * - * @default true - */ - readonly spotInterruptHandler?: boolean; } /** diff --git a/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts b/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts index 7d46fb00c6e92..576957512cc6d 100644 --- a/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts +++ b/packages/@aws-cdk/aws-eks/lib/managed-nodegroup.ts @@ -226,6 +226,10 @@ export interface NodegroupProps extends NodegroupOptions { * The Nodegroup resource class */ export class Nodegroup extends Resource implements INodegroup { + /** + * Default instanceTypes + */ + public static readonly DEFAULT_INSTANCE_TYPES = [new InstanceType('t3.medium')]; /** * Import the Nodegroup from attributes */ @@ -287,17 +291,16 @@ export class Nodegroup extends Resource implements INodegroup { if (props.instanceType) { Annotations.of(this).addWarning('"instanceType" is deprecated and will be removed in the next major version. please use "instanceTypes" instead'); } - const instanceTypes = props.instanceTypes ?? (props.instanceType ? [props.instanceType] : undefined); - let expectedAmiType = undefined; - - if (instanceTypes && instanceTypes.length > 0) { - // if the user explicitly configured instance types, we can calculate the expected ami type. - expectedAmiType = getAmiType(instanceTypes); - - // if the user explicitly configured an ami type, make sure its the same as the expected one. - if (props.amiType && props.amiType !== expectedAmiType) { - throw new Error(`The specified AMI does not match the instance types architecture, either specify ${expectedAmiType} or dont specify any`); - } + const instanceTypes = props.instanceTypes ?? (props.instanceType ? [props.instanceType] : Nodegroup.DEFAULT_INSTANCE_TYPES); + // get unique AMI types from instanceTypes + const uniqAmiTypes = getAmiTypes(instanceTypes); + // uniqAmiTypes.length should be at least 1 + if (uniqAmiTypes.length > 1) { + throw new Error('instanceTypes of different CPU architectures is not allowed'); + } + const determinedAmiType = uniqAmiTypes[0]; + if (props.amiType && props.amiType !== determinedAmiType) { + throw new Error(`The specified AMI does not match the instance types architecture, either specify ${determinedAmiType} or dont specify any`); } if (!props.nodeRole) { @@ -318,18 +321,13 @@ export class Nodegroup extends Resource implements INodegroup { nodegroupName: props.nodegroupName, nodeRole: this.role.roleArn, subnets: this.cluster.vpc.selectSubnets(props.subnets).subnetIds, - - // if a launch template is configured, we cannot apply a default since it - // might exist in the launch template as well, causing a deployment failure. - amiType: props.launchTemplateSpec !== undefined ? props.amiType : (props.amiType ?? expectedAmiType), - + // AmyType is not allowed by CFN when specifying an image id in your launch template. + amiType: props.launchTemplateSpec === undefined ? determinedAmiType : undefined, capacityType: props.capacityType ? props.capacityType.valueOf() : undefined, diskSize: props.diskSize, forceUpdateEnabled: props.forceUpdate ?? true, - - // note that we don't check if a launch template is configured here (even though it might configure instance types as well) - // because this doesn't have a default value, meaning the user had to explicitly configure this. - instanceTypes: instanceTypes?.map(t => t.toString()), + instanceTypes: props.instanceTypes ? props.instanceTypes.map(t => t.toString()) : + props.instanceType ? [props.instanceType.toString()] : undefined, labels: props.labels, releaseVersion: props.releaseVersion, remoteAccess: props.remoteAccess ? { @@ -394,16 +392,8 @@ function getAmiTypeForInstanceType(instanceType: InstanceType) { NodegroupAmiType.AL2_X86_64; } -// this function examines the CPU architecture of every instance type and determines -// what ami type is compatible for all of them. it either throws or produces a single value because -// instance types of different CPU architectures are not supported. -function getAmiType(instanceTypes: InstanceType[]) { - const amiTypes = new Set(instanceTypes.map(i => getAmiTypeForInstanceType(i))); - if (amiTypes.size == 0) { // protective code, the current implementation will never result in this. - throw new Error(`Cannot determine any ami type comptaible with instance types: ${instanceTypes.map(i => i.toString).join(',')}`); - } - if (amiTypes.size > 1) { - throw new Error('instanceTypes of different CPU architectures is not allowed'); - } - return amiTypes.values().next().value; +function getAmiTypes(instanceType: InstanceType[]) { + const amiTypes = instanceType.map(i =>getAmiTypeForInstanceType(i)); + // retuen unique AMI types + return [...new Set(amiTypes)]; } diff --git a/packages/@aws-cdk/aws-eks/package.json b/packages/@aws-cdk/aws-eks/package.json index 773a62c580d25..39a08e0352fd5 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -76,7 +76,7 @@ "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", "@types/yaml": "1.9.6", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", @@ -118,7 +118,7 @@ "@aws-cdk/lambda-layer-kubectl": "0.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json index 5c0b4bf402a5b..230268fdca0f7 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json @@ -2739,7 +2739,7 @@ "Release": "ksclustertestclusterchartspotinterrupthandlerf41ba997", "Chart": "aws-node-termination-handler", "Version": "0.13.2", - "Values": "{\"nodeSelector\":{\"lifecycle\":\"Ec2Spot\"}}", + "Values": "{\"nodeSelector.lifecycle\":\"Ec2Spot\"}", "Namespace": "kube-system", "Repository": "https://aws.github.io/eks-charts", "CreateNamespace": true diff --git a/packages/@aws-cdk/aws-eks/test/test.cluster.ts b/packages/@aws-cdk/aws-eks/test/test.cluster.ts index 171e07fdced72..f485253d1eba4 100644 --- a/packages/@aws-cdk/aws-eks/test/test.cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/test.cluster.ts @@ -188,31 +188,6 @@ export = { }, - 'spot interrupt handler is not added if spotInterruptHandler is false when connecting self-managed nodes'(test: Test) { - - // GIVEN - const { stack, vpc } = testFixture(); - const cluster = new eks.Cluster(stack, 'Cluster', { - vpc, - defaultCapacity: 0, - version: CLUSTER_VERSION, - prune: false, - }); - - const selfManaged = new asg.AutoScalingGroup(stack, 'self-managed', { - instanceType: new ec2.InstanceType('t2.medium'), - vpc: vpc, - machineImage: new ec2.AmazonLinuxImage(), - spotPrice: '0.1', - }); - - // WHEN - cluster.connectAutoScalingGroupCapacity(selfManaged, { spotInterruptHandler: false }); - - test.equal(cluster.node.findAll().filter(c => c.node.id === 'chart-spot-interrupt-handler').length, 0); - test.done(); - }, - 'throws when a non cdk8s chart construct is added as cdk8s chart'(test: Test) { const { stack } = testFixture(); @@ -1310,30 +1285,13 @@ export = { expect(stack).to(haveResource(eks.HelmChart.RESOURCE_TYPE, { Release: 'stackclusterchartspotinterrupthandlerdec62e07', Chart: 'aws-node-termination-handler', - Values: '{\"nodeSelector\":{\"lifecycle\":\"Ec2Spot\"}}', + Values: '{\"nodeSelector.lifecycle\":\"Ec2Spot\"}', Namespace: 'kube-system', Repository: 'https://aws.github.io/eks-charts', })); test.done(); }, - 'interrupt handler is not added when spotInterruptHandler is false'(test: Test) { - // GIVEN - const { stack } = testFixtureNoVpc(); - const cluster = new eks.Cluster(stack, 'Cluster', { defaultCapacity: 0, version: CLUSTER_VERSION, prune: false }); - - // WHEN - cluster.addAutoScalingGroupCapacity('MyCapcity', { - instanceType: new ec2.InstanceType('m3.xlarge'), - spotPrice: '0.01', - spotInterruptHandler: false, - }); - - // THEN - test.equal(cluster.node.findAll().filter(c => c.node.id === 'chart-spot-interrupt-handler').length, 0); - test.done(); - }, - 'its possible to add two capacities with spot instances and only one stop handler will be installed'(test: Test) { // GIVEN const { stack } = testFixtureNoVpc(); diff --git a/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts b/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts index 241482d469c65..ff962572a6f92 100644 --- a/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts +++ b/packages/@aws-cdk/aws-eks/test/test.nodegroup.ts @@ -10,92 +10,6 @@ import { testFixture } from './util'; const CLUSTER_VERSION = eks.KubernetesVersion.V1_18; export = { - - 'default ami type is not applied when launch template is configured'(test: Test) { - - // GIVEN - const { stack, vpc } = testFixture(); - - const launchTemplate = new ec2.CfnLaunchTemplate(stack, 'LaunchTemplate', { - launchTemplateData: { - instanceType: ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.MEDIUM).toString(), - }, - }); - - // WHEN - const cluster = new eks.Cluster(stack, 'Cluster', { - vpc, - defaultCapacity: 0, - version: CLUSTER_VERSION, - }); - new eks.Nodegroup(stack, 'Nodegroup', { - cluster, - instanceTypes: [ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.LARGE)], - launchTemplateSpec: { - id: launchTemplate.ref, - version: launchTemplate.attrLatestVersionNumber, - }, - }); - - // THEN - test.equal(expect(stack).value.Resources.Nodegroup62B4B2C1.Properties.AmiType, undefined); - test.done(); - }, - - 'explicit ami type is applied even when launch template is configured'(test: Test) { - - // GIVEN - const { stack, vpc } = testFixture(); - - const launchTemplate = new ec2.CfnLaunchTemplate(stack, 'LaunchTemplate', { - launchTemplateData: { - instanceType: ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.MEDIUM).toString(), - }, - }); - - // WHEN - const cluster = new eks.Cluster(stack, 'Cluster', { - vpc, - defaultCapacity: 0, - version: CLUSTER_VERSION, - }); - new eks.Nodegroup(stack, 'Nodegroup', { - cluster, - amiType: eks.NodegroupAmiType.AL2_X86_64, - launchTemplateSpec: { - id: launchTemplate.ref, - version: launchTemplate.attrLatestVersionNumber, - }, - }); - - // THEN - test.equal(expect(stack).value.Resources.Nodegroup62B4B2C1.Properties.AmiType, 'AL2_x86_64'); - test.done(); - }, - - 'ami type is taken as is when no instance types are configured'(test: Test) { - - // GIVEN - const { stack, vpc } = testFixture(); - - // WHEN - const cluster = new eks.Cluster(stack, 'Cluster', { - vpc, - defaultCapacity: 0, - version: CLUSTER_VERSION, - }); - new eks.Nodegroup(stack, 'Nodegroup', { - cluster, - amiType: eks.NodegroupAmiType.AL2_X86_64_GPU, - }); - - // THEN - expect(stack).to(haveResourceLike('AWS::EKS::Nodegroup', { - AmiType: 'AL2_x86_64_GPU', - })); - test.done(); - }, - 'create nodegroup correctly'(test: Test) { // GIVEN const { stack, vpc } = testFixture(); diff --git a/packages/@aws-cdk/aws-elasticache/package.json b/packages/@aws-cdk/aws-elasticache/package.json index c28539b5b06b5..8f89a5c5b7238 100644 --- a/packages/@aws-cdk/aws-elasticache/package.json +++ b/packages/@aws-cdk/aws-elasticache/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-elasticbeanstalk/package.json b/packages/@aws-cdk/aws-elasticbeanstalk/package.json index c112c9280c718..da4ed4bc4f320 100644 --- a/packages/@aws-cdk/aws-elasticbeanstalk/package.json +++ b/packages/@aws-cdk/aws-elasticbeanstalk/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-elasticloadbalancing/package.json b/packages/@aws-cdk/aws-elasticloadbalancing/package.json index 7792b2c813531..42612b65ae9ea 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancing/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancing/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "nyc": { "statements": 75 diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json b/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json index ae4c86ed370c7..f0df897f6db29 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2-actions/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json b/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json index a3813eea37f1d..2c5de8a263103 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2-targets/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json b/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json index 141302e37b87a..25f2a85c1d082 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/package.json @@ -108,7 +108,7 @@ "@aws-cdk/region-info": "0.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts b/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts index 668086dab5372..480361c1358f6 100644 --- a/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts +++ b/packages/@aws-cdk/aws-elasticsearch/lib/domain.ts @@ -1474,36 +1474,6 @@ export class Domain extends DomainBase implements IDomain { }); } - const logPublishing: Record = {}; - - if (this.appLogGroup) { - logPublishing.ES_APPLICATION_LOGS = { - enabled: true, - cloudWatchLogsLogGroupArn: this.appLogGroup.logGroupArn, - }; - } - - if (this.slowSearchLogGroup) { - logPublishing.SEARCH_SLOW_LOGS = { - enabled: true, - cloudWatchLogsLogGroupArn: this.slowSearchLogGroup.logGroupArn, - }; - } - - if (this.slowIndexLogGroup) { - logPublishing.INDEX_SLOW_LOGS = { - enabled: true, - cloudWatchLogsLogGroupArn: this.slowIndexLogGroup.logGroupArn, - }; - } - - if (this.auditLogGroup) { - logPublishing.AUDIT_LOGS = { - enabled: this.auditLogGroup != null, - cloudWatchLogsLogGroupArn: this.auditLogGroup?.logGroupArn, - }; - } - // Create the domain this.domain = new CfnDomain(this, 'Resource', { domainName: this.physicalName, @@ -1536,7 +1506,24 @@ export class Domain extends DomainBase implements IDomain { : undefined, }, nodeToNodeEncryptionOptions: { enabled: nodeToNodeEncryptionEnabled }, - logPublishingOptions: logPublishing, + logPublishingOptions: { + AUDIT_LOGS: { + enabled: this.auditLogGroup != null, + cloudWatchLogsLogGroupArn: this.auditLogGroup?.logGroupArn, + }, + ES_APPLICATION_LOGS: { + enabled: this.appLogGroup != null, + cloudWatchLogsLogGroupArn: this.appLogGroup?.logGroupArn, + }, + SEARCH_SLOW_LOGS: { + enabled: this.slowSearchLogGroup != null, + cloudWatchLogsLogGroupArn: this.slowSearchLogGroup?.logGroupArn, + }, + INDEX_SLOW_LOGS: { + enabled: this.slowIndexLogGroup != null, + cloudWatchLogsLogGroupArn: this.slowIndexLogGroup?.logGroupArn, + }, + }, cognitoOptions: { enabled: props.cognitoKibanaAuth != null, identityPoolId: props.cognitoKibanaAuth?.identityPoolId, diff --git a/packages/@aws-cdk/aws-elasticsearch/package.json b/packages/@aws-cdk/aws-elasticsearch/package.json index 00cf8c59b320d..07c8b997db14c 100644 --- a/packages/@aws-cdk/aws-elasticsearch/package.json +++ b/packages/@aws-cdk/aws-elasticsearch/package.json @@ -104,7 +104,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts b/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts index ff85a85e218f8..affa1d45e4477 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts +++ b/packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts @@ -89,10 +89,18 @@ test('minimal example renders correctly', () => { Enabled: false, }, LogPublishingOptions: { - AUDIT_LOGS: assert.ABSENT, - ES_APPLICATION_LOGS: assert.ABSENT, - SEARCH_SLOW_LOGS: assert.ABSENT, - INDEX_SLOW_LOGS: assert.ABSENT, + AUDIT_LOGS: { + Enabled: false, + }, + ES_APPLICATION_LOGS: { + Enabled: false, + }, + SEARCH_SLOW_LOGS: { + Enabled: false, + }, + INDEX_SLOW_LOGS: { + Enabled: false, + }, }, NodeToNodeEncryptionOptions: { Enabled: false, @@ -125,6 +133,9 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { + ES_APPLICATION_LOGS: { + Enabled: false, + }, SEARCH_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -134,9 +145,9 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, - ES_APPLICATION_LOGS: assert.ABSENT, - INDEX_SLOW_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: { + Enabled: false, + }, }, }); }); @@ -151,6 +162,12 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { + ES_APPLICATION_LOGS: { + Enabled: false, + }, + SEARCH_SLOW_LOGS: { + Enabled: false, + }, INDEX_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -160,9 +177,6 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, - ES_APPLICATION_LOGS: assert.ABSENT, - SEARCH_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -186,9 +200,12 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, - SEARCH_SLOW_LOGS: assert.ABSENT, - INDEX_SLOW_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: { + Enabled: false, + }, + INDEX_SLOW_LOGS: { + Enabled: false, + }, }, }); }); @@ -220,9 +237,15 @@ describe('log groups', () => { }, Enabled: true, }, - ES_APPLICATION_LOGS: assert.ABSENT, - SEARCH_SLOW_LOGS: assert.ABSENT, - INDEX_SLOW_LOGS: assert.ABSENT, + ES_APPLICATION_LOGS: { + Enabled: false, + }, + SEARCH_SLOW_LOGS: { + Enabled: false, + }, + INDEX_SLOW_LOGS: { + Enabled: false, + }, }, }); }); @@ -273,7 +296,6 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, }, }); expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { @@ -305,7 +327,6 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, }, }); }); @@ -364,6 +385,12 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { + AUDIT_LOGS: { + Enabled: false, + }, + ES_APPLICATION_LOGS: { + Enabled: false, + }, SEARCH_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -373,9 +400,9 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, - ES_APPLICATION_LOGS: assert.ABSENT, - INDEX_SLOW_LOGS: assert.ABSENT, + INDEX_SLOW_LOGS: { + Enabled: false, + }, }, }); }); @@ -393,6 +420,15 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { + AUDIT_LOGS: { + Enabled: false, + }, + ES_APPLICATION_LOGS: { + Enabled: false, + }, + SEARCH_SLOW_LOGS: { + Enabled: false, + }, INDEX_SLOW_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -402,9 +438,6 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, - ES_APPLICATION_LOGS: assert.ABSENT, - SEARCH_SLOW_LOGS: assert.ABSENT, }, }); }); @@ -422,6 +455,9 @@ describe('log groups', () => { expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', { LogPublishingOptions: { + AUDIT_LOGS: { + Enabled: false, + }, ES_APPLICATION_LOGS: { CloudWatchLogsLogGroupArn: { 'Fn::GetAtt': [ @@ -431,9 +467,12 @@ describe('log groups', () => { }, Enabled: true, }, - AUDIT_LOGS: assert.ABSENT, - SEARCH_SLOW_LOGS: assert.ABSENT, - INDEX_SLOW_LOGS: assert.ABSENT, + SEARCH_SLOW_LOGS: { + Enabled: false, + }, + INDEX_SLOW_LOGS: { + Enabled: false, + }, }, }); }); @@ -468,9 +507,15 @@ describe('log groups', () => { }, Enabled: true, }, - ES_APPLICATION_LOGS: assert.ABSENT, - SEARCH_SLOW_LOGS: assert.ABSENT, - INDEX_SLOW_LOGS: assert.ABSENT, + ES_APPLICATION_LOGS: { + Enabled: false, + }, + SEARCH_SLOW_LOGS: { + Enabled: false, + }, + INDEX_SLOW_LOGS: { + Enabled: false, + }, }, }); }); diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json index e919ee6365e8e..a4ec48af68521 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.advancedsecurity.expected.json @@ -40,7 +40,20 @@ "EncryptionAtRestOptions": { "Enabled": true }, - "LogPublishingOptions": {}, + "LogPublishingOptions": { + "AUDIT_LOGS": { + "Enabled": false + }, + "ES_APPLICATION_LOGS": { + "Enabled": false + }, + "SEARCH_SLOW_LOGS": { + "Enabled": false + }, + "INDEX_SLOW_LOGS": { + "Enabled": false + } + }, "NodeToNodeEncryptionOptions": { "Enabled": true } diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json index fafc653e73740..f987bec734004 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.custom-kms-key.expected.json @@ -211,6 +211,9 @@ } }, "LogPublishingOptions": { + "AUDIT_LOGS": { + "Enabled": false + }, "ES_APPLICATION_LOGS": { "CloudWatchLogsLogGroupArn": { "Fn::GetAtt": [ @@ -228,6 +231,9 @@ ] }, "Enabled": true + }, + "INDEX_SLOW_LOGS": { + "Enabled": false } }, "NodeToNodeEncryptionOptions": { @@ -436,13 +442,13 @@ ] } }, + "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "Arn" ] }, - "Handler": "index.handler", "Runtime": "nodejs12.x", "Timeout": 120 }, diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json index 6c782aee20cc9..a6a6dd2b0d37f 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.expected.json @@ -157,6 +157,9 @@ "Enabled": true }, "LogPublishingOptions": { + "AUDIT_LOGS": { + "Enabled": false + }, "ES_APPLICATION_LOGS": { "CloudWatchLogsLogGroupArn": { "Fn::GetAtt": [ @@ -174,6 +177,9 @@ ] }, "Enabled": true + }, + "INDEX_SLOW_LOGS": { + "Enabled": false } }, "NodeToNodeEncryptionOptions": { @@ -352,13 +358,13 @@ ] } }, + "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "Arn" ] }, - "Handler": "index.handler", "Runtime": "nodejs12.x", "Timeout": 120 }, @@ -523,6 +529,9 @@ "Enabled": true }, "LogPublishingOptions": { + "AUDIT_LOGS": { + "Enabled": false + }, "ES_APPLICATION_LOGS": { "CloudWatchLogsLogGroupArn": { "Fn::GetAtt": [ @@ -540,6 +549,9 @@ ] }, "Enabled": true + }, + "INDEX_SLOW_LOGS": { + "Enabled": false } }, "NodeToNodeEncryptionOptions": { diff --git a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json index b55ac9e14df69..99ca282a3469a 100644 --- a/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json +++ b/packages/@aws-cdk/aws-elasticsearch/test/integ.elasticsearch.unsignedbasicauth.expected.json @@ -4,8 +4,8 @@ "Type": "AWS::SecretsManager::Secret", "Properties": { "GenerateSecretString": { - "ExcludeCharacters": "{}'\\*[]()`", "GenerateStringKey": "password", + "ExcludeCharacters": "{}'\\*[]()`", "SecretStringTemplate": "{\"username\":\"admin\"}" } } @@ -54,7 +54,20 @@ "EncryptionAtRestOptions": { "Enabled": true }, - "LogPublishingOptions": {}, + "LogPublishingOptions": { + "AUDIT_LOGS": { + "Enabled": false + }, + "ES_APPLICATION_LOGS": { + "Enabled": false + }, + "SEARCH_SLOW_LOGS": { + "Enabled": false + }, + "INDEX_SLOW_LOGS": { + "Enabled": false + } + }, "NodeToNodeEncryptionOptions": { "Enabled": true } @@ -284,4 +297,4 @@ "Description": "Artifact hash for asset \"b64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94\"" } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-emr/package.json b/packages/@aws-cdk/aws-emr/package.json index 12827772ad057..184ed9060344a 100644 --- a/packages/@aws-cdk/aws-emr/package.json +++ b/packages/@aws-cdk/aws-emr/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-events-targets/package.json b/packages/@aws-cdk/aws-events-targets/package.json index b7f6923e10b0d..9f67340edfe04 100644 --- a/packages/@aws-cdk/aws-events-targets/package.json +++ b/packages/@aws-cdk/aws-events-targets/package.json @@ -77,7 +77,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-codecommit": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", @@ -126,7 +126,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-events/package.json b/packages/@aws-cdk/aws-events/package.json index 6ce0c48eb34db..4f4831fcd03c3 100644 --- a/packages/@aws-cdk/aws-events/package.json +++ b/packages/@aws-cdk/aws-events/package.json @@ -94,7 +94,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-eventschemas/package.json b/packages/@aws-cdk/aws-eventschemas/package.json index a1f8138f6e3bf..c6430908d2217 100644 --- a/packages/@aws-cdk/aws-eventschemas/package.json +++ b/packages/@aws-cdk/aws-eventschemas/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-fms/package.json b/packages/@aws-cdk/aws-fms/package.json index 37db1822688df..168a95167750b 100644 --- a/packages/@aws-cdk/aws-fms/package.json +++ b/packages/@aws-cdk/aws-fms/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-fsx/package.json b/packages/@aws-cdk/aws-fsx/package.json index 62a572c56f0f1..39cac9ed7ffc0 100644 --- a/packages/@aws-cdk/aws-fsx/package.json +++ b/packages/@aws-cdk/aws-fsx/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-gamelift/package.json b/packages/@aws-cdk/aws-gamelift/package.json index dbf22cc3ba4ce..fda4f58696f60 100644 --- a/packages/@aws-cdk/aws-gamelift/package.json +++ b/packages/@aws-cdk/aws-gamelift/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-globalaccelerator/package.json b/packages/@aws-cdk/aws-globalaccelerator/package.json index 40b1013bc82b8..331ba5ddea4fc 100644 --- a/packages/@aws-cdk/aws-globalaccelerator/package.json +++ b/packages/@aws-cdk/aws-globalaccelerator/package.json @@ -96,7 +96,7 @@ "@aws-cdk/custom-resources": "0.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-glue/package.json b/packages/@aws-cdk/aws-glue/package.json index 4a4a540875740..1d50c80e32441 100644 --- a/packages/@aws-cdk/aws-glue/package.json +++ b/packages/@aws-cdk/aws-glue/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-greengrass/package.json b/packages/@aws-cdk/aws-greengrass/package.json index 606c143dbe8f3..93dfabe51ee99 100644 --- a/packages/@aws-cdk/aws-greengrass/package.json +++ b/packages/@aws-cdk/aws-greengrass/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-greengrassv2/package.json b/packages/@aws-cdk/aws-greengrassv2/package.json index d653e6304a4c4..635baceaae643 100644 --- a/packages/@aws-cdk/aws-greengrassv2/package.json +++ b/packages/@aws-cdk/aws-greengrassv2/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-guardduty/package.json b/packages/@aws-cdk/aws-guardduty/package.json index ffad049d9738a..26a7e84f19f97 100644 --- a/packages/@aws-cdk/aws-guardduty/package.json +++ b/packages/@aws-cdk/aws-guardduty/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iam/README.md b/packages/@aws-cdk/aws-iam/README.md index d9488e7d081c8..a676af6352cf2 100644 --- a/packages/@aws-cdk/aws-iam/README.md +++ b/packages/@aws-cdk/aws-iam/README.md @@ -320,34 +320,6 @@ const provider = new iam.OpenIdConnectProvider(this, 'MyProvider', { const principal = new iam.OpenIdConnectPrincipal(provider); ``` -## Users - -IAM manages users for your AWS account. To create a new user: - -```ts -const user = new User(this, 'MyUser'); -``` - -To import an existing user by name [with path](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-friendly-names): - -```ts -const user = User.fromUserName(stack, 'MyImportedUserByName', 'johnsmith'); -``` - -To import an existing user by ARN: - -```ts -const user = User.fromUserArn(this, 'MyImportedUserByArn', 'arn:aws:iam::123456789012:user/johnsmith'); -``` - -To import an existing user by attributes: - -```ts -const user = User.fromUserAttributes(stack, 'MyImportedUserByAttributes', { - userArn: 'arn:aws:iam::123456789012:user/johnsmith', -}); -``` - ## Features * Policy name uniqueness is enforced. If two policies by the same name are attached to the same diff --git a/packages/@aws-cdk/aws-iam/lib/user.ts b/packages/@aws-cdk/aws-iam/lib/user.ts index 5c8f6418a9bb8..a8c3b61443771 100644 --- a/packages/@aws-cdk/aws-iam/lib/user.ts +++ b/packages/@aws-cdk/aws-iam/lib/user.ts @@ -1,4 +1,4 @@ -import { Arn, Aws, Lazy, Resource, SecretValue, Stack } from '@aws-cdk/core'; +import { Aws, Lazy, Resource, SecretValue, Stack } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { IGroup } from './group'; import { CfnUser } from './iam.generated'; @@ -119,18 +119,6 @@ export interface UserProps { readonly passwordResetRequired?: boolean; } -/** - * Represents a user defined outside of this stack. - */ -export interface UserAttributes { - /** - * The ARN of the user. - * - * Format: arn::iam:::user/ - */ - readonly userArn: string; -} - /** * Define a new IAM user */ @@ -143,42 +131,20 @@ export class User extends Resource implements IIdentity, IUser { * @param userName the username of the existing user to import */ public static fromUserName(scope: Construct, id: string, userName: string): IUser { - const userArn = Stack.of(scope).formatArn({ + const arn = Stack.of(scope).formatArn({ service: 'iam', region: '', resource: 'user', resourceName: userName, }); - return User.fromUserAttributes(scope, id, { userArn }); - } - - /** - * Import an existing user given a user ARN. - * - * @param scope construct scope - * @param id construct id - * @param userArn the ARN of an existing user to import - */ - public static fromUserArn(scope: Construct, id: string, userArn: string): IUser { - return User.fromUserAttributes(scope, id, { userArn }); - } - - /** - * Import an existing user given user attributes. - * - * @param scope construct scope - * @param id construct id - * @param attrs the attributes of the user to import - */ - public static fromUserAttributes(scope: Construct, id: string, attrs: UserAttributes): IUser { class Import extends Resource implements IUser { public readonly grantPrincipal: IPrincipal = this; public readonly principalAccount = Aws.ACCOUNT_ID; - public readonly userName: string = Arn.extractResourceName(attrs.userArn, 'user'); - public readonly userArn: string = attrs.userArn; + public readonly userName: string = userName; + public readonly userArn: string = arn; public readonly assumeRoleAction: string = 'sts:AssumeRole'; - public readonly policyFragment: PrincipalPolicyFragment = new ArnPrincipal(attrs.userArn).policyFragment; + public readonly policyFragment: PrincipalPolicyFragment = new ArnPrincipal(arn).policyFragment; private readonly attachedPolicies = new AttachedPolicies(); private defaultPolicy?: Policy; diff --git a/packages/@aws-cdk/aws-iam/package.json b/packages/@aws-cdk/aws-iam/package.json index ebb1a574fe55c..1697e6f640398 100644 --- a/packages/@aws-cdk/aws-iam/package.json +++ b/packages/@aws-cdk/aws-iam/package.json @@ -101,7 +101,7 @@ }, "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-iam/test/integ.user.expected.json b/packages/@aws-cdk/aws-iam/test/integ.user.expected.json index a57b3db4c6f32..2c4bc6c9b52c0 100644 --- a/packages/@aws-cdk/aws-iam/test/integ.user.expected.json +++ b/packages/@aws-cdk/aws-iam/test/integ.user.expected.json @@ -4,22 +4,11 @@ "Type": "AWS::IAM::User", "Properties": { "LoginProfile": { - "Password": "Test1234567890!", + "Password": "1234", "PasswordResetRequired": true }, "UserName": "benisrae" } } - }, - "Outputs": { - "NameForUserImportedByArn": { - "Value": "rossrhodes" - }, - "NameForUserImportedByAttributes": { - "Value": "johndoe" - }, - "NameForUserImportedByName": { - "Value": "janedoe" - } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-iam/test/integ.user.ts b/packages/@aws-cdk/aws-iam/test/integ.user.ts index 7f8d00695742c..198f3ecb77c4c 100644 --- a/packages/@aws-cdk/aws-iam/test/integ.user.ts +++ b/packages/@aws-cdk/aws-iam/test/integ.user.ts @@ -1,4 +1,4 @@ -import { App, CfnOutput, SecretValue, Stack } from '@aws-cdk/core'; +import { App, SecretValue, Stack } from '@aws-cdk/core'; import { User } from '../lib'; const app = new App(); @@ -7,18 +7,8 @@ const stack = new Stack(app, 'aws-cdk-iam-user'); new User(stack, 'MyUser', { userName: 'benisrae', - password: SecretValue.plainText('Test1234567890!'), + password: SecretValue.plainText('1234'), passwordResetRequired: true, }); -const userImportedByArn = User.fromUserArn(stack, 'ImportedUserByArn', 'arn:aws:iam::123456789012:user/rossrhodes'); -const userImportedByAttributes = User.fromUserAttributes(stack, 'ImportedUserByAttributes', { - userArn: 'arn:aws:iam::123456789012:user/johndoe', -}); -const userImportedByName = User.fromUserName(stack, 'ImportedUserByName', 'janedoe'); - -new CfnOutput(stack, 'NameForUserImportedByArn', { value: userImportedByArn.userName }); -new CfnOutput(stack, 'NameForUserImportedByAttributes', { value: userImportedByAttributes.userName }); -new CfnOutput(stack, 'NameForUserImportedByName', { value: userImportedByName.userName }); - app.synth(); diff --git a/packages/@aws-cdk/aws-iam/test/user.test.ts b/packages/@aws-cdk/aws-iam/test/user.test.ts index 4a59a86d4a45d..9908eeac2c6c7 100644 --- a/packages/@aws-cdk/aws-iam/test/user.test.ts +++ b/packages/@aws-cdk/aws-iam/test/user.test.ts @@ -81,7 +81,7 @@ describe('IAM user', () => { }); }); - test('user imported by user name has an ARN', () => { + test('imported user has an ARN', () => { // GIVEN const stack = new Stack(); @@ -94,32 +94,6 @@ describe('IAM user', () => { }); }); - test('user imported by user ARN has a name', () => { - // GIVEN - const stack = new Stack(); - const userName = 'MyUserName'; - - // WHEN - const user = User.fromUserArn(stack, 'import', `arn:aws:iam::account-id:user/${userName}`); - - // THEN - expect(stack.resolve(user.userName)).toStrictEqual(userName); - }); - - test('user imported by user attributes has a name', () => { - // GIVEN - const stack = new Stack(); - const userName = 'MyUserName'; - - // WHEN - const user = User.fromUserAttributes(stack, 'import', { - userArn: `arn:aws:iam::account-id:user/${userName}`, - }); - - // THEN - expect(stack.resolve(user.userName)).toStrictEqual(userName); - }); - test('add to policy of imported user', () => { // GIVEN const stack = new Stack(); diff --git a/packages/@aws-cdk/aws-imagebuilder/package.json b/packages/@aws-cdk/aws-imagebuilder/package.json index 452e2f6ed8fa2..ff0ed2bbe9678 100644 --- a/packages/@aws-cdk/aws-imagebuilder/package.json +++ b/packages/@aws-cdk/aws-imagebuilder/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-inspector/package.json b/packages/@aws-cdk/aws-inspector/package.json index d767da5c11463..72920e0d8da05 100644 --- a/packages/@aws-cdk/aws-inspector/package.json +++ b/packages/@aws-cdk/aws-inspector/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iot/package.json b/packages/@aws-cdk/aws-iot/package.json index ecb5945f55aba..1a93905cc3e9f 100644 --- a/packages/@aws-cdk/aws-iot/package.json +++ b/packages/@aws-cdk/aws-iot/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iot1click/package.json b/packages/@aws-cdk/aws-iot1click/package.json index 5b2e454c8cb81..6ca9e533cc1ea 100644 --- a/packages/@aws-cdk/aws-iot1click/package.json +++ b/packages/@aws-cdk/aws-iot1click/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotanalytics/package.json b/packages/@aws-cdk/aws-iotanalytics/package.json index 6d575f2a93943..4b630c634fb92 100644 --- a/packages/@aws-cdk/aws-iotanalytics/package.json +++ b/packages/@aws-cdk/aws-iotanalytics/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotevents/package.json b/packages/@aws-cdk/aws-iotevents/package.json index adba82161f209..270da397bb18a 100644 --- a/packages/@aws-cdk/aws-iotevents/package.json +++ b/packages/@aws-cdk/aws-iotevents/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotsitewise/package.json b/packages/@aws-cdk/aws-iotsitewise/package.json index aa3c45d292f89..9a2540e65c512 100644 --- a/packages/@aws-cdk/aws-iotsitewise/package.json +++ b/packages/@aws-cdk/aws-iotsitewise/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotthingsgraph/package.json b/packages/@aws-cdk/aws-iotthingsgraph/package.json index 2c4767ead3820..69732aa3d083e 100644 --- a/packages/@aws-cdk/aws-iotthingsgraph/package.json +++ b/packages/@aws-cdk/aws-iotthingsgraph/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-iotwireless/package.json b/packages/@aws-cdk/aws-iotwireless/package.json index 3fb0230c95f8a..0c23c066e878b 100644 --- a/packages/@aws-cdk/aws-iotwireless/package.json +++ b/packages/@aws-cdk/aws-iotwireless/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-ivs/package.json b/packages/@aws-cdk/aws-ivs/package.json index 185b02bf71af2..1d7d8f8ee01ab 100644 --- a/packages/@aws-cdk/aws-ivs/package.json +++ b/packages/@aws-cdk/aws-ivs/package.json @@ -101,7 +101,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-kendra/package.json b/packages/@aws-cdk/aws-kendra/package.json index 155a344e95d7c..85d72f4303039 100644 --- a/packages/@aws-cdk/aws-kendra/package.json +++ b/packages/@aws-cdk/aws-kendra/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-kinesis/package.json b/packages/@aws-cdk/aws-kinesis/package.json index 23b368db79eb4..5e19c404ba772 100644 --- a/packages/@aws-cdk/aws-kinesis/package.json +++ b/packages/@aws-cdk/aws-kinesis/package.json @@ -96,7 +96,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-kinesisanalytics/package.json b/packages/@aws-cdk/aws-kinesisanalytics/package.json index 58e6fff01d6f0..2daa7d2bd9f2b 100644 --- a/packages/@aws-cdk/aws-kinesisanalytics/package.json +++ b/packages/@aws-cdk/aws-kinesisanalytics/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-kinesisfirehose/package.json b/packages/@aws-cdk/aws-kinesisfirehose/package.json index da5ce87c6c6c7..471d30713a914 100644 --- a/packages/@aws-cdk/aws-kinesisfirehose/package.json +++ b/packages/@aws-cdk/aws-kinesisfirehose/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-kms/package.json b/packages/@aws-cdk/aws-kms/package.json index 6fa29b998daa0..16df28eb2ec90 100644 --- a/packages/@aws-cdk/aws-kms/package.json +++ b/packages/@aws-cdk/aws-kms/package.json @@ -94,7 +94,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-lakeformation/package.json b/packages/@aws-cdk/aws-lakeformation/package.json index bf47bee33119f..0282c39139f47 100644 --- a/packages/@aws-cdk/aws-lakeformation/package.json +++ b/packages/@aws-cdk/aws-lakeformation/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-lambda-destinations/package.json b/packages/@aws-cdk/aws-lambda-destinations/package.json index 9ff5c4376d83f..50e53b0389e75 100644 --- a/packages/@aws-cdk/aws-lambda-destinations/package.json +++ b/packages/@aws-cdk/aws-lambda-destinations/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-lambda-event-sources/package.json b/packages/@aws-cdk/aws-lambda-event-sources/package.json index d633b09927b32..332e03d15e83c 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/package.json +++ b/packages/@aws-cdk/aws-lambda-event-sources/package.json @@ -104,7 +104,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/aws-lambda-nodejs/package.json b/packages/@aws-cdk/aws-lambda-nodejs/package.json index daf110688f6fd..90d7f73f18cde 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/package.json +++ b/packages/@aws-cdk/aws-lambda-nodejs/package.json @@ -70,7 +70,7 @@ "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "delay": "4.4.0", - "esbuild": "^0.8.32", + "esbuild": "^0.8.31", "pkglint": "0.0.0" }, "dependencies": { @@ -85,7 +85,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-lambda-python/package.json b/packages/@aws-cdk/aws-lambda-python/package.json index 70a147b834984..5cab113b0f8f6 100644 --- a/packages/@aws-cdk/aws-lambda-python/package.json +++ b/packages/@aws-cdk/aws-lambda-python/package.json @@ -84,7 +84,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-lambda/README.md b/packages/@aws-cdk/aws-lambda/README.md index 5b7ee7cd3240e..54e7811688134 100644 --- a/packages/@aws-cdk/aws-lambda/README.md +++ b/packages/@aws-cdk/aws-lambda/README.md @@ -458,5 +458,5 @@ new lambda.Function(this, 'Function', { Language-specific higher level constructs are provided in separate modules: -* `@aws-cdk/aws-lambda-nodejs`: [Github](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-nodejs) & [CDK Docs](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) -* `@aws-cdk/aws-lambda-python`: [Github](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-python) & [CDK Docs](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-python-readme.html) +* Node.js: [`@aws-cdk/aws-lambda-nodejs`](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-nodejs) +* Python: [`@aws-cdk/aws-lambda-python`](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda-python) diff --git a/packages/@aws-cdk/aws-lambda/lib/code.ts b/packages/@aws-cdk/aws-lambda/lib/code.ts index af8b9d6dc26fd..491644b6c5ab6 100644 --- a/packages/@aws-cdk/aws-lambda/lib/code.ts +++ b/packages/@aws-cdk/aws-lambda/lib/code.ts @@ -249,9 +249,6 @@ export class AssetCode extends Code { path: this.path, ...this.options, }); - } else if (cdk.Stack.of(this.asset) !== cdk.Stack.of(scope)) { - throw new Error(`Asset is already associated with another stack '${cdk.Stack.of(this.asset).stackName}'. ` + - 'Create a new Code instance for every stack.'); } if (!this.asset.isZipArchive) { diff --git a/packages/@aws-cdk/aws-lambda/package.json b/packages/@aws-cdk/aws-lambda/package.json index c67ad82ff7f74..8c5def823b223 100644 --- a/packages/@aws-cdk/aws-lambda/package.json +++ b/packages/@aws-cdk/aws-lambda/package.json @@ -128,7 +128,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-lambda/test/code.test.ts b/packages/@aws-cdk/aws-lambda/test/code.test.ts index 9b99c095c2467..a822ba698697e 100644 --- a/packages/@aws-cdk/aws-lambda/test/code.test.ts +++ b/packages/@aws-cdk/aws-lambda/test/code.test.ts @@ -77,26 +77,6 @@ describe('code', () => { }, }, ResourcePart.CompleteDefinition); }); - - test('fails if asset is bound with a second stack', () => { - // GIVEN - const asset = lambda.Code.fromAsset(path.join(__dirname, 'my-lambda-handler')); - - const app = new cdk.App(); - const stack1 = new cdk.Stack(app, 'Stack1'); - new lambda.Function(stack1, 'Func', { - code: asset, - runtime: lambda.Runtime.NODEJS_10_X, - handler: 'foom', - }); - - const stack2 = new cdk.Stack(app, 'Stack2'); - expect(() => new lambda.Function(stack2, 'Func', { - code: asset, - runtime: lambda.Runtime.NODEJS_10_X, - handler: 'foom', - })).toThrow(/already associated/); - }); }); describe('lambda.Code.fromCfnParameters', () => { diff --git a/packages/@aws-cdk/aws-licensemanager/package.json b/packages/@aws-cdk/aws-licensemanager/package.json index d20a899707fa0..42d765826a30d 100644 --- a/packages/@aws-cdk/aws-licensemanager/package.json +++ b/packages/@aws-cdk/aws-licensemanager/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-logs-destinations/package.json b/packages/@aws-cdk/aws-logs-destinations/package.json index 13e6a5543905c..5185d7075e1e3 100644 --- a/packages/@aws-cdk/aws-logs-destinations/package.json +++ b/packages/@aws-cdk/aws-logs-destinations/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-logs/package.json b/packages/@aws-cdk/aws-logs/package.json index b8df0773819e7..711de0a3d82bc 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -75,7 +75,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", @@ -103,7 +103,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-macie/package.json b/packages/@aws-cdk/aws-macie/package.json index b406426cc12e2..3d47c18c61083 100644 --- a/packages/@aws-cdk/aws-macie/package.json +++ b/packages/@aws-cdk/aws-macie/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-managedblockchain/package.json b/packages/@aws-cdk/aws-managedblockchain/package.json index fa719693e2864..f9afaaef1e147 100644 --- a/packages/@aws-cdk/aws-managedblockchain/package.json +++ b/packages/@aws-cdk/aws-managedblockchain/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mediaconnect/.eslintrc.js b/packages/@aws-cdk/aws-mediaconnect/.eslintrc.js deleted file mode 100644 index 61dd8dd001f63..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -const baseConfig = require('cdk-build-tools/config/eslintrc'); -baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; -module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-mediaconnect/.gitignore b/packages/@aws-cdk/aws-mediaconnect/.gitignore deleted file mode 100644 index 62ebc95d75ce6..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -*.js -*.js.map -*.d.ts -tsconfig.json -node_modules -*.generated.ts -dist -.jsii - -.LAST_BUILD -.nyc_output -coverage -.nycrc -.LAST_PACKAGE -*.snk -nyc.config.js -!.eslintrc.js -!jest.config.js -junit.xml diff --git a/packages/@aws-cdk/aws-mediaconnect/.npmignore b/packages/@aws-cdk/aws-mediaconnect/.npmignore deleted file mode 100644 index e4486030fcb17..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/.npmignore +++ /dev/null @@ -1,28 +0,0 @@ -# Don't include original .ts files when doing `npm pack` -*.ts -!*.d.ts -coverage -.nyc_output -*.tgz - -dist -.LAST_PACKAGE -.LAST_BUILD -!*.js - -# Include .jsii -!.jsii - -*.snk - -*.tsbuildinfo - -tsconfig.json - -.eslintrc.js -jest.config.js - -# exclude cdk artifacts -**/cdk.out -junit.xml -test/ diff --git a/packages/@aws-cdk/aws-mediaconnect/LICENSE b/packages/@aws-cdk/aws-mediaconnect/LICENSE deleted file mode 100644 index 28e4bdcec77ec..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/@aws-cdk/aws-mediaconnect/NOTICE b/packages/@aws-cdk/aws-mediaconnect/NOTICE deleted file mode 100644 index 5fc3826926b5b..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/NOTICE +++ /dev/null @@ -1,2 +0,0 @@ -AWS Cloud Development Kit (AWS CDK) -Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-mediaconnect/README.md b/packages/@aws-cdk/aws-mediaconnect/README.md deleted file mode 100644 index 46776462c67ff..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS::MediaConnect Construct Library - - ---- - -![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) - -> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. -> -> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib - ---- - - - -This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. - -```ts -import mediaconnect = require('@aws-cdk/aws-mediaconnect'); -``` diff --git a/packages/@aws-cdk/aws-mediaconnect/jest.config.js b/packages/@aws-cdk/aws-mediaconnect/jest.config.js deleted file mode 100644 index 54e28beb9798b..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/jest.config.js +++ /dev/null @@ -1,2 +0,0 @@ -const baseConfig = require('cdk-build-tools/config/jest.config'); -module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-mediaconnect/lib/index.ts b/packages/@aws-cdk/aws-mediaconnect/lib/index.ts deleted file mode 100644 index ffee08204e7b6..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/lib/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// AWS::MediaConnect CloudFormation Resources: -export * from './mediaconnect.generated'; diff --git a/packages/@aws-cdk/aws-mediaconnect/package.json b/packages/@aws-cdk/aws-mediaconnect/package.json deleted file mode 100644 index cba3f940f3510..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "name": "@aws-cdk/aws-mediaconnect", - "version": "0.0.0", - "description": "The CDK Construct Library for AWS::MediaConnect", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "jsii": { - "outdir": "dist", - "projectReferences": true, - "targets": { - "dotnet": { - "namespace": "Amazon.CDK.AWS.MediaConnect", - "packageId": "Amazon.CDK.AWS.MediaConnect", - "signAssembly": true, - "assemblyOriginatorKeyFile": "../../key.snk", - "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" - }, - "java": { - "package": "software.amazon.awscdk.services.mediaconnect", - "maven": { - "groupId": "software.amazon.awscdk", - "artifactId": "mediaconnect" - } - }, - "python": { - "classifiers": [ - "Framework :: AWS CDK", - "Framework :: AWS CDK :: 1" - ], - "distName": "aws-cdk.aws-mediaconnect", - "module": "aws_cdk.aws_mediaconnect" - } - } - }, - "repository": { - "type": "git", - "url": "https://github.com/aws/aws-cdk.git", - "directory": "packages/@aws-cdk/aws-mediaconnect" - }, - "homepage": "https://github.com/aws/aws-cdk", - "scripts": { - "build": "cdk-build", - "watch": "cdk-watch", - "lint": "cdk-lint", - "test": "cdk-test", - "integ": "cdk-integ", - "pkglint": "pkglint -f", - "package": "cdk-package", - "awslint": "cdk-awslint", - "cfn2ts": "cfn2ts", - "build+test+package": "npm run build+test && npm run package", - "build+test": "npm run build && npm test", - "compat": "cdk-compat", - "gen": "cfn2ts", - "rosetta:extract": "yarn --silent jsii-rosetta extract" - }, - "cdk-build": { - "cloudformation": "AWS::MediaConnect", - "jest": true, - "env": { - "AWSLINT_BASE_CONSTRUCT": "true" - } - }, - "keywords": [ - "aws", - "cdk", - "constructs", - "AWS::MediaConnect", - "aws-mediaconnect" - ], - "author": { - "name": "Amazon Web Services", - "url": "https://aws.amazon.com", - "organization": true - }, - "license": "Apache-2.0", - "devDependencies": { - "@aws-cdk/assert": "0.0.0", - "cdk-build-tools": "0.0.0", - "cfn2ts": "0.0.0", - "pkglint": "0.0.0" - }, - "dependencies": { - "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5" - }, - "peerDependencies": { - "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5" - }, - "engines": { - "node": ">= 14.15.0" - }, - "stability": "experimental", - "maturity": "cfn-only", - "awscdkio": { - "announce": false - }, - "private": true -} diff --git a/packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts b/packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts deleted file mode 100644 index e394ef336bfb4..0000000000000 --- a/packages/@aws-cdk/aws-mediaconnect/test/mediaconnect.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import '@aws-cdk/assert/jest'; -import {} from '../lib'; - -test('No tests are specified for this package', () => { - expect(true).toBe(true); -}); diff --git a/packages/@aws-cdk/aws-mediaconvert/package.json b/packages/@aws-cdk/aws-mediaconvert/package.json index de7f37a53ca1d..0a44b32b9d184 100644 --- a/packages/@aws-cdk/aws-mediaconvert/package.json +++ b/packages/@aws-cdk/aws-mediaconvert/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-medialive/package.json b/packages/@aws-cdk/aws-medialive/package.json index 8a6e1a6ed4095..c6d5d99df2a29 100644 --- a/packages/@aws-cdk/aws-medialive/package.json +++ b/packages/@aws-cdk/aws-medialive/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mediapackage/package.json b/packages/@aws-cdk/aws-mediapackage/package.json index e8da81e9330ed..bfe6be1316e52 100644 --- a/packages/@aws-cdk/aws-mediapackage/package.json +++ b/packages/@aws-cdk/aws-mediapackage/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mediastore/package.json b/packages/@aws-cdk/aws-mediastore/package.json index 25fb05a01edb9..a519de117fded 100644 --- a/packages/@aws-cdk/aws-mediastore/package.json +++ b/packages/@aws-cdk/aws-mediastore/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-msk/package.json b/packages/@aws-cdk/aws-msk/package.json index 62603ab056c80..a65ca6e875c4d 100644 --- a/packages/@aws-cdk/aws-msk/package.json +++ b/packages/@aws-cdk/aws-msk/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-mwaa/package.json b/packages/@aws-cdk/aws-mwaa/package.json index 1fa969e08b06d..dc9b81df0ed47 100644 --- a/packages/@aws-cdk/aws-mwaa/package.json +++ b/packages/@aws-cdk/aws-mwaa/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-neptune/package.json b/packages/@aws-cdk/aws-neptune/package.json index 1f006cbc69c52..a3ec119e4387a 100644 --- a/packages/@aws-cdk/aws-neptune/package.json +++ b/packages/@aws-cdk/aws-neptune/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-networkfirewall/package.json b/packages/@aws-cdk/aws-networkfirewall/package.json index ca8c3ecf2bf30..f5bd7120e51ed 100644 --- a/packages/@aws-cdk/aws-networkfirewall/package.json +++ b/packages/@aws-cdk/aws-networkfirewall/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-networkmanager/package.json b/packages/@aws-cdk/aws-networkmanager/package.json index f15f61d559b79..a78f59a812e28 100644 --- a/packages/@aws-cdk/aws-networkmanager/package.json +++ b/packages/@aws-cdk/aws-networkmanager/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-opsworks/package.json b/packages/@aws-cdk/aws-opsworks/package.json index ea9d4e937e706..cd7725a8fb859 100644 --- a/packages/@aws-cdk/aws-opsworks/package.json +++ b/packages/@aws-cdk/aws-opsworks/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-opsworkscm/package.json b/packages/@aws-cdk/aws-opsworkscm/package.json index 7d7647e4df78d..1a6ac9dc50b12 100644 --- a/packages/@aws-cdk/aws-opsworkscm/package.json +++ b/packages/@aws-cdk/aws-opsworkscm/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-pinpoint/package.json b/packages/@aws-cdk/aws-pinpoint/package.json index 779029d2c56a6..1d5d4678eb364 100644 --- a/packages/@aws-cdk/aws-pinpoint/package.json +++ b/packages/@aws-cdk/aws-pinpoint/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-pinpointemail/package.json b/packages/@aws-cdk/aws-pinpointemail/package.json index c496a4050238b..1c1f984d535f2 100644 --- a/packages/@aws-cdk/aws-pinpointemail/package.json +++ b/packages/@aws-cdk/aws-pinpointemail/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-qldb/package.json b/packages/@aws-cdk/aws-qldb/package.json index 4ba97349e2de4..cf6b0007c39ac 100644 --- a/packages/@aws-cdk/aws-qldb/package.json +++ b/packages/@aws-cdk/aws-qldb/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-ram/package.json b/packages/@aws-cdk/aws-ram/package.json index 1d4706a60e3bd..97889d4010649 100644 --- a/packages/@aws-cdk/aws-ram/package.json +++ b/packages/@aws-cdk/aws-ram/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts b/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts index b877db48533e6..6fa16927fd51a 100644 --- a/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts +++ b/packages/@aws-cdk/aws-rds/lib/cluster-engine.ts @@ -422,10 +422,6 @@ export class AuroraPostgresEngineVersion { public static readonly VER_9_6_16 = AuroraPostgresEngineVersion.of('9.6.16', '9.6'); /** Version "9.6.17". */ public static readonly VER_9_6_17 = AuroraPostgresEngineVersion.of('9.6.17', '9.6'); - /** Version "9.6.18". */ - public static readonly VER_9_6_18 = AuroraPostgresEngineVersion.of('9.6.18', '9.6'); - /** Version "9.6.19". */ - public static readonly VER_9_6_19 = AuroraPostgresEngineVersion.of('9.6.19', '9.6'); /** Version "10.4". */ public static readonly VER_10_4 = AuroraPostgresEngineVersion.of('10.4', '10'); /** Version "10.5". */ @@ -438,10 +434,6 @@ export class AuroraPostgresEngineVersion { public static readonly VER_10_11 = AuroraPostgresEngineVersion.of('10.11', '10', { s3Import: true, s3Export: true }); /** Version "10.12". */ public static readonly VER_10_12 = AuroraPostgresEngineVersion.of('10.12', '10', { s3Import: true, s3Export: true }); - /** Version "10.13". */ - public static readonly VER_10_13 = AuroraPostgresEngineVersion.of('10.13', '10', { s3Import: true, s3Export: true }); - /** Version "10.14". */ - public static readonly VER_10_14 = AuroraPostgresEngineVersion.of('10.14', '10', { s3Import: true, s3Export: true }); /** Version "11.4". */ public static readonly VER_11_4 = AuroraPostgresEngineVersion.of('11.4', '11', { s3Import: true }); /** Version "11.6". */ diff --git a/packages/@aws-cdk/aws-rds/package.json b/packages/@aws-cdk/aws-rds/package.json index 4505e29e5da29..ea25b5bd99d77 100644 --- a/packages/@aws-cdk/aws-rds/package.json +++ b/packages/@aws-cdk/aws-rds/package.json @@ -109,7 +109,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-redshift/package.json b/packages/@aws-cdk/aws-redshift/package.json index 5ce179a8c1419..7347b516e04dd 100644 --- a/packages/@aws-cdk/aws-redshift/package.json +++ b/packages/@aws-cdk/aws-redshift/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-resourcegroups/package.json b/packages/@aws-cdk/aws-resourcegroups/package.json index 47984d69dd1b1..189f725467b50 100644 --- a/packages/@aws-cdk/aws-resourcegroups/package.json +++ b/packages/@aws-cdk/aws-resourcegroups/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-robomaker/package.json b/packages/@aws-cdk/aws-robomaker/package.json index f8485776136d7..242d9f031ba37 100644 --- a/packages/@aws-cdk/aws-robomaker/package.json +++ b/packages/@aws-cdk/aws-robomaker/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-route53-patterns/package.json b/packages/@aws-cdk/aws-route53-patterns/package.json index b510696b08f54..0e34f572424a9 100644 --- a/packages/@aws-cdk/aws-route53-patterns/package.json +++ b/packages/@aws-cdk/aws-route53-patterns/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-route53-targets/package.json b/packages/@aws-cdk/aws-route53-targets/package.json index c7ef229dc3407..4aede2b1be6c8 100644 --- a/packages/@aws-cdk/aws-route53-targets/package.json +++ b/packages/@aws-cdk/aws-route53-targets/package.json @@ -106,7 +106,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-route53/package.json b/packages/@aws-cdk/aws-route53/package.json index f91398736574e..f549ea9dc319e 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -75,7 +75,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", @@ -101,7 +101,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-route53resolver/README.md b/packages/@aws-cdk/aws-route53resolver/README.md index 9cf4ab7748b3d..f6eea77064f22 100644 --- a/packages/@aws-cdk/aws-route53resolver/README.md +++ b/packages/@aws-cdk/aws-route53resolver/README.md @@ -9,6 +9,14 @@ > > [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib +![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) + +> The APIs of higher level constructs in this module are experimental and under active development. +> They are subject to non-backward compatible changes or removal in any future version. These are +> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be +> announced in the release notes. This means that while you may use them, you may need to update +> your source code when upgrading to a newer version of this package. + --- diff --git a/packages/@aws-cdk/aws-route53resolver/package.json b/packages/@aws-cdk/aws-route53resolver/package.json index d1dcd3718c83c..a7d4597fa58f9 100644 --- a/packages/@aws-cdk/aws-route53resolver/package.json +++ b/packages/@aws-cdk/aws-route53resolver/package.json @@ -89,10 +89,10 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", - "maturity": "cfn-only", + "maturity": "experimental", "awscdkio": { "announce": false } diff --git a/packages/@aws-cdk/aws-s3-assets/package.json b/packages/@aws-cdk/aws-s3-assets/package.json index c3254542be8af..10dfc20dc1cd4 100644 --- a/packages/@aws-cdk/aws-s3-assets/package.json +++ b/packages/@aws-cdk/aws-s3-assets/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py b/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py index bf16d84608517..34a2da1681f4d 100644 --- a/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py +++ b/packages/@aws-cdk/aws-s3-deployment/lib/lambda/index.py @@ -7,11 +7,10 @@ import logging import shutil import boto3 -import contextlib from datetime import datetime from uuid import uuid4 -from urllib.request import Request, urlopen +from botocore.vendored import requests from zipfile import ZipFile logger = logging.getLogger() @@ -213,9 +212,8 @@ def cfn_send(event, context, responseStatus, responseData={}, physicalResourceId } try: - request = Request(responseUrl, method='PUT', data=bytes(body.encode('utf-8')), headers=headers) - with contextlib.closing(urlopen(request)) as response: - logger.info("| status code: " + response.reason) + response = requests.put(responseUrl, data=body, headers=headers) + logger.info("| status code: " + response.reason) except Exception as e: logger.error("| unable to send response to CloudFormation") logger.exception(e) diff --git a/packages/@aws-cdk/aws-s3-deployment/package.json b/packages/@aws-cdk/aws-s3-deployment/package.json index 1c6a156813c45..0ae5312216d20 100644 --- a/packages/@aws-cdk/aws-s3-deployment/package.json +++ b/packages/@aws-cdk/aws-s3-deployment/package.json @@ -111,7 +111,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json index 3e138f405e0d6..aa8c7fddd60c7 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json +++ b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json @@ -295,7 +295,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152" }, "S3Key": { "Fn::Join": [ @@ -308,7 +308,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" } ] } @@ -321,7 +321,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" } ] } @@ -331,19 +331,19 @@ ] } }, + "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "Arn" ] }, - "Handler": "index.handler", + "Runtime": "python3.6", "Layers": [ { "Ref": "DeployWithInvalidationAwsCliLayerDEDD5787" } ], - "Runtime": "python3.6", "Timeout": 900 }, "DependsOn": [ @@ -365,17 +365,17 @@ "Type": "String", "Description": "Artifact hash for asset \"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152": { "Type": "String", - "Description": "S3 bucket for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "S3 bucket for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED": { "Type": "String", - "Description": "S3 key for asset version \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "S3 key for asset version \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7ArtifactHash8926088E": { "Type": "String", - "Description": "Artifact hash for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "Artifact hash for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, "AssetParametersfc4481abf279255619ff7418faa5d24456fef3432ea0da59c95542578ff0222eS3Bucket9CD8B20A": { "Type": "String", diff --git a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json index 9d52b89269f5a..267c6eaa23476 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json +++ b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json @@ -304,7 +304,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152" }, "S3Key": { "Fn::Join": [ @@ -317,7 +317,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" } ] } @@ -330,7 +330,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76" + "Ref": "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED" } ] } @@ -340,19 +340,19 @@ ] } }, + "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "Arn" ] }, - "Handler": "index.handler", + "Runtime": "python3.6", "Layers": [ { "Ref": "DeployMeAwsCliLayer5F9219E9" } ], - "Runtime": "python3.6", "Timeout": 900 }, "DependsOn": [ @@ -700,17 +700,17 @@ "Type": "String", "Description": "Artifact hash for asset \"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3Bucket28CE5152": { "Type": "String", - "Description": "S3 bucket for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "S3 bucket for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7S3VersionKeyAF6E05ED": { "Type": "String", - "Description": "S3 key for asset version \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "S3 key for asset version \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": { + "AssetParameters3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7ArtifactHash8926088E": { "Type": "String", - "Description": "Artifact hash for asset \"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\"" + "Description": "Artifact hash for asset \"3c3ed777478fe845fb5950df5e26461242b39cf220f00e0683aab244d9d7c0f7\"" }, "AssetParametersfc4481abf279255619ff7418faa5d24456fef3432ea0da59c95542578ff0222eS3Bucket9CD8B20A": { "Type": "String", diff --git a/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py b/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py index fcd79f18af4d5..cd88eaf6a5269 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py +++ b/packages/@aws-cdk/aws-s3-deployment/test/lambda/test.py @@ -425,7 +425,7 @@ def read_aws_out(): # resourceProps: map to pass to "ResourceProperties" # expected_status: "SUCCESS" or "FAILED" def invoke_handler(requestType, resourceProps, old_resource_props=None, physical_id=None, expected_status='SUCCESS'): - response_url = 'http://' + response_url = '' event={ 'ResponseURL': response_url, @@ -443,33 +443,25 @@ def invoke_handler(requestType, resourceProps, old_resource_props=None, physical event['PhysicalResourceId'] = physical_id class ContextMock: log_stream_name = 'log_stream' - class ResponseMock: - reason = 'OK' - # needed because the context manager calls this - close = lambda _: _ + class ResponseMock: reason = 'OK' context = ContextMock() - index.urlopen = MagicMock(return_value=ResponseMock()) + requests.put = MagicMock(return_value=ResponseMock()) #-------------------- # invoke the handler #-------------------- index.handler(event, context) - index.urlopen.assert_called_once() - (pos_args, _) = index.urlopen.call_args + requests.put.assert_called_once() + (pos_args, kw_args) = requests.put.call_args - actual_request = pos_args[0] - actual_url = actual_request.full_url - actual_data = actual_request.data - actual_method = actual_request.method + actual_url = pos_args[0] + actual_data = kw_args['data'] if actual_url != response_url: raise Exception("Invalid url used for sending CFN response. expected=%s actual=%s" % (response_url, actual_url)) - if actual_method != 'PUT': - raise Exception("Invalid method used for sending CFN response. expected=PUT actual=%s" % (actual_method,)) - resp = json.loads(actual_data) def assert_field(name, expect=None): diff --git a/packages/@aws-cdk/aws-s3-notifications/package.json b/packages/@aws-cdk/aws-s3-notifications/package.json index 7f5bb8ab5a193..89d5fa86793b1 100644 --- a/packages/@aws-cdk/aws-s3-notifications/package.json +++ b/packages/@aws-cdk/aws-s3-notifications/package.json @@ -91,7 +91,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-s3/lib/bucket.ts b/packages/@aws-cdk/aws-s3/lib/bucket.ts index 4dbda84d6b34d..2d3a10285198f 100644 --- a/packages/@aws-cdk/aws-s3/lib/bucket.ts +++ b/packages/@aws-cdk/aws-s3/lib/bucket.ts @@ -5,9 +5,8 @@ import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; import { Fn, IResource, Lazy, RemovalPolicy, Resource, ResourceProps, Stack, Token, - CustomResource, CustomResourceProvider, CustomResourceProviderRuntime, FeatureFlags, + CustomResource, CustomResourceProvider, CustomResourceProviderRuntime, } from '@aws-cdk/core'; -import * as cxapi from '@aws-cdk/cx-api'; import { Construct } from 'constructs'; import { BucketPolicy } from './bucket-policy'; import { IBucketNotificationDestination } from './destination'; @@ -162,18 +161,6 @@ export interface IBucket extends IResource { */ grantPut(identity: iam.IGrantable, objectsKeyPattern?: any): iam.Grant; - /** - * Grant the given IAM identity permissions to modify the ACLs of objects in the given Bucket. - * - * If your application has the '@aws-cdk/aws-s3:grantWriteWithoutAcl' feature flag set, - * calling {@link grantWrite} or {@link grantReadWrite} no longer grants permissions to modify the ACLs of the objects; - * in this case, if you need to modify object ACLs, call this method explicitly. - * - * @param identity The principal - * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') - */ - grantPutAcl(identity: iam.IGrantable, objectsKeyPattern?: string): iam.Grant; - /** * Grants s3:DeleteObject* permission to an IAM pricipal for objects * in this bucket. @@ -597,7 +584,7 @@ abstract class BucketBase extends Resource implements IBucket { * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') */ public grantWrite(identity: iam.IGrantable, objectsKeyPattern: any = '*') { - return this.grant(identity, this.writeActions, perms.KEY_WRITE_ACTIONS, + return this.grant(identity, perms.BUCKET_WRITE_ACTIONS, perms.KEY_WRITE_ACTIONS, this.bucketArn, this.arnForObjects(objectsKeyPattern)); } @@ -611,12 +598,7 @@ abstract class BucketBase extends Resource implements IBucket { * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') */ public grantPut(identity: iam.IGrantable, objectsKeyPattern: any = '*') { - return this.grant(identity, this.putActions, perms.KEY_WRITE_ACTIONS, - this.arnForObjects(objectsKeyPattern)); - } - - public grantPutAcl(identity: iam.IGrantable, objectsKeyPattern: string = '*') { - return this.grant(identity, perms.BUCKET_PUT_ACL_ACTIONS, [], + return this.grant(identity, perms.BUCKET_PUT_ACTIONS, perms.KEY_WRITE_ACTIONS, this.arnForObjects(objectsKeyPattern)); } @@ -643,7 +625,7 @@ abstract class BucketBase extends Resource implements IBucket { * @param objectsKeyPattern Restrict the permission to a certain key pattern (default '*') */ public grantReadWrite(identity: iam.IGrantable, objectsKeyPattern: any = '*') { - const bucketActions = perms.BUCKET_READ_ACTIONS.concat(this.writeActions); + const bucketActions = perms.BUCKET_READ_ACTIONS.concat(perms.BUCKET_WRITE_ACTIONS); // we need unique permissions because some permissions are common between read and write key actions const keyActions = [...new Set([...perms.KEY_READ_ACTIONS, ...perms.KEY_WRITE_ACTIONS])]; @@ -691,19 +673,6 @@ abstract class BucketBase extends Resource implements IBucket { }); } - private get writeActions(): string[] { - return [ - ...perms.BUCKET_DELETE_ACTIONS, - ...this.putActions, - ]; - } - - private get putActions(): string[] { - return FeatureFlags.of(this).isEnabled(cxapi.S3_GRANT_WRITE_WITHOUT_ACL) - ? perms.BUCKET_PUT_ACTIONS - : perms.LEGACY_BUCKET_PUT_ACTIONS; - } - private urlJoin(...components: string[]): string { return components.reduce((result, component) => { if (result.endsWith('/')) { diff --git a/packages/@aws-cdk/aws-s3/lib/perms.ts b/packages/@aws-cdk/aws-s3/lib/perms.ts index eebab60da2104..544bdda936da9 100644 --- a/packages/@aws-cdk/aws-s3/lib/perms.ts +++ b/packages/@aws-cdk/aws-s3/lib/perms.ts @@ -4,24 +4,20 @@ export const BUCKET_READ_ACTIONS = [ 's3:List*', ]; -export const LEGACY_BUCKET_PUT_ACTIONS = [ - 's3:PutObject*', - 's3:Abort*', -]; - export const BUCKET_PUT_ACTIONS = [ - 's3:PutObject', + 's3:PutObject*', 's3:Abort*', ]; -export const BUCKET_PUT_ACL_ACTIONS = [ - 's3:PutObjectAcl', -]; - export const BUCKET_DELETE_ACTIONS = [ 's3:DeleteObject*', ]; +export const BUCKET_WRITE_ACTIONS = [ + ...BUCKET_DELETE_ACTIONS, + ...BUCKET_PUT_ACTIONS, +]; + export const KEY_READ_ACTIONS = [ 'kms:Decrypt', 'kms:DescribeKey', diff --git a/packages/@aws-cdk/aws-s3/package.json b/packages/@aws-cdk/aws-s3/package.json index 5fd6bb04be7b9..3ed503ab990cd 100644 --- a/packages/@aws-cdk/aws-s3/package.json +++ b/packages/@aws-cdk/aws-s3/package.json @@ -86,8 +86,7 @@ "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-kms": "0.0.0", "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5", - "@aws-cdk/cx-api": "0.0.0" + "constructs": "10.0.0-pre.5" }, "homepage": "https://github.com/aws/aws-cdk", "peerDependencies": { @@ -95,11 +94,10 @@ "@aws-cdk/aws-iam": "0.0.0", "@aws-cdk/aws-kms": "0.0.0", "@aws-cdk/core": "0.0.0", - "constructs": "10.0.0-pre.5", - "@aws-cdk/cx-api": "0.0.0" + "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-s3/test/bucket.test.ts b/packages/@aws-cdk/aws-s3/test/bucket.test.ts index cb9202b28cfd7..997a3abd4e56f 100644 --- a/packages/@aws-cdk/aws-s3/test/bucket.test.ts +++ b/packages/@aws-cdk/aws-s3/test/bucket.test.ts @@ -3,7 +3,6 @@ import { countResources, expect, haveResource, haveResourceLike, ResourcePart, S import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; import * as cdk from '@aws-cdk/core'; -import * as cxapi from '@aws-cdk/cx-api'; import { nodeunitShim, Test } from 'nodeunit-shim'; import * as s3 from '../lib'; @@ -1086,293 +1085,176 @@ nodeunitShim({ test.done(); }, - - 'does not grant PutObjectAcl when the S3_GRANT_WRITE_WITHOUT_ACL feature is enabled'(test: Test) { - const app = new cdk.App({ - context: { - [cxapi.S3_GRANT_WRITE_WITHOUT_ACL]: true, - }, - }); - const stack = new cdk.Stack(app, 'Stack'); - const bucket = new s3.Bucket(stack, 'MyBucket'); - const user = new iam.User(stack, 'MyUser'); - - bucket.grantReadWrite(user); - - expect(stack).to(haveResourceLike('AWS::IAM::Policy', { - 'PolicyDocument': { - 'Statement': [ - { - 'Action': [ - 's3:GetObject*', - 's3:GetBucket*', - 's3:List*', - 's3:DeleteObject*', - 's3:PutObject', - 's3:Abort*', - ], - 'Resource': [ - { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, - { - 'Fn::Join': ['', [ - { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, - '/*', - ]], - }, - ], - }, - ], - }, - })); - - test.done(); - }, }, - 'grantWrite': { - 'with KMS key has appropriate permissions for multipart uploads'(test: Test) { - const stack = new cdk.Stack(); - const bucket = new s3.Bucket(stack, 'MyBucket', { encryption: s3.BucketEncryption.KMS }); - const user = new iam.User(stack, 'MyUser'); - bucket.grantWrite(user); + 'grantWrite with KMS key has appropriate permissions for multipart uploads'(test: Test) { + const stack = new cdk.Stack(); + const bucket = new s3.Bucket(stack, 'MyBucket', { encryption: s3.BucketEncryption.KMS }); + const user = new iam.User(stack, 'MyUser'); + bucket.grantWrite(user); - expect(stack).toMatch({ - 'Resources': { - 'MyBucketKeyC17130CF': { - 'Type': 'AWS::KMS::Key', - 'Properties': { - 'KeyPolicy': { - 'Statement': [ - { - 'Action': [ - 'kms:Create*', - 'kms:Describe*', - 'kms:Enable*', - 'kms:List*', - 'kms:Put*', - 'kms:Update*', - 'kms:Revoke*', - 'kms:Disable*', - 'kms:Get*', - 'kms:Delete*', - 'kms:ScheduleKeyDeletion', - 'kms:CancelKeyDeletion', - 'kms:GenerateDataKey', - 'kms:TagResource', - 'kms:UntagResource', - ], - 'Effect': 'Allow', - 'Principal': { - 'AWS': { - 'Fn::Join': [ - '', - [ - 'arn:', - { - 'Ref': 'AWS::Partition', - }, - ':iam::', - { - 'Ref': 'AWS::AccountId', - }, - ':root', - ], - ], - }, - }, - 'Resource': '*', - }, - { - 'Action': [ - 'kms:Encrypt', - 'kms:ReEncrypt*', - 'kms:GenerateDataKey*', - 'kms:Decrypt', - ], - 'Effect': 'Allow', - 'Principal': { - 'AWS': { - 'Fn::GetAtt': [ - 'MyUserDC45028B', - 'Arn', + expect(stack).toMatch({ + 'Resources': { + 'MyBucketKeyC17130CF': { + 'Type': 'AWS::KMS::Key', + 'Properties': { + 'KeyPolicy': { + 'Statement': [ + { + 'Action': [ + 'kms:Create*', + 'kms:Describe*', + 'kms:Enable*', + 'kms:List*', + 'kms:Put*', + 'kms:Update*', + 'kms:Revoke*', + 'kms:Disable*', + 'kms:Get*', + 'kms:Delete*', + 'kms:ScheduleKeyDeletion', + 'kms:CancelKeyDeletion', + 'kms:GenerateDataKey', + 'kms:TagResource', + 'kms:UntagResource', + ], + 'Effect': 'Allow', + 'Principal': { + 'AWS': { + 'Fn::Join': [ + '', + [ + 'arn:', + { + 'Ref': 'AWS::Partition', + }, + ':iam::', + { + 'Ref': 'AWS::AccountId', + }, + ':root', ], - }, + ], }, - 'Resource': '*', }, - ], - 'Version': '2012-10-17', - }, - 'Description': 'Created by Default/MyBucket', - }, - 'UpdateReplacePolicy': 'Retain', - 'DeletionPolicy': 'Retain', - }, - 'MyBucketF68F3FF0': { - 'Type': 'AWS::S3::Bucket', - 'Properties': { - 'BucketEncryption': { - 'ServerSideEncryptionConfiguration': [ - { - 'ServerSideEncryptionByDefault': { - 'KMSMasterKeyID': { - 'Fn::GetAtt': [ - 'MyBucketKeyC17130CF', - 'Arn', - ], - }, - 'SSEAlgorithm': 'aws:kms', + 'Resource': '*', + }, + { + 'Action': [ + 'kms:Encrypt', + 'kms:ReEncrypt*', + 'kms:GenerateDataKey*', + 'kms:Decrypt', + ], + 'Effect': 'Allow', + 'Principal': { + 'AWS': { + 'Fn::GetAtt': [ + 'MyUserDC45028B', + 'Arn', + ], }, }, - ], - }, + 'Resource': '*', + }, + ], + 'Version': '2012-10-17', }, - 'UpdateReplacePolicy': 'Retain', - 'DeletionPolicy': 'Retain', - }, - 'MyUserDC45028B': { - 'Type': 'AWS::IAM::User', + 'Description': 'Created by Default/MyBucket', }, - 'MyUserDefaultPolicy7B897426': { - 'Type': 'AWS::IAM::Policy', - 'Properties': { - 'PolicyDocument': { - 'Statement': [ - { - 'Action': [ - 's3:DeleteObject*', - 's3:PutObject*', - 's3:Abort*', - ], - 'Effect': 'Allow', - 'Resource': [ - { - 'Fn::GetAtt': [ - 'MyBucketF68F3FF0', - 'Arn', - ], - }, - { - 'Fn::Join': [ - '', - [ - { - 'Fn::GetAtt': [ - 'MyBucketF68F3FF0', - 'Arn', - ], - }, - '/*', - ], - ], - }, - ], - }, - { - 'Action': [ - 'kms:Encrypt', - 'kms:ReEncrypt*', - 'kms:GenerateDataKey*', - 'kms:Decrypt', - ], - 'Effect': 'Allow', - 'Resource': { + 'UpdateReplacePolicy': 'Retain', + 'DeletionPolicy': 'Retain', + }, + 'MyBucketF68F3FF0': { + 'Type': 'AWS::S3::Bucket', + 'Properties': { + 'BucketEncryption': { + 'ServerSideEncryptionConfiguration': [ + { + 'ServerSideEncryptionByDefault': { + 'KMSMasterKeyID': { 'Fn::GetAtt': [ 'MyBucketKeyC17130CF', 'Arn', ], }, + 'SSEAlgorithm': 'aws:kms', }, - ], - 'Version': '2012-10-17', - }, - 'PolicyName': 'MyUserDefaultPolicy7B897426', - 'Users': [ - { - 'Ref': 'MyUserDC45028B', }, ], }, }, + 'UpdateReplacePolicy': 'Retain', + 'DeletionPolicy': 'Retain', }, - }); - - test.done(); - }, - - 'does not grant PutObjectAcl when the S3_GRANT_WRITE_WITHOUT_ACL feature is enabled'(test: Test) { - const app = new cdk.App({ - context: { - [cxapi.S3_GRANT_WRITE_WITHOUT_ACL]: true, + 'MyUserDC45028B': { + 'Type': 'AWS::IAM::User', }, - }); - const stack = new cdk.Stack(app, 'Stack'); - const bucket = new s3.Bucket(stack, 'MyBucket'); - const user = new iam.User(stack, 'MyUser'); - - bucket.grantWrite(user); - - expect(stack).to(haveResourceLike('AWS::IAM::Policy', { - 'PolicyDocument': { - 'Statement': [ - { - 'Action': [ - 's3:DeleteObject*', - 's3:PutObject', - 's3:Abort*', - ], - 'Resource': [ - { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, + 'MyUserDefaultPolicy7B897426': { + 'Type': 'AWS::IAM::Policy', + 'Properties': { + 'PolicyDocument': { + 'Statement': [ { - 'Fn::Join': ['', [ - { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, - '/*', - ]], + 'Action': [ + 's3:DeleteObject*', + 's3:PutObject*', + 's3:Abort*', + ], + 'Effect': 'Allow', + 'Resource': [ + { + 'Fn::GetAtt': [ + 'MyBucketF68F3FF0', + 'Arn', + ], + }, + { + 'Fn::Join': [ + '', + [ + { + 'Fn::GetAtt': [ + 'MyBucketF68F3FF0', + 'Arn', + ], + }, + '/*', + ], + ], + }, + ], + }, + { + 'Action': [ + 'kms:Encrypt', + 'kms:ReEncrypt*', + 'kms:GenerateDataKey*', + 'kms:Decrypt', + ], + 'Effect': 'Allow', + 'Resource': { + 'Fn::GetAtt': [ + 'MyBucketKeyC17130CF', + 'Arn', + ], + }, }, ], + 'Version': '2012-10-17', }, - ], - }, - })); - - test.done(); - }, - }, - - 'grantPut': { - 'does not grant PutObjectAcl when the S3_GRANT_WRITE_WITHOUT_ACL feature is enabled'(test: Test) { - const app = new cdk.App({ - context: { - [cxapi.S3_GRANT_WRITE_WITHOUT_ACL]: true, - }, - }); - const stack = new cdk.Stack(app, 'Stack'); - const bucket = new s3.Bucket(stack, 'MyBucket'); - const user = new iam.User(stack, 'MyUser'); - - bucket.grantPut(user); - - expect(stack).to(haveResourceLike('AWS::IAM::Policy', { - 'PolicyDocument': { - 'Statement': [ - { - 'Action': [ - 's3:PutObject', - 's3:Abort*', - ], - 'Resource': { - 'Fn::Join': ['', [ - { 'Fn::GetAtt': ['MyBucketF68F3FF0', 'Arn'] }, - '/*', - ]], + 'PolicyName': 'MyUserDefaultPolicy7B897426', + 'Users': [ + { + 'Ref': 'MyUserDC45028B', }, - }, - ], + ], + }, }, - })); + }, + }); - test.done(); - }, + test.done(); }, 'more grants'(test: Test) { diff --git a/packages/@aws-cdk/aws-sagemaker/package.json b/packages/@aws-cdk/aws-sagemaker/package.json index e4981ab8180e0..d6c58403a5414 100644 --- a/packages/@aws-cdk/aws-sagemaker/package.json +++ b/packages/@aws-cdk/aws-sagemaker/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-sam/package.json b/packages/@aws-cdk/aws-sam/package.json index fd6cd8628a312..e4ccbaa37c62f 100644 --- a/packages/@aws-cdk/aws-sam/package.json +++ b/packages/@aws-cdk/aws-sam/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-sdb/package.json b/packages/@aws-cdk/aws-sdb/package.json index c536472f8c508..2ae25527bbcbf 100644 --- a/packages/@aws-cdk/aws-sdb/package.json +++ b/packages/@aws-cdk/aws-sdb/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-secretsmanager/package.json b/packages/@aws-cdk/aws-secretsmanager/package.json index fd74429eddca2..0420b2402529c 100644 --- a/packages/@aws-cdk/aws-secretsmanager/package.json +++ b/packages/@aws-cdk/aws-secretsmanager/package.json @@ -102,7 +102,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-securityhub/package.json b/packages/@aws-cdk/aws-securityhub/package.json index cdcd56d59ba6d..cddae0a79b9b0 100644 --- a/packages/@aws-cdk/aws-securityhub/package.json +++ b/packages/@aws-cdk/aws-securityhub/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-servicecatalog/package.json b/packages/@aws-cdk/aws-servicecatalog/package.json index ccbf4b26d856d..535b2205ee518 100644 --- a/packages/@aws-cdk/aws-servicecatalog/package.json +++ b/packages/@aws-cdk/aws-servicecatalog/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-servicediscovery/package.json b/packages/@aws-cdk/aws-servicediscovery/package.json index 99ee44935b839..a2f12ab225ebc 100644 --- a/packages/@aws-cdk/aws-servicediscovery/package.json +++ b/packages/@aws-cdk/aws-servicediscovery/package.json @@ -100,7 +100,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ses-actions/package.json b/packages/@aws-cdk/aws-ses-actions/package.json index a4b0472f346c3..31d1cfa549e39 100644 --- a/packages/@aws-cdk/aws-ses-actions/package.json +++ b/packages/@aws-cdk/aws-ses-actions/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-ses/package.json b/packages/@aws-cdk/aws-ses/package.json index c44c7e3c4ef78..bd5b41df2ce40 100644 --- a/packages/@aws-cdk/aws-ses/package.json +++ b/packages/@aws-cdk/aws-ses/package.json @@ -95,7 +95,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/aws-signer/package.json b/packages/@aws-cdk/aws-signer/package.json index 1c8fdfa9efa8d..26ae15e0fec33 100644 --- a/packages/@aws-cdk/aws-signer/package.json +++ b/packages/@aws-cdk/aws-signer/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-sns-subscriptions/package.json b/packages/@aws-cdk/aws-sns-subscriptions/package.json index 8c39536ed26f0..7dfacbe739f40 100644 --- a/packages/@aws-cdk/aws-sns-subscriptions/package.json +++ b/packages/@aws-cdk/aws-sns-subscriptions/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-sns/README.md b/packages/@aws-cdk/aws-sns/README.md index b5d9f52c3d9b9..05ad30fc9af17 100644 --- a/packages/@aws-cdk/aws-sns/README.md +++ b/packages/@aws-cdk/aws-sns/README.md @@ -30,12 +30,9 @@ const topic = new sns.Topic(this, 'Topic', { contentBasedDeduplication: true, displayName: 'Customer subscription topic', fifo: true, - topicName: 'customerTopic', }); ``` -Note that FIFO topics require a topic name to be provided. The required `.fifo` suffix will be automatically added to the topic name if it is not explicitly provided. - ## Subscriptions Various subscriptions can be added to the topic by calling the diff --git a/packages/@aws-cdk/aws-sns/lib/topic.ts b/packages/@aws-cdk/aws-sns/lib/topic.ts index f4bbfc10cb2ca..532c138fd7ef3 100644 --- a/packages/@aws-cdk/aws-sns/lib/topic.ts +++ b/packages/@aws-cdk/aws-sns/lib/topic.ts @@ -80,26 +80,13 @@ export class Topic extends TopicBase { physicalName: props.topicName, }); - if (props.fifo && !props.topicName) { - // NOTE: Workaround for CloudFormation problem reported in CDK issue 12386 - // see https://github.com/aws/aws-cdk/issues/12386 - throw new Error('FIFO SNS topics must be given a topic name.'); - } - if (props.contentBasedDeduplication && !props.fifo) { throw new Error('Content based deduplication can only be enabled for FIFO SNS topics.'); } - let cfnTopicName: string; - if (props.fifo && props.topicName && !props.topicName.endsWith('.fifo')) { - cfnTopicName = this.physicalName + '.fifo'; - } else { - cfnTopicName = this.physicalName; - } - const resource = new CfnTopic(this, 'Resource', { displayName: props.displayName, - topicName: cfnTopicName, + topicName: this.physicalName, kmsMasterKeyId: props.masterKey && props.masterKey.keyArn, contentBasedDeduplication: props.contentBasedDeduplication, fifoTopic: props.fifo, diff --git a/packages/@aws-cdk/aws-sns/package.json b/packages/@aws-cdk/aws-sns/package.json index 1e701393a8cff..b79497e6e998a 100644 --- a/packages/@aws-cdk/aws-sns/package.json +++ b/packages/@aws-cdk/aws-sns/package.json @@ -105,7 +105,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts b/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts index a4352cbe6fe44..76e4cef96994c 100644 --- a/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts +++ b/packages/@aws-cdk/aws-sns/test/integ.sns-fifo.ts @@ -6,7 +6,7 @@ class SNSFifoInteg extends Stack { super(scope, id, props); new Topic(this, 'MyTopic', { - topicName: 'fooTopic', + topicName: 'fooTopic.fifo', displayName: 'fooDisplayName', contentBasedDeduplication: true, fifo: true, diff --git a/packages/@aws-cdk/aws-sns/test/test.sns.ts b/packages/@aws-cdk/aws-sns/test/test.sns.ts index cc4b50aed717c..bbe171ca188ab 100644 --- a/packages/@aws-cdk/aws-sns/test/test.sns.ts +++ b/packages/@aws-cdk/aws-sns/test/test.sns.ts @@ -81,7 +81,7 @@ export = { test.done(); }, - 'specify displayName and topicName'(test: Test) { + 'specify both'(test: Test) { const stack = new cdk.Stack(); new sns.Topic(stack, 'MyTopic', { @@ -104,70 +104,11 @@ export = { test.done(); }, - // NOTE: This test case should be invalid when CloudFormation problem reported in CDK issue 12386 is resolved - // see https://github.com/aws/aws-cdk/issues/12386 - 'throw with missing topicName on fifo topic'(test: Test) { - const stack = new cdk.Stack(); - - test.throws(() => new sns.Topic(stack, 'MyTopic', { - fifo: true, - }), /FIFO SNS topics must be given a topic name./); - - test.done(); - }, - - 'specify fifo without .fifo suffix in topicName'(test: Test) { - const stack = new cdk.Stack(); - - new sns.Topic(stack, 'MyTopic', { - fifo: true, - topicName: 'topicName', - }); - - expect(stack).toMatch({ - 'Resources': { - 'MyTopic86869434': { - 'Type': 'AWS::SNS::Topic', - 'Properties': { - 'FifoTopic': true, - 'TopicName': 'topicName.fifo', - }, - }, - }, - }); - - test.done(); - }, - - 'specify fifo with .fifo suffix in topicName'(test: Test) { - const stack = new cdk.Stack(); - - new sns.Topic(stack, 'MyTopic', { - fifo: true, - topicName: 'topicName.fifo', - }); - - expect(stack).toMatch({ - 'Resources': { - 'MyTopic86869434': { - 'Type': 'AWS::SNS::Topic', - 'Properties': { - 'FifoTopic': true, - 'TopicName': 'topicName.fifo', - }, - }, - }, - }); - - test.done(); - }, - 'specify fifo without contentBasedDeduplication'(test: Test) { const stack = new cdk.Stack(); new sns.Topic(stack, 'MyTopic', { fifo: true, - topicName: 'topicName', }); expect(stack).toMatch({ @@ -176,7 +117,6 @@ export = { 'Type': 'AWS::SNS::Topic', 'Properties': { 'FifoTopic': true, - 'TopicName': 'topicName.fifo', }, }, }, @@ -191,7 +131,6 @@ export = { new sns.Topic(stack, 'MyTopic', { contentBasedDeduplication: true, fifo: true, - topicName: 'topicName', }); expect(stack).toMatch({ @@ -201,7 +140,6 @@ export = { 'Properties': { 'ContentBasedDeduplication': true, 'FifoTopic': true, - 'TopicName': 'topicName.fifo', }, }, }, diff --git a/packages/@aws-cdk/aws-sqs/package.json b/packages/@aws-cdk/aws-sqs/package.json index 7be27a709ae75..18bb815996ac7 100644 --- a/packages/@aws-cdk/aws-sqs/package.json +++ b/packages/@aws-cdk/aws-sqs/package.json @@ -76,7 +76,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-ssm/package.json b/packages/@aws-cdk/aws-ssm/package.json index 38f62f0bb40f3..43b5bdc958e03 100644 --- a/packages/@aws-cdk/aws-ssm/package.json +++ b/packages/@aws-cdk/aws-ssm/package.json @@ -97,7 +97,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/aws-sso/package.json b/packages/@aws-cdk/aws-sso/package.json index 02842e0bbb53d..ea7aaa1d2c45b 100644 --- a/packages/@aws-cdk/aws-sso/package.json +++ b/packages/@aws-cdk/aws-sso/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/README.md b/packages/@aws-cdk/aws-stepfunctions-tasks/README.md index 689ed0a53195f..32044b4a23649 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/README.md +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/README.md @@ -667,7 +667,7 @@ You can call the [`StartJobRun`](https://docs.aws.amazon.com/glue/latest/dg/aws- ```ts new GlueStartJobRun(stack, 'Task', { - glueJobName: 'my-glue-job', + jobName: 'my-glue-job', arguments: { key: 'value', }, diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/package.json b/packages/@aws-cdk/aws-stepfunctions-tasks/package.json index 05e29937628d3..3176bf2829eb5 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/package.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/package.json @@ -118,7 +118,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable", diff --git a/packages/@aws-cdk/aws-stepfunctions/package.json b/packages/@aws-cdk/aws-stepfunctions/package.json index 9f20f1437939c..81c0056c5c017 100644 --- a/packages/@aws-cdk/aws-stepfunctions/package.json +++ b/packages/@aws-cdk/aws-stepfunctions/package.json @@ -98,7 +98,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/aws-synthetics/package.json b/packages/@aws-cdk/aws-synthetics/package.json index e9c168a03b00d..2a4bc2170c834 100644 --- a/packages/@aws-cdk/aws-synthetics/package.json +++ b/packages/@aws-cdk/aws-synthetics/package.json @@ -99,7 +99,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "developer-preview", diff --git a/packages/@aws-cdk/aws-timestream/package.json b/packages/@aws-cdk/aws-timestream/package.json index 40af4cde4d161..c9c5c606d1361 100644 --- a/packages/@aws-cdk/aws-timestream/package.json +++ b/packages/@aws-cdk/aws-timestream/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-transfer/package.json b/packages/@aws-cdk/aws-transfer/package.json index e7537ca2a0c04..5f30d3ad91603 100644 --- a/packages/@aws-cdk/aws-transfer/package.json +++ b/packages/@aws-cdk/aws-transfer/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-waf/package.json b/packages/@aws-cdk/aws-waf/package.json index 7bbbbd97f7287..907e68f31eb51 100644 --- a/packages/@aws-cdk/aws-waf/package.json +++ b/packages/@aws-cdk/aws-waf/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-wafregional/package.json b/packages/@aws-cdk/aws-wafregional/package.json index f07a701b7d05f..60f7c2052c232 100644 --- a/packages/@aws-cdk/aws-wafregional/package.json +++ b/packages/@aws-cdk/aws-wafregional/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-wafv2/package.json b/packages/@aws-cdk/aws-wafv2/package.json index 264600e14ddd5..f06a0b25d4d39 100644 --- a/packages/@aws-cdk/aws-wafv2/package.json +++ b/packages/@aws-cdk/aws-wafv2/package.json @@ -90,7 +90,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/aws-workspaces/package.json b/packages/@aws-cdk/aws-workspaces/package.json index d8dc39a0c53d1..4c14d7649c0d7 100644 --- a/packages/@aws-cdk/aws-workspaces/package.json +++ b/packages/@aws-cdk/aws-workspaces/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "cfn-only", diff --git a/packages/@aws-cdk/cdk-assets-schema/package.json b/packages/@aws-cdk/cdk-assets-schema/package.json index 041fcf748eea0..d38f3fb7674b5 100644 --- a/packages/@aws-cdk/cdk-assets-schema/package.json +++ b/packages/@aws-cdk/cdk-assets-schema/package.json @@ -69,7 +69,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "deprecated", "awscdkio": { diff --git a/packages/@aws-cdk/cfnspec/CHANGELOG.md b/packages/@aws-cdk/cfnspec/CHANGELOG.md index b2d9016a94475..c2eac793948d6 100644 --- a/packages/@aws-cdk/cfnspec/CHANGELOG.md +++ b/packages/@aws-cdk/cfnspec/CHANGELOG.md @@ -1,472 +1,3 @@ -# CloudFormation Resource Specification v23.0.0 - -## New Resource Types - -* AWS::Config::StoredQuery -* AWS::DataSync::Agent -* AWS::DataSync::LocationEFS -* AWS::DataSync::LocationFSxWindows -* AWS::DataSync::LocationNFS -* AWS::DataSync::LocationObjectStorage -* AWS::DataSync::LocationS3 -* AWS::DataSync::LocationSMB -* AWS::DataSync::Task -* AWS::MediaConnect::Flow -* AWS::MediaConnect::FlowEntitlement -* AWS::MediaConnect::FlowOutput -* AWS::MediaConnect::FlowSource -* AWS::MediaConnect::FlowVpcInterface -* AWS::Route53::DNSSEC -* AWS::Route53::KeySigningKey -* AWS::Route53Resolver::ResolverDNSSECConfig - -## Attribute Changes - -* AWS::ApiGateway::ClientCertificate ClientCertificateId (__added__) -* AWS::AuditManager::Assessment arn (__deleted__) -* AWS::AuditManager::Assessment assessmentId (__deleted__) -* AWS::AuditManager::Assessment creationTime (__deleted__) -* AWS::AuditManager::Assessment delegations (__deleted__) -* AWS::AuditManager::Assessment frameworkId (__deleted__) -* AWS::AuditManager::Assessment Arn (__added__) -* AWS::AuditManager::Assessment AssessmentId (__added__) -* AWS::AuditManager::Assessment CreationTime (__added__) -* AWS::AuditManager::Assessment Delegations (__added__) -* AWS::AuditManager::Assessment FrameworkId (__added__) -* AWS::EC2::NetworkInsightsAnalysis StatusMessage (__added__) -* AWS::ElastiCache::User Authentication (__deleted__) -* AWS::ElastiCache::User UserGroupIds (__deleted__) -* AWS::ElastiCache::UserGroup PendingChanges (__deleted__) -* AWS::ElastiCache::UserGroup ReplicationGroupIds (__deleted__) -* AWS::ElasticLoadBalancingV2::ListenerRule IsDefault (__added__) -* AWS::ElasticLoadBalancingV2::ListenerRule RuleArn (__added__) -* AWS::SageMaker::Device DeviceFleetName (__deleted__) -* AWS::SageMaker::DeviceFleet DeviceFleetName (__deleted__) - -## Property Changes - -* AWS::ACMPCA::CertificateAuthority CsrExtensions (__added__) -* AWS::ApiGatewayV2::Integration ResponseParameters (__added__) -* AWS::Athena::DataCatalog Tags.ItemType (__added__) -* AWS::Athena::DataCatalog Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::Athena::WorkGroup Tags.ItemType (__added__) -* AWS::Athena::WorkGroup Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::AuditManager::Assessment assessmentReportsDestination (__deleted__) -* AWS::AuditManager::Assessment awsAccount (__deleted__) -* AWS::AuditManager::Assessment description (__deleted__) -* AWS::AuditManager::Assessment frameworkId (__deleted__) -* AWS::AuditManager::Assessment name (__deleted__) -* AWS::AuditManager::Assessment roles (__deleted__) -* AWS::AuditManager::Assessment scope (__deleted__) -* AWS::AuditManager::Assessment status (__deleted__) -* AWS::AuditManager::Assessment tags (__deleted__) -* AWS::AuditManager::Assessment AssessmentReportsDestination (__added__) -* AWS::AuditManager::Assessment AwsAccount (__added__) -* AWS::AuditManager::Assessment Description (__added__) -* AWS::AuditManager::Assessment FrameworkId (__added__) -* AWS::AuditManager::Assessment Name (__added__) -* AWS::AuditManager::Assessment Roles (__added__) -* AWS::AuditManager::Assessment Scope (__added__) -* AWS::AuditManager::Assessment Status (__added__) -* AWS::AuditManager::Assessment Tags (__added__) -* AWS::EC2::CarrierGateway Tags.DuplicatesAllowed (__added__) -* AWS::EC2::CarrierGateway Tags.ItemType (__added__) -* AWS::EC2::CarrierGateway Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::EC2::LocalGatewayRouteTableVPCAssociation Tags.DuplicatesAllowed (__added__) -* AWS::EC2::LocalGatewayRouteTableVPCAssociation Tags.ItemType (__added__) -* AWS::EC2::LocalGatewayRouteTableVPCAssociation Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::EC2::NetworkInsightsAnalysis StatusMessage (__deleted__) -* AWS::ECR::PublicRepository RepositoryPolicyText.PrimitiveType (__added__) -* AWS::ECR::Repository RepositoryPolicyText.PrimitiveType (__added__) -* AWS::ElastiCache::User Authentication (__added__) -* AWS::ElastiCache::User UserGroupIds (__added__) -* AWS::ElastiCache::User Passwords.DuplicatesAllowed (__added__) -* AWS::ElastiCache::User Passwords.PrimitiveItemType (__added__) -* AWS::ElastiCache::User Passwords.Type (__changed__) - * Old: PasswordList - * New: List -* AWS::ElastiCache::UserGroup PendingChanges (__added__) -* AWS::ElastiCache::UserGroup ReplicationGroupIds (__added__) -* AWS::ElastiCache::UserGroup UserIds.DuplicatesAllowed (__added__) -* AWS::ElastiCache::UserGroup UserIds.PrimitiveItemType (__added__) -* AWS::ElastiCache::UserGroup UserIds.Type (__changed__) - * Old: UserIdList - * New: List -* AWS::GameLift::GameServerGroup InstanceDefinitions.ItemType (__added__) -* AWS::GameLift::GameServerGroup InstanceDefinitions.Type (__changed__) - * Old: InstanceDefinitions - * New: List -* AWS::GameLift::GameServerGroup Tags.ItemType (__added__) -* AWS::GameLift::GameServerGroup Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::GameLift::GameServerGroup VpcSubnets.PrimitiveItemType (__added__) -* AWS::GameLift::GameServerGroup VpcSubnets.Type (__changed__) - * Old: VpcSubnets - * New: List -* AWS::IoT::Authorizer Tags.ItemType (__added__) -* AWS::IoT::Authorizer Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::IoT::Authorizer TokenSigningPublicKeys.PrimitiveItemType (__added__) -* AWS::IoT::Authorizer TokenSigningPublicKeys.Type (__changed__) - * Old: TokenSigningPublicKeys - * New: Map -* AWS::IoT::DomainConfiguration Tags.ItemType (__added__) -* AWS::IoT::DomainConfiguration Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::IoT::ProvisioningTemplate Tags.ItemType (__added__) -* AWS::IoT::ProvisioningTemplate Tags.Type (__changed__) - * Old: Tags - * New: List -* AWS::KMS::Key KeyPolicy.PrimitiveType (__added__) -* AWS::Kendra::DataSource Tags.ItemType (__added__) -* AWS::Kendra::DataSource Tags.Type (__changed__) - * Old: TagList - * New: List -* AWS::Kendra::Faq Tags.ItemType (__added__) -* AWS::Kendra::Faq Tags.Type (__changed__) - * Old: TagList - * New: List -* AWS::Kendra::Index DocumentMetadataConfigurations.ItemType (__added__) -* AWS::Kendra::Index DocumentMetadataConfigurations.Type (__changed__) - * Old: DocumentMetadataConfigurationList - * New: List -* AWS::Kendra::Index Tags.ItemType (__added__) -* AWS::Kendra::Index Tags.Type (__changed__) - * Old: TagList - * New: List -* AWS::Kendra::Index UserTokenConfigurations.ItemType (__added__) -* AWS::Kendra::Index UserTokenConfigurations.Type (__changed__) - * Old: UserTokenConfigurationList - * New: List -* AWS::LicenseManager::Grant AllowedOperations.DuplicatesAllowed (__added__) -* AWS::LicenseManager::Grant AllowedOperations.PrimitiveItemType (__added__) -* AWS::LicenseManager::Grant AllowedOperations.Type (__changed__) - * Old: AllowedOperationList - * New: List -* AWS::LicenseManager::Grant Filters.DuplicatesAllowed (__added__) -* AWS::LicenseManager::Grant Filters.ItemType (__added__) -* AWS::LicenseManager::Grant Filters.Type (__changed__) - * Old: FilterList - * New: List -* AWS::LicenseManager::Grant GrantArns.DuplicatesAllowed (__added__) -* AWS::LicenseManager::Grant GrantArns.PrimitiveItemType (__added__) -* AWS::LicenseManager::Grant GrantArns.Type (__changed__) - * Old: ArnList - * New: List -* AWS::LicenseManager::Grant GrantedOperations.DuplicatesAllowed (__added__) -* AWS::LicenseManager::Grant GrantedOperations.PrimitiveItemType (__added__) -* AWS::LicenseManager::Grant GrantedOperations.Type (__changed__) - * Old: AllowedOperationList - * New: List -* AWS::LicenseManager::Grant Principals.DuplicatesAllowed (__added__) -* AWS::LicenseManager::Grant Principals.PrimitiveItemType (__added__) -* AWS::LicenseManager::Grant Principals.Type (__changed__) - * Old: ArnList - * New: List -* AWS::LicenseManager::Grant Tags.DuplicatesAllowed (__added__) -* AWS::LicenseManager::Grant Tags.ItemType (__added__) -* AWS::LicenseManager::Grant Tags.Type (__changed__) - * Old: TagList - * New: List -* AWS::LicenseManager::License Entitlements.DuplicatesAllowed (__added__) -* AWS::LicenseManager::License Entitlements.ItemType (__added__) -* AWS::LicenseManager::License Entitlements.Type (__changed__) - * Old: EntitlementList - * New: List -* AWS::LicenseManager::License Filters.DuplicatesAllowed (__added__) -* AWS::LicenseManager::License Filters.ItemType (__added__) -* AWS::LicenseManager::License Filters.Type (__changed__) - * Old: FilterList - * New: List -* AWS::LicenseManager::License LicenseArns.DuplicatesAllowed (__added__) -* AWS::LicenseManager::License LicenseArns.PrimitiveItemType (__added__) -* AWS::LicenseManager::License LicenseArns.Type (__changed__) - * Old: ArnList - * New: List -* AWS::LicenseManager::License LicenseMetadata.DuplicatesAllowed (__added__) -* AWS::LicenseManager::License LicenseMetadata.ItemType (__added__) -* AWS::LicenseManager::License LicenseMetadata.Type (__changed__) - * Old: MetadataList - * New: List -* AWS::LicenseManager::License Tags.DuplicatesAllowed (__added__) -* AWS::LicenseManager::License Tags.ItemType (__added__) -* AWS::LicenseManager::License Tags.Type (__changed__) - * Old: TagList - * New: List -* AWS::MediaLive::Channel CdiInputSpecification (__added__) -* AWS::SSO::InstanceAccessControlAttributeConfiguration AccessControlAttributes (__added__) -* AWS::SSO::InstanceAccessControlAttributeConfiguration InstanceAccessControlAttributeConfiguration.Required (__changed__) - * Old: true - * New: false -* AWS::SSO::InstanceAccessControlAttributeConfiguration InstanceArn.UpdateType (__changed__) - * Old: Mutable - * New: Immutable -* AWS::SSO::PermissionSet InlinePolicy.PrimitiveType (__changed__) - * Old: String - * New: Json -* AWS::SageMaker::Device DeviceFleetName (__added__) -* AWS::SageMaker::DeviceFleet DeviceFleetName (__added__) -* AWS::SageMaker::ModelPackageGroup ModelPackageGroupPolicy.PrimitiveType (__added__) -* AWS::StepFunctions::StateMachine DefinitionSubstitutions.PrimitiveItemType (__added__) -* AWS::StepFunctions::StateMachine DefinitionSubstitutions.Type (__changed__) - * Old: DefinitionSubstitutions - * New: Map -* AWS::Transfer::Server Domain (__added__) -* AWS::Transfer::User PosixProfile (__added__) - -## Property Type Changes - -* AWS::Athena::DataCatalog.Tags (__removed__) -* AWS::Athena::WorkGroup.Tags (__removed__) -* AWS::AuditManager::Assessment.AWSAccounts (__removed__) -* AWS::AuditManager::Assessment.AWSServices (__removed__) -* AWS::AuditManager::Assessment.Delegations (__removed__) -* AWS::AuditManager::Assessment.Roles (__removed__) -* AWS::AuditManager::Assessment.Tags (__removed__) -* AWS::EC2::CarrierGateway.Tags (__removed__) -* AWS::EC2::LocalGatewayRouteTableVPCAssociation.Tags (__removed__) -* AWS::ElastiCache::User.PasswordList (__removed__) -* AWS::ElastiCache::User.UserGroupIdList (__removed__) -* AWS::ElastiCache::UserGroup.ReplicationGroupIdList (__removed__) -* AWS::ElastiCache::UserGroup.UserIdList (__removed__) -* AWS::GameLift::GameServerGroup.InstanceDefinitions (__removed__) -* AWS::GameLift::GameServerGroup.Tags (__removed__) -* AWS::GameLift::GameServerGroup.VpcSubnets (__removed__) -* AWS::IoT::Authorizer.Tags (__removed__) -* AWS::IoT::Authorizer.TokenSigningPublicKeys (__removed__) -* AWS::IoT::DomainConfiguration.Tags (__removed__) -* AWS::IoT::ProvisioningTemplate.Tags (__removed__) -* AWS::Kendra::DataSource.TagList (__removed__) -* AWS::Kendra::Faq.TagList (__removed__) -* AWS::Kendra::Index.DocumentMetadataConfigurationList (__removed__) -* AWS::Kendra::Index.TagList (__removed__) -* AWS::Kendra::Index.UserTokenConfigurationList (__removed__) -* AWS::LicenseManager::Grant.AllowedOperationList (__removed__) -* AWS::LicenseManager::Grant.ArnList (__removed__) -* AWS::LicenseManager::Grant.FilterList (__removed__) -* AWS::LicenseManager::Grant.TagList (__removed__) -* AWS::LicenseManager::License.ArnList (__removed__) -* AWS::LicenseManager::License.EntitlementList (__removed__) -* AWS::LicenseManager::License.FilterList (__removed__) -* AWS::LicenseManager::License.MetadataList (__removed__) -* AWS::LicenseManager::License.TagList (__removed__) -* AWS::StepFunctions::StateMachine.DefinitionSubstitutions (__removed__) -* AWS::ACMPCA::CertificateAuthority.AccessDescription (__added__) -* AWS::ACMPCA::CertificateAuthority.AccessMethod (__added__) -* AWS::ACMPCA::CertificateAuthority.CsrExtensions (__added__) -* AWS::ACMPCA::CertificateAuthority.EdiPartyName (__added__) -* AWS::ACMPCA::CertificateAuthority.GeneralName (__added__) -* AWS::ACMPCA::CertificateAuthority.KeyUsage (__added__) -* AWS::ACMPCA::CertificateAuthority.OtherName (__added__) -* AWS::ACMPCA::CertificateAuthority.SubjectInformationAccess (__added__) -* AWS::ApiGatewayV2::Integration.ResponseParameter (__added__) -* AWS::ApiGatewayV2::Integration.ResponseParameterList (__added__) -* AWS::MediaLive::Channel.AncillarySourceSettings (__added__) -* AWS::MediaLive::Channel.AudioSilenceFailoverSettings (__added__) -* AWS::MediaLive::Channel.CdiInputSpecification (__added__) -* AWS::MediaLive::Channel.FailoverCondition (__added__) -* AWS::MediaLive::Channel.FailoverConditionSettings (__added__) -* AWS::MediaLive::Channel.InputLossFailoverSettings (__added__) -* AWS::MediaLive::Channel.Mpeg2FilterSettings (__added__) -* AWS::MediaLive::Channel.Mpeg2Settings (__added__) -* AWS::MediaLive::Channel.RawSettings (__added__) -* AWS::MediaLive::Channel.VideoBlackFailoverSettings (__added__) -* AWS::MediaLive::Channel.WavSettings (__added__) -* AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttribute (__added__) -* AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValue (__added__) -* AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValueSourceList (__added__) -* AWS::Transfer::User.PosixProfile (__added__) -* AWS::AuditManager::Assessment.AWSAccount emailAddress (__deleted__) -* AWS::AuditManager::Assessment.AWSAccount id (__deleted__) -* AWS::AuditManager::Assessment.AWSAccount name (__deleted__) -* AWS::AuditManager::Assessment.AWSAccount EmailAddress (__added__) -* AWS::AuditManager::Assessment.AWSAccount Id (__added__) -* AWS::AuditManager::Assessment.AWSAccount Name (__added__) -* AWS::AuditManager::Assessment.AWSService serviceName (__deleted__) -* AWS::AuditManager::Assessment.AWSService ServiceName (__added__) -* AWS::AuditManager::Assessment.AssessmentReportsDestination destination (__deleted__) -* AWS::AuditManager::Assessment.AssessmentReportsDestination destinationType (__deleted__) -* AWS::AuditManager::Assessment.AssessmentReportsDestination Destination (__added__) -* AWS::AuditManager::Assessment.AssessmentReportsDestination DestinationType (__added__) -* AWS::AuditManager::Assessment.Delegation assessmentId (__deleted__) -* AWS::AuditManager::Assessment.Delegation assessmentName (__deleted__) -* AWS::AuditManager::Assessment.Delegation comment (__deleted__) -* AWS::AuditManager::Assessment.Delegation controlSetId (__deleted__) -* AWS::AuditManager::Assessment.Delegation createdBy (__deleted__) -* AWS::AuditManager::Assessment.Delegation creationTime (__deleted__) -* AWS::AuditManager::Assessment.Delegation id (__deleted__) -* AWS::AuditManager::Assessment.Delegation lastUpdated (__deleted__) -* AWS::AuditManager::Assessment.Delegation roleArn (__deleted__) -* AWS::AuditManager::Assessment.Delegation roleType (__deleted__) -* AWS::AuditManager::Assessment.Delegation status (__deleted__) -* AWS::AuditManager::Assessment.Delegation AssessmentId (__added__) -* AWS::AuditManager::Assessment.Delegation AssessmentName (__added__) -* AWS::AuditManager::Assessment.Delegation Comment (__added__) -* AWS::AuditManager::Assessment.Delegation ControlSetId (__added__) -* AWS::AuditManager::Assessment.Delegation CreatedBy (__added__) -* AWS::AuditManager::Assessment.Delegation CreationTime (__added__) -* AWS::AuditManager::Assessment.Delegation Id (__added__) -* AWS::AuditManager::Assessment.Delegation LastUpdated (__added__) -* AWS::AuditManager::Assessment.Delegation RoleArn (__added__) -* AWS::AuditManager::Assessment.Delegation RoleType (__added__) -* AWS::AuditManager::Assessment.Delegation Status (__added__) -* AWS::AuditManager::Assessment.Role roleArn (__deleted__) -* AWS::AuditManager::Assessment.Role roleType (__deleted__) -* AWS::AuditManager::Assessment.Role RoleArn (__added__) -* AWS::AuditManager::Assessment.Role RoleType (__added__) -* AWS::AuditManager::Assessment.Scope awsAccounts (__deleted__) -* AWS::AuditManager::Assessment.Scope awsServices (__deleted__) -* AWS::AuditManager::Assessment.Scope AwsAccounts (__added__) -* AWS::AuditManager::Assessment.Scope AwsServices (__added__) -* AWS::EC2::LaunchTemplate.Ebs Throughput (__added__) -* AWS::ElasticLoadBalancingV2::ListenerRule.Action AuthenticateCognitoConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.Action AuthenticateOidcConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.Action FixedResponseConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.Action ForwardConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.Action Order.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-order - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-order -* AWS::ElasticLoadBalancingV2::ListenerRule.Action RedirectConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.Action TargetGroupArn.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-targetgrouparn - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-targetgrouparn -* AWS::ElasticLoadBalancingV2::ListenerRule.Action Type.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-type - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-type -* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateCognitoConfig AuthenticationRequestExtraParams.DuplicatesAllowed (__deleted__) -* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateCognitoConfig SessionTimeout.PrimitiveType (__changed__) - * Old: Long - * New: Integer -* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateOidcConfig UseExistingClientSecret (__added__) -* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateOidcConfig AuthenticationRequestExtraParams.DuplicatesAllowed (__deleted__) -* AWS::ElasticLoadBalancingV2::ListenerRule.AuthenticateOidcConfig SessionTimeout.PrimitiveType (__changed__) - * Old: Long - * New: Integer -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition Field.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-field - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-field -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition HostHeaderConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition HttpHeaderConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition HttpRequestMethodConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition PathPatternConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition QueryStringConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition SourceIpConfig.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig -* AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition Values.Documentation (__changed__) - * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-values - * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-values -* AWS::ImageBuilder::DistributionConfiguration.Distribution ContainerDistributionConfiguration (__added__) -* AWS::IoTWireless::WirelessDevice.AbpV10X DevAddr.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.AbpV10X SessionKeys.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.AbpV11 DevAddr.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.AbpV11 SessionKeys.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.OtaaV10X AppEui.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.OtaaV10X AppKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.OtaaV11 AppKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.OtaaV11 JoinEui.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.OtaaV11 NwkKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV10X AppSKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV10X NwkSKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 AppSKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 FNwkSIntKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 NwkSEncKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessDevice.SessionKeysAbpV11 SNwkSIntKey.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessGateway.LoRaWANGateway GatewayEui.Required (__changed__) - * Old: false - * New: true -* AWS::IoTWireless::WirelessGateway.LoRaWANGateway RfRegion.Required (__changed__) - * Old: false - * New: true -* AWS::MediaLive::Channel.ArchiveContainerSettings RawSettings (__added__) -* AWS::MediaLive::Channel.AudioCodecSettings WavSettings (__added__) -* AWS::MediaLive::Channel.AutomaticInputFailoverSettings ErrorClearTimeMsec (__added__) -* AWS::MediaLive::Channel.AutomaticInputFailoverSettings FailoverConditions (__added__) -* AWS::MediaLive::Channel.CaptionSelectorSettings AncillarySourceSettings (__added__) -* AWS::MediaLive::Channel.HlsGroupSettings DiscontinuityTags (__added__) -* AWS::MediaLive::Channel.HlsGroupSettings IncompleteSegmentBehavior (__added__) -* AWS::MediaLive::Channel.RtmpGroupSettings AdMarkers (__added__) -* AWS::MediaLive::Channel.VideoCodecSettings Mpeg2Settings (__added__) - -# Serverless Application Model (SAM) Resource Specification v2016-10-31 - -## New Resource Types - - -## Attribute Changes - - -## Property Changes - -* AWS::Serverless::LayerVersion ContentUri.PrimitiveType (__deleted__) -* AWS::Serverless::LayerVersion ContentUri.PrimitiveTypes (__added__) -* AWS::Serverless::LayerVersion ContentUri.Types (__added__) - -## Property Type Changes - -* AWS::Serverless::LayerVersion.S3Location (__added__) - # CloudFormation Resource Specification v22.0.0 ## New Resource Types diff --git a/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts b/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts index 73276889da9df..1cf4c4f9cc32e 100644 --- a/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts +++ b/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts @@ -272,7 +272,7 @@ async function main() { '', '![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge)', '', - '> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use.', + '> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use.' + '>', '> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib', '', diff --git a/packages/@aws-cdk/cfnspec/cfn.version b/packages/@aws-cdk/cfnspec/cfn.version index 84b76f4d1c529..1d975bef24600 100644 --- a/packages/@aws-cdk/cfnspec/cfn.version +++ b/packages/@aws-cdk/cfnspec/cfn.version @@ -1 +1 @@ -23.0.0 +22.0.0 diff --git a/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json b/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json index 861e9f77698ac..ca6f3aa09b55b 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json +++ b/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json @@ -17,40 +17,6 @@ } } }, - "AWS::ACMPCA::CertificateAuthority.AccessDescription": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html", - "Properties": { - "AccessLocation": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accesslocation", - "Required": true, - "Type": "GeneralName", - "UpdateType": "Immutable" - }, - "AccessMethod": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessdescription.html#cfn-acmpca-certificateauthority-accessdescription-accessmethod", - "Required": true, - "Type": "AccessMethod", - "UpdateType": "Immutable" - } - } - }, - "AWS::ACMPCA::CertificateAuthority.AccessMethod": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html", - "Properties": { - "AccessMethodType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-accessmethodtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "CustomObjectIdentifier": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-accessmethod.html#cfn-acmpca-certificateauthority-accessmethod-customobjectidentifier", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, "AWS::ACMPCA::CertificateAuthority.CrlConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-crlconfiguration.html", "Properties": { @@ -80,169 +46,6 @@ } } }, - "AWS::ACMPCA::CertificateAuthority.CsrExtensions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html", - "Properties": { - "KeyUsage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-keyusage", - "Required": false, - "Type": "KeyUsage", - "UpdateType": "Immutable" - }, - "SubjectInformationAccess": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-subjectinformationaccess", - "Required": false, - "Type": "SubjectInformationAccess", - "UpdateType": "Immutable" - } - } - }, - "AWS::ACMPCA::CertificateAuthority.EdiPartyName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html", - "Properties": { - "NameAssigner": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-nameassigner", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "PartyName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-edipartyname.html#cfn-acmpca-certificateauthority-edipartyname-partyname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::ACMPCA::CertificateAuthority.GeneralName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html", - "Properties": { - "DirectoryName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-directoryname", - "Required": false, - "Type": "Subject", - "UpdateType": "Immutable" - }, - "DnsName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-dnsname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "EdiPartyName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-edipartyname", - "Required": false, - "Type": "EdiPartyName", - "UpdateType": "Immutable" - }, - "IpAddress": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-ipaddress", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "OtherName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-othername", - "Required": false, - "Type": "OtherName", - "UpdateType": "Immutable" - }, - "RegisteredId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-registeredid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Rfc822Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-rfc822name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "UniformResourceIdentifier": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-generalname.html#cfn-acmpca-certificateauthority-generalname-uniformresourceidentifier", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::ACMPCA::CertificateAuthority.KeyUsage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html", - "Properties": { - "CRLSign": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-crlsign", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "DataEncipherment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-dataencipherment", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "DecipherOnly": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-decipheronly", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "DigitalSignature": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-digitalsignature", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "EncipherOnly": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-encipheronly", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "KeyAgreement": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyagreement", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "KeyCertSign": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keycertsign", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "KeyEncipherment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-keyencipherment", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - }, - "NonRepudiation": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-keyusage.html#cfn-acmpca-certificateauthority-keyusage-nonrepudiation", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::ACMPCA::CertificateAuthority.OtherName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html", - "Properties": { - "TypeId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-typeid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-othername.html#cfn-acmpca-certificateauthority-othername-value", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, "AWS::ACMPCA::CertificateAuthority.RevocationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-revocationconfiguration.html", "Properties": { @@ -343,18 +146,6 @@ } } }, - "AWS::ACMPCA::CertificateAuthority.SubjectInformationAccess": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subjectinformationaccess.html", - "Properties": { - "SubjectInformationAccess": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subjectinformationaccess.html#cfn-acmpca-certificateauthority-subjectinformationaccess-subjectinformationaccess", - "ItemType": "AccessDescription", - "Required": false, - "Type": "List", - "UpdateType": "Immutable" - } - } - }, "AWS::AccessAnalyzer::Analyzer.ArchiveRule": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-accessanalyzer-analyzer-archiverule.html", "Properties": { @@ -1856,35 +1647,6 @@ } } }, - "AWS::ApiGatewayV2::Integration.ResponseParameter": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html", - "Properties": { - "Destination": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html#cfn-apigatewayv2-integration-responseparameter-destination", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Source": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameter.html#cfn-apigatewayv2-integration-responseparameter-source", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::ApiGatewayV2::Integration.ResponseParameterList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameterlist.html", - "Properties": { - "ResponseParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-responseparameterlist.html#cfn-apigatewayv2-integration-responseparameterlist-responseparameters", - "ItemType": "ResponseParameter", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::ApiGatewayV2::Integration.TlsConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-integration-tlsconfig.html", "Properties": { @@ -6480,6 +6242,18 @@ } } }, + "AWS::Athena::DataCatalog.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-datacatalog-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-datacatalog-tags.html#cfn-athena-datacatalog-tags-tags", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Athena::WorkGroup.EncryptionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-encryptionconfiguration.html", "Properties": { @@ -6543,6 +6317,18 @@ } } }, + "AWS::Athena::WorkGroup.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-tags.html#cfn-athena-workgroup-tags-tags", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Athena::WorkGroup.WorkGroupConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-workgroupconfiguration.html", "Properties": { @@ -6622,19 +6408,19 @@ "AWS::AuditManager::Assessment.AWSAccount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html", "Properties": { - "EmailAddress": { + "emailAddress": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-emailaddress", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, - "Id": { + "id": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-id", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, - "Name": { + "name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-name", "PrimitiveType": "String", "Required": false, @@ -6642,10 +6428,22 @@ } } }, + "AWS::AuditManager::Assessment.AWSAccounts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccounts.html", + "Properties": { + "AWSAccounts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccounts.html#cfn-auditmanager-assessment-awsaccounts-awsaccounts", + "ItemType": "AWSAccount", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::AuditManager::Assessment.AWSService": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservice.html", "Properties": { - "ServiceName": { + "serviceName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservice.html#cfn-auditmanager-assessment-awsservice-servicename", "PrimitiveType": "String", "Required": false, @@ -6653,16 +6451,28 @@ } } }, + "AWS::AuditManager::Assessment.AWSServices": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservices.html", + "Properties": { + "AWSServices": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsservices.html#cfn-auditmanager-assessment-awsservices-awsservices", + "ItemType": "AWSService", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::AuditManager::Assessment.AssessmentReportsDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-assessmentreportsdestination.html", "Properties": { - "Destination": { + "destination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-assessmentreportsdestination.html#cfn-auditmanager-assessment-assessmentreportsdestination-destination", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "DestinationType": { + "destinationType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-assessmentreportsdestination.html#cfn-auditmanager-assessment-assessmentreportsdestination-destinationtype", "PrimitiveType": "String", "Required": false, @@ -6673,67 +6483,67 @@ "AWS::AuditManager::Assessment.Delegation": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html", "Properties": { - "AssessmentId": { + "assessmentId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-assessmentid", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "AssessmentName": { + "assessmentName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-assessmentname", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "Comment": { + "comment": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-comment", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "ControlSetId": { + "controlSetId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-controlsetid", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "CreatedBy": { + "createdBy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-createdby", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "CreationTime": { + "creationTime": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-creationtime", "PrimitiveType": "Double", "Required": false, "UpdateType": "Mutable" }, - "Id": { + "id": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-id", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "LastUpdated": { + "lastUpdated": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-lastupdated", "PrimitiveType": "Double", "Required": false, "UpdateType": "Mutable" }, - "RoleArn": { + "roleArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-rolearn", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "RoleType": { + "roleType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-roletype", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "Status": { + "status": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegation.html#cfn-auditmanager-assessment-delegation-status", "PrimitiveType": "String", "Required": false, @@ -6741,16 +6551,28 @@ } } }, + "AWS::AuditManager::Assessment.Delegations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegations.html", + "Properties": { + "Delegations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-delegations.html#cfn-auditmanager-assessment-delegations-delegations", + "ItemType": "Delegation", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::AuditManager::Assessment.Role": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-role.html", "Properties": { - "RoleArn": { + "roleArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-role.html#cfn-auditmanager-assessment-role-rolearn", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "RoleType": { + "roleType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-role.html#cfn-auditmanager-assessment-role-roletype", "PrimitiveType": "String", "Required": false, @@ -6758,19 +6580,41 @@ } } }, + "AWS::AuditManager::Assessment.Roles": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-roles.html", + "Properties": { + "Roles": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-roles.html#cfn-auditmanager-assessment-roles-roles", + "ItemType": "Role", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::AuditManager::Assessment.Scope": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html", "Properties": { - "AwsAccounts": { + "awsAccounts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html#cfn-auditmanager-assessment-scope-awsaccounts", - "ItemType": "AWSAccount", "Required": false, - "Type": "List", + "Type": "AWSAccounts", "UpdateType": "Mutable" }, - "AwsServices": { + "awsServices": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html#cfn-auditmanager-assessment-scope-awsservices", - "ItemType": "AWSService", + "Required": false, + "Type": "AWSServices", + "UpdateType": "Mutable" + } + } + }, + "AWS::AuditManager::Assessment.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-tags.html#cfn-auditmanager-assessment-tags-tags", + "ItemType": "Tag", "Required": false, "Type": "List", "UpdateType": "Mutable" @@ -14483,180 +14327,6 @@ } } }, - "AWS::DataSync::LocationEFS.Ec2Config": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html", - "Properties": { - "SecurityGroupArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html#cfn-datasync-locationefs-ec2config-securitygrouparns", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Immutable" - }, - "SubnetArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html#cfn-datasync-locationefs-ec2config-subnetarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::LocationNFS.MountOptions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-mountoptions.html", - "Properties": { - "Version": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-mountoptions.html#cfn-datasync-locationnfs-mountoptions-version", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::LocationNFS.OnPremConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-onpremconfig.html", - "Properties": { - "AgentArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-onpremconfig.html#cfn-datasync-locationnfs-onpremconfig-agentarns", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::LocationS3.S3Config": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locations3-s3config.html", - "Properties": { - "BucketAccessRoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locations3-s3config.html#cfn-datasync-locations3-s3config-bucketaccessrolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::LocationSMB.MountOptions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-mountoptions.html", - "Properties": { - "Version": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-mountoptions.html#cfn-datasync-locationsmb-mountoptions-version", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::Task.FilterRule": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html", - "Properties": { - "FilterType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html#cfn-datasync-task-filterrule-filtertype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html#cfn-datasync-task-filterrule-value", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::DataSync::Task.Options": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html", - "Properties": { - "Atime": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-atime", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "BytesPerSecond": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-bytespersecond", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Gid": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-gid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "LogLevel": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-loglevel", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Mtime": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-mtime", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "OverwriteMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-overwritemode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PosixPermissions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-posixpermissions", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PreserveDeletedFiles": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-preservedeletedfiles", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PreserveDevices": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-preservedevices", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TaskQueueing": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-taskqueueing", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TransferMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-transfermode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Uid": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-uid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "VerifyMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-verifymode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::DataSync::Task.TaskSchedule": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskschedule.html", - "Properties": { - "ScheduleExpression": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskschedule.html#cfn-datasync-task-taskschedule-scheduleexpression", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, "AWS::DevOpsGuru::NotificationChannel.NotificationChannelConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationchannelconfig.html", "Properties": { @@ -14946,6 +14616,19 @@ } } }, + "AWS::EC2::CarrierGateway.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-carriergateway-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-carriergateway-tags.html#cfn-ec2-carriergateway-tags-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::EC2::ClientVpnEndpoint.CertificateAuthenticationRequest": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-certificateauthenticationrequest.html", "Properties": { @@ -15841,12 +15524,6 @@ "Required": false, "UpdateType": "Mutable" }, - "Throughput": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-throughput", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, "VolumeSize": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-volumesize", "PrimitiveType": "Integer", @@ -16397,6 +16074,19 @@ } } }, + "AWS::EC2::LocalGatewayRouteTableVPCAssociation.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-localgatewayroutetablevpcassociation-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-localgatewayroutetablevpcassociation-tags.html#cfn-ec2-localgatewayroutetablevpcassociation-tags-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::EC2::NetworkAclEntry.Icmp": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html", "Properties": { @@ -20874,6 +20564,43 @@ } } }, + "AWS::ElastiCache::User.PasswordList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-passwordlist.html", + "Properties": { + "PasswordList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-passwordlist.html#cfn-elasticache-user-passwordlist-passwordlist", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::ElastiCache::User.UserGroupIdList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-usergroupidlist.html", + "Properties": { + "UserGroupIdList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-usergroupidlist.html#cfn-elasticache-user-usergroupidlist-usergroupidlist", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::ElastiCache::UserGroup.ReplicationGroupIdList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-replicationgroupidlist.html", + "Properties": { + "ReplicationGroupIdList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-replicationgroupidlist.html#cfn-elasticache-usergroup-replicationgroupidlist-replicationgroupidlist", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::ElastiCache::UserGroup.UserGroupPendingChanges": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-usergrouppendingchanges.html", "Properties": { @@ -20895,6 +20622,19 @@ } } }, + "AWS::ElastiCache::UserGroup.UserIdList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-useridlist.html", + "Properties": { + "UserIdList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-useridlist.html#cfn-elasticache-usergroup-useridlist-useridlist", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::ElasticBeanstalk::Application.ApplicationResourceLifecycleConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticbeanstalk-application-applicationresourcelifecycleconfig.html", "Properties": { @@ -21619,52 +21359,52 @@ } }, "AWS::ElasticLoadBalancingV2::ListenerRule.Action": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html", "Properties": { "AuthenticateCognitoConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticatecognitoconfig", "Required": false, "Type": "AuthenticateCognitoConfig", "UpdateType": "Mutable" }, "AuthenticateOidcConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-authenticateoidcconfig", "Required": false, "Type": "AuthenticateOidcConfig", "UpdateType": "Mutable" }, "FixedResponseConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-fixedresponseconfig", "Required": false, "Type": "FixedResponseConfig", "UpdateType": "Mutable" }, "ForwardConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-forwardconfig", "Required": false, "Type": "ForwardConfig", "UpdateType": "Mutable" }, "Order": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-order", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-order", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "RedirectConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listenerrule-action-redirectconfig", "Required": false, "Type": "RedirectConfig", "UpdateType": "Mutable" }, "TargetGroupArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-targetgrouparn", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-targetgrouparn", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-action.html#cfn-elasticloadbalancingv2-listenerrule-action-type", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-actions.html#cfn-elasticloadbalancingv2-listener-actions-type", "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" @@ -21676,6 +21416,7 @@ "Properties": { "AuthenticationRequestExtraParams": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-authenticationrequestextraparams", + "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "Map", @@ -21701,7 +21442,7 @@ }, "SessionTimeout": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticatecognitoconfig-sessiontimeout", - "PrimitiveType": "Integer", + "PrimitiveType": "Long", "Required": false, "UpdateType": "Mutable" }, @@ -21730,6 +21471,7 @@ "Properties": { "AuthenticationRequestExtraParams": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-authenticationrequestextraparams", + "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "Map", @@ -21779,7 +21521,7 @@ }, "SessionTimeout": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-sessiontimeout", - "PrimitiveType": "Integer", + "PrimitiveType": "Long", "Required": false, "UpdateType": "Mutable" }, @@ -21789,12 +21531,6 @@ "Required": true, "UpdateType": "Mutable" }, - "UseExistingClientSecret": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-useexistingclientsecret", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, "UserInfoEndpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-authenticateoidcconfig.html#cfn-elasticloadbalancingv2-listenerrule-authenticateoidcconfig-userinfoendpoint", "PrimitiveType": "String", @@ -21975,52 +21711,52 @@ } }, "AWS::ElasticLoadBalancingV2::ListenerRule.RuleCondition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html", "Properties": { "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-field", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-field", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "HostHeaderConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-hostheaderconfig", "Required": false, "Type": "HostHeaderConfig", "UpdateType": "Mutable" }, "HttpHeaderConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httpheaderconfig", "Required": false, "Type": "HttpHeaderConfig", "UpdateType": "Mutable" }, "HttpRequestMethodConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-httprequestmethodconfig", "Required": false, "Type": "HttpRequestMethodConfig", "UpdateType": "Mutable" }, "PathPatternConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-pathpatternconfig", "Required": false, "Type": "PathPatternConfig", "UpdateType": "Mutable" }, "QueryStringConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-querystringconfig", "Required": false, "Type": "QueryStringConfig", "UpdateType": "Mutable" }, "SourceIpConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-sourceipconfig", "Required": false, "Type": "SourceIpConfig", "UpdateType": "Mutable" }, "Values": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-rulecondition.html#cfn-elasticloadbalancingv2-listenerrule-rulecondition-values", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listenerrule-conditions.html#cfn-elasticloadbalancingv2-listenerrule-conditions-values", "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, @@ -23351,6 +23087,18 @@ } } }, + "AWS::GameLift::GameServerGroup.InstanceDefinitions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-instancedefinitions.html", + "Properties": { + "InstanceDefinitions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-instancedefinitions.html#cfn-gamelift-gameservergroup-instancedefinitions-instancedefinitions", + "ItemType": "InstanceDefinition", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::GameLift::GameServerGroup.LaunchTemplate": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-launchtemplate.html", "Properties": { @@ -23374,6 +23122,18 @@ } } }, + "AWS::GameLift::GameServerGroup.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-tags.html#cfn-gamelift-gameservergroup-tags-tags", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::GameLift::GameServerGroup.TargetTrackingConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-targettrackingconfiguration.html", "Properties": { @@ -23385,6 +23145,18 @@ } } }, + "AWS::GameLift::GameServerGroup.VpcSubnets": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-vpcsubnets.html", + "Properties": { + "VpcSubnets": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-vpcsubnets.html#cfn-gamelift-gameservergroup-vpcsubnets-vpcsubnets", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::GameLift::GameSessionQueue.Destination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-destination.html", "Properties": { @@ -26485,12 +26257,6 @@ "Required": false, "UpdateType": "Mutable" }, - "ContainerDistributionConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-distribution.html#cfn-imagebuilder-distributionconfiguration-distribution-containerdistributionconfiguration", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "LicenseConfigurationArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-distribution.html#cfn-imagebuilder-distributionconfiguration-distribution-licenseconfigurationarns", "PrimitiveItemType": "String", @@ -26706,6 +26472,21 @@ } } }, + "AWS::IoT::Authorizer.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-authorizer-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-authorizer-tags.html#cfn-iot-authorizer-tags-tags", + "ItemType": "Json", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::IoT::Authorizer.TokenSigningPublicKeys": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-authorizer-tokensigningpublickeys.html" + }, "AWS::IoT::DomainConfiguration.AuthorizerConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-domainconfiguration-authorizerconfig.html", "Properties": { @@ -26746,6 +26527,18 @@ } } }, + "AWS::IoT::DomainConfiguration.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-domainconfiguration-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-domainconfiguration-tags.html#cfn-iot-domainconfiguration-tags-tags", + "ItemType": "Json", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::IoT::ProvisioningTemplate.ProvisioningHook": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-provisioningtemplate-provisioninghook.html", "Properties": { @@ -26763,6 +26556,18 @@ } } }, + "AWS::IoT::ProvisioningTemplate.Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-provisioningtemplate-tags.html", + "Properties": { + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-provisioningtemplate-tags.html#cfn-iot-provisioningtemplate-tags-tags", + "ItemType": "Json", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::IoT::Thing.AttributePayload": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-thing-attributepayload.html", "Properties": { @@ -29614,12 +29419,12 @@ "DevAddr": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv10x.html#cfn-iotwireless-wirelessdevice-abpv10x-devaddr", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "SessionKeys": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv10x.html#cfn-iotwireless-wirelessdevice-abpv10x-sessionkeys", - "Required": true, + "Required": false, "Type": "SessionKeysAbpV10X", "UpdateType": "Mutable" } @@ -29631,12 +29436,12 @@ "DevAddr": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv11.html#cfn-iotwireless-wirelessdevice-abpv11-devaddr", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "SessionKeys": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-abpv11.html#cfn-iotwireless-wirelessdevice-abpv11-sessionkeys", - "Required": true, + "Required": false, "Type": "SessionKeysAbpV11", "UpdateType": "Mutable" } @@ -29695,13 +29500,13 @@ "AppEui": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav10x.html#cfn-iotwireless-wirelessdevice-otaav10x-appeui", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "AppKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav10x.html#cfn-iotwireless-wirelessdevice-otaav10x-appkey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -29712,19 +29517,19 @@ "AppKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav11.html#cfn-iotwireless-wirelessdevice-otaav11-appkey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "JoinEui": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav11.html#cfn-iotwireless-wirelessdevice-otaav11-joineui", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "NwkKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-otaav11.html#cfn-iotwireless-wirelessdevice-otaav11-nwkkey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -29735,13 +29540,13 @@ "AppSKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv10x.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv10x-appskey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "NwkSKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv10x.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv10x-nwkskey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -29752,25 +29557,25 @@ "AppSKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-appskey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "FNwkSIntKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-fnwksintkey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "NwkSEncKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-nwksenckey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "SNwkSIntKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessdevice-sessionkeysabpv11.html#cfn-iotwireless-wirelessdevice-sessionkeysabpv11-snwksintkey", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -29781,13 +29586,13 @@ "GatewayEui": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessgateway-lorawangateway.html#cfn-iotwireless-wirelessgateway-lorawangateway-gatewayeui", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "RfRegion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-wirelessgateway-lorawangateway.html#cfn-iotwireless-wirelessgateway-lorawangateway-rfregion", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -30943,6 +30748,18 @@ } } }, + "AWS::Kendra::DataSource.TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-taglist.html", + "Properties": { + "TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-taglist.html#cfn-kendra-datasource-taglist-taglist", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Kendra::Faq.S3Path": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-faq-s3path.html", "Properties": { @@ -30960,6 +30777,18 @@ } } }, + "AWS::Kendra::Faq.TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-faq-taglist.html", + "Properties": { + "TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-faq-taglist.html#cfn-kendra-faq-taglist-taglist", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Kendra::Index.CapacityUnitsConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-capacityunitsconfiguration.html", "Properties": { @@ -31006,6 +30835,18 @@ } } }, + "AWS::Kendra::Index.DocumentMetadataConfigurationList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-documentmetadataconfigurationlist.html", + "Properties": { + "DocumentMetadataConfigurationList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-documentmetadataconfigurationlist.html#cfn-kendra-index-documentmetadataconfigurationlist-documentmetadataconfigurationlist", + "ItemType": "DocumentMetadataConfiguration", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Kendra::Index.JsonTokenTypeConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-jsontokentypeconfiguration.html", "Properties": { @@ -31145,6 +30986,18 @@ } } }, + "AWS::Kendra::Index.TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-taglist.html", + "Properties": { + "TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-taglist.html#cfn-kendra-index-taglist-taglist", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Kendra::Index.UserTokenConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-usertokenconfiguration.html", "Properties": { @@ -31162,6 +31015,18 @@ } } }, + "AWS::Kendra::Index.UserTokenConfigurationList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-usertokenconfigurationlist.html", + "Properties": { + "UserTokenConfigurationList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-usertokenconfigurationlist.html#cfn-kendra-index-usertokenconfigurationlist-usertokenconfigurationlist", + "ItemType": "UserTokenConfiguration", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Kendra::Index.ValueImportanceItem": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-valueimportanceitem.html", "Properties": { @@ -33889,6 +33754,32 @@ } } }, + "AWS::LicenseManager::Grant.AllowedOperationList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-allowedoperationlist.html", + "Properties": { + "AllowedOperationList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-allowedoperationlist.html#cfn-licensemanager-grant-allowedoperationlist-allowedoperationlist", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::LicenseManager::Grant.ArnList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-arnlist.html", + "Properties": { + "ArnList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-arnlist.html#cfn-licensemanager-grant-arnlist-arnlist", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::LicenseManager::Grant.Filter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-filter.html", "Properties": { @@ -33906,6 +33797,19 @@ } } }, + "AWS::LicenseManager::Grant.FilterList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-filterlist.html", + "Properties": { + "FilterList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-filterlist.html#cfn-licensemanager-grant-filterlist-filterlist", + "DuplicatesAllowed": false, + "ItemType": "Filter", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::LicenseManager::Grant.StringList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-stringlist.html", "Properties": { @@ -33919,6 +33823,32 @@ } } }, + "AWS::LicenseManager::Grant.TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-taglist.html", + "Properties": { + "TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-grant-taglist.html#cfn-licensemanager-grant-taglist-taglist", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::LicenseManager::License.ArnList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-arnlist.html", + "Properties": { + "ArnList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-arnlist.html#cfn-licensemanager-license-arnlist-arnlist", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::LicenseManager::License.BorrowConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-borrowconfiguration.html", "Properties": { @@ -34006,6 +33936,19 @@ } } }, + "AWS::LicenseManager::License.EntitlementList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-entitlementlist.html", + "Properties": { + "EntitlementList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-entitlementlist.html#cfn-licensemanager-license-entitlementlist-entitlementlist", + "DuplicatesAllowed": false, + "ItemType": "Entitlement", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::LicenseManager::License.Filter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-filter.html", "Properties": { @@ -34023,6 +33966,19 @@ } } }, + "AWS::LicenseManager::License.FilterList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-filterlist.html", + "Properties": { + "FilterList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-filterlist.html#cfn-licensemanager-license-filterlist-filterlist", + "DuplicatesAllowed": false, + "ItemType": "Filter", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::LicenseManager::License.IssuerData": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-issuerdata.html", "Properties": { @@ -34057,6 +34013,19 @@ } } }, + "AWS::LicenseManager::License.MetadataList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-metadatalist.html", + "Properties": { + "MetadataList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-metadatalist.html#cfn-licensemanager-license-metadatalist-metadatalist", + "DuplicatesAllowed": false, + "ItemType": "Metadata", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::LicenseManager::License.ProvisionalConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-provisionalconfiguration.html", "Properties": { @@ -34117,6 +34086,19 @@ } } }, + "AWS::LicenseManager::License.TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-taglist.html", + "Properties": { + "TagList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-taglist.html#cfn-licensemanager-license-taglist-taglist", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::LicenseManager::License.ValidityDateFormat": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-validitydateformat.html", "Properties": { @@ -34817,323 +34799,6 @@ } } }, - "AWS::MediaConnect::Flow.Encryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html", - "Properties": { - "Algorithm": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-algorithm", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConstantInitializationVector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-constantinitializationvector", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DeviceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-deviceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "KeyType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-keytype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Region": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-region", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ResourceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-resourceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SecretArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-secretarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Url": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html#cfn-mediaconnect-flow-encryption-url", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::Flow.FailoverConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html", - "Properties": { - "RecoveryWindow": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-recoverywindow", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "State": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-state", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::Flow.Source": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html", - "Properties": { - "Decryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-decryption", - "Required": false, - "Type": "Encryption", - "UpdateType": "Mutable" - }, - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-description", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "EntitlementArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-entitlementarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "IngestIp": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-ingestip", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "IngestPort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-ingestport", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaxBitrate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-maxbitrate", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaxLatency": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-maxlatency", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Protocol": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-protocol", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SourceArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-sourcearn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "StreamId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-streamid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "VpcInterfaceName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-vpcinterfacename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "WhitelistCidr": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-whitelistcidr", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowEntitlement.Encryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html", - "Properties": { - "Algorithm": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-algorithm", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConstantInitializationVector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-constantinitializationvector", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DeviceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-deviceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "KeyType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-keytype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Region": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-region", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ResourceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-resourceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SecretArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-secretarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Url": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html#cfn-mediaconnect-flowentitlement-encryption-url", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowOutput.Encryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html", - "Properties": { - "Algorithm": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-algorithm", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "KeyType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-keytype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SecretArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-encryption.html#cfn-mediaconnect-flowoutput-encryption-secretarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowOutput.VpcInterfaceAttachment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-vpcinterfaceattachment.html", - "Properties": { - "VpcInterfaceName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowoutput-vpcinterfaceattachment.html#cfn-mediaconnect-flowoutput-vpcinterfaceattachment-vpcinterfacename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowSource.Encryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html", - "Properties": { - "Algorithm": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-algorithm", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConstantInitializationVector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-constantinitializationvector", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DeviceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-deviceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "KeyType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-keytype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Region": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-region", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ResourceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-resourceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SecretArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-secretarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Url": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowsource-encryption.html#cfn-mediaconnect-flowsource-encryption-url", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaConvert::JobTemplate.AccelerationSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconvert-jobtemplate-accelerationsettings.html", "Properties": { @@ -35274,17 +34939,6 @@ } } }, - "AWS::MediaLive::Channel.AncillarySourceSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html", - "Properties": { - "SourceAncillaryChannelNumber": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html#cfn-medialive-channel-ancillarysourcesettings-sourceancillarychannelnumber", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.ArchiveContainerSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html", "Properties": { @@ -35293,12 +34947,6 @@ "Required": false, "Type": "M2tsSettings", "UpdateType": "Mutable" - }, - "RawSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-rawsettings", - "Required": false, - "Type": "RawSettings", - "UpdateType": "Mutable" } } }, @@ -35400,12 +35048,6 @@ "Required": false, "Type": "PassThroughSettings", "UpdateType": "Mutable" - }, - "WavSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-wavsettings", - "Required": false, - "Type": "WavSettings", - "UpdateType": "Mutable" } } }, @@ -35594,23 +35236,6 @@ } } }, - "AWS::MediaLive::Channel.AudioSilenceFailoverSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html", - "Properties": { - "AudioSelectorName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audioselectorname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "AudioSilenceThresholdMsec": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audiosilencethresholdmsec", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.AudioTrack": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrack.html", "Properties": { @@ -35637,19 +35262,6 @@ "AWS::MediaLive::Channel.AutomaticInputFailoverSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html", "Properties": { - "ErrorClearTimeMsec": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-errorcleartimemsec", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "FailoverConditions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-failoverconditions", - "ItemType": "FailoverCondition", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, "InputPreference": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-inputpreference", "PrimitiveType": "String", @@ -36018,12 +35630,6 @@ "AWS::MediaLive::Channel.CaptionSelectorSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html", "Properties": { - "AncillarySourceSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-ancillarysourcesettings", - "Required": false, - "Type": "AncillarySourceSettings", - "UpdateType": "Mutable" - }, "AribSourceSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-aribsourcesettings", "Required": false, @@ -36062,17 +35668,6 @@ } } }, - "AWS::MediaLive::Channel.CdiInputSpecification": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html", - "Properties": { - "Resolution": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html#cfn-medialive-channel-cdiinputspecification-resolution", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.ColorSpacePassthroughSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorspacepassthroughsettings.html", "Properties": {} @@ -36518,40 +36113,6 @@ } } }, - "AWS::MediaLive::Channel.FailoverCondition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html", - "Properties": { - "FailoverConditionSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html#cfn-medialive-channel-failovercondition-failoverconditionsettings", - "Required": false, - "Type": "FailoverConditionSettings", - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaLive::Channel.FailoverConditionSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html", - "Properties": { - "AudioSilenceSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-audiosilencesettings", - "Required": false, - "Type": "AudioSilenceFailoverSettings", - "UpdateType": "Mutable" - }, - "InputLossSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-inputlosssettings", - "Required": false, - "Type": "InputLossFailoverSettings", - "UpdateType": "Mutable" - }, - "VideoBlackSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-videoblacksettings", - "Required": false, - "Type": "VideoBlackFailoverSettings", - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.FeatureActivations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html", "Properties": { @@ -37392,12 +36953,6 @@ "Required": false, "UpdateType": "Mutable" }, - "DiscontinuityTags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-discontinuitytags", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, "EncryptionType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-encryptiontype", "PrimitiveType": "String", @@ -37422,12 +36977,6 @@ "Required": false, "UpdateType": "Mutable" }, - "IncompleteSegmentBehavior": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-incompletesegmentbehavior", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, "IndexNSegments": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-indexnsegments", "PrimitiveType": "Integer", @@ -37829,17 +37378,6 @@ } } }, - "AWS::MediaLive::Channel.InputLossFailoverSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html", - "Properties": { - "InputLossThresholdMsec": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html#cfn-medialive-channel-inputlossfailoversettings-inputlossthresholdmsec", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.InputSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html", "Properties": { @@ -38384,118 +37922,6 @@ } } }, - "AWS::MediaLive::Channel.Mpeg2FilterSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html", - "Properties": { - "TemporalFilterSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html#cfn-medialive-channel-mpeg2filtersettings-temporalfiltersettings", - "Required": false, - "Type": "TemporalFilterSettings", - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaLive::Channel.Mpeg2Settings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html", - "Properties": { - "AdaptiveQuantization": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-adaptivequantization", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "AfdSignaling": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-afdsignaling", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ColorMetadata": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colormetadata", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ColorSpace": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colorspace", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DisplayAspectRatio": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-displayaspectratio", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "FilterSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-filtersettings", - "Required": false, - "Type": "Mpeg2FilterSettings", - "UpdateType": "Mutable" - }, - "FixedAfd": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-fixedafd", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "FramerateDenominator": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratedenominator", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "FramerateNumerator": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratenumerator", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "GopClosedCadence": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopclosedcadence", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "GopNumBFrames": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopnumbframes", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "GopSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsize", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "GopSizeUnits": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsizeunits", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ScanType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-scantype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SubgopLength": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-subgoplength", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TimecodeInsertion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeinsertion", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.MsSmoothGroupSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html", "Properties": { @@ -38940,10 +38366,6 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-passthroughsettings.html", "Properties": {} }, - "AWS::MediaLive::Channel.RawSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rawsettings.html", - "Properties": {} - }, "AWS::MediaLive::Channel.Rec601Settings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rec601settings.html", "Properties": {} @@ -38983,13 +38405,6 @@ "AWS::MediaLive::Channel.RtmpGroupSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html", "Properties": { - "AdMarkers": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-admarkers", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, "AuthenticationScheme": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-authenticationscheme", "PrimitiveType": "String", @@ -39300,23 +38715,6 @@ } } }, - "AWS::MediaLive::Channel.VideoBlackFailoverSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html", - "Properties": { - "BlackDetectThreshold": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-blackdetectthreshold", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "VideoBlackThresholdMsec": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-videoblackthresholdmsec", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.VideoCodecSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html", "Properties": { @@ -39337,12 +38735,6 @@ "Required": false, "Type": "H265Settings", "UpdateType": "Mutable" - }, - "Mpeg2Settings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-mpeg2settings", - "Required": false, - "Type": "Mpeg2Settings", - "UpdateType": "Mutable" } } }, @@ -39455,29 +38847,6 @@ } } }, - "AWS::MediaLive::Channel.WavSettings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html", - "Properties": { - "BitDepth": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-bitdepth", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "CodingMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-codingmode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SampleRate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-samplerate", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaLive::Channel.WebvttDestinationSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-webvttdestinationsettings.html", "Properties": {} @@ -46113,46 +45482,6 @@ } } }, - "AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttribute": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute.html", - "Properties": { - "Key": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute-key", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute-value", - "Required": true, - "Type": "AccessControlAttributeValue", - "UpdateType": "Mutable" - } - } - }, - "AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue.html", - "Properties": { - "Source": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue-source", - "Required": true, - "Type": "AccessControlAttributeValueSourceList", - "UpdateType": "Mutable" - } - } - }, - "AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValueSourceList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevaluesourcelist.html", - "Properties": { - "AccessControlAttributeValueSourceList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevaluesourcelist.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevaluesourcelist-accesscontrolattributevaluesourcelist", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::SageMaker::CodeRepository.GitConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-coderepository-gitconfig.html", "Properties": { @@ -48498,6 +47827,9 @@ } } }, + "AWS::StepFunctions::StateMachine.DefinitionSubstitutions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-definitionsubstitutions.html" + }, "AWS::StepFunctions::StateMachine.LogDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-logdestination.html", "Properties": { @@ -48766,30 +48098,6 @@ } } }, - "AWS::Transfer::User.PosixProfile": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html", - "Properties": { - "Gid": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html#cfn-transfer-user-posixprofile-gid", - "PrimitiveType": "Double", - "Required": true, - "UpdateType": "Mutable" - }, - "SecondaryGids": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html#cfn-transfer-user-posixprofile-secondarygids", - "PrimitiveItemType": "Double", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Uid": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-posixprofile.html#cfn-transfer-user-posixprofile-uid", - "PrimitiveType": "Double", - "Required": true, - "UpdateType": "Mutable" - } - } - }, "AWS::Transfer::User.SshPublicKey": { "PrimitiveType": "String" }, @@ -50919,7 +50227,7 @@ } } }, - "ResourceSpecificationVersion": "23.0.0", + "ResourceSpecificationVersion": "22.0.0", "ResourceTypes": { "AWS::ACMPCA::Certificate": { "Attributes": { @@ -50975,12 +50283,6 @@ }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html", "Properties": { - "CsrExtensions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-csrextensions", - "Required": false, - "Type": "CsrExtensions", - "UpdateType": "Immutable" - }, "KeyAlgorithm": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-keyalgorithm", "PrimitiveType": "String", @@ -51741,11 +51043,6 @@ } }, "AWS::ApiGateway::ClientCertificate": { - "Attributes": { - "ClientCertificateId": { - "PrimitiveType": "String" - } - }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html", "Properties": { "Description": { @@ -52795,12 +52092,6 @@ "Required": false, "UpdateType": "Mutable" }, - "ResponseParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-responseparameters", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "TemplateSelectionExpression": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html#cfn-apigatewayv2-integration-templateselectionexpression", "PrimitiveType": "String", @@ -54873,9 +54164,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "Type": { @@ -54960,9 +54250,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "WorkGroupConfiguration": { @@ -54981,79 +54270,76 @@ }, "AWS::AuditManager::Assessment": { "Attributes": { - "Arn": { + "arn": { "PrimitiveType": "String" }, - "AssessmentId": { + "assessmentId": { "PrimitiveType": "String" }, - "CreationTime": { + "creationTime": { "PrimitiveType": "Double" }, - "Delegations": { - "ItemType": "Delegation", - "Type": "List" + "delegations": { + "Type": "Delegations" }, - "FrameworkId": { + "frameworkId": { "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html", "Properties": { - "AssessmentReportsDestination": { + "assessmentReportsDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-assessmentreportsdestination", "Required": false, "Type": "AssessmentReportsDestination", "UpdateType": "Mutable" }, - "AwsAccount": { + "awsAccount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-awsaccount", "Required": false, "Type": "AWSAccount", "UpdateType": "Immutable" }, - "Description": { + "description": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-description", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "FrameworkId": { + "frameworkId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-frameworkid", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, - "Name": { + "name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-name", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "Roles": { + "roles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-roles", - "ItemType": "Role", "Required": false, - "Type": "List", + "Type": "Roles", "UpdateType": "Mutable" }, - "Scope": { + "scope": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-scope", "Required": false, "Type": "Scope", "UpdateType": "Mutable" }, - "Status": { + "status": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-status", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, - "Tags": { + "tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" } } @@ -58917,45 +58203,6 @@ } } }, - "AWS::Config::StoredQuery": { - "Attributes": { - "QueryArn": { - "PrimitiveType": "String" - }, - "QueryId": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html", - "Properties": { - "QueryDescription": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-querydescription", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "QueryExpression": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-queryexpression", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "QueryName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-queryname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-storedquery.html#cfn-config-storedquery-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::DAX::Cluster": { "Attributes": { "Arn": { @@ -59843,458 +59090,6 @@ } } }, - "AWS::DataSync::Agent": { - "Attributes": { - "AgentArn": { - "PrimitiveType": "String" - }, - "EndpointType": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html", - "Properties": { - "ActivationKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-activationkey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "AgentName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-agentname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SecurityGroupArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-securitygrouparns", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Immutable" - }, - "SubnetArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-subnetarns", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "VpcEndpointId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-vpcendpointid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::LocationEFS": { - "Attributes": { - "LocationArn": { - "PrimitiveType": "String" - }, - "LocationUri": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html", - "Properties": { - "Ec2Config": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-ec2config", - "Required": true, - "Type": "Ec2Config", - "UpdateType": "Immutable" - }, - "EfsFilesystemArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-efsfilesystemarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Subdirectory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-subdirectory", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::DataSync::LocationFSxWindows": { - "Attributes": { - "LocationArn": { - "PrimitiveType": "String" - }, - "LocationUri": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html", - "Properties": { - "Domain": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-domain", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "FsxFilesystemArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-fsxfilesystemarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-password", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "SecurityGroupArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-securitygrouparns", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Immutable" - }, - "Subdirectory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-subdirectory", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "User": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-user", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::LocationNFS": { - "Attributes": { - "LocationArn": { - "PrimitiveType": "String" - }, - "LocationUri": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html", - "Properties": { - "MountOptions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-mountoptions", - "Required": false, - "Type": "MountOptions", - "UpdateType": "Immutable" - }, - "OnPremConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-onpremconfig", - "Required": true, - "Type": "OnPremConfig", - "UpdateType": "Immutable" - }, - "ServerHostname": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-serverhostname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Subdirectory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-subdirectory", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::DataSync::LocationObjectStorage": { - "Attributes": { - "LocationArn": { - "PrimitiveType": "String" - }, - "LocationUri": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html", - "Properties": { - "AccessKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-accesskey", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "AgentArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-agentarns", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Immutable" - }, - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-bucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "SecretKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-secretkey", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "ServerHostname": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverhostname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "ServerPort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverport", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Immutable" - }, - "ServerProtocol": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverprotocol", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Subdirectory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-subdirectory", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::DataSync::LocationS3": { - "Attributes": { - "LocationArn": { - "PrimitiveType": "String" - }, - "LocationUri": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html", - "Properties": { - "S3BucketArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3bucketarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "S3Config": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3config", - "Required": true, - "Type": "S3Config", - "UpdateType": "Immutable" - }, - "S3StorageClass": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3storageclass", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Subdirectory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-subdirectory", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::DataSync::LocationSMB": { - "Attributes": { - "LocationArn": { - "PrimitiveType": "String" - }, - "LocationUri": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html", - "Properties": { - "AgentArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-agentarns", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Immutable" - }, - "Domain": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-domain", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "MountOptions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-mountoptions", - "Required": false, - "Type": "MountOptions", - "UpdateType": "Immutable" - }, - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-password", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "ServerHostname": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-serverhostname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Subdirectory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-subdirectory", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "User": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-user", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::DataSync::Task": { - "Attributes": { - "DestinationNetworkInterfaceArns": { - "PrimitiveItemType": "String", - "Type": "List" - }, - "ErrorCode": { - "PrimitiveType": "String" - }, - "ErrorDetail": { - "PrimitiveType": "String" - }, - "SourceNetworkInterfaceArns": { - "PrimitiveItemType": "String", - "Type": "List" - }, - "Status": { - "PrimitiveType": "String" - }, - "TaskArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html", - "Properties": { - "CloudWatchLogGroupArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-cloudwatchloggrouparn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DestinationLocationArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-destinationlocationarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Excludes": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-excludes", - "ItemType": "FilterRule", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Options": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-options", - "Required": false, - "Type": "Options", - "UpdateType": "Mutable" - }, - "Schedule": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-schedule", - "Required": false, - "Type": "TaskSchedule", - "UpdateType": "Mutable" - }, - "SourceLocationArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-sourcelocationarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Detective::Graph": { "Attributes": { "Arn": { @@ -60937,10 +59732,8 @@ "Properties": { "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-carriergateway.html#cfn-ec2-carriergateway-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "VpcId": { @@ -61846,10 +60639,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevpcassociation.html#cfn-ec2-localgatewayroutetablevpcassociation-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "VpcId": { @@ -61995,9 +60786,6 @@ }, "Status": { "PrimitiveType": "String" - }, - "StatusMessage": { - "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html", @@ -62015,6 +60803,12 @@ "Required": true, "UpdateType": "Immutable" }, + "StatusMessage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-statusmessage", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-tags", "ItemType": "Tag", @@ -63607,7 +62401,6 @@ }, "RepositoryPolicyText": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html#cfn-ecr-publicrepository-repositorypolicytext", - "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" } @@ -63647,7 +62440,6 @@ }, "RepositoryPolicyText": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html#cfn-ecr-repository-repositorypolicytext", - "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" }, @@ -65261,8 +64053,14 @@ "Arn": { "PrimitiveType": "String" }, + "Authentication": { + "Type": "Authentication" + }, "Status": { "PrimitiveType": "String" + }, + "UserGroupIds": { + "Type": "UserGroupIdList" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html", @@ -65273,12 +64071,6 @@ "Required": false, "UpdateType": "Mutable" }, - "Authentication": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-authentication", - "Required": false, - "Type": "Authentication", - "UpdateType": "Mutable" - }, "Engine": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-engine", "PrimitiveType": "String", @@ -65293,18 +64085,8 @@ }, "Passwords": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-passwords", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "UserGroupIds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-usergroupids", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "PasswordList", "UpdateType": "Mutable" }, "UserId": { @@ -65326,6 +64108,12 @@ "Arn": { "PrimitiveType": "String" }, + "PendingChanges": { + "Type": "UserGroupPendingChanges" + }, + "ReplicationGroupIds": { + "Type": "ReplicationGroupIdList" + }, "Status": { "PrimitiveType": "String" } @@ -65338,20 +64126,6 @@ "Required": true, "UpdateType": "Immutable" }, - "PendingChanges": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-pendingchanges", - "Required": false, - "Type": "UserGroupPendingChanges", - "UpdateType": "Mutable" - }, - "ReplicationGroupIds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-replicationgroupids", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, "UserGroupId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-usergroupid", "PrimitiveType": "String", @@ -65360,10 +64134,8 @@ }, "UserIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html#cfn-elasticache-usergroup-userids", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "UserIdList", "UpdateType": "Mutable" } } @@ -65756,14 +64528,6 @@ } }, "AWS::ElasticLoadBalancingV2::ListenerRule": { - "Attributes": { - "IsDefault": { - "PrimitiveType": "Boolean" - }, - "RuleArn": { - "PrimitiveType": "String" - } - }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html", "Properties": { "Actions": { @@ -66846,9 +65610,8 @@ }, "InstanceDefinitions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-instancedefinitions", - "ItemType": "InstanceDefinition", "Required": true, - "Type": "List", + "Type": "InstanceDefinitions", "UpdateType": "Mutable" }, "LaunchTemplate": { @@ -66877,16 +65640,14 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "VpcSubnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-vpcsubnets", - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "VpcSubnets", "UpdateType": "Mutable" } } @@ -69784,9 +68545,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-authorizer.html#cfn-iot-authorizer-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "TokenKeyName": { @@ -69797,9 +68557,8 @@ }, "TokenSigningPublicKeys": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-authorizer.html#cfn-iot-authorizer-tokensigningpublickeys", - "PrimitiveItemType": "String", "Required": false, - "Type": "Map", + "Type": "TokenSigningPublicKeys", "UpdateType": "Mutable" } } @@ -69901,9 +68660,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-domainconfiguration.html#cfn-iot-domainconfiguration-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "ValidationCertificateArn": { @@ -69987,9 +68745,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-provisioningtemplate.html#cfn-iot-provisioningtemplate-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "Tags", "UpdateType": "Mutable" }, "TemplateBody": { @@ -70927,7 +69684,6 @@ }, "KeyPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#cfn-kms-key-keypolicy", - "PrimitiveType": "Json", "Required": true, "UpdateType": "Mutable" }, @@ -71008,9 +69764,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-datasource.html#cfn-kendra-datasource-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "TagList", "UpdateType": "Mutable" }, "Type": { @@ -71070,9 +69825,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-faq.html#cfn-kendra-faq-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "TagList", "UpdateType": "Mutable" } } @@ -71102,9 +69856,8 @@ }, "DocumentMetadataConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-documentmetadataconfigurations", - "ItemType": "DocumentMetadataConfiguration", "Required": false, - "Type": "List", + "Type": "DocumentMetadataConfigurationList", "UpdateType": "Mutable" }, "Edition": { @@ -71133,9 +69886,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-tags", - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "TagList", "UpdateType": "Mutable" }, "UserContextPolicy": { @@ -71146,9 +69898,8 @@ }, "UserTokenConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-usertokenconfigurations", - "ItemType": "UserTokenConfiguration", "Required": false, - "Type": "List", + "Type": "UserTokenConfigurationList", "UpdateType": "Mutable" } } @@ -72054,10 +70805,8 @@ "Properties": { "AllowedOperations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-allowedoperations", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "AllowedOperationList", "UpdateType": "Mutable" }, "ClientToken": { @@ -72068,18 +70817,14 @@ }, "Filters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-filters", - "DuplicatesAllowed": false, - "ItemType": "Filter", "Required": false, - "Type": "List", + "Type": "FilterList", "UpdateType": "Mutable" }, "GrantArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-grantarns", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "ArnList", "UpdateType": "Mutable" }, "GrantName": { @@ -72096,10 +70841,8 @@ }, "GrantedOperations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-grantedoperations", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "AllowedOperationList", "UpdateType": "Mutable" }, "GranteePrincipalArn": { @@ -72140,10 +70883,8 @@ }, "Principals": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-principals", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "ArnList", "UpdateType": "Mutable" }, "SourceVersion": { @@ -72166,10 +70907,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-grant.html#cfn-licensemanager-grant-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "TagList", "UpdateType": "Mutable" }, "Version": { @@ -72208,18 +70947,14 @@ }, "Entitlements": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-entitlements", - "DuplicatesAllowed": false, - "ItemType": "Entitlement", "Required": true, - "Type": "List", + "Type": "EntitlementList", "UpdateType": "Mutable" }, "Filters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-filters", - "DuplicatesAllowed": false, - "ItemType": "Filter", "Required": false, - "Type": "List", + "Type": "FilterList", "UpdateType": "Mutable" }, "HomeRegion": { @@ -72236,18 +70971,14 @@ }, "LicenseArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-licensearns", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", "Required": false, - "Type": "List", + "Type": "ArnList", "UpdateType": "Mutable" }, "LicenseMetadata": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-licensemetadata", - "DuplicatesAllowed": false, - "ItemType": "Metadata", "Required": false, - "Type": "List", + "Type": "MetadataList", "UpdateType": "Mutable" }, "LicenseName": { @@ -72294,10 +71025,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-licensemanager-license.html#cfn-licensemanager-license-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", "Required": false, - "Type": "List", + "Type": "TagList", "UpdateType": "Mutable" }, "Validity": { @@ -72854,312 +71583,6 @@ } } }, - "AWS::MediaConnect::Flow": { - "Attributes": { - "FlowArn": { - "PrimitiveType": "String" - }, - "FlowAvailabilityZone": { - "PrimitiveType": "String" - }, - "IngestIp": { - "PrimitiveType": "String" - }, - "SourceArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html", - "Properties": { - "AvailabilityZone": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-availabilityzone", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Source": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-source", - "Required": true, - "Type": "Source", - "UpdateType": "Mutable" - }, - "SourceFailoverConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flow.html#cfn-mediaconnect-flow-sourcefailoverconfig", - "Required": false, - "Type": "FailoverConfig", - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowEntitlement": { - "Attributes": { - "EntitlementArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html", - "Properties": { - "DataTransferSubscriberFeePercent": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-datatransfersubscriberfeepercent", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Immutable" - }, - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-description", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Encryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-encryption", - "Required": false, - "Type": "Encryption", - "UpdateType": "Mutable" - }, - "EntitlementStatus": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-entitlementstatus", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "FlowArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-flowarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Subscribers": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-subscribers", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowOutput": { - "Attributes": { - "OutputArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html", - "Properties": { - "CidrAllowList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-cidrallowlist", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-description", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Destination": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-destination", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Encryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-encryption", - "Required": false, - "Type": "Encryption", - "UpdateType": "Mutable" - }, - "FlowArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-flowarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "MaxLatency": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-maxlatency", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Port": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-port", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Protocol": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-protocol", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "RemoteId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-remoteid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SmoothingLatency": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-smoothinglatency", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "StreamId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-streamid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "VpcInterfaceAttachment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-vpcinterfaceattachment", - "Required": false, - "Type": "VpcInterfaceAttachment", - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowSource": { - "Attributes": { - "IngestIp": { - "PrimitiveType": "String" - }, - "SourceArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html", - "Properties": { - "Decryption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-decryption", - "Required": false, - "Type": "Encryption", - "UpdateType": "Mutable" - }, - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-description", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "EntitlementArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-entitlementarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "FlowArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-flowarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "IngestPort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-ingestport", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaxBitrate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-maxbitrate", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaxLatency": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-maxlatency", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Protocol": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-protocol", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "StreamId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-streamid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "VpcInterfaceName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-vpcinterfacename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "WhitelistCidr": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowsource.html#cfn-mediaconnect-flowsource-whitelistcidr", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::MediaConnect::FlowVpcInterface": { - "Attributes": { - "FlowArn": { - "PrimitiveType": "String" - }, - "Name": { - "PrimitiveType": "String" - }, - "NetworkInterfaceIds": { - "PrimitiveItemType": "String", - "Type": "List" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html", - "Properties": { - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html#cfn-mediaconnect-flowvpcinterface-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SecurityGroupIds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html#cfn-mediaconnect-flowvpcinterface-securitygroupids", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - }, - "SubnetId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html#cfn-mediaconnect-flowvpcinterface-subnetid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, "AWS::MediaConvert::JobTemplate": { "Attributes": { "Arn": { @@ -73332,12 +71755,6 @@ }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html", "Properties": { - "CdiInputSpecification": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification", - "Required": false, - "Type": "CdiInputSpecification", - "UpdateType": "Mutable" - }, "ChannelClass": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-channelclass", "PrimitiveType": "String", @@ -77926,17 +76343,6 @@ } } }, - "AWS::Route53::DNSSEC": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-dnssec.html", - "Properties": { - "HostedZoneId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-dnssec.html#cfn-route53-dnssec-hostedzoneid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, "AWS::Route53::HealthCheck": { "Attributes": { "HealthCheckId": { @@ -78010,35 +76416,6 @@ } } }, - "AWS::Route53::KeySigningKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html", - "Properties": { - "HostedZoneId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-hostedzoneid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "KeyManagementServiceArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-keymanagementservicearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Status": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-keysigningkey.html#cfn-route53-keysigningkey-status", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, "AWS::Route53::RecordSet": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html", "Properties": { @@ -78167,28 +76544,6 @@ } } }, - "AWS::Route53Resolver::ResolverDNSSECConfig": { - "Attributes": { - "Id": { - "PrimitiveType": "String" - }, - "OwnerId": { - "PrimitiveType": "String" - }, - "ValidationStatus": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverdnssecconfig.html", - "Properties": { - "ResourceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverdnssecconfig.html#cfn-route53resolver-resolverdnssecconfig-resourceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, "AWS::Route53Resolver::ResolverEndpoint": { "Attributes": { "Arn": { @@ -79594,24 +77949,17 @@ "AWS::SSO::InstanceAccessControlAttributeConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html", "Properties": { - "AccessControlAttributes": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributes", - "ItemType": "AccessControlAttribute", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, "InstanceAccessControlAttributeConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html#cfn-sso-instanceaccesscontrolattributeconfiguration-instanceaccesscontrolattributeconfiguration", "PrimitiveType": "Json", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "InstanceArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html#cfn-sso-instanceaccesscontrolattributeconfiguration-instancearn", "PrimitiveType": "String", "Required": true, - "UpdateType": "Immutable" + "UpdateType": "Mutable" } } }, @@ -79631,7 +77979,7 @@ }, "InlinePolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-permissionset.html#cfn-sso-permissionset-inlinepolicy", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, @@ -79772,6 +78120,11 @@ } }, "AWS::SageMaker::Device": { + "Attributes": { + "DeviceFleetName": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html", "Properties": { "Device": { @@ -79781,12 +78134,6 @@ "Type": "Device", "UpdateType": "Mutable" }, - "DeviceFleetName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-devicefleetname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-tags", "ItemType": "Json", @@ -79797,6 +78144,11 @@ } }, "AWS::SageMaker::DeviceFleet": { + "Attributes": { + "DeviceFleetName": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html", "Properties": { "Description": { @@ -79805,12 +78157,6 @@ "Required": false, "UpdateType": "Mutable" }, - "DeviceFleetName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-devicefleetname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, "OutputConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-outputconfig", "Required": true, @@ -80152,7 +78498,6 @@ }, "ModelPackageGroupPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html#cfn-sagemaker-modelpackagegroup-modelpackagegrouppolicy", - "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" }, @@ -81558,9 +79903,8 @@ }, "DefinitionSubstitutions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions", - "PrimitiveItemType": "String", "Required": false, - "Type": "Map", + "Type": "DefinitionSubstitutions", "UpdateType": "Mutable" }, "LoggingConfiguration": { @@ -81771,12 +80115,6 @@ "Required": false, "UpdateType": "Mutable" }, - "Domain": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-server.html#cfn-transfer-server-domain", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, "EndpointDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-server.html#cfn-transfer-server-endpointdetails", "Required": false, @@ -81868,12 +80206,6 @@ "Required": false, "UpdateType": "Mutable" }, - "PosixProfile": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-user.html#cfn-transfer-user-posixprofile", - "Required": false, - "Type": "PosixProfile", - "UpdateType": "Mutable" - }, "Role": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-user.html#cfn-transfer-user-role", "PrimitiveType": "String", diff --git a/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json b/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json index 41065e7109a19..9c032b1062520 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json +++ b/packages/@aws-cdk/cfnspec/spec-source/000_sam.spec.json @@ -955,29 +955,6 @@ } } }, - "AWS::Serverless::LayerVersion.S3Location": { - "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3-location-object", - "Properties": { - "Bucket": { - "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Key": { - "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Version": { - "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Immutable" - } - } - }, "AWS::Serverless::SimpleTable.PrimaryKey": { "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#primary-key-object", "Properties": { @@ -1591,13 +1568,8 @@ }, "ContentUri": { "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesslayerversion", - "PrimitiveTypes": [ - "String" - ], + "PrimitiveType": "String", "Required": false, - "Types": [ - "S3Location" - ], "UpdateType": "Immutable" }, "Description": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json b/packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json new file mode 100644 index 0000000000000..4282477502f05 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/500_IoT_ProvisioningTemplate_Tags_CorrectItemType_patch.json @@ -0,0 +1,21 @@ +{ + "PropertyTypes": { + "AWS::IoT::ProvisioningTemplate.Tags": { + "patch": { + "description": "AWS::IoT::ProvisioningTemplate.Tag.ItemType should have been PrimitiveItemType", + "operations": [ + { + "op": "remove", + "path": "/Properties/Tags/ItemType", + "value": "Json" + }, + { + "op": "add", + "path": "/Properties/Tags/PrimitiveItemType", + "value": "Json" + } + ] + } + } + } +} diff --git a/packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json b/packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json new file mode 100644 index 0000000000000..6f9224d738886 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/570_Athena_Workgroup_Tags_patch.json @@ -0,0 +1,36 @@ +{ + "PropertyTypes": { + "AWS::Athena::WorkGroup.Tags": { + "patch": { + "description": "Corrects tag specification for AWS::Athena::WorkGroup.Tags", + "operations": [ + { + "op": "remove", + "path": "/Properties" + }, + { + "op": "add", + "path": "/ItemType", + "value": "Tag" + }, + { + "op": "add", + "path": "/Required", + "value": false + }, + { + "op": "add", + "path": "/Type", + "value": "List" + }, + { + "op": "add", + "path": "/UpdateType", + "value": "Mutable" + } + ] + } + } + } +} + diff --git a/packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json b/packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json new file mode 100644 index 0000000000000..45e189299b113 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/610_IoT_Authorizer_Tags_patch.json @@ -0,0 +1,16 @@ +{ + "PropertyTypes": { + "AWS::IoT::Authorizer.Tags": { + "patch": { + "description": "Tags is defined as a List whereas it should he List", + "operations": [ + { + "path": "/Properties/Tags/ItemType", + "op": "replace", + "value": "Tag" + } + ] + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json b/packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json new file mode 100644 index 0000000000000..5ffa659a47b46 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/690_IoT_DomainConfiguration_Tags_CorrectItemType_patch.json @@ -0,0 +1,21 @@ +{ + "PropertyTypes": { + "AWS::IoT::DomainConfiguration.Tags": { + "patch": { + "description": "AWS::IoT::DomainConfiguration.Tag.ItemType should have been PrimitiveItemType", + "operations": [ + { + "op": "remove", + "path": "/Properties/Tags/ItemType", + "value": "Json" + }, + { + "op": "add", + "path": "/Properties/Tags/PrimitiveItemType", + "value": "Json" + } + ] + } + } + } +} diff --git a/packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json b/packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json new file mode 100644 index 0000000000000..17c14a9db8bf6 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/711_AuditMgr_Assesment_patch.json @@ -0,0 +1,13 @@ +{ + "ResourceTypes": { + "patch": { + "description": "Remove the AWS::AuditManager::Assessment resource type", + "operations": [ + { + "op": "remove", + "path": "/AWS::AuditManager::Assessment" + } + ] + } + } +} diff --git a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts index 654e1aa032926..ebec6ab166fbb 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/docker-image-asset.ts @@ -23,24 +23,12 @@ export interface DockerImageSource { * The directory containing the Docker image build instructions. * * This path is relative to the asset manifest location. - * - * @default - Exactly one of `directory` and `executable` is required - */ - readonly directory?: string; - - /** - * A command-line executable that returns the name of a local - * Docker image on stdout after being run. - * - * @default - Exactly one of `directory` and `executable` is required */ - readonly executable?: string[]; + readonly directory: string; /** * The name of the file with build instructions * - * Only allowed when `directory` is set. - * * @default "Dockerfile" */ readonly dockerFile?: string; @@ -48,8 +36,6 @@ export interface DockerImageSource { /** * Target build stage in a Dockerfile with multiple build stages * - * Only allowed when `directory` is set. - * * @default - The last stage in the Dockerfile */ readonly dockerBuildTarget?: string; @@ -57,8 +43,6 @@ export interface DockerImageSource { /** * Additional build arguments * - * Only allowed when `directory` is set. - * * @default - No additional build arguments */ readonly dockerBuildArgs?: { [name: string]: string }; diff --git a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts index 58c7e0cc93ebc..efa6cd4384bbe 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/lib/assets/file-asset.ts @@ -34,27 +34,16 @@ export enum FileAssetPackaging { * Describe the source of a file asset */ export interface FileSource { - /** - * External command which will produce the file asset to upload. - * - * @default - Exactly one of `executable` and `path` is required. - */ - readonly executable?: string[]; - /** * The filesystem object to upload * * This path is relative to the asset manifest location. - * - * @default - Exactly one of `executable` and `path` is required. */ - readonly path?: string; + readonly path: string; /** * Packaging method * - * Only allowed when `path` is specified. - * * @default FILE */ readonly packaging?: FileAssetPackaging; @@ -73,4 +62,4 @@ export interface FileDestination extends AwsDestination { * The destination object key */ readonly objectKey: string; -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/cloud-assembly-schema/package.json b/packages/@aws-cdk/cloud-assembly-schema/package.json index e24e4cab83995..f14d8ad679b71 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/package.json +++ b/packages/@aws-cdk/cloud-assembly-schema/package.json @@ -66,7 +66,7 @@ "jest": "^26.6.3", "mock-fs": "^4.13.0", "pkglint": "0.0.0", - "typescript-json-schema": "^0.47.0" + "typescript-json-schema": "^0.46.0" }, "repository": { "url": "https://github.com/aws/aws-cdk.git", @@ -83,7 +83,7 @@ "semver" ], "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json b/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json index 995a895ad824d..bbd61aae66813 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json +++ b/packages/@aws-cdk/cloud-assembly-schema/schema/assets.schema.json @@ -53,26 +53,22 @@ "description": "Describe the source of a file asset", "type": "object", "properties": { - "executable": { - "description": "External command which will produce the file asset to upload. (Default - Exactly one of `executable` and `path` is required.)", - "type": "array", - "items": { - "type": "string" - } - }, "path": { - "description": "The filesystem object to upload\n\nThis path is relative to the asset manifest location. (Default - Exactly one of `executable` and `path` is required.)", + "description": "The filesystem object to upload\n\nThis path is relative to the asset manifest location.", "type": "string" }, "packaging": { - "description": "Packaging method\n\nOnly allowed when `path` is specified. (Default FILE)", + "description": "Packaging method (Default FILE)", "enum": [ "file", "zip" ], "type": "string" } - } + }, + "required": [ + "path" + ] }, "FileDestination": { "description": "Where in S3 a file asset needs to be published", @@ -130,32 +126,28 @@ "type": "object", "properties": { "directory": { - "description": "The directory containing the Docker image build instructions.\n\nThis path is relative to the asset manifest location. (Default - Exactly one of `directory` and `executable` is required)", + "description": "The directory containing the Docker image build instructions.\n\nThis path is relative to the asset manifest location.", "type": "string" }, - "executable": { - "description": "A command-line executable that returns the name of a local\nDocker image on stdout after being run. (Default - Exactly one of `directory` and `executable` is required)", - "type": "array", - "items": { - "type": "string" - } - }, "dockerFile": { - "description": "The name of the file with build instructions\n\nOnly allowed when `directory` is set. (Default Dockerfile)", + "description": "The name of the file with build instructions (Default Dockerfile)", "type": "string" }, "dockerBuildTarget": { - "description": "Target build stage in a Dockerfile with multiple build stages\n\nOnly allowed when `directory` is set. (Default - The last stage in the Dockerfile)", + "description": "Target build stage in a Dockerfile with multiple build stages (Default - The last stage in the Dockerfile)", "type": "string" }, "dockerBuildArgs": { - "description": "Additional build arguments\n\nOnly allowed when `directory` is set. (Default - No additional build arguments)", + "description": "Additional build arguments (Default - No additional build arguments)", "type": "object", "additionalProperties": { "type": "string" } } - } + }, + "required": [ + "directory" + ] }, "DockerImageDestination": { "description": "Where to publish docker images", diff --git a/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json b/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json index e6bb766b23585..bdc5a9f306dec 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json +++ b/packages/@aws-cdk/cloud-assembly-schema/schema/cloud-assembly.version.json @@ -1 +1 @@ -{"version":"8.0.0"} +{"version":"7.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts b/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts index 24ddd465484b7..62aebfa26e6ee 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/test/assets.test.ts @@ -21,18 +21,6 @@ describe('Docker image asset', () => { }, }, }, - externalAsset: { - source: { - executable: ['sometool'], - }, - destinations: { - dest: { - region: 'us-north-20', - repositoryName: 'REPO', - imageTag: 'TAG', - }, - }, - }, }, }); }).not.toThrow(); @@ -44,18 +32,12 @@ describe('Docker image asset', () => { version: Manifest.version(), dockerImages: { asset: { - source: { - directory: true, - }, - destinations: {}, - }, - externalAsset: { source: {}, destinations: {}, }, }, }); - }).toThrow(/instance\.dockerImages\.asset\.source\.directory is not of a type\(s\) string/); + }).toThrow(/instance\.dockerImages\.asset\.source requires property \"directory\"/); }); }); @@ -78,18 +60,6 @@ describe('File asset', () => { }, }, }, - externalAsset: { - source: { - executable: ['sometool'], - }, - destinations: { - dest: { - region: 'us-north-20', - bucketName: 'Bouquet', - objectKey: 'key', - }, - }, - }, }, }); }).not.toThrow(); @@ -139,18 +109,6 @@ describe('File asset', () => { }, }, }, - externalAsset: { - source: { - executable: ['sometool'], - }, - destinations: { - dest: { - region: 'us-north-20', - bucketName: 'Bouquet', - objectKey: 'key', - }, - }, - }, }, }); }).toThrow(/instance\.files\.asset\.source\.path is not of a type\(s\) string/); @@ -191,4 +149,4 @@ function validate(manifest: any) { fs.unlinkSync(filePath); fs.rmdirSync(dir); } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/cloudformation-diff/package.json b/packages/@aws-cdk/cloudformation-diff/package.json index c317644bef177..7179ae4210672 100644 --- a/packages/@aws-cdk/cloudformation-diff/package.json +++ b/packages/@aws-cdk/cloudformation-diff/package.json @@ -49,7 +49,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index 6241f01c2e4b7..a697d0d80b041 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -83,7 +83,6 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", - "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscalingplans": "0.0.0", "@aws-cdk/aws-backup": "0.0.0", @@ -111,7 +110,6 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", - "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -163,7 +161,6 @@ "@aws-cdk/aws-logs": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", - "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", @@ -227,7 +224,6 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", - "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscalingplans": "0.0.0", "@aws-cdk/aws-backup": "0.0.0", @@ -255,7 +251,6 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", - "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -307,7 +302,6 @@ "@aws-cdk/aws-logs": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", - "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", @@ -377,7 +371,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "awslint": { "exclude": [ diff --git a/packages/@aws-cdk/core/README.md b/packages/@aws-cdk/core/README.md index 8c5ce270d8dc1..3b013f3ff990e 100644 --- a/packages/@aws-cdk/core/README.md +++ b/packages/@aws-cdk/core/README.md @@ -843,11 +843,3 @@ IAM operator, we need it in the *key* of a `StringEquals` condition. JSON keys *must be* strings, so to circumvent this limitation, we use `CfnJson` to "delay" the rendition of this template section to deploy-time. This means that the value of `StringEquals` in the template will be `{ "Fn::GetAtt": [ "ConditionJson", "Value" ] }`, and will only "expand" to the operator we synthesized during deployment. - -### Stack Resource Limit - -When deploying to AWS CloudFormation, it needs to keep in check the amount of resources being added inside a Stack. Currently it's possible to check the limits in the [AWS CloudFormation quotas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) page. - -It's possible to synthesize the project with more Resources than the allowed (or even reduce the number of Resources). - -Set the context key `@aws-cdk/core:stackResourceLimit` with the proper value, being 0 for disable the limit of resources. diff --git a/packages/@aws-cdk/core/lib/assets.ts b/packages/@aws-cdk/core/lib/assets.ts index d992546dbfdb3..17d3b9d93e53f 100644 --- a/packages/@aws-cdk/core/lib/assets.ts +++ b/packages/@aws-cdk/core/lib/assets.ts @@ -106,30 +106,17 @@ export interface FileAssetSource { */ readonly sourceHash: string; - /** - * An external command that will produce the packaged asset. - * - * The command should produce the location of a ZIP file on `stdout`. - * - * @default - Exactly one of `directory` and `executable` is required - */ - readonly executable?: string[]; - /** * The path, relative to the root of the cloud assembly, in which this asset * source resides. This can be a path to a file or a directory, dependning on the * packaging type. - * - * @default - Exactly one of `directory` and `executable` is required */ - readonly fileName?: string; + readonly fileName: string; /** * Which type of packaging to perform. - * - * @default - Required if `fileName` is specified. */ - readonly packaging?: FileAssetPackaging; + readonly packaging: FileAssetPackaging; } export interface DockerImageAssetSource { @@ -143,22 +130,11 @@ export interface DockerImageAssetSource { */ readonly sourceHash: string; - /** - * An external command that will produce the packaged asset. - * - * The command should produce the name of a local Docker image on `stdout`. - * - * @default - Exactly one of `directoryName` and `executable` is required - */ - readonly executable?: string[]; - /** * The directory where the Dockerfile is stored, must be relative * to the cloud assembly root. - * - * @default - Exactly one of `directoryName` and `executable` is required */ - readonly directoryName?: string; + readonly directoryName: string; /** * Build args to pass to the `docker build` command. @@ -167,8 +143,6 @@ export interface DockerImageAssetSource { * values cannot refer to unresolved tokens (such as `lambda.functionArn` or * `queue.queueUrl`). * - * Only allowed when `directoryName` is specified. - * * @default - no build args are passed */ readonly dockerBuildArgs?: { [key: string]: string }; @@ -176,8 +150,6 @@ export interface DockerImageAssetSource { /** * Docker target to build to * - * Only allowed when `directoryName` is specified. - * * @default - no target */ readonly dockerBuildTarget?: string; @@ -185,8 +157,6 @@ export interface DockerImageAssetSource { /** * Path to the Dockerfile (relative to the directory). * - * Only allowed when `directoryName` is specified. - * * @default - no file */ readonly dockerFile?: string; diff --git a/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts b/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts index ff38c78f3597b..6c66166513c42 100644 --- a/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts +++ b/packages/@aws-cdk/core/lib/stack-synthesizers/default-synthesizer.ts @@ -1,16 +1,16 @@ -import * as fs from 'fs'; -import * as path from 'path'; import * as cxschema from '@aws-cdk/cloud-assembly-schema'; import * as cxapi from '@aws-cdk/cx-api'; +import * as fs from 'fs'; +import * as path from 'path'; import { DockerImageAssetLocation, DockerImageAssetSource, FileAssetLocation, FileAssetPackaging, FileAssetSource } from '../assets'; import { Fn } from '../cfn-fn'; import { CfnParameter } from '../cfn-parameter'; import { CfnRule } from '../cfn-rule'; import { Stack } from '../stack'; import { Token } from '../token'; -import { assertBound, contentHash } from './_shared'; import { StackSynthesizer } from './stack-synthesizer'; import { ISynthesisSession } from './types'; +import { assertBound, contentHash } from './_shared'; export const BOOTSTRAP_QUALIFIER_CONTEXT = '@aws-cdk/core:bootstrapQualifier'; @@ -289,15 +289,12 @@ export class DefaultStackSynthesizer extends StackSynthesizer { public addFileAsset(asset: FileAssetSource): FileAssetLocation { assertBound(this.stack); assertBound(this.bucketName); - validateFileAssetSource(asset); - const objectKey = this.bucketPrefix + asset.sourceHash + (asset.packaging === FileAssetPackaging.ZIP_DIRECTORY ? '.zip' : ''); // Add to manifest this.files[asset.sourceHash] = { source: { path: asset.fileName, - executable: asset.executable, packaging: asset.packaging, }, destinations: { @@ -328,14 +325,12 @@ export class DefaultStackSynthesizer extends StackSynthesizer { public addDockerImageAsset(asset: DockerImageAssetSource): DockerImageAssetLocation { assertBound(this.stack); assertBound(this.repositoryName); - validateDockerImageAssetSource(asset); const imageTag = asset.sourceHash; // Add to manifest this.dockerImages[asset.sourceHash] = { source: { - executable: asset.executable, directory: asset.directoryName, dockerBuildArgs: asset.dockerBuildArgs, dockerBuildTarget: asset.dockerBuildTarget, @@ -571,29 +566,3 @@ function range(startIncl: number, endExcl: number) { } return ret; } - -function validateFileAssetSource(asset: FileAssetSource) { - if (!!asset.executable === !!asset.fileName) { - throw new Error(`Exactly one of 'fileName' or 'executable' is required, got: ${JSON.stringify(asset)}`); - } - - if (!!asset.packaging !== !!asset.fileName) { - throw new Error(`'packaging' is expected in combination with 'fileName', got: ${JSON.stringify(asset)}`); - } -} - -function validateDockerImageAssetSource(asset: DockerImageAssetSource) { - if (!!asset.executable === !!asset.directoryName) { - throw new Error(`Exactly one of 'directoryName' or 'executable' is required, got: ${JSON.stringify(asset)}`); - } - - check('dockerBuildArgs'); - check('dockerBuildTarget'); - check('dockerFile'); - - function check(key: K) { - if (asset[key] && !asset.directoryName) { - throw new Error(`'${key}' is only allowed in combination with 'directoryName', got: ${JSON.stringify(asset)}`); - } - } -} diff --git a/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts b/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts index 6044edef0a9ba..9575089e0adf5 100644 --- a/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts +++ b/packages/@aws-cdk/core/lib/stack-synthesizers/legacy.ts @@ -121,10 +121,6 @@ export class LegacyStackSynthesizer extends StackSynthesizer { // only add every image (identified by source hash) once for each stack that uses it. if (!this.addedImageAssets.has(assetId)) { - if (!asset.directoryName) { - throw new Error(`LegacyStackSynthesizer does not support this type of file asset: ${JSON.stringify(asset)}`); - } - const metadata: cxschema.ContainerImageAssetMetadataEntry = { repositoryName, imageTag, @@ -154,10 +150,6 @@ export class LegacyStackSynthesizer extends StackSynthesizer { if (!params) { params = new FileAssetParameters(this.assetParameters, asset.sourceHash); - if (!asset.fileName || !asset.packaging) { - throw new Error(`LegacyStackSynthesizer does not support this type of file asset: ${JSON.stringify(asset)}`); - } - const metadata: cxschema.FileAssetMetadataEntry = { path: asset.fileName, id: asset.sourceHash, diff --git a/packages/@aws-cdk/core/lib/stack.ts b/packages/@aws-cdk/core/lib/stack.ts index 7a9819679c1d3..38fe5f99af808 100644 --- a/packages/@aws-cdk/core/lib/stack.ts +++ b/packages/@aws-cdk/core/lib/stack.ts @@ -22,12 +22,8 @@ import { makeUniqueId } from './private/uniqueid'; const STACK_SYMBOL = Symbol.for('@aws-cdk/core.Stack'); const MY_STACK_CACHE = Symbol.for('@aws-cdk/core.Stack.myStack'); -export const STACK_RESOURCE_LIMIT_CONTEXT = '@aws-cdk/core:stackResourceLimit'; - const VALID_STACK_NAME_REGEX = /^[A-Za-z][A-Za-z0-9-]*$/; -const MAX_RESOURCES = 500; - export interface StackProps { /** * A description of the stack. @@ -752,17 +748,6 @@ export class Stack extends Construct implements ITaggable { // write the CloudFormation template as a JSON file const outPath = path.join(builder.outdir, this.templateFile); - - if (this.maxResources > 0) { - const resources = template.Resources || {}; - const numberOfResources = Object.keys(resources).length; - - if (numberOfResources > this.maxResources) { - throw new Error(`Number of resources: ${numberOfResources} is greater than allowed maximum of ${this.maxResources}`); - } else if (numberOfResources >= (this.maxResources * 0.8)) { - Annotations.of(this).addInfo(`Number of resources: ${numberOfResources} is approaching allowed maximum of ${this.maxResources}`); - } - } fs.writeFileSync(outPath, JSON.stringify(template, undefined, 2)); for (const ctx of this._missingContext) { @@ -917,16 +902,6 @@ export class Stack extends Construct implements ITaggable { }; } - /** - * Maximum number of resources in the stack - * - * Set to 0 to mean "unlimited". - */ - private get maxResources(): number { - const contextLimit = this.node.tryGetContext(STACK_RESOURCE_LIMIT_CONTEXT); - return contextLimit !== undefined ? parseInt(contextLimit, 10) : MAX_RESOURCES; - } - /** * Check whether this stack has a (transitive) dependency on another stack * diff --git a/packages/@aws-cdk/core/package.json b/packages/@aws-cdk/core/package.json index c7162a5e3f31a..b24326e58d238 100644 --- a/packages/@aws-cdk/core/package.json +++ b/packages/@aws-cdk/core/package.json @@ -214,7 +214,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awscdkio": { diff --git a/packages/@aws-cdk/core/test/stack.test.ts b/packages/@aws-cdk/core/test/stack.test.ts index dfd701961a2e0..ee6fe6de474b0 100644 --- a/packages/@aws-cdk/core/test/stack.test.ts +++ b/packages/@aws-cdk/core/test/stack.test.ts @@ -46,68 +46,6 @@ nodeunitShim({ test.done(); }, - 'when stackResourceLimit is default, should give error'(test: Test) { - // GIVEN - const app = new App({}); - - const stack = new Stack(app, 'MyStack'); - - // WHEN - for (let index = 0; index < 1000; index++) { - new CfnResource(stack, `MyResource-${index}`, { type: 'MyResourceType' }); - } - - test.throws(() => { - app.synth(); - }, 'Number of resources: 1000 is greater than allowed maximum of 500'); - - test.done(); - }, - - 'when stackResourceLimit is defined, should give the proper error'(test: Test) { - // GIVEN - const app = new App({ - context: { - '@aws-cdk/core:stackResourceLimit': 100, - }, - }); - - const stack = new Stack(app, 'MyStack'); - - // WHEN - for (let index = 0; index < 200; index++) { - new CfnResource(stack, `MyResource-${index}`, { type: 'MyResourceType' }); - } - - test.throws(() => { - app.synth(); - }, 'Number of resources: 200 is greater than allowed maximum of 100'); - - test.done(); - }, - - 'when stackResourceLimit is 0, should not give error'(test: Test) { - // GIVEN - const app = new App({ - context: { - '@aws-cdk/core:stackResourceLimit': 0, - }, - }); - - const stack = new Stack(app, 'MyStack'); - - // WHEN - for (let index = 0; index < 1000; index++) { - new CfnResource(stack, `MyResource-${index}`, { type: 'MyResourceType' }); - } - - test.doesNotThrow(() => { - app.synth(); - }); - - test.done(); - }, - 'stack.templateOptions can be used to set template-level options'(test: Test) { const stack = new Stack(); diff --git a/packages/@aws-cdk/custom-resources/package.json b/packages/@aws-cdk/custom-resources/package.json index 71e4ed01390f8..85ec98a49236d 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -81,7 +81,7 @@ "@types/aws-lambda": "^8.10.64", "@types/fs-extra": "^8.1.1", "@types/sinon": "^9.0.9", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "aws-sdk-mock": "^5.1.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", @@ -113,7 +113,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "awslint": { diff --git a/packages/@aws-cdk/cx-api/lib/features.ts b/packages/@aws-cdk/cx-api/lib/features.ts index c91607b587eb0..499c8e3438fe8 100644 --- a/packages/@aws-cdk/cx-api/lib/features.ts +++ b/packages/@aws-cdk/cx-api/lib/features.ts @@ -80,15 +80,6 @@ export const SECRETS_MANAGER_PARSE_OWNED_SECRET_NAME = '@aws-cdk/aws-secretsmana */ export const KMS_DEFAULT_KEY_POLICIES = '@aws-cdk/aws-kms:defaultKeyPolicies'; -/** - * Change the old 's3:PutObject*' permission to 's3:PutObject' on Bucket, - * as the former includes 's3:PutObjectAcl', - * which allows changing the visibility of an object written to the Bucket. - * Use a feature flag to make sure existing customers who might be relying - * on the overly-broad permissions are not broken. - */ -export const S3_GRANT_WRITE_WITHOUT_ACL = '@aws-cdk/aws-s3:grantWriteWithoutAcl'; - /** * This map includes context keys and values for feature flags that enable * capabilities "from the future", which we could not introduce as the default @@ -109,7 +100,6 @@ export const FUTURE_FLAGS = { [DOCKER_IGNORE_SUPPORT]: true, [SECRETS_MANAGER_PARSE_OWNED_SECRET_NAME]: true, [KMS_DEFAULT_KEY_POLICIES]: true, - [S3_GRANT_WRITE_WITHOUT_ACL]: true, // We will advertise this flag when the feature is complete // [NEW_STYLE_STACK_SYNTHESIS_CONTEXT]: 'true', @@ -127,7 +117,6 @@ const FUTURE_FLAGS_DEFAULTS: { [key: string]: boolean } = { [DOCKER_IGNORE_SUPPORT]: false, [SECRETS_MANAGER_PARSE_OWNED_SECRET_NAME]: false, [KMS_DEFAULT_KEY_POLICIES]: false, - [S3_GRANT_WRITE_WITHOUT_ACL]: false, }; export function futureFlagDefault(flag: string): boolean { diff --git a/packages/@aws-cdk/cx-api/package.json b/packages/@aws-cdk/cx-api/package.json index 248d5118d7f53..e21884db8398c 100644 --- a/packages/@aws-cdk/cx-api/package.json +++ b/packages/@aws-cdk/cx-api/package.json @@ -88,7 +88,7 @@ "semver" ], "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/example-construct-library/package.json b/packages/@aws-cdk/example-construct-library/package.json index 4299e4b45bca1..826d9b02e1b8b 100644 --- a/packages/@aws-cdk/example-construct-library/package.json +++ b/packages/@aws-cdk/example-construct-library/package.json @@ -92,7 +92,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/lambda-layer-awscli/package.json b/packages/@aws-cdk/lambda-layer-awscli/package.json index 8b9cb0ffdb65e..44e7ed826958f 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/package.json +++ b/packages/@aws-cdk/lambda-layer-awscli/package.json @@ -83,7 +83,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/lambda-layer-kubectl/package.json b/packages/@aws-cdk/lambda-layer-kubectl/package.json index a1a5a7d7b6e63..3b7c09f51e0af 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/package.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/package.json @@ -89,7 +89,7 @@ "constructs": "10.0.0-pre.5" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/pipelines/package.json b/packages/@aws-cdk/pipelines/package.json index 507a60267d194..59af9ff1fe5cf 100644 --- a/packages/@aws-cdk/pipelines/package.json +++ b/packages/@aws-cdk/pipelines/package.json @@ -79,7 +79,7 @@ "delivery" ], "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "license": "Apache-2.0", "stability": "experimental", diff --git a/packages/@aws-cdk/region-info/package.json b/packages/@aws-cdk/region-info/package.json index d0a1744c7cfee..9db12073061e5 100644 --- a/packages/@aws-cdk/region-info/package.json +++ b/packages/@aws-cdk/region-info/package.json @@ -72,7 +72,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@aws-cdk/yaml-cfn/package.json b/packages/@aws-cdk/yaml-cfn/package.json index 34b5c0f72363c..873f32ac59a96 100644 --- a/packages/@aws-cdk/yaml-cfn/package.json +++ b/packages/@aws-cdk/yaml-cfn/package.json @@ -82,7 +82,7 @@ "jest": true }, "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "experimental", "maturity": "experimental", diff --git a/packages/@monocdk-experiment/rewrite-imports/package.json b/packages/@monocdk-experiment/rewrite-imports/package.json index 8da599c16cc53..874cb01ecc201 100644 --- a/packages/@monocdk-experiment/rewrite-imports/package.json +++ b/packages/@monocdk-experiment/rewrite-imports/package.json @@ -52,6 +52,6 @@ "stability": "experimental", "maturity": "developer-preview", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" } } diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index d9e1b2e2d6aec..61826d7af01c7 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -116,7 +116,6 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", - "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscaling-common": "0.0.0", "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", @@ -150,7 +149,6 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", - "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -213,7 +211,6 @@ "@aws-cdk/aws-logs-destinations": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", - "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", @@ -290,7 +287,7 @@ }, "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "keywords": [ "aws", diff --git a/packages/aws-cdk/README.md b/packages/aws-cdk/README.md index d17a38e62f923..64b542ed4b2fd 100644 --- a/packages/aws-cdk/README.md +++ b/packages/aws-cdk/README.md @@ -115,9 +115,6 @@ $ cdk synth $ # Synthesize cloud assembly for StackName, but don't include dependencies $ cdk synth MyStackName --exclusively - -$ # Synthesize cloud assembly for StackName, but don't cloudFormation template output to STDOUT -$ cdk synth MyStackName --quiet ``` See the [AWS Documentation](https://docs.aws.amazon.com/cdk/latest/guide/apps.html#apps_cloud_assembly) to learn more about cloud assemblies. diff --git a/packages/aws-cdk/bin/cdk.ts b/packages/aws-cdk/bin/cdk.ts index d14e53892354a..e305da55164e5 100644 --- a/packages/aws-cdk/bin/cdk.ts +++ b/packages/aws-cdk/bin/cdk.ts @@ -68,8 +68,7 @@ async function parseCommandLineArguments() { .option('long', { type: 'boolean', default: false, alias: 'l', desc: 'Display environment information for each stack' }), ) .command(['synthesize [STACKS..]', 'synth [STACKS..]'], 'Synthesizes and prints the CloudFormation template for this stack', yargs => yargs - .option('exclusively', { type: 'boolean', alias: 'e', desc: 'Only synthesize requested stacks, don\'t include dependencies' }) - .option('quiet', { type: 'boolean', alias: 'q', desc: 'Do not output CloudFormation Template to stdout', default: false })) + .option('exclusively', { type: 'boolean', alias: 'e', desc: 'Only synthesize requested stacks, don\'t include dependencies' })) .command('bootstrap [ENVIRONMENTS..]', 'Deploys the CDK toolkit stack into an AWS environment', yargs => yargs .option('bootstrap-bucket-name', { type: 'string', alias: ['b', 'toolkit-bucket-name'], desc: 'The name of the CDK toolkit bucket; bucket will be created and must not exist', default: undefined }) .option('bootstrap-kms-key-id', { type: 'string', desc: 'AWS KMS master key ID used for the SSE-KMS encryption', default: undefined, conflicts: 'bootstrap-customer-key' }) @@ -329,7 +328,7 @@ async function initCommandLine() { case 'synthesize': case 'synth': - return cli.synth(args.STACKS, args.exclusively, args.quiet); + return cli.synth(args.STACKS, args.exclusively); case 'metadata': return cli.metadata(args.STACK); diff --git a/packages/aws-cdk/lib/cdk-toolkit.ts b/packages/aws-cdk/lib/cdk-toolkit.ts index c3e8c649eaa7b..c0ae230879a80 100644 --- a/packages/aws-cdk/lib/cdk-toolkit.ts +++ b/packages/aws-cdk/lib/cdk-toolkit.ts @@ -295,15 +295,12 @@ export class CdkToolkit { * OUTPUT: If more than one stack ends up being selected, an output directory * should be supplied, where the templates will be written. */ - public async synth(stackNames: string[], exclusively: boolean, quiet: boolean): Promise { + public async synth(stackNames: string[], exclusively: boolean): Promise { const stacks = await this.selectStacksForDiff(stackNames, exclusively); // if we have a single stack, print it to STDOUT if (stacks.stackCount === 1) { - if (!quiet) { - return stacks.firstStack.template; - } - return undefined; + return stacks.firstStack.template; } // This is a slight hack; in integ mode we allow multiple stacks to be synthesized to stdout sequentially. diff --git a/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore b/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore index 58505a0211c74..383cdd5040f7e 100644 --- a/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore +++ b/packages/aws-cdk/lib/init-templates/v1/app/python/.template.gitignore @@ -3,7 +3,6 @@ package-lock.json __pycache__ .pytest_cache .env -.venv *.egg-info # CDK asset staging directory diff --git a/packages/aws-cdk/lib/settings.ts b/packages/aws-cdk/lib/settings.ts index f61d2ebd270da..0663d021f63d3 100644 --- a/packages/aws-cdk/lib/settings.ts +++ b/packages/aws-cdk/lib/settings.ts @@ -98,8 +98,7 @@ export class Configuration { this.context = new Context( this.commandLineContext, this.projectConfig.subSettings([CONTEXT_KEY]).makeReadOnly(), - this.projectContext, - userConfig.subSettings([CONTEXT_KEY]).makeReadOnly()); + this.projectContext); // Build settings from what's left this.settings = this.defaultConfig diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index eb1351446e05e..aea264fdb46b3 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -74,11 +74,11 @@ "@aws-cdk/region-info": "0.0.0", "@aws-cdk/yaml-cfn": "0.0.0", "archiver": "^5.2.0", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "camelcase": "^6.2.0", "cdk-assets": "0.0.0", "colors": "^1.4.0", - "decamelize": "^5.0.0", + "decamelize": "^4.0.0", "fs-extra": "^9.0.1", "glob": "^7.1.6", "json-diff": "^0.5.4", @@ -103,7 +103,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "stability": "stable", "maturity": "stable" diff --git a/packages/aws-cdk/test/cdk-toolkit.test.ts b/packages/aws-cdk/test/cdk-toolkit.test.ts index 9266d9bc10646..caf3e6cc83257 100644 --- a/packages/aws-cdk/test/cdk-toolkit.test.ts +++ b/packages/aws-cdk/test/cdk-toolkit.test.ts @@ -138,16 +138,6 @@ describe('deploy', () => { }); }); -describe('synth', () => { - test('with no stdout option', async () => { - // GIVE - const toolkit = defaultToolkitSetup(); - - // THEN - await expect(toolkit.synth(['Test-Stack-A'], false, true)).resolves.toBeUndefined(); - }); -}); - class MockStack { public static readonly MOCK_STACK_A: TestStackArtifact = { stackName: 'Test-Stack-A', diff --git a/packages/aws-cdk/test/usersettings.test.ts b/packages/aws-cdk/test/usersettings.test.ts deleted file mode 100644 index 948b3b3f907bc..0000000000000 --- a/packages/aws-cdk/test/usersettings.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -import * as os from 'os'; -import * as fs_path from 'path'; -import * as fs from 'fs-extra'; -import { mocked } from 'ts-jest/utils'; -import { Configuration, PROJECT_CONFIG, PROJECT_CONTEXT } from '../lib/settings'; - -// mock fs deeply -jest.mock('fs-extra'); -const mockedFs = mocked(fs, true); - -const USER_CONFIG = fs_path.join(os.homedir(), '.cdk.json'); - -test('load settings from both files if available', async () => { - // GIVEN - const GIVEN_CONFIG: Map = new Map([ - [PROJECT_CONFIG, { - project: 'foobar', - }], - [USER_CONFIG, { - project: 'foo', - test: 'bar', - }], - ]); - - // WHEN - mockedFs.pathExists.mockImplementation(path => { - return GIVEN_CONFIG.has(path); - }); - mockedFs.readJSON.mockImplementation(path => { - return GIVEN_CONFIG.get(path); - }); - - const config = await new Configuration().load(); - - // THEN - expect(config.settings.get(['project'])).toBe('foobar'); - expect(config.settings.get(['test'])).toBe('bar'); -}); - -test('load context from all 3 files if available', async () => { - // GIVEN - const GIVEN_CONFIG: Map = new Map([ - [PROJECT_CONFIG, { - context: { - project: 'foobar', - }, - }], - [PROJECT_CONTEXT, { - foo: 'bar', - }], - [USER_CONFIG, { - context: { - test: 'bar', - }, - }], - ]); - - // WHEN - mockedFs.pathExists.mockImplementation(path => { - return GIVEN_CONFIG.has(path); - }); - mockedFs.readJSON.mockImplementation(path => { - return GIVEN_CONFIG.get(path); - }); - - const config = await new Configuration().load(); - - // THEN - expect(config.context.get('project')).toBe('foobar'); - expect(config.context.get('foo')).toBe('bar'); - expect(config.context.get('test')).toBe('bar'); -}); \ No newline at end of file diff --git a/packages/awslint/package.json b/packages/awslint/package.json index 14b68795adfba..7e9ed60a7b4b3 100644 --- a/packages/awslint/package.json +++ b/packages/awslint/package.json @@ -48,6 +48,6 @@ "maturity": "developer-preview", "stability": "experimental", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" } } diff --git a/packages/cdk-assets/README.md b/packages/cdk-assets/README.md index c40afcd00c42d..2eb10ae621947 100644 --- a/packages/cdk-assets/README.md +++ b/packages/cdk-assets/README.md @@ -28,7 +28,6 @@ Currently the following asset types are supported: * Files and archives, uploaded to S3 * Docker Images, uploaded to ECR -* Files, archives, and Docker images built by external utilities S3 buckets and ECR repositories to upload to are expected to exist already. @@ -42,13 +41,6 @@ itself in the following behaviors: image in the local Docker cache) already exists named after the asset's ID, it will not be packaged, but will be uploaded directly to the destination location. - -For assets build by external utilities, the contract is such that cdk-assets -expects the utility to manage dedupe detection as well as path/image tag generation. -This means that cdk-assets will call the external utility every time generation -is warranted, and it is up to the utility to a) determine whether to do a -full rebuild; and b) to return only one thing on stdout: the path to the file/archive -asset, or the name of the local Docker image. ## Usage @@ -90,19 +82,6 @@ An asset manifest looks like this: } } }, - "3dfe2b80b050e7e4e168f84feff678d4": { - "source": { - "executable": ["myzip"] - }, - "destinations": { - "us-east-1": { - "region": "us-east-1", - "assumeRoleArn": "arn:aws:iam::12345789012:role/my-account", - "bucketName": "MySpecialBucket", - "objectKey": "3dfe2b80b050e7e4e168f84feff678d4.zip" - } - } - }, }, "dockerImages": { "b48783c58a86f7b8c68a4591c4f9be31": { @@ -118,20 +97,6 @@ An asset manifest looks like this: "imageUri": "123456789012.dkr.ecr.us-east-1.amazonaws.com/MyRepository:1234567891b48783c58a86f7b8c68a4591c4f9be31", } } - }, - "d92753c58a86f7b8c68a4591c4f9cf28": { - "source": { - "executable": ["mytool", "package", "dockerdir"], - }, - "destinations": { - "us-east-1": { - "region": "us-east-1", - "assumeRoleArn": "arn:aws:iam::12345789012:role/my-account", - "repositoryName": "MyRepository2", - "imageTag": "d92753c58a86f7b8c68a4591c4f9cf28", - "imageUri": "123456789987.dkr.ecr.us-east-1.amazonaws.com/MyRepository2:1234567891b48783c58a86f7b8c68a4591c4f9be31", - } - } } } } diff --git a/packages/cdk-assets/lib/private/handlers/container-images.ts b/packages/cdk-assets/lib/private/handlers/container-images.ts index a3b6756ecb18d..bd755a52f139b 100644 --- a/packages/cdk-assets/lib/private/handlers/container-images.ts +++ b/packages/cdk-assets/lib/private/handlers/container-images.ts @@ -1,128 +1,73 @@ import * as path from 'path'; -import { DockerImageDestination } from '@aws-cdk/cloud-assembly-schema'; import { DockerImageManifestEntry } from '../../asset-manifest'; import { EventType } from '../../progress'; import { IAssetHandler, IHandlerHost } from '../asset-handler'; import { Docker } from '../docker'; import { replaceAwsPlaceholders } from '../placeholders'; -import { shell } from '../shell'; export class ContainerImageAssetHandler implements IAssetHandler { + private readonly localTagName: string; private readonly docker = new Docker(m => this.host.emitMessage(EventType.DEBUG, m)); constructor( private readonly workDir: string, private readonly asset: DockerImageManifestEntry, private readonly host: IHandlerHost) { + + this.localTagName = `cdkasset-${this.asset.id.assetId.toLowerCase()}`; } public async publish(): Promise { const destination = await replaceAwsPlaceholders(this.asset.destination, this.host.aws); + const ecr = await this.host.aws.ecrClient(destination); + const account = (await this.host.aws.discoverCurrentAccount()).accountId; - const repoUri = await repositoryUri(ecr, destination.repositoryName); + const repoUri = await repositoryUri(ecr, destination.repositoryName); if (!repoUri) { throw new Error(`No ECR repository named '${destination.repositoryName}' in account ${account}. Is this account bootstrapped?`); } const imageUri = `${repoUri}:${destination.imageTag}`; - if (await this.destinationAlreadyExists(ecr, destination, imageUri)) { return; } + this.host.emitMessage(EventType.CHECK, `Check ${imageUri}`); + if (await imageExists(ecr, destination.repositoryName, destination.imageTag)) { + this.host.emitMessage(EventType.FOUND, `Found ${imageUri}`); + return; + } + if (this.host.aborted) { return; } // Login before build so that the Dockerfile can reference images in the ECR repo await this.docker.login(ecr); - - const localTagName = this.asset.source.executable - ? await this.buildExternalAsset(this.asset.source.executable) - : await this.buildDirectoryAsset(); - - if (localTagName === undefined || this.host.aborted) { - return; - } + await this.buildImage(); this.host.emitMessage(EventType.UPLOAD, `Push ${imageUri}`); if (this.host.aborted) { return; } - await this.docker.tag(localTagName, imageUri); + await this.docker.tag(this.localTagName, imageUri); await this.docker.push(imageUri); } - /** - * Build a (local) Docker asset from a directory with a Dockerfile - * - * Tags under a deterministic, unique, local identifier wich will skip - * the build if it already exists. - */ - private async buildDirectoryAsset(): Promise { - const localTagName = `cdkasset-${this.asset.id.assetId.toLowerCase()}`; - - if (!(await this.isImageCached(localTagName))) { - if (this.host.aborted) { return undefined; } - - await this.buildImage(localTagName); - } - - return localTagName; - } - - /** - * Build a (local) Docker asset by running an external command - * - * External command is responsible for deduplicating the build if possible, - * and is expected to return the generated image identifier on stdout. - */ - private async buildExternalAsset(executable: string[]): Promise { - this.host.emitMessage(EventType.BUILD, `Building Docker image using command '${executable}'`); - if (this.host.aborted) { return undefined; } - - return (await shell(executable, { quiet: true })).trim(); - } - - - /** - * Check whether the image already exists in the ECR repo - * - * Use the fields from the destination to do the actual check. The imageUri - * should correspond to that, but is only used to print Docker image location - * for user benefit (the format is slightly different). - */ - private async destinationAlreadyExists(ecr: AWS.ECR, destination: DockerImageDestination, imageUri: string): Promise { - this.host.emitMessage(EventType.CHECK, `Check ${imageUri}`); - if (await imageExists(ecr, destination.repositoryName, destination.imageTag)) { - this.host.emitMessage(EventType.FOUND, `Found ${imageUri}`); - return true; + private async buildImage(): Promise { + if (await this.docker.exists(this.localTagName)) { + this.host.emitMessage(EventType.CACHED, `Cached ${this.localTagName}`); + return; } - return false; - } - - private async buildImage(localTagName: string): Promise { const source = this.asset.source; - if (!source.directory) { - throw new Error(`'directory' is expected in the DockerImage asset source, got: ${JSON.stringify(source)}`); - } const fullPath = path.resolve(this.workDir, source.directory); this.host.emitMessage(EventType.BUILD, `Building Docker image at ${fullPath}`); await this.docker.build({ directory: fullPath, - tag: localTagName, + tag: this.localTagName, buildArgs: source.dockerBuildArgs, target: source.dockerBuildTarget, file: source.dockerFile, }); } - - private async isImageCached(localTagName: string): Promise { - if (await this.docker.exists(localTagName)) { - this.host.emitMessage(EventType.CACHED, `Cached ${localTagName}`); - return true; - } - - return false; - } } async function imageExists(ecr: AWS.ECR, repositoryName: string, imageTag: string) { @@ -148,4 +93,4 @@ async function repositoryUri(ecr: AWS.ECR, repositoryName: string): Promise { - if (!source.path) { - throw new Error(`'path' is expected in the File asset source, got: ${JSON.stringify(source)}`); - } - - const fullPath = path.resolve(this.workDir, source.path); + private async packageFile(): Promise { + const source = this.asset.source; + const fullPath = path.resolve(this.workDir, this.asset.source.path); if (source.packaging === FileAssetPackaging.ZIP_DIRECTORY) { - const contentType = 'application/zip'; - await fs.mkdir(this.fileCacheRoot, { recursive: true }); - const packagedPath = path.join(this.fileCacheRoot, `${this.asset.id.assetId}.zip`); + const ret = path.join(this.fileCacheRoot, `${this.asset.id.assetId}.zip`); - if (await pathExists(packagedPath)) { - this.host.emitMessage(EventType.CACHED, `From cache ${path}`); - return { packagedPath, contentType }; + if (await pathExists(ret)) { + this.host.emitMessage(EventType.CACHED, `From cache ${ret}`); + return ret; } - this.host.emitMessage(EventType.BUILD, `Zip ${fullPath} -> ${path}`); - await zipDirectory(fullPath, packagedPath); - return { packagedPath, contentType }; + this.host.emitMessage(EventType.BUILD, `Zip ${fullPath} -> ${ret}`); + await zipDirectory(fullPath, ret); + return ret; } else { - return { packagedPath: fullPath }; + return fullPath; } } - - private async externalPackageFile(executable: string[]): Promise { - this.host.emitMessage(EventType.BUILD, `Building asset source using command: '${executable}'`); - - return { - packagedPath: (await shell(executable, { quiet: true })).trim(), - contentType: 'application/zip', - }; - } } enum BucketOwnership { @@ -124,21 +109,3 @@ async function objectExists(s3: AWS.S3, bucket: string, key: string) { const response = await s3.listObjectsV2({ Bucket: bucket, Prefix: key, MaxKeys: 1 }).promise(); return response.Contents != null && response.Contents.some(object => object.Key === key); } - - -/** - * A packaged asset which can be uploaded (either a single file or directory) - */ -interface PackagedFileAsset { - /** - * Path of the file or directory - */ - readonly packagedPath: string; - - /** - * Content type to be added in the S3 upload action - * - * @default - No content type - */ - readonly contentType?: string; -} diff --git a/packages/cdk-assets/lib/private/handlers/index.ts b/packages/cdk-assets/lib/private/handlers/index.ts index 97ec7354279df..2e4d406ce5b0b 100644 --- a/packages/cdk-assets/lib/private/handlers/index.ts +++ b/packages/cdk-assets/lib/private/handlers/index.ts @@ -12,4 +12,4 @@ export function makeAssetHandler(manifest: AssetManifest, asset: IManifestEntry, } throw new Error(`Unrecognized asset type: '${asset}'`); -} +} \ No newline at end of file diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index 6968bb005fd02..f5f6f12a4bf09 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -47,7 +47,7 @@ "@aws-cdk/cloud-assembly-schema": "0.0.0", "@aws-cdk/cx-api": "0.0.0", "archiver": "^5.2.0", - "aws-sdk": "^2.828.0", + "aws-sdk": "^2.824.0", "glob": "^7.1.6", "yargs": "^16.2.0" }, @@ -62,7 +62,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "cdk-package": { "shrinkWrap": true diff --git a/packages/cdk-assets/test/docker-images.test.ts b/packages/cdk-assets/test/docker-images.test.ts index 3b608a1e63ffe..3f0aeaabf474c 100644 --- a/packages/cdk-assets/test/docker-images.test.ts +++ b/packages/cdk-assets/test/docker-images.test.ts @@ -9,8 +9,6 @@ import { mockSpawn } from './mock-child_process'; let aws: ReturnType; const absoluteDockerPath = '/simple/cdk.out/dockerdir'; beforeEach(() => { - jest.resetAllMocks(); - mockfs({ '/simple/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), @@ -30,24 +28,6 @@ beforeEach(() => { }, }, }), - '/external/cdk.out/assets.json': JSON.stringify({ - version: Manifest.version(), - dockerImages: { - theExternalAsset: { - source: { - executable: ['sometool'], - }, - destinations: { - theDestination: { - region: 'us-north-50', - assumeRoleArn: 'arn:aws:role', - repositoryName: 'repo', - imageTag: 'ghijkl', - }, - }, - }, - }, - }), '/simple/cdk.out/dockerdir/Dockerfile': 'FROM scratch', '/abs/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), @@ -112,7 +92,7 @@ describe('with a complete manifest', () => { ], }); - const expectAllSpawns = mockSpawn( + mockSpawn( { commandLine: ['docker', 'login', '--username', 'user', '--password-stdin', 'https://proxy.com/'] }, { commandLine: ['docker', 'inspect', 'cdkasset-theasset'] }, { commandLine: ['docker', 'tag', 'cdkasset-theasset', '12345.amazonaws.com/repo:abcdef'] }, @@ -120,9 +100,6 @@ describe('with a complete manifest', () => { ); await pub.publish(); - - expectAllSpawns(); - expect(true).toBeTruthy(); // Expect no exception, satisfy linter }); test('build and upload docker image if not exists anywhere', async () => { @@ -133,7 +110,7 @@ describe('with a complete manifest', () => { ], }); - const expectAllSpawns = mockSpawn( + mockSpawn( { commandLine: ['docker', 'login', '--username', 'user', '--password-stdin', 'https://proxy.com/'] }, { commandLine: ['docker', 'inspect', 'cdkasset-theasset'], exitCode: 1 }, { commandLine: ['docker', 'build', '--tag', 'cdkasset-theasset', '.'], cwd: absoluteDockerPath }, @@ -142,41 +119,6 @@ describe('with a complete manifest', () => { ); await pub.publish(); - - expectAllSpawns(); - expect(true).toBeTruthy(); // Expect no exception, satisfy linter - }); -}); - -describe('external assets', () => { - let pub: AssetPublishing; - const externalTag = 'external:tag'; - beforeEach(() => { - pub = new AssetPublishing(AssetManifest.fromPath('/external/cdk.out'), { aws }); - }); - - test('upload externally generated Docker image', async () => { - aws.mockEcr.describeImages = mockedApiFailure('ImageNotFoundException', 'File does not exist'); - aws.mockEcr.getAuthorizationToken = mockedApiResult({ - authorizationData: [ - { authorizationToken: 'dXNlcjpwYXNz', proxyEndpoint: 'https://proxy.com/' }, - ], - }); - - const expectAllSpawns = mockSpawn( - { commandLine: ['docker', 'login', '--username', 'user', '--password-stdin', 'https://proxy.com/'] }, - { commandLine: ['sometool'], stdout: externalTag }, - { commandLine: ['docker', 'tag', externalTag, '12345.amazonaws.com/repo:ghijkl'] }, - { commandLine: ['docker', 'push', '12345.amazonaws.com/repo:ghijkl'] }, - ); - - await pub.publish(); - - expect(aws.ecrClient).toHaveBeenCalledWith(expect.objectContaining({ - region: 'us-north-50', - assumeRoleArn: 'arn:aws:role', - })); - expectAllSpawns(); }); }); @@ -190,7 +132,7 @@ test('correctly identify Docker directory if path is absolute', async () => { ], }); - const expectAllSpawns = mockSpawn( + mockSpawn( // Only care about the 'build' command line { commandLine: ['docker', 'login'], prefix: true }, { commandLine: ['docker', 'inspect'], exitCode: 1, prefix: true }, @@ -200,7 +142,4 @@ test('correctly identify Docker directory if path is absolute', async () => { ); await pub.publish(); - - expect(true).toBeTruthy(); // Expect no exception, satisfy linter - expectAllSpawns(); }); diff --git a/packages/cdk-assets/test/files.test.ts b/packages/cdk-assets/test/files.test.ts index 42cb8a71c05ad..e8c7247ef7f42 100644 --- a/packages/cdk-assets/test/files.test.ts +++ b/packages/cdk-assets/test/files.test.ts @@ -1,17 +1,10 @@ -jest.mock('child_process'); - import { Manifest } from '@aws-cdk/cloud-assembly-schema'; import * as mockfs from 'mock-fs'; import { AssetManifest, AssetPublishing } from '../lib'; import { mockAws, mockedApiResult, mockUpload } from './mock-aws'; -import { mockSpawn } from './mock-child_process'; - -const ABS_PATH = '/simple/cdk.out/some_external_file'; let aws: ReturnType; beforeEach(() => { - jest.resetAllMocks(); - mockfs({ '/simple/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), @@ -32,7 +25,6 @@ beforeEach(() => { }, }), '/simple/cdk.out/some_file': 'FILE_CONTENTS', - [ABS_PATH]: 'FILE_CONTENTS', '/abs/cdk.out/assets.json': JSON.stringify({ version: Manifest.version(), files: { @@ -44,25 +36,7 @@ beforeEach(() => { theDestination: { region: 'us-north-50', assumeRoleArn: 'arn:aws:role', - bucketName: 'some_other_bucket', - objectKey: 'some_key', - }, - }, - }, - }, - }), - '/external/cdk.out/assets.json': JSON.stringify({ - version: Manifest.version(), - files: { - externalAsset: { - source: { - executable: ['sometool'], - }, - destinations: { - theDestination: { - region: 'us-north-50', - assumeRoleArn: 'arn:aws:role', - bucketName: 'some_external_bucket', + bucketName: 'some_bucket', objectKey: 'some_key', }, }, @@ -153,40 +127,4 @@ test('correctly identify asset path if path is absolute', async () => { aws.mockS3.upload = mockUpload('FILE_CONTENTS'); await pub.publish(); - - expect(true).toBeTruthy(); // No exception, satisfy linter -}); - -describe('external assets', () => { - let pub: AssetPublishing; - beforeEach(() => { - pub = new AssetPublishing(AssetManifest.fromPath('/external/cdk.out'), { aws }); - }); - - test('do nothing if file exists already', async () => { - aws.mockS3.listObjectsV2 = mockedApiResult({ Contents: [{ Key: 'some_key' }] }); - - await pub.publish(); - - expect(aws.mockS3.listObjectsV2).toHaveBeenCalledWith(expect.objectContaining({ - Bucket: 'some_external_bucket', - Prefix: 'some_key', - MaxKeys: 1, - })); - }); - - test('upload external asset correctly', async () => { - aws.mockS3.listObjectsV2 = mockedApiResult({ Contents: undefined }); - aws.mockS3.upload = mockUpload('FILE_CONTENTS'); - const expectAllSpawns = mockSpawn({ commandLine: ['sometool'], stdout: ABS_PATH }); - - await pub.publish(); - - expect(aws.s3Client).toHaveBeenCalledWith(expect.objectContaining({ - region: 'us-north-50', - assumeRoleArn: 'arn:aws:role', - })); - - expectAllSpawns(); - }); }); diff --git a/packages/cdk-assets/test/mock-child_process.ts b/packages/cdk-assets/test/mock-child_process.ts index 2cb513e24fff7..da0fd27d08fe6 100644 --- a/packages/cdk-assets/test/mock-child_process.ts +++ b/packages/cdk-assets/test/mock-child_process.ts @@ -17,7 +17,7 @@ export interface Invocation { prefix?: boolean; } -export function mockSpawn(...invocations: Invocation[]): () => void { +export function mockSpawn(...invocations: Invocation[]) { let mock = (child_process.spawn as any); for (const _invocation of invocations) { const invocation = _invocation; // Mirror into variable for closure @@ -42,7 +42,7 @@ export function mockSpawn(...invocations: Invocation[]): () => void { child.stderr = new events.EventEmitter(); if (invocation.stdout) { - mockEmit(child.stdout, 'data', Buffer.from(invocation.stdout)); + mockEmit(child.stdout, 'data', invocation.stdout); } mockEmit(child, 'close', invocation.exitCode ?? 0); @@ -53,10 +53,6 @@ export function mockSpawn(...invocations: Invocation[]): () => void { mock.mockImplementation((binary: string, args: string[], _options: any) => { throw new Error(`Did not expect call of ${JSON.stringify([binary, ...args])}`); }); - - return () => { - expect(mock).toHaveBeenCalledTimes(invocations.length); - }; } /** diff --git a/packages/decdk/package.json b/packages/decdk/package.json index 27ba890f8f0a9..a22066a22e5e4 100644 --- a/packages/decdk/package.json +++ b/packages/decdk/package.json @@ -46,7 +46,6 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", - "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscaling-common": "0.0.0", "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", @@ -80,7 +79,6 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", - "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -143,7 +141,6 @@ "@aws-cdk/aws-logs-destinations": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", - "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 27803e34806af..b0efee31b2f60 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -119,7 +119,6 @@ "@aws-cdk/aws-appstream": "0.0.0", "@aws-cdk/aws-appsync": "0.0.0", "@aws-cdk/aws-athena": "0.0.0", - "@aws-cdk/aws-auditmanager": "0.0.0", "@aws-cdk/aws-autoscaling": "0.0.0", "@aws-cdk/aws-autoscaling-common": "0.0.0", "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", @@ -153,7 +152,6 @@ "@aws-cdk/aws-config": "0.0.0", "@aws-cdk/aws-databrew": "0.0.0", "@aws-cdk/aws-datapipeline": "0.0.0", - "@aws-cdk/aws-datasync": "0.0.0", "@aws-cdk/aws-dax": "0.0.0", "@aws-cdk/aws-detective": "0.0.0", "@aws-cdk/aws-devopsguru": "0.0.0", @@ -216,7 +214,6 @@ "@aws-cdk/aws-logs-destinations": "0.0.0", "@aws-cdk/aws-macie": "0.0.0", "@aws-cdk/aws-managedblockchain": "0.0.0", - "@aws-cdk/aws-mediaconnect": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", "@aws-cdk/aws-mediapackage": "0.0.0", @@ -293,7 +290,7 @@ }, "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "keywords": [ "aws", diff --git a/scripts/check-api-compatibility.sh b/scripts/check-api-compatibility.sh index 8c260d248f02e..e49d684e8b98c 100755 --- a/scripts/check-api-compatibility.sh +++ b/scripts/check-api-compatibility.sh @@ -55,22 +55,15 @@ if ! ${SKIP_DOWNLOAD:-false}; then existing_names=$(echo "$jsii_package_dirs" | xargs -n1 -P4 -I {} bash -c 'dirs_to_existing_names "$@"' _ {}) echo " Done." >&2 - version=$(node -p 'require("./scripts/resolve-version.js").version') - echo "Current version is $version." - - if ! package_exists_on_npm aws-cdk $version; then - # occurs within a release PR where the version is bumped but is not yet published to npm. - if [ -z ${NPM_DISTTAG:-} ]; then - echo "env variable NPM_DISTTAG is not set. Failing." - exit 1 - fi - echo "Current version not published. Setting version to NPM_DISTTAG (${NPM_DISTTAG})." - version=$NPM_DISTTAG + current_version=$(node -p 'require("./lerna.json").version') + echo "Current version in lerna.json is $current_version" + if ! ${DOWNLOAD_LATEST:-false} && package_exists_on_npm aws-cdk $current_version; then + echo "Using package version ${current_version} as baseline" + existing_names=$(echo "$existing_names" | sed -e "s/$/@$current_version/") + else + echo "However, using the latest version from NPM as the baseline" fi - echo "Using version '$version' as the baseline..." - existing_names=$(echo "$existing_names" | sed -e "s/$/@$version/") - rm -rf $tmpdir mkdir -p $tmpdir diff --git a/tools/cdk-build-tools/bin/cdk-build.ts b/tools/cdk-build-tools/bin/cdk-build.ts index b4a5b38542292..d745de50aa2be 100644 --- a/tools/cdk-build-tools/bin/cdk-build.ts +++ b/tools/cdk-build-tools/bin/cdk-build.ts @@ -26,14 +26,9 @@ async function main() { }) .option('gen', { type: 'boolean', - desc: 'Execute gen script', + desc: 'execute gen script', default: true, }) - .option('fix', { - type: 'boolean', - desc: 'Fix linter errors', - default: false, - }) .argv; const options = cdkBuildOptions(); @@ -51,7 +46,7 @@ async function main() { const overrides: CompilerOverrides = { eslint: args.eslint, jsii: args.jsii, tsc: args.tsc }; await compileCurrentPackage(options, timers, overrides); - await lintCurrentPackage(options, { ...overrides, fix: args.fix }); + await lintCurrentPackage(options, overrides); if (options.post) { await shell(options.post, { timers, env }); diff --git a/tools/cdk-build-tools/config/eslintrc.js b/tools/cdk-build-tools/config/eslintrc.js index 446af2c2e2ff4..63608e69161a3 100644 --- a/tools/cdk-build-tools/config/eslintrc.js +++ b/tools/cdk-build-tools/config/eslintrc.js @@ -42,7 +42,6 @@ module.exports = { ignorePatterns: ['*.js', '*.d.ts', 'node_modules/', '*.generated.ts'], rules: { 'cdk/no-core-construct': [ 'error' ], - 'cdk/no-qualified-construct': [ 'error' ], // Require use of the `import { foo } from 'bar';` form instead of `import foo = require('bar');` '@typescript-eslint/no-require-imports': ['error'], '@typescript-eslint/indent': ['error', 2], diff --git a/tools/cdk-build-tools/package.json b/tools/cdk-build-tools/package.json index e43def68cf890..226ba63a75b81 100644 --- a/tools/cdk-build-tools/package.json +++ b/tools/cdk-build-tools/package.json @@ -67,7 +67,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "ubergen": { "exclude": true diff --git a/tools/cdk-integ-tools/package.json b/tools/cdk-integ-tools/package.json index f5ce70a844cf5..8685d8435f8dc 100644 --- a/tools/cdk-integ-tools/package.json +++ b/tools/cdk-integ-tools/package.json @@ -48,7 +48,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "peerDependencies": { "@aws-cdk/assert": "0.0.0" diff --git a/tools/cfn2ts/package.json b/tools/cfn2ts/package.json index f808cfaabe092..785d1a52c18b0 100644 --- a/tools/cfn2ts/package.json +++ b/tools/cfn2ts/package.json @@ -49,7 +49,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "ubergen": { "exclude": true diff --git a/tools/eslint-plugin-cdk/lib/index.ts b/tools/eslint-plugin-cdk/lib/index.ts index 94eef4dd8f57f..aae510df35d54 100644 --- a/tools/eslint-plugin-cdk/lib/index.ts +++ b/tools/eslint-plugin-cdk/lib/index.ts @@ -1,4 +1,3 @@ export const rules = { 'no-core-construct': require('./rules/no-core-construct'), - 'no-qualified-construct': require('./rules/no-qualified-construct'), }; diff --git a/tools/eslint-plugin-cdk/lib/private/import-cache.ts b/tools/eslint-plugin-cdk/lib/private/import-cache.ts index 04325645fdb5d..7d78b2a421e93 100644 --- a/tools/eslint-plugin-cdk/lib/private/import-cache.ts +++ b/tools/eslint-plugin-cdk/lib/private/import-cache.ts @@ -29,10 +29,6 @@ export class ImportCache { public find(key: ImportCacheKey): ImportCacheRecord | undefined { return this.records[hashed(key)]; } - - public get imports(): ImportCacheRecord[] { - return Object.values(this.records); - } } function hashed(key: {}): string { diff --git a/tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts b/tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts deleted file mode 100644 index eb8a418cab58e..0000000000000 --- a/tools/eslint-plugin-cdk/lib/rules/no-qualified-construct.ts +++ /dev/null @@ -1,134 +0,0 @@ -// -// This rule ensures that the `@aws-cdk/core.Construct` class is always -// referenced without a namespace qualifier (`Construct` instead of -// `xxx.Construct`). The fixer will automatically add an `import` statement -// separated from the main import group to reduce the chance for merge conflicts -// with v2-main. -// -// If there is already an import of `constructs.Construct` under the name -// `Construct`, we will import `core.Construct` as the alias `CoreConstruct` -// instead. -// - -import { AST, Rule } from 'eslint'; -import { ImportCache } from '../private/import-cache'; - -const importCache = new ImportCache(); - -export function create(context: Rule.RuleContext): Rule.NodeListener { - // skip core - if (context.getFilename().includes('@aws-cdk/core')) { - return {}; - } - - return { - // collect all "import" statements. we will later use them to determine - // exactly how to import `core.Construct`. - ImportDeclaration: node => { - for (const s of node.specifiers) { - const typeName = () => { - switch (s.type) { - case 'ImportSpecifier': return s.imported.name; - case 'ImportDefaultSpecifier': return s.local.name; - case 'ImportNamespaceSpecifier': return s.local.name; - } - }; - - importCache.record({ - fileName: context.getFilename(), - typeName: typeName(), - importNode: node, - localName: `${node.source.value}.${s.local.name}` - }); - } - }, - - // this captures `class X extends xxx.Construct` - ClassDeclaration: node => { - if (node.superClass?.type === 'MemberExpression') { - const sc = node.superClass; - // const qualifier = sc.object.type === 'Identifier' ? sc.object.name : undefined; - const baseClass = sc.property.type === 'Identifier' ? sc.property.name : undefined; - if (baseClass === 'Construct' && sc.range) { - report(context, node, sc.range); - } - } - }, - - // this captures using `xxx.Construct` as an identifier - Identifier: node => { - const typeAnnotation = (node as any).typeAnnotation?.typeAnnotation; - const type = typeAnnotation?.typeName; - if (type?.type === 'TSQualifiedName' && type?.right.name === 'Construct' && type?.left.name !== 'constructs') { - report(context, node, typeAnnotation.range); - } - }, - } -} - -/** - * Reports an error indicating that we found `xxx.Construct` usage, and apply - * the appropriate fix. - * @param context Rule context - * @param node Rule node (for the report) - * @param replaceRange Text range to replace - */ -function report(context: Rule.RuleContext, node: Rule.Node, replaceRange: AST.Range) { - context.report({ - message: 'To avoid merge conflicts with the v2-main branch, the "Construct" type must be referenced without a qualifier (e.g. "Construct" instead of "CoreConstruct")', - node, - fix: fixer => { - const imports = importCache.imports.filter(x => x.fileName === context.getFilename()); - const findImport = (x: string) => imports.find(i => i.localName === x); - - const coreConstruct = findImport('@aws-cdk/core.Construct') - const coreCoreConstruct = findImport('@aws-cdk/core.CoreConstruct'); - const constructsConstruct = findImport('constructs.Construct'); - - // determines whether we will replace with `Construct` or `CoreConstruct` - // based on whether this file already imported `constructs.Construct`. - let replaceBy: string | undefined; - - // determines whether an "import" statement should be added and it's - // contents. - let addImport: string | undefined; - - if (coreConstruct) { - // we already import `core.Construct` as `Construct` - replaceBy = 'Construct'; - } else if (coreCoreConstruct) { - // we already import `core.Construct` as `CoreConstruct` - replaceBy = 'CoreConstruct' - } else if (constructsConstruct) { - // we import `constructs.Construct`, so import and replace - // `core.Construct` with `CoreConstruct` - replaceBy = 'CoreConstruct'; - addImport = `import { Construct as ${replaceBy} } from '@aws-cdk/core';`; - } else { - // import `core.Construct` as `Construct` and replace - replaceBy = 'Construct'; - addImport = `import { ${replaceBy} } from '@aws-cdk/core';`; - } - - const fixes: Rule.Fix[] = [ - fixer.replaceTextRange(replaceRange, replaceBy) - ]; - - if (addImport) { - // find the last import statement in the file and add our import immediately after - const lastImport = imports[imports.length - 1]; - if (lastImport) { - fixes.push(fixer.insertTextAfter(lastImport.importNode, [ - "", - "", - "// keep this import separate from other imports to reduce chance for merge conflicts with v2-main", - "// eslint-disable-next-line no-duplicate-imports, import/order", - addImport, - ].join('\n'))); - } - } - - return fixes; - }, - }); -} \ No newline at end of file diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index 87300515e617d..0bded88c313ef 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -284,32 +284,8 @@ export class MaturitySetting extends ValidationRule { maturity = 'deprecated'; } - const packageLevels = this.determinePackageLevels(pkg); - - const hasL1s = packageLevels.some(level => level === 'l1'); - const hasL2s = packageLevels.some(level => level === 'l2'); - if (hasL2s) { - // validate that a package that contains L2s does not declare a 'cfn-only' maturity - if (maturity === 'cfn-only') { - pkg.report({ - ruleName: this.name, - message: "Package that contains any L2s cannot declare a 'cfn-only' maturity", - fix: () => pkg.json.maturity = 'experimental', - }); - } - } else if (hasL1s) { - // validate that a package that contains only L1s declares a 'cfn-only' maturity - if (maturity !== 'cfn-only') { - pkg.report({ - ruleName: this.name, - message: "Package that contains only L1s cannot declare a maturity other than 'cfn-only'", - fix: () => pkg.json.maturity = 'cfn-only', - }); - } - } - if (maturity) { - this.validateReadmeHasBanner(pkg, maturity, packageLevels); + this.validateReadmeHasBanner(pkg, maturity, this.determinePackageLevels(pkg)); } } @@ -366,9 +342,7 @@ export class MaturitySetting extends ValidationRule { // to see if this package has L1s. const hasL1 = !!pkg.json['cdk-build']?.cloudformation; - const libFiles = glob.sync('lib/**/*.ts', { - ignore: 'lib/**/*.d.ts', // ignore the generated TS declaration files - }); + const libFiles = glob.sync('lib/*.ts'); const hasL2 = libFiles.some(f => !f.endsWith('.generated.ts') && !f.endsWith('index.ts')); return [ @@ -1105,11 +1079,7 @@ export class MustHaveNodeEnginesDeclaration extends ValidationRule { public readonly name = 'package-info/engines'; public validate(pkg: PackageJson): void { - if (cdkMajorVersion() === 2) { - expectJSON(this.name, pkg, 'engines.node', '>= 14.15.0'); - } else { - expectJSON(this.name, pkg, 'engines.node', '>= 10.13.0 <13 || >=13.7.0'); - } + expectJSON(this.name, pkg, 'engines.node', '>= 10.13.0 <13 || >=13.7.0'); } } @@ -1541,7 +1511,9 @@ export class UbergenPackageVisibility extends ValidationRule { ]; public validate(pkg: PackageJson): void { - if (cdkMajorVersion() === 2) { + // eslint-disable-next-line @typescript-eslint/no-require-imports + const releaseJson = require(`${__dirname}/../../../release.json`); + if (releaseJson.majorVersion === 2) { // Only packages in the publicPackages list should be "public". Everything else should be private. if (this.publicPackages.includes(pkg.json.name) && pkg.json.private === true) { pkg.report({ @@ -1644,9 +1616,3 @@ function toRegExp(str: string): RegExp { function readBannerFile(file: string): string { return fs.readFileSync(path.join(__dirname, 'banners', file), { encoding: 'utf-8' }).trim(); } - -function cdkMajorVersion() { - // eslint-disable-next-line @typescript-eslint/no-require-imports - const releaseJson = require(`${__dirname}/../../../release.json`); - return releaseJson.majorVersion as number; -} diff --git a/tools/pkgtools/package.json b/tools/pkgtools/package.json index f9130019bdc41..d5255e81d465d 100644 --- a/tools/pkgtools/package.json +++ b/tools/pkgtools/package.json @@ -44,7 +44,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "ubergen": { "exclude": true diff --git a/tools/ubergen/package.json b/tools/ubergen/package.json index 77bb68c7a3d0b..483d7ecfa4dfa 100644 --- a/tools/ubergen/package.json +++ b/tools/ubergen/package.json @@ -41,7 +41,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "ubergen": { "exclude": true diff --git a/tools/yarn-cling/package.json b/tools/yarn-cling/package.json index 02516633ef5f5..aefba13ff8ee0 100644 --- a/tools/yarn-cling/package.json +++ b/tools/yarn-cling/package.json @@ -54,7 +54,7 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 14.15.0" + "node": ">= 10.13.0 <13 || >=13.7.0" }, "ubergen": { "exclude": true diff --git a/version.v1.json b/version.v1.json index e9e06b8086b92..5d4e6a68aecb5 100644 --- a/version.v1.json +++ b/version.v1.json @@ -1,3 +1,3 @@ { - "version": "1.85.0" + "version": "1.83.0" } diff --git a/yarn.lock b/yarn.lock index 374de3ff6b642..285e77f7f0705 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2309,10 +2309,10 @@ aws-sdk-mock@^5.1.0: sinon "^9.0.1" traverse "^0.6.6" -aws-sdk@^2.637.0, aws-sdk@^2.828.0: - version "2.828.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.828.0.tgz#6aa599c3582f219568f41fb287eb65753e4a9234" - integrity sha512-JoDujGdncSIF9ka+XFZjop/7G+fNGucwPwYj7OHYMmFIOV5p7YmqomdbVmH/vIzd988YZz8oLOinWc4jM6vvhg== +aws-sdk@^2.637.0, aws-sdk@^2.824.0: + version "2.824.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.824.0.tgz#a67747d4d0b53d09c6c121e93f44d8f6e76fc44b" + integrity sha512-9KNRQBkIMPn+6DWb4gR+RzqTMNyGLEwOgXbE4dDehOIAflfLnv3IFwLnzrhxJnleB4guYrILIsBroJFBzjiekg== dependencies: buffer "4.9.2" events "1.1.1" @@ -3518,11 +3518,6 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decamelize@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.0.tgz#88358157b010ef133febfd27c18994bd80c6215b" - integrity sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w== - decimal.js@^10.2.0: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" @@ -3948,10 +3943,10 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -esbuild@^0.8.32: - version "0.8.32" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.32.tgz#d3d679ea417925f7afaab37555e52070df317355" - integrity sha512-5IzQapMW/wFy5oxziHCJzawk26K3xeyrIAQPnPN3c0Q84hqRw6IfGDGfGWOdJNw5tAx77yvwqZ4r1QMpo6emJA== +esbuild@^0.8.31: + version "0.8.31" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.31.tgz#c21e7adb3ad283c951a53de7ad64a5ae2df2ed34" + integrity sha512-7EIU0VdUxltwivjVezX3HgeNzeIVR1snkrAo57WdUnuBMykdzin5rTrxwCDM6xQqj0RL/HjOEm3wFr2ijHKeaA== escalade@^3.1.1: version "3.1.1" @@ -9928,10 +9923,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript-json-schema@^0.47.0: - version "0.47.0" - resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.47.0.tgz#84dde5460b127c6774da81bf70b23c7e04857b13" - integrity sha512-A6NVwSOTSsNDHfaqDcDeKwwyXEeKqBHoAr20jcetnYj4e8C6zVFofAVhAuwsBXCRYiWEE/lyHrcxpsSpbIk0Mg== +typescript-json-schema@^0.46.0: + version "0.46.0" + resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.46.0.tgz#45204ba80915db3608d01de5b839c470c053e716" + integrity sha512-9ktZr69Yh6iGTWVa3Ln0J+H6RyAoED9e68tz8k+0lIiCR+UZLvpvs9PqsSsE7aZ7Olvg0p161ls7JHldlA0Ocg== dependencies: "@types/json-schema" "^7.0.6" glob "^7.1.6"