From 55e9576810d8cb3115b7bd52d704ffe793a3dd27 Mon Sep 17 00:00:00 2001 From: Thorsten Hoeger Date: Tue, 10 Nov 2020 10:30:37 +0100 Subject: [PATCH 01/25] feat(cloudwatch): add methods for lazy addition of graph metrics (#11380) Resolves #11305 ---- *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-cloudwatch/README.md | 2 ++ packages/@aws-cdk/aws-cloudwatch/lib/graph.ts | 26 ++++++++++++++++- .../aws-cloudwatch/test/test.graphs.ts | 29 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-cloudwatch/README.md b/packages/@aws-cdk/aws-cloudwatch/README.md index 85d62de4f119c..e1a120a085b4a 100644 --- a/packages/@aws-cdk/aws-cloudwatch/README.md +++ b/packages/@aws-cdk/aws-cloudwatch/README.md @@ -251,6 +251,8 @@ dashboard.addWidgets(new GraphWidget({ })); ``` +Using the methods `addLeftMetric()` and `addRightMetric()` you can add metrics to a graph widget later on. + Graph widgets can also display annotations attached to the left or the right y-axis. ```ts diff --git a/packages/@aws-cdk/aws-cloudwatch/lib/graph.ts b/packages/@aws-cdk/aws-cloudwatch/lib/graph.ts index 51cc7690785bf..dee05d1245f10 100644 --- a/packages/@aws-cdk/aws-cloudwatch/lib/graph.ts +++ b/packages/@aws-cdk/aws-cloudwatch/lib/graph.ts @@ -219,11 +219,35 @@ export interface GraphWidgetProps extends MetricWidgetProps { * A dashboard widget that displays metrics */ export class GraphWidget extends ConcreteWidget { + private readonly props: GraphWidgetProps; + private readonly leftMetrics: IMetric[]; + private readonly rightMetrics: IMetric[]; + constructor(props: GraphWidgetProps) { super(props.width || 6, props.height || 6); this.props = props; + this.leftMetrics = props.left ?? []; + this.rightMetrics = props.right ?? []; + } + + /** + * Add another metric to the left Y axis of the GraphWidget + * + * @param metric the metric to add + */ + public addLeftMetric(metric: IMetric) { + this.leftMetrics.push(metric); + } + + /** + * Add another metric to the right Y axis of the GraphWidget + * + * @param metric the metric to add + */ + public addRightMetric(metric: IMetric) { + this.rightMetrics.push(metric); } public toJson(): any[] { @@ -232,7 +256,7 @@ export class GraphWidget extends ConcreteWidget { ...(this.props.rightAnnotations || []).map(mapAnnotation('right')), ]; - const metrics = allMetricsGraphJson(this.props.left || [], this.props.right || []); + const metrics = allMetricsGraphJson(this.leftMetrics, this.rightMetrics); return [{ type: 'metric', width: this.width, diff --git a/packages/@aws-cdk/aws-cloudwatch/test/test.graphs.ts b/packages/@aws-cdk/aws-cloudwatch/test/test.graphs.ts index 2ca9593581f9f..5aa11c460c1b2 100644 --- a/packages/@aws-cdk/aws-cloudwatch/test/test.graphs.ts +++ b/packages/@aws-cdk/aws-cloudwatch/test/test.graphs.ts @@ -61,6 +61,35 @@ export = { test.done(); }, + 'add metrics to graphs on either axis lazily'(test: Test) { + // WHEN + const stack = new Stack(); + const widget = new GraphWidget({ + title: 'My fancy graph', + }); + widget.addLeftMetric(new Metric({ namespace: 'CDK', metricName: 'Test' })); + widget.addRightMetric(new Metric({ namespace: 'CDK', metricName: 'Tast' })); + + // THEN + test.deepEqual(stack.resolve(widget.toJson()), [{ + type: 'metric', + width: 6, + height: 6, + properties: { + view: 'timeSeries', + title: 'My fancy graph', + region: { Ref: 'AWS::Region' }, + metrics: [ + ['CDK', 'Test'], + ['CDK', 'Tast', { yAxis: 'right' }], + ], + yAxis: {}, + }, + }]); + + test.done(); + }, + 'label and color are respected in constructor'(test: Test) { // WHEN const stack = new Stack(); From 32c164c4aa498b9bce03583f76cc21c7257a48ef Mon Sep 17 00:00:00 2001 From: adriantaut Date: Tue, 10 Nov 2020 13:11:11 +0200 Subject: [PATCH 02/25] feat(pipelines): room for extra sequential intermediary actions in CdkStage addApplication() (#11376) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently there is no way of reordering stages/actions once they are created. Getting to the Prepare and Execute change set actions while adding an application stage, we identified a use case within our company that needs one or more intermediary sequential actions before actually executing the change set. Moreover, I can imagine there can be plenty of use cases with similar requirements of having certain actions to fulfil between the Prepare and actual Execution of the Change Sets. To resolve the problem, I suggest extending the AddStageOptions interface with an optional property representing the number of intermediary actions you need room for. Closes https://github.com/aws/aws-cdk/issues/11333 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/pipelines/README.md | 10 ++++++ packages/@aws-cdk/pipelines/lib/stage.ts | 14 +++++++-- .../pipelines/test/stack-ordering.test.ts | 31 +++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/pipelines/README.md b/packages/@aws-cdk/pipelines/README.md index 238fa51dbc710..42b0a435242e1 100644 --- a/packages/@aws-cdk/pipelines/README.md +++ b/packages/@aws-cdk/pipelines/README.md @@ -341,6 +341,16 @@ testingStage.addApplication(new MyApplication2(this, 'MyApp2', { })); ``` +Even more, adding a manual approval action or reserving space for some extra sequential actions +between 'Prepare' and 'Execute' ChangeSet actions is possible. + +```ts + pipeline.addApplicationStage(new MyApplication(this, 'Production'), { + manualApprovals: true, + extraRunOrderSpace: 1, + }); +``` + ## Adding validations to the pipeline You can add any type of CodePipeline Action to the pipeline in order to validate diff --git a/packages/@aws-cdk/pipelines/lib/stage.ts b/packages/@aws-cdk/pipelines/lib/stage.ts index 3f93c28808075..c7b090b3f8d02 100644 --- a/packages/@aws-cdk/pipelines/lib/stage.ts +++ b/packages/@aws-cdk/pipelines/lib/stage.ts @@ -76,6 +76,7 @@ export class CdkStage extends CoreConstruct { */ public addApplication(appStage: Stage, options: AddStageOptions = {}) { const asm = appStage.synth(); + const extraRunOrderSpace = options.extraRunOrderSpace ?? 0; if (asm.stacks.length === 0) { // If we don't check here, a more puzzling "stage contains no actions" @@ -88,8 +89,8 @@ export class CdkStage extends CoreConstruct { stack => stack.dependencies.map(d => d.id)); for (const stacks of sortedTranches) { - const runOrder = this.nextSequentialRunOrder(2); // We need 2 actions - let executeRunOrder = runOrder + 1; + const runOrder = this.nextSequentialRunOrder(extraRunOrderSpace + 2); // 2 actions for Prepare/Execute ChangeSet + let executeRunOrder = runOrder + extraRunOrderSpace + 1; // If we need to insert a manual approval action, then what's the executeRunOrder // now is where we add a manual approval step, and we allocate 1 more runOrder @@ -371,6 +372,15 @@ export interface AddStageOptions { * @default false */ readonly manualApprovals?: boolean; + /** + * Add room for extra actions + * + * You can use this to make extra room in the runOrder sequence between the + * changeset 'prepare' and 'execute' actions and insert your own actions there. + * + * @default 0 + */ + readonly extraRunOrderSpace?: number; } /** diff --git a/packages/@aws-cdk/pipelines/test/stack-ordering.test.ts b/packages/@aws-cdk/pipelines/test/stack-ordering.test.ts index ddd38e7a3a9c2..fcfede261208a 100644 --- a/packages/@aws-cdk/pipelines/test/stack-ordering.test.ts +++ b/packages/@aws-cdk/pipelines/test/stack-ordering.test.ts @@ -78,6 +78,37 @@ test('manual approval is inserted in correct location', () => { }); }); +test('extra space for sequential intermediary actions is reserved', () => { + // WHEN + pipeline.addApplicationStage(new TwoStackApp(app, 'MyApp'), { + extraRunOrderSpace: 1, + }); + + // THEN + expect(pipelineStack).toHaveResourceLike('AWS::CodePipeline::Pipeline', { + Stages: arrayWith({ + Name: 'MyApp', + Actions: sortedByRunOrder([ + objectLike({ + Name: 'Stack1.Prepare', + RunOrder: 1, + }), + objectLike({ + Name: 'Stack1.Deploy', + RunOrder: 3, + }), + objectLike({ + Name: 'Stack2.Prepare', + RunOrder: 4, + }), + objectLike({ + Name: 'Stack2.Deploy', + RunOrder: 6, + }), + ]), + }), + }); +}); class TwoStackApp extends Stage { constructor(scope: Construct, id: string, props?: StageProps) { From cdb9942bebc60abf98a74c6f9071e3527f0f01e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Israel=20Pe=C3=B1a?= Date: Tue, 10 Nov 2020 03:41:02 -0800 Subject: [PATCH 03/25] feat(core): natively support .dockerignore (#10922) Patterns in `.dockerignore` used to be interpreted as globs, which has different behavior from how `.dockerignore` is supposed to be interpreted. Specifically it was hard to properly ignore whole directories at once (such as a large `node_modules`). This PR adds an `ignoreMode` flag which controls how the ignore patterns should be interpreted. The choices are: * `IgnoreMode.GLOB` - interpret as before * `IgnoreMode.GIT` - interpret as in `.gitignore` * `IgnoreMode.DOCKER` - interpret as in `.dockerignore` Users might have dependencies on the current behavior, which is why the default `ignoreMode` depends on a feature flag: `@aws-cdk/aws-ecr-assets:dockerIgnoreSupport` (which is set to `true` for new projects) enables the new, correct Docker-ignore behavior by default. ---- Closes #10921 *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- package.json | 12 + packages/@aws-cdk/assets/lib/fs/options.ts | 9 + packages/@aws-cdk/assets/lib/staging.ts | 1 + .../test/integ.docker-asset.lit.expected.json | 4 +- packages/@aws-cdk/aws-ecr-assets/.gitignore | 5 +- packages/@aws-cdk/aws-ecr-assets/NOTICE | 2 +- packages/@aws-cdk/aws-ecr-assets/README.md | 15 ++ .../aws-ecr-assets/lib/image-asset.ts | 27 ++- .../aws-ecr-assets/test/image-asset.test.ts | 148 ++++++------ .../test/integ.assets-docker.expected.json | 4 +- .../test/integ.assets-docker.ts | 6 +- .../integ.nested-stacks-docker.expected.json | 20 +- .../test/integ.nested-stacks-docker.ts | 6 +- .../test/whitelisted-image/.dockerignore | 4 + .../test/whitelisted-image/Dockerfile | 5 + .../test/whitelisted-image/foobar.txt | 0 .../test/whitelisted-image/index.py | 33 +++ .../test/whitelisted-image/node_modules/one | 0 .../node_modules/some_dep/file | 0 .../whitelisted-image/subdirectory/baz.txt | 0 .../fargate/integ.asset-image.expected.json | 4 +- ...g.scheduled-fargate-task.lit.expected.json | 4 +- .../test/ec2/test.ec2-task-definition.ts | 11 +- .../aws-ecs/test/test.container-definition.ts | 23 +- .../integ.event-ec2-task.lit.expected.json | 4 +- .../integ.event-fargate-task.expected.json | 4 +- .../batch/integ.run-batch-job.expected.json | 4 +- .../test/batch/integ.submit-job.expected.json | 4 +- .../test/ecs/integ.ec2-run-task.expected.json | 4 +- .../test/ecs/integ.ec2-task.expected.json | 4 +- .../ecs/integ.fargate-run-task.expected.json | 4 +- .../test/ecs/integ.fargate-task.expected.json | 4 +- packages/@aws-cdk/core/NOTICE | 50 +++- packages/@aws-cdk/core/lib/asset-staging.ts | 1 + packages/@aws-cdk/core/lib/fs/copy.ts | 8 +- packages/@aws-cdk/core/lib/fs/fingerprint.ts | 17 +- packages/@aws-cdk/core/lib/fs/ignore.ts | 223 ++++++++++++++++++ packages/@aws-cdk/core/lib/fs/index.ts | 1 + packages/@aws-cdk/core/lib/fs/options.ts | 35 +++ packages/@aws-cdk/core/lib/fs/utils.ts | 29 --- packages/@aws-cdk/core/package.json | 8 +- .../@aws-cdk/core/test/fs/fs-ignore.test.ts | 125 ++++++++++ packages/@aws-cdk/core/test/fs/utils.test.ts | 20 -- packages/@aws-cdk/cx-api/lib/features.ts | 14 ++ packages/aws-cdk-lib/package.json | 4 + packages/monocdk/NOTICE | 50 +++- packages/monocdk/package.json | 4 + tools/cdk-integ-tools/lib/integ-helpers.ts | 1 + yarn.lock | 7 +- 49 files changed, 788 insertions(+), 184 deletions(-) create mode 100644 packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/.dockerignore create mode 100644 packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/Dockerfile create mode 100644 packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/foobar.txt create mode 100644 packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/index.py create mode 100644 packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/node_modules/one create mode 100644 packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/node_modules/some_dep/file create mode 100644 packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/subdirectory/baz.txt create mode 100644 packages/@aws-cdk/core/lib/fs/ignore.ts create mode 100644 packages/@aws-cdk/core/test/fs/fs-ignore.test.ts diff --git a/package.json b/package.json index 1caf075cefc9c..d387f40e0394b 100644 --- a/package.json +++ b/package.json @@ -65,18 +65,26 @@ "@aws-cdk/cloud-assembly-schema/jsonschema/**", "@aws-cdk/cloud-assembly-schema/semver", "@aws-cdk/cloud-assembly-schema/semver/**", + "@aws-cdk/core/@balena/dockerignore", + "@aws-cdk/core/@balena/dockerignore/**", "@aws-cdk/core/fs-extra", "@aws-cdk/core/fs-extra/**", + "@aws-cdk/core/ignore", + "@aws-cdk/core/ignore/**", "@aws-cdk/core/minimatch", "@aws-cdk/core/minimatch/**", "@aws-cdk/cx-api/semver", "@aws-cdk/cx-api/semver/**", "@aws-cdk/yaml-cfn/yaml", "@aws-cdk/yaml-cfn/yaml/**", + "aws-cdk-lib/@balena/dockerignore", + "aws-cdk-lib/@balena/dockerignore/**", "aws-cdk-lib/case", "aws-cdk-lib/case/**", "aws-cdk-lib/fs-extra", "aws-cdk-lib/fs-extra/**", + "aws-cdk-lib/ignore", + "aws-cdk-lib/ignore/**", "aws-cdk-lib/jsonschema", "aws-cdk-lib/jsonschema/**", "aws-cdk-lib/minimatch", @@ -87,10 +95,14 @@ "aws-cdk-lib/semver/**", "aws-cdk-lib/yaml", "aws-cdk-lib/yaml/**", + "monocdk/@balena/dockerignore", + "monocdk/@balena/dockerignore/**", "monocdk/case", "monocdk/case/**", "monocdk/fs-extra", "monocdk/fs-extra/**", + "monocdk/ignore", + "monocdk/ignore/**", "monocdk/jsonschema", "monocdk/jsonschema/**", "monocdk/minimatch", diff --git a/packages/@aws-cdk/assets/lib/fs/options.ts b/packages/@aws-cdk/assets/lib/fs/options.ts index 434dd091a7256..3ccc107d3700d 100644 --- a/packages/@aws-cdk/assets/lib/fs/options.ts +++ b/packages/@aws-cdk/assets/lib/fs/options.ts @@ -1,3 +1,4 @@ +import { IgnoreMode } from '@aws-cdk/core'; import { FollowMode } from './follow-mode'; /** @@ -18,6 +19,14 @@ export interface CopyOptions { * @default nothing is excluded */ readonly exclude?: string[]; + + /** + * The ignore behavior to use for exclude patterns. + * + * @default - GLOB for file assets, DOCKER or GLOB for docker assets depending on whether the + * '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport' flag is set. + */ + readonly ignoreMode?: IgnoreMode; } /** diff --git a/packages/@aws-cdk/assets/lib/staging.ts b/packages/@aws-cdk/assets/lib/staging.ts index 87800ae8aa40f..3a441a0219f55 100644 --- a/packages/@aws-cdk/assets/lib/staging.ts +++ b/packages/@aws-cdk/assets/lib/staging.ts @@ -22,6 +22,7 @@ export class Staging extends AssetStaging { super(scope, id, { sourcePath: props.sourcePath, exclude: props.exclude, + ignoreMode: props.ignoreMode, extraHash: props.extraHash, follow: toSymlinkFollow(props.follow), }); diff --git a/packages/@aws-cdk/aws-codebuild/test/integ.docker-asset.lit.expected.json b/packages/@aws-cdk/aws-codebuild/test/integ.docker-asset.lit.expected.json index 64ff7f68d7f8c..043ed7ee5642d 100644 --- a/packages/@aws-cdk/aws-codebuild/test/integ.docker-asset.lit.expected.json +++ b/packages/@aws-cdk/aws-codebuild/test/integ.docker-asset.lit.expected.json @@ -146,7 +146,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:ee9ebbb592f461ed4638ea9ea64fab9fd384fd2f890c4fef981f9938d82419f4" + "/aws-cdk/assets:2564b8c8e3f9e82a6394872a4e555c4d0c06ab6f47b9aca360c22c9ed622487c" ] ] }, @@ -168,4 +168,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-ecr-assets/.gitignore b/packages/@aws-cdk/aws-ecr-assets/.gitignore index cc09865158319..c6e7daac3ab7e 100644 --- a/packages/@aws-cdk/aws-ecr-assets/.gitignore +++ b/packages/@aws-cdk/aws-ecr-assets/.gitignore @@ -17,4 +17,7 @@ nyc.config.js !.eslintrc.js junit.xml -!jest.config.js \ No newline at end of file + +!jest.config.js + +!test/whitelisted-image/node_modules diff --git a/packages/@aws-cdk/aws-ecr-assets/NOTICE b/packages/@aws-cdk/aws-ecr-assets/NOTICE index 7aa28b59a89a0..c760ec779c75e 100644 --- a/packages/@aws-cdk/aws-ecr-assets/NOTICE +++ b/packages/@aws-cdk/aws-ecr-assets/NOTICE @@ -20,4 +20,4 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ----------------- \ No newline at end of file +---------------- diff --git a/packages/@aws-cdk/aws-ecr-assets/README.md b/packages/@aws-cdk/aws-ecr-assets/README.md index c120353a933ca..5334028d15664 100644 --- a/packages/@aws-cdk/aws-ecr-assets/README.md +++ b/packages/@aws-cdk/aws-ecr-assets/README.md @@ -29,6 +29,21 @@ This will instruct the toolkit to build a Docker image from `my-image`, push it to an AWS ECR repository and wire the name of the repository as CloudFormation parameters to your stack. +By default, all files in the given directory will be copied into the docker +*build context*. If there is a large directory that you know you definitely +don't need in the build context you can improve the performance by adding the +names of files and directories to ignore to a file called `.dockerignore`, or +pass them via the `exclude` property. If both are available, the patterns +found in `exclude` are appended to the patterns found in `.dockerignore`. + +The `ignoreMode` property controls how the set of ignore patterns is +interpreted. The recommended setting for Docker image assets is +`IgnoreMode.DOCKER`. If the context flag +`@aws-cdk/aws-ecr-assets:dockerIgnoreSupport` is set to `true` in your +`cdk.json` (this is by default for new projects, but must be set manually for +old projects) then `IgnoreMode.DOCKER` is the default and you don't need to +configure it on the asset itself. + Use `asset.imageUri` to reference the image (it includes both the ECR image URL and tag. diff --git a/packages/@aws-cdk/aws-ecr-assets/lib/image-asset.ts b/packages/@aws-cdk/aws-ecr-assets/lib/image-asset.ts index 93d96360b6ae3..2f6f5ff436baa 100644 --- a/packages/@aws-cdk/aws-ecr-assets/lib/image-asset.ts +++ b/packages/@aws-cdk/aws-ecr-assets/lib/image-asset.ts @@ -2,9 +2,9 @@ import * as fs from 'fs'; import * as path from 'path'; import * as assets from '@aws-cdk/assets'; import * as ecr from '@aws-cdk/aws-ecr'; -import { Annotations, Construct as CoreConstruct, Stack, Token } from '@aws-cdk/core'; +import { Annotations, Construct as CoreConstruct, FeatureFlags, IgnoreMode, Stack, Token } from '@aws-cdk/core'; +import * as cxapi from '@aws-cdk/cx-api'; import { Construct } from 'constructs'; -import * as minimatch from 'minimatch'; /** * Options for DockerImageAsset @@ -97,20 +97,28 @@ export class DockerImageAsset extends CoreConstruct implements assets.IAsset { throw new Error(`Cannot find file at ${file}`); } + const defaultIgnoreMode = FeatureFlags.of(this).isEnabled(cxapi.DOCKER_IGNORE_SUPPORT) + ? IgnoreMode.DOCKER : IgnoreMode.GLOB; + let ignoreMode = props.ignoreMode ?? defaultIgnoreMode; + let exclude: string[] = props.exclude || []; const ignore = path.join(dir, '.dockerignore'); if (fs.existsSync(ignore)) { - exclude = [...exclude, ...fs.readFileSync(ignore).toString().split('\n').filter(e => !!e)]; + const dockerIgnorePatterns = fs.readFileSync(ignore).toString().split('\n').filter(e => !!e); + + exclude = [ + ...dockerIgnorePatterns, + ...exclude, + + // Ensure .dockerignore is whitelisted no matter what. + '!.dockerignore', + ]; } - // make sure the docker file and the dockerignore file end up in the staging area - // see https://github.com/aws/aws-cdk/issues/6004 - exclude = exclude.filter(ignoreExpression => { - return !(minimatch(file, ignoreExpression, { matchBase: true }) || - minimatch(ignore, ignoreExpression, { matchBase: true })); - }); + // Ensure the Dockerfile is whitelisted no matter what. + exclude.push('!' + path.basename(file)); if (props.repositoryName) { Annotations.of(this).addWarning('DockerImageAsset.repositoryName is deprecated. Override "core.Stack.addDockerImageAsset" to control asset locations'); @@ -132,6 +140,7 @@ export class DockerImageAsset extends CoreConstruct implements assets.IAsset { const staging = new assets.Staging(this, 'Staging', { ...props, exclude, + ignoreMode, sourcePath: dir, extraHash: Object.keys(extraHash).length === 0 ? undefined diff --git a/packages/@aws-cdk/aws-ecr-assets/test/image-asset.test.ts b/packages/@aws-cdk/aws-ecr-assets/test/image-asset.test.ts index 27ee1a7eb8abd..7da0621f2aa42 100644 --- a/packages/@aws-cdk/aws-ecr-assets/test/image-asset.test.ts +++ b/packages/@aws-cdk/aws-ecr-assets/test/image-asset.test.ts @@ -3,21 +3,29 @@ import * as path from 'path'; import { expect as ourExpect, haveResource } from '@aws-cdk/assert'; import * as iam from '@aws-cdk/aws-iam'; import * as cxschema from '@aws-cdk/cloud-assembly-schema'; -import { App, DefaultStackSynthesizer, Lazy, LegacyStackSynthesizer, Stack, Stage } from '@aws-cdk/core'; +import { App, DefaultStackSynthesizer, IgnoreMode, Lazy, LegacyStackSynthesizer, Stack, Stage } from '@aws-cdk/core'; import * as cxapi from '@aws-cdk/cx-api'; import { nodeunitShim, Test } from 'nodeunit-shim'; import { DockerImageAsset } from '../lib'; /* eslint-disable quote-props */ -const DEMO_IMAGE_ASSET_HASH = 'baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540'; +const DEMO_IMAGE_ASSET_HASH = 'b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5'; + + +let app: App; +let stack: Stack; +beforeEach(() => { + app = new App({ + context: { + '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport': true, + }, + }); + stack = new Stack(app, 'Stack'); +}); nodeunitShim({ 'test instantiating Asset Image'(test: Test) { - // GIVEN - const app = new App(); - const stack = new Stack(app, 'test-stack'); - // WHEN new DockerImageAsset(stack, 'Image', { directory: path.join(__dirname, 'demo-image'), @@ -30,20 +38,17 @@ nodeunitShim({ test.deepEqual(artifact.assets, [ { repositoryName: 'aws-cdk/assets', - imageTag: 'baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540', - id: 'baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540', + imageTag: 'b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5', + id: 'b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5', packaging: 'container-image', - path: 'asset.baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540', - sourceHash: 'baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540', + path: 'asset.b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5', + sourceHash: 'b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5', }, ]); test.done(); }, 'with build args'(test: Test) { - // GIVEN - const stack = new Stack(); - // WHEN new DockerImageAsset(stack, 'Image', { directory: path.join(__dirname, 'demo-image'), @@ -59,9 +64,6 @@ nodeunitShim({ }, 'with target'(test: Test) { - // GIVEN - const stack = new Stack(); - // WHEN new DockerImageAsset(stack, 'Image', { directory: path.join(__dirname, 'demo-image'), @@ -79,8 +81,6 @@ nodeunitShim({ 'with file'(test: Test) { // GIVEN - const stack = new Stack(); - const directoryPath = path.join(__dirname, 'demo-image-custom-docker-file'); // WHEN new DockerImageAsset(stack, 'Image', { @@ -96,7 +96,6 @@ nodeunitShim({ 'asset.repository.grantPull can be used to grant a principal permissions to use the image'(test: Test) { // GIVEN - const stack = new Stack(); const user = new iam.User(stack, 'MyUser'); const asset = new DockerImageAsset(stack, 'Image', { directory: path.join(__dirname, 'demo-image'), @@ -157,9 +156,6 @@ nodeunitShim({ }, 'fails if the directory does not exist'(test: Test) { - // GIVEN - const stack = new Stack(); - // THEN test.throws(() => { new DockerImageAsset(stack, 'MyAsset', { @@ -170,9 +166,6 @@ nodeunitShim({ }, 'fails if the directory does not contain a Dockerfile'(test: Test) { - // GIVEN - const stack = new Stack(); - // THEN test.throws(() => { new DockerImageAsset(stack, 'Asset', { @@ -183,9 +176,6 @@ nodeunitShim({ }, 'fails if the file does not exist'(test: Test) { - // GIVEN - const stack = new Stack(); - // THEN test.throws(() => { new DockerImageAsset(stack, 'Asset', { @@ -197,9 +187,6 @@ nodeunitShim({ }, 'docker directory is staged if asset staging is enabled'(test: Test) { - const app = new App(); - const stack = new Stack(app, 'stack'); - const image = new DockerImageAsset(stack, 'MyAsset', { directory: path.join(__dirname, 'demo-image'), }); @@ -212,50 +199,45 @@ nodeunitShim({ }, 'docker directory is staged without files specified in .dockerignore'(test: Test) { - const app = new App(); - const stack = new Stack(app, 'stack'); + testDockerDirectoryIsStagedWithoutFilesSpecifiedInDockerignore(test); + }, + 'docker directory is staged without files specified in .dockerignore with IgnoreMode.GLOB'(test: Test) { + testDockerDirectoryIsStagedWithoutFilesSpecifiedInDockerignore(test, IgnoreMode.GLOB); + }, + + 'docker directory is staged with whitelisted files specified in .dockerignore'(test: Test) { const image = new DockerImageAsset(stack, 'MyAsset', { - directory: path.join(__dirname, 'dockerignore-image'), + directory: path.join(__dirname, 'whitelisted-image'), }); const session = app.synth(); - // .dockerignore itself should be included in output to be processed during docker build + // Only the files exempted above should be included. test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, '.dockerignore'))); test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'Dockerfile'))); test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'index.py'))); - test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'foobar.txt'))); + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'foobar.txt'))); test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory'))); test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory', 'baz.txt'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'node_modules'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'node_modules', 'one'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'node_modules', 'some_dep'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'node_modules', 'some_dep', 'file'))); test.done(); }, 'docker directory is staged without files specified in exclude option'(test: Test) { - const app = new App(); - const stack = new Stack(app, 'stack'); - - const image = new DockerImageAsset(stack, 'MyAsset', { - directory: path.join(__dirname, 'dockerignore-image'), - exclude: ['subdirectory'], - }); - - const session = app.synth(); - - test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, '.dockerignore'))); - test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'Dockerfile'))); - test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'index.py'))); - test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'foobar.txt'))); - test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory'))); - test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory', 'baz.txt'))); + testDockerDirectoryIsStagedWithoutFilesSpecifiedInExcludeOption(test); + }, - test.done(); + 'docker directory is staged without files specified in exclude option with IgnoreMode.GLOB'(test: Test) { + testDockerDirectoryIsStagedWithoutFilesSpecifiedInExcludeOption(test, IgnoreMode.GLOB); }, 'fails if using tokens in build args keys or values'(test: Test) { // GIVEN - const stack = new Stack(); const token = Lazy.stringValue({ produce: () => 'foo' }); const expected = /Cannot use tokens in keys or values of "buildArgs" since they are needed before deployment/; @@ -275,7 +257,6 @@ nodeunitShim({ 'fails if using token as repositoryName'(test: Test) { // GIVEN - const stack = new Stack(); const token = Lazy.stringValue({ produce: () => 'foo' }); // THEN @@ -289,7 +270,6 @@ nodeunitShim({ 'docker build options are included in the asset id'(test: Test) { // GIVEN - const stack = new Stack(); const directory = path.join(__dirname, 'demo-image-custom-docker-file'); const asset1 = new DockerImageAsset(stack, 'Asset1', { directory }); @@ -300,20 +280,57 @@ nodeunitShim({ const asset6 = new DockerImageAsset(stack, 'Asset6', { directory, extraHash: 'random-extra' }); const asset7 = new DockerImageAsset(stack, 'Asset7', { directory, repositoryName: 'foo' }); - test.deepEqual(asset1.sourceHash, 'c555ab9f74e32ce24cd04ddeaa4d7b1b11c5740b9873a3f250e03bf73b28ce39'); - test.deepEqual(asset2.sourceHash, '273bd9a95dbe346ad5b116736d44a350e90f57e2b9ba7fd3d334b61d0420f9fd'); - test.deepEqual(asset3.sourceHash, '81a4b3fd058876c7705597500e7259ff436e521580f0bcb503a303dcac7e2a41'); - test.deepEqual(asset4.sourceHash, '10259531feb68a3967d5d25b70ec9a37a6a8e1f5b04083fada3d0a084291a698'); - test.deepEqual(asset5.sourceHash, '30e083bf51483a031759bc7fb35f69345de69fdbc511eec88bd3d1724b5ac0a9'); - test.deepEqual(asset6.sourceHash, '594ae5a5d23367d18468fefca5a4e56ca83b077d1274a1f812f55c8c9ead9eaa'); - test.deepEqual(asset7.sourceHash, 'bc007f81fe1dd0f0bbb24af898eba3f4f15edbff19b7abb3fac928439486d667'); + test.deepEqual(asset1.sourceHash, 'ab01ecd4419f59e1ec0ac9e57a60dbb653be68a29af0223fa8cb24b4b747bc73'); + test.deepEqual(asset2.sourceHash, '7fb12f6148098e3f5c56c788a865d2af689125ead403b795fe6a262ec34384b3'); + test.deepEqual(asset3.sourceHash, 'fc3b6d802ba198ba2ee55079dbef27682bcd1288d5849eb5bbd5cd69038359b3'); + test.deepEqual(asset4.sourceHash, '30439ea6dfeb4ddfd9175097286895c78393ef52a78c68f92db08abc4513cad6'); + test.deepEqual(asset5.sourceHash, '5775170880e26ba31799745241b90d4340c674bb3b1c01d758e416ee3f1c386f'); + test.deepEqual(asset6.sourceHash, 'ba82fd351a4d3e3f5c5d948b9948e7e829badc3da90f97e00bb7724afbeacfd4'); + test.deepEqual(asset7.sourceHash, '26ec194928431cab6ec5af24ea9f01af2cf7b20e361128b07b2a7405d2951f95'); test.done(); }, }); +function testDockerDirectoryIsStagedWithoutFilesSpecifiedInDockerignore(test: Test, ignoreMode?: IgnoreMode) { + const image = new DockerImageAsset(stack, 'MyAsset', { + ignoreMode, + directory: path.join(__dirname, 'dockerignore-image'), + }); + + const session = app.synth(); + + // .dockerignore itself should be included in output to be processed during docker build + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, '.dockerignore'))); + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'Dockerfile'))); + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'index.py'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'foobar.txt'))); + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory'))); + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory', 'baz.txt'))); + + test.done(); +} + +function testDockerDirectoryIsStagedWithoutFilesSpecifiedInExcludeOption(test: Test, ignoreMode?: IgnoreMode) { + const image = new DockerImageAsset(stack, 'MyAsset', { + directory: path.join(__dirname, 'dockerignore-image'), + exclude: ['subdirectory'], + ignoreMode, + }); + + const session = app.synth(); + + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, '.dockerignore'))); + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'Dockerfile'))); + test.ok(fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'index.py'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'foobar.txt'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory'))); + test.ok(!fs.existsSync(path.join(session.directory, `asset.${image.sourceHash}`, 'subdirectory', 'baz.txt'))); + + test.done(); +} + test('nested assemblies share assets: legacy synth edition', () => { // GIVEN - const app = new App(); const stack1 = new Stack(new Stage(app, 'Stage1'), 'Stack', { synthesizer: new LegacyStackSynthesizer() }); const stack2 = new Stack(new Stage(app, 'Stage2'), 'Stack', { synthesizer: new LegacyStackSynthesizer() }); @@ -340,7 +357,6 @@ test('nested assemblies share assets: legacy synth edition', () => { test('nested assemblies share assets: default synth edition', () => { // GIVEN - const app = new App(); const stack1 = new Stack(new Stage(app, 'Stage1'), 'Stack', { synthesizer: new DefaultStackSynthesizer() }); const stack2 = new Stack(new Stage(app, 'Stage2'), 'Stack', { synthesizer: new DefaultStackSynthesizer() }); @@ -368,4 +384,4 @@ function isStackArtifact(x: any): x is cxapi.CloudFormationStackArtifact { function isAssetManifestArtifact(x: any): x is cxapi.AssetManifestArtifact { return x instanceof cxapi.AssetManifestArtifact; -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.expected.json b/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.expected.json index 1b289472b4cc1..ad86ae9cd34da 100644 --- a/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.expected.json +++ b/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.expected.json @@ -70,10 +70,10 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540" + "/aws-cdk/assets:b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5" ] ] } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.ts b/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.ts index 9212e350f8c8c..21161938c786f 100644 --- a/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.ts +++ b/packages/@aws-cdk/aws-ecr-assets/test/integ.assets-docker.ts @@ -3,7 +3,11 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; import * as assets from '../lib'; -const app = new cdk.App(); +const app = new cdk.App({ + context: { + '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport': true, + }, +}); const stack = new cdk.Stack(app, 'integ-assets-docker'); const asset = new assets.DockerImageAsset(stack, 'DockerImage', { diff --git a/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.expected.json b/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.expected.json index 0a189b5e6d229..779ad22187591 100644 --- a/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.expected.json +++ b/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.expected.json @@ -17,7 +17,7 @@ }, "/", { - "Ref": "AssetParameters3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775S3Bucket6CE4FC69" + "Ref": "AssetParameters41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593bS3BucketFB15A731" }, "/", { @@ -27,7 +27,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775S3VersionKey5FE1DA58" + "Ref": "AssetParameters41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593bS3VersionKeyF38F9C9A" } ] } @@ -40,7 +40,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775S3VersionKey5FE1DA58" + "Ref": "AssetParameters41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593bS3VersionKeyF38F9C9A" } ] } @@ -53,17 +53,17 @@ } }, "Parameters": { - "AssetParameters3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775S3Bucket6CE4FC69": { + "AssetParameters41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593bS3BucketFB15A731": { "Type": "String", - "Description": "S3 bucket for asset \"3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775\"" + "Description": "S3 bucket for asset \"41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593b\"" }, - "AssetParameters3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775S3VersionKey5FE1DA58": { + "AssetParameters41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593bS3VersionKeyF38F9C9A": { "Type": "String", - "Description": "S3 key for asset version \"3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775\"" + "Description": "S3 key for asset version \"41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593b\"" }, - "AssetParameters3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775ArtifactHash5D96BEC9": { + "AssetParameters41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593bArtifactHashEC633CC8": { "Type": "String", - "Description": "Artifact hash for asset \"3e9c40a6bf877a4b814d5ca4817c057400e4f8f661cd52c8951bf40f5763b775\"" + "Description": "Artifact hash for asset \"41589ef1a760129e41441e85e58fe02db5f019ed532b8a4a20729f3245b0593b\"" } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.ts b/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.ts index 83d71192e18f4..9a6fe48b172e0 100644 --- a/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.ts +++ b/packages/@aws-cdk/aws-ecr-assets/test/integ.nested-stacks-docker.ts @@ -27,6 +27,10 @@ class TheParentStack extends Stack { } } -const app = new App(); +const app = new App({ + context: { + '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport': true, + }, +}); new TheParentStack(app, 'nested-stacks-docker'); app.synth(); diff --git a/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/.dockerignore b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/.dockerignore new file mode 100644 index 0000000000000..c9ee265b3401e --- /dev/null +++ b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/.dockerignore @@ -0,0 +1,4 @@ +* +!foobar.txt +!index.py +!subdirectory/ diff --git a/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/Dockerfile b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/Dockerfile new file mode 100644 index 0000000000000..123b5670febc8 --- /dev/null +++ b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/Dockerfile @@ -0,0 +1,5 @@ +FROM python:3.6 +EXPOSE 8000 +WORKDIR /src +ADD . /src +CMD python3 index.py diff --git a/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/foobar.txt b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/foobar.txt new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/index.py b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/index.py new file mode 100644 index 0000000000000..2ccedfce3ab76 --- /dev/null +++ b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/index.py @@ -0,0 +1,33 @@ +#!/usr/bin/python +import sys +import textwrap +import http.server +import socketserver + +PORT = 8000 + + +class Handler(http.server.SimpleHTTPRequestHandler): + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'text/html') + self.end_headers() + self.wfile.write(textwrap.dedent('''\ + + It works + +

Hello from the integ test container

+

This container got built and started as part of the integ test.

+ + + ''').encode('utf-8')) + + +def main(): + httpd = http.server.HTTPServer(("", PORT), Handler) + print("serving at port", PORT) + httpd.serve_forever() + + +if __name__ == '__main__': + main() diff --git a/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/node_modules/one b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/node_modules/one new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/node_modules/some_dep/file b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/node_modules/some_dep/file new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/subdirectory/baz.txt b/packages/@aws-cdk/aws-ecr-assets/test/whitelisted-image/subdirectory/baz.txt new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.asset-image.expected.json b/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.asset-image.expected.json index 4ec347a575bd8..364f0a27d8b15 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.asset-image.expected.json +++ b/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.asset-image.expected.json @@ -497,7 +497,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540" + "/aws-cdk/assets:b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5" ] ] }, @@ -752,4 +752,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.scheduled-fargate-task.lit.expected.json b/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.scheduled-fargate-task.lit.expected.json index 76e8117cf8e42..8ffdd12ce4046 100644 --- a/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.scheduled-fargate-task.lit.expected.json +++ b/packages/@aws-cdk/aws-ecs-patterns/test/fargate/integ.scheduled-fargate-task.lit.expected.json @@ -293,7 +293,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540" + "/aws-cdk/assets:b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5" ] ] }, @@ -504,4 +504,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-ecs/test/ec2/test.ec2-task-definition.ts b/packages/@aws-cdk/aws-ecs/test/ec2/test.ec2-task-definition.ts index 9688e649b545c..39c7d40fdf7d0 100644 --- a/packages/@aws-cdk/aws-ecs/test/ec2/test.ec2-task-definition.ts +++ b/packages/@aws-cdk/aws-ecs/test/ec2/test.ec2-task-definition.ts @@ -545,7 +545,12 @@ export = { 'correctly sets containers from asset using default props'(test: Test) { // GIVEN - const stack = new cdk.Stack(); + const app = new cdk.App({ + context: { + '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport': true, + }, + }); + const stack = new cdk.Stack(app, 'Stack'); const taskDefinition = new ecs.Ec2TaskDefinition(stack, 'Ec2TaskDef'); @@ -557,7 +562,7 @@ export = { // THEN expect(stack).to(haveResource('AWS::ECS::TaskDefinition', { - Family: 'Ec2TaskDef', + Family: 'StackEc2TaskDefF03698CF', ContainerDefinitions: [ { Essential: true, @@ -576,7 +581,7 @@ export = { { Ref: 'AWS::URLSuffix', }, - '/aws-cdk/assets:baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540', + '/aws-cdk/assets:b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5', ], ], }, diff --git a/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts b/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts index cb282dd9bf870..06acd4f620083 100644 --- a/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts +++ b/packages/@aws-cdk/aws-ecs/test/test.container-definition.ts @@ -1367,7 +1367,12 @@ export = { 'can use a DockerImageAsset directly for a container image'(test: Test) { // GIVEN - const stack = new cdk.Stack(); + const app = new cdk.App({ + context: { + '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport': true, + }, + }); + const stack = new cdk.Stack(app, 'Stack'); const taskDefinition = new ecs.Ec2TaskDefinition(stack, 'TaskDef'); const asset = new ecr_assets.DockerImageAsset(stack, 'MyDockerImage', { directory: path.join(__dirname, 'demo-image'), @@ -1393,7 +1398,7 @@ export = { { Ref: 'AWS::Region' }, '.', { Ref: 'AWS::URLSuffix' }, - '/aws-cdk/assets:baa2d6eb2a17c75424df631c8c70ff39f2d5f3bee8b9e1a109ee24ca17300540', + '/aws-cdk/assets:b2c69bfbfe983b634456574587443159b3b7258849856a118ad3d2772238f1a5', ], ], }, @@ -1433,7 +1438,11 @@ export = { 'docker image asset options can be used when using container image'(test: Test) { // GIVEN - const app = new cdk.App(); + const app = new cdk.App({ + context: { + '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport': true, + }, + }); const stack = new cdk.Stack(app, 'MyStack'); const taskDefinition = new ecs.Ec2TaskDefinition(stack, 'TaskDef'); @@ -1450,11 +1459,11 @@ export = { const asm = app.synth(); test.deepEqual(asm.getStackArtifact(stack.artifactId).assets[0], { repositoryName: 'aws-cdk/assets', - imageTag: 'f9014d1df7c8f5a5e7abaf18eb5bc895e82f8b06eeed6f75a40cf1bc2a78955a', - id: 'f9014d1df7c8f5a5e7abaf18eb5bc895e82f8b06eeed6f75a40cf1bc2a78955a', + imageTag: 'ce3419d7c5d2d44e2789b13ccbd2d54ddf682557669f68bcee753231f5f1c0a5', + id: 'ce3419d7c5d2d44e2789b13ccbd2d54ddf682557669f68bcee753231f5f1c0a5', packaging: 'container-image', - path: 'asset.f9014d1df7c8f5a5e7abaf18eb5bc895e82f8b06eeed6f75a40cf1bc2a78955a', - sourceHash: 'f9014d1df7c8f5a5e7abaf18eb5bc895e82f8b06eeed6f75a40cf1bc2a78955a', + path: 'asset.ce3419d7c5d2d44e2789b13ccbd2d54ddf682557669f68bcee753231f5f1c0a5', + sourceHash: 'ce3419d7c5d2d44e2789b13ccbd2d54ddf682557669f68bcee753231f5f1c0a5', target: 'build-target', file: 'index.py', }); diff --git a/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-ec2-task.lit.expected.json b/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-ec2-task.lit.expected.json index 5fb1bb925e0bf..eaa617893829d 100644 --- a/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-ec2-task.lit.expected.json +++ b/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-ec2-task.lit.expected.json @@ -714,7 +714,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:1f37178655533422f6654c973b99eadec99a723c7181c912e4fb0976187c687c" + "/aws-cdk/assets:709fd91ba301f9b460ce1066dbc339f6a29bd4a07609ff98fb0e0faa475b650d" ] ] }, @@ -935,4 +935,4 @@ "Default": "/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id" } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-fargate-task.expected.json b/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-fargate-task.expected.json index e3899f84125c2..8062d441cc13d 100644 --- a/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-fargate-task.expected.json +++ b/packages/@aws-cdk/aws-events-targets/test/ecs/integ.event-fargate-task.expected.json @@ -237,7 +237,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:1f37178655533422f6654c973b99eadec99a723c7181c912e4fb0976187c687c" + "/aws-cdk/assets:709fd91ba301f9b460ce1066dbc339f6a29bd4a07609ff98fb0e0faa475b650d" ] ] }, @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.run-batch-job.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.run-batch-job.expected.json index 7d6104ca73d1a..d7c5476ab3488 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.run-batch-job.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.run-batch-job.expected.json @@ -869,7 +869,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:4ba4a660dbcc1e71f0bf07105626a5bc65d95ae71724dc57bbb94c8e14202342" + "/aws-cdk/assets:10112d0d2c68a9d76297acc4623b1af0d5e9fd11b2226eee455e09c6fcf1b776" ] ] }, @@ -1033,4 +1033,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.submit-job.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.submit-job.expected.json index ba8874b8d44d0..165ab49ae11a7 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.submit-job.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/batch/integ.submit-job.expected.json @@ -869,7 +869,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:4ba4a660dbcc1e71f0bf07105626a5bc65d95ae71724dc57bbb94c8e14202342" + "/aws-cdk/assets:10112d0d2c68a9d76297acc4623b1af0d5e9fd11b2226eee455e09c6fcf1b776" ] ] }, @@ -1033,4 +1033,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-run-task.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-run-task.expected.json index bf007c4e55c32..f9694026e0630 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-run-task.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-run-task.expected.json @@ -501,7 +501,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:1f37178655533422f6654c973b99eadec99a723c7181c912e4fb0976187c687c" + "/aws-cdk/assets:709fd91ba301f9b460ce1066dbc339f6a29bd4a07609ff98fb0e0faa475b650d" ] ] }, @@ -752,4 +752,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-task.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-task.expected.json index 09e4369720880..26ef883551481 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-task.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.ec2-task.expected.json @@ -501,7 +501,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:1f37178655533422f6654c973b99eadec99a723c7181c912e4fb0976187c687c" + "/aws-cdk/assets:709fd91ba301f9b460ce1066dbc339f6a29bd4a07609ff98fb0e0faa475b650d" ] ] }, @@ -745,4 +745,4 @@ "Default": "/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id" } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-run-task.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-run-task.expected.json index 3d131dd24f6cf..080638d46ddcb 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-run-task.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-run-task.expected.json @@ -34,7 +34,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:1f37178655533422f6654c973b99eadec99a723c7181c912e4fb0976187c687c" + "/aws-cdk/assets:709fd91ba301f9b460ce1066dbc339f6a29bd4a07609ff98fb0e0faa475b650d" ] ] }, @@ -302,4 +302,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-task.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-task.expected.json index c99f991489a69..7f15f160b7c39 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-task.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/ecs/integ.fargate-task.expected.json @@ -34,7 +34,7 @@ { "Ref": "AWS::URLSuffix" }, - "/aws-cdk/assets:1f37178655533422f6654c973b99eadec99a723c7181c912e4fb0976187c687c" + "/aws-cdk/assets:709fd91ba301f9b460ce1066dbc339f6a29bd4a07609ff98fb0e0faa475b650d" ] ] }, @@ -295,4 +295,4 @@ ] } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/core/NOTICE b/packages/@aws-cdk/core/NOTICE index d103738dc9483..9ff5649eac07b 100644 --- a/packages/@aws-cdk/core/NOTICE +++ b/packages/@aws-cdk/core/NOTICE @@ -37,4 +37,52 @@ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEM OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------- \ No newline at end of file +---------------- + +** ignore - https://www.npmjs.com/package/ignore +Copyright (c) 2013 Kael Zhang , contributors +http://kael.me/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- + +** @balena/dockerignore - https://www.npmjs.com/package/@balena/dockerignore +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +---------------- diff --git a/packages/@aws-cdk/core/lib/asset-staging.ts b/packages/@aws-cdk/core/lib/asset-staging.ts index 6d63f7a449414..047462ddeca71 100644 --- a/packages/@aws-cdk/core/lib/asset-staging.ts +++ b/packages/@aws-cdk/core/lib/asset-staging.ts @@ -165,6 +165,7 @@ export class AssetStaging extends CoreConstruct { customFingerprint: this.customSourceFingerprint, extraHash: props.extraHash, exclude: props.exclude, + ignoreMode: props.ignoreMode, skip, }); diff --git a/packages/@aws-cdk/core/lib/fs/copy.ts b/packages/@aws-cdk/core/lib/fs/copy.ts index d4c2841feeb6b..b9feb555c8f65 100644 --- a/packages/@aws-cdk/core/lib/fs/copy.ts +++ b/packages/@aws-cdk/core/lib/fs/copy.ts @@ -1,14 +1,16 @@ import * as fs from 'fs'; import * as path from 'path'; +import { IgnoreStrategy } from './ignore'; import { CopyOptions, SymlinkFollowMode } from './options'; -import { shouldExclude, shouldFollow } from './utils'; +import { shouldFollow } from './utils'; export function copyDirectory(srcDir: string, destDir: string, options: CopyOptions = { }, rootDir?: string) { const follow = options.follow !== undefined ? options.follow : SymlinkFollowMode.EXTERNAL; - const exclude = options.exclude || []; rootDir = rootDir || srcDir; + const ignoreStrategy = IgnoreStrategy.fromCopyOptions(options, rootDir); + if (!fs.statSync(srcDir).isDirectory()) { throw new Error(`${srcDir} is not a directory`); } @@ -17,7 +19,7 @@ export function copyDirectory(srcDir: string, destDir: string, options: CopyOpti for (const file of files) { const sourceFilePath = path.join(srcDir, file); - if (shouldExclude(exclude, path.relative(rootDir, sourceFilePath))) { + if (ignoreStrategy.ignores(sourceFilePath)) { continue; } diff --git a/packages/@aws-cdk/core/lib/fs/fingerprint.ts b/packages/@aws-cdk/core/lib/fs/fingerprint.ts index ca7da486a5d03..f7513d89743be 100644 --- a/packages/@aws-cdk/core/lib/fs/fingerprint.ts +++ b/packages/@aws-cdk/core/lib/fs/fingerprint.ts @@ -1,8 +1,9 @@ import * as crypto from 'crypto'; import * as fs from 'fs'; import * as path from 'path'; -import { FingerprintOptions, SymlinkFollowMode } from './options'; -import { shouldExclude, shouldFollow } from './utils'; +import { IgnoreStrategy } from './ignore'; +import { FingerprintOptions, IgnoreMode, SymlinkFollowMode } from './options'; +import { shouldFollow } from './utils'; const BUFFER_SIZE = 8 * 1024; const CTRL_SOH = '\x01'; @@ -33,18 +34,26 @@ export function fingerprint(fileOrDirectory: string, options: FingerprintOptions if (exclude.length) { _hashField(hash, 'options.exclude', JSON.stringify(exclude)); } + + const ignoreMode = options.ignoreMode || IgnoreMode.GLOB; + if (ignoreMode != IgnoreMode.GLOB) { + _hashField(hash, 'options.ignoreMode', ignoreMode); + } + + const ignoreStrategy = IgnoreStrategy.fromCopyOptions(options, fileOrDirectory); const isDir = fs.statSync(fileOrDirectory).isDirectory(); _processFileOrDirectory(fileOrDirectory, isDir); return hash.digest('hex'); function _processFileOrDirectory(symbolicPath: string, isRootDir: boolean = false, realPath = symbolicPath) { - if (!isRootDir && shouldExclude(exclude, symbolicPath)) { + const relativePath = path.relative(fileOrDirectory, symbolicPath); + + if (!isRootDir && ignoreStrategy.ignores(symbolicPath)) { return; } const stat = fs.lstatSync(realPath); - const relativePath = path.relative(fileOrDirectory, symbolicPath); if (stat.isSymbolicLink()) { const linkTarget = fs.readlinkSync(realPath); diff --git a/packages/@aws-cdk/core/lib/fs/ignore.ts b/packages/@aws-cdk/core/lib/fs/ignore.ts new file mode 100644 index 0000000000000..24a7114fb4707 --- /dev/null +++ b/packages/@aws-cdk/core/lib/fs/ignore.ts @@ -0,0 +1,223 @@ +import * as path from 'path'; +import dockerIgnore, * as DockerIgnore from '@balena/dockerignore'; +import gitIgnore, * as GitIgnore from 'ignore'; +import * as minimatch from 'minimatch'; +import { CopyOptions, IgnoreMode } from './options'; + +/** + * Represents file path ignoring behavior. + */ +export abstract class IgnoreStrategy { + /** + * Ignores file paths based on simple glob patterns. + * + * @returns `GlobIgnorePattern` associated with the given patterns. + * @param absoluteRootPath the absolute path to the root directory of the paths to be considered + * @param patterns + */ + public static glob(absoluteRootPath: string, patterns: string[]): GlobIgnoreStrategy { + return new GlobIgnoreStrategy(absoluteRootPath, patterns); + } + + /** + * Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore). + * + * @returns `GitIgnorePattern` associated with the given patterns. + * @param absoluteRootPath the absolute path to the root directory of the paths to be considered + * @param patterns + */ + public static git(absoluteRootPath: string, patterns: string[]): GitIgnoreStrategy { + return new GitIgnoreStrategy(absoluteRootPath, patterns); + } + + /** + * Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file). + * + * @returns `DockerIgnorePattern` associated with the given patterns. + * @param absoluteRootPath the absolute path to the root directory of the paths to be considered + * @param patterns + */ + public static docker(absoluteRootPath: string, patterns: string[]): DockerIgnoreStrategy { + return new DockerIgnoreStrategy(absoluteRootPath, patterns); + } + + /** + * Creates an IgnoreStrategy based on the `ignoreMode` and `exclude` in a `CopyOptions`. + * + * @returns `IgnoreStrategy` based on the `CopyOptions` + * @param absoluteRootPath the absolute path to the root directory of the paths to be considered + * @param options the `CopyOptions` to create the `IgnoreStrategy` from + */ + public static fromCopyOptions(options: CopyOptions, absoluteRootPath: string): IgnoreStrategy { + const ignoreMode = options.ignoreMode || IgnoreMode.GLOB; + const exclude = options.exclude || []; + + switch (ignoreMode) { + case IgnoreMode.GLOB: + return this.glob(absoluteRootPath, exclude); + + case IgnoreMode.GIT: + return this.git(absoluteRootPath, exclude); + + case IgnoreMode.DOCKER: + return this.docker(absoluteRootPath, exclude); + } + } + + /** + * Adds another pattern. + * @params pattern the pattern to add + */ + public abstract add(pattern: string): void; + + /** + * Determines whether a given file path should be ignored or not. + * + * @param absoluteFilePath absolute file path to be assessed against the pattern + * @returns `true` if the file should be ignored + */ + public abstract ignores(absoluteFilePath: string): boolean; +} + +/** + * Ignores file paths based on simple glob patterns. + */ +export class GlobIgnoreStrategy extends IgnoreStrategy { + private readonly absoluteRootPath: string; + private readonly patterns: string[]; + + constructor(absoluteRootPath: string, patterns: string[]) { + super(); + + if (!path.isAbsolute(absoluteRootPath)) { + throw new Error('GlobIgnoreStrategy expects an absolute file path'); + } + + this.absoluteRootPath = absoluteRootPath; + this.patterns = patterns; + } + + /** + * Adds another pattern. + * @params pattern the pattern to add + */ + public add(pattern: string): void { + this.patterns.push(pattern); + } + + /** + * Determines whether a given file path should be ignored or not. + * + * @param absoluteFilePath absolute file path to be assessed against the pattern + * @returns `true` if the file should be ignored + */ + public ignores(absoluteFilePath: string): boolean { + if (!path.isAbsolute(absoluteFilePath)) { + throw new Error('GlobIgnoreStrategy.ignores() expects an absolute path'); + } + + let relativePath = path.relative(this.absoluteRootPath, absoluteFilePath); + let excludeOutput = false; + + for (const pattern of this.patterns) { + const negate = pattern.startsWith('!'); + const match = minimatch(relativePath, pattern, { matchBase: true, flipNegate: true }); + + if (!negate && match) { + excludeOutput = true; + } + + if (negate && match) { + excludeOutput = false; + } + } + + return excludeOutput; + } +} + +/** + * Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore). + */ +export class GitIgnoreStrategy extends IgnoreStrategy { + private readonly absoluteRootPath: string; + private readonly ignore: GitIgnore.Ignore; + + constructor(absoluteRootPath: string, patterns: string[]) { + super(); + + if (!path.isAbsolute(absoluteRootPath)) { + throw new Error('GitIgnoreStrategy expects an absolute file path'); + } + + this.absoluteRootPath = absoluteRootPath; + this.ignore = gitIgnore().add(patterns); + } + + /** + * Adds another pattern. + * @params pattern the pattern to add + */ + public add(pattern: string): void { + this.ignore.add(pattern); + } + + /** + * Determines whether a given file path should be ignored or not. + * + * @param absoluteFilePath absolute file path to be assessed against the pattern + * @returns `true` if the file should be ignored + */ + public ignores(absoluteFilePath: string): boolean { + if (!path.isAbsolute(absoluteFilePath)) { + throw new Error('GitIgnoreStrategy.ignores() expects an absolute path'); + } + + let relativePath = path.relative(this.absoluteRootPath, absoluteFilePath); + + return this.ignore.ignores(relativePath); + } +} + +/** + * Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file). + */ +export class DockerIgnoreStrategy extends IgnoreStrategy { + private readonly absoluteRootPath: string; + private readonly ignore: DockerIgnore.Ignore; + + constructor(absoluteRootPath: string, patterns: string[]) { + super(); + + if (!path.isAbsolute(absoluteRootPath)) { + throw new Error('DockerIgnoreStrategy expects an absolute file path'); + } + + this.absoluteRootPath = absoluteRootPath; + this.ignore = dockerIgnore().add(patterns); + } + + /** + * Adds another pattern. + * @params pattern the pattern to add + */ + public add(pattern: string): void { + this.ignore.add(pattern); + } + + /** + * Determines whether a given file path should be ignored or not. + * + * @param absoluteFilePath absolute file path to be assessed against the pattern + * @returns `true` if the file should be ignored + */ + public ignores(absoluteFilePath: string): boolean { + if (!path.isAbsolute(absoluteFilePath)) { + throw new Error('DockerIgnoreStrategy.ignores() expects an absolute path'); + } + + let relativePath = path.relative(this.absoluteRootPath, absoluteFilePath); + + return this.ignore.ignores(relativePath); + } +} diff --git a/packages/@aws-cdk/core/lib/fs/index.ts b/packages/@aws-cdk/core/lib/fs/index.ts index 4ecfea7c2471c..21554eda79830 100644 --- a/packages/@aws-cdk/core/lib/fs/index.ts +++ b/packages/@aws-cdk/core/lib/fs/index.ts @@ -5,6 +5,7 @@ import { copyDirectory } from './copy'; import { fingerprint } from './fingerprint'; import { CopyOptions, FingerprintOptions } from './options'; +export * from './ignore'; export * from './options'; /** diff --git a/packages/@aws-cdk/core/lib/fs/options.ts b/packages/@aws-cdk/core/lib/fs/options.ts index eef3fcc499b08..3ea836a24e831 100644 --- a/packages/@aws-cdk/core/lib/fs/options.ts +++ b/packages/@aws-cdk/core/lib/fs/options.ts @@ -30,6 +30,34 @@ export enum SymlinkFollowMode { BLOCK_EXTERNAL = 'internal-only', } +/** + * Determines the ignore behavior to use. + */ +export enum IgnoreMode { + /** + * Ignores file paths based on simple glob patterns. + * + * This is the default for file assets. + * + * It is also the default for Docker image assets, unless the '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport' + * context flag is set. + */ + GLOB = 'glob', + + /** + * Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore). + */ + GIT = 'git', + + /** + * Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file). + * + * This is the default for Docker image assets if the '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport' + * context flag is set. + */ + DOCKER = 'docker' +}; + /** * Obtains applied when copying directories into the staging location. */ @@ -47,6 +75,13 @@ export interface CopyOptions { * @default - nothing is excluded */ readonly exclude?: string[]; + + /** + * The ignore behavior to use for exclude patterns. + * + * @default IgnoreMode.GLOB + */ + readonly ignoreMode?: IgnoreMode; } /** diff --git a/packages/@aws-cdk/core/lib/fs/utils.ts b/packages/@aws-cdk/core/lib/fs/utils.ts index 84c520f0f14f9..bcf41dfca7e51 100644 --- a/packages/@aws-cdk/core/lib/fs/utils.ts +++ b/packages/@aws-cdk/core/lib/fs/utils.ts @@ -1,36 +1,7 @@ import * as fs from 'fs'; import * as path from 'path'; -import * as minimatch from 'minimatch'; import { SymlinkFollowMode } from './options'; -/** - * Determines whether a given file should be excluded or not based on given - * exclusion glob patterns. - * - * @param exclude exclusion patterns - * @param filePath file path to be assessed against the pattern - * - * @returns `true` if the file should be excluded - */ -export function shouldExclude(exclude: string[], filePath: string): boolean { - let excludeOutput = false; - - for (const pattern of exclude) { - const negate = pattern.startsWith('!'); - const match = minimatch(filePath, pattern, { matchBase: true, flipNegate: true }); - - if (!negate && match) { - excludeOutput = true; - } - - if (negate && match) { - excludeOutput = false; - } - } - - return excludeOutput; -} - /** * Determines whether a symlink should be followed or not, based on a FollowMode. * diff --git a/packages/@aws-cdk/core/package.json b/packages/@aws-cdk/core/package.json index af60767b0c135..c673193b26427 100644 --- a/packages/@aws-cdk/core/package.json +++ b/packages/@aws-cdk/core/package.json @@ -187,11 +187,15 @@ "@aws-cdk/region-info": "0.0.0", "constructs": "^3.2.0", "fs-extra": "^9.0.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.4", + "@balena/dockerignore": "^1.0.2", + "ignore": "^5.1.8" }, "bundledDependencies": [ "fs-extra", - "minimatch" + "minimatch", + "@balena/dockerignore", + "ignore" ], "homepage": "https://github.com/aws/aws-cdk", "peerDependencies": { diff --git a/packages/@aws-cdk/core/test/fs/fs-ignore.test.ts b/packages/@aws-cdk/core/test/fs/fs-ignore.test.ts new file mode 100644 index 0000000000000..19cf979a650b5 --- /dev/null +++ b/packages/@aws-cdk/core/test/fs/fs-ignore.test.ts @@ -0,0 +1,125 @@ +import { IgnoreStrategy } from '../../lib/fs'; + +function strategyIgnores(strategy: IgnoreStrategy, files: string[]) { + return files.filter(file => strategy.ignores(file)); +} + +function strategyPermits(strategy: IgnoreStrategy, files: string[]) { + return files.filter(file => !strategy.ignores(file)); +} + +describe('GlobIgnoreStrategy', () => { + test('excludes nothing by default', () => { + const strategy = IgnoreStrategy.glob('/tmp', []); + const permits = [ + '/tmp/some/file/path', + ]; + + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); + + test('excludes requested files', () => { + const strategy = IgnoreStrategy.glob('/tmp', ['*.ignored']); + const ignores = [ + '/tmp/some/file.ignored', + ]; + const permits = [ + '/tmp/some/important/file', + ]; + + expect(strategyIgnores(strategy, ignores)).toEqual(ignores); + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); + + test('does not exclude whitelisted files', () => { + const strategy = IgnoreStrategy.glob('/tmp', ['*.ignored', '!important.*']); + const permits = [ + '/tmp/some/important.ignored', + ]; + + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); + + test('does not exclude .dockerignore and Dockerfile at the root', () => { + const strategy = IgnoreStrategy.glob('/tmp', ['*.ignored', '!Dockerfile', '!.dockerignore']); + const ignores = [ + '/tmp/foo.ignored', + '/tmp/some/important.ignored', + ]; + const permits = [ + '/tmp/Dockerfile', + '/tmp/.dockerignore', + ]; + + expect(strategyIgnores(strategy, ignores)).toEqual(ignores); + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); +}); + +describe('GitIgnoreStrategy', () => { + test('excludes nothing by default', () => { + const strategy = IgnoreStrategy.git('/tmp', []); + const permits = [ + '/tmp/some/file/path', + ]; + + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); + + test('excludes requested files', () => { + const strategy = IgnoreStrategy.git('/tmp', ['*.ignored']); + const ignores = [ + '/tmp/some/file.ignored', + ]; + const permits = [ + '/tmp/some/important/file', + ]; + + expect(strategyIgnores(strategy, ignores)).toEqual(ignores); + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); + + test('does not exclude whitelisted files', () => { + const strategy = IgnoreStrategy.git('/tmp', ['*.ignored', '!important.*']); + const permits = [ + '/tmp/some/important.ignored', + ]; + + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); +}); + +describe('DockerIgnoreStrategy', () => { + test('excludes nothing by default', () => { + const strategy = IgnoreStrategy.docker('/tmp', []); + const permits = [ + '/tmp/some/file/path', + ]; + + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); + + test('excludes requested files', () => { + // In .dockerignore, * only matches files in the current directory + const strategy = IgnoreStrategy.docker('/tmp', ['*.ignored']); + const ignores = [ + '/tmp/file.ignored', + ]; + const permits = [ + '/tmp/some/file.ignored', + '/tmp/some/important/file', + ]; + + expect(strategyIgnores(strategy, ignores)).toEqual(ignores); + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); + + test('does not exclude whitelisted files', () => { + const strategy = IgnoreStrategy.docker('/tmp', ['*.ignored', '!important.*']); + const permits = [ + '/tmp/some/important.ignored', + ]; + + expect(strategyPermits(strategy, permits)).toEqual(permits); + }); +}); diff --git a/packages/@aws-cdk/core/test/fs/utils.test.ts b/packages/@aws-cdk/core/test/fs/utils.test.ts index 1013095199a03..1eef1b6c83573 100644 --- a/packages/@aws-cdk/core/test/fs/utils.test.ts +++ b/packages/@aws-cdk/core/test/fs/utils.test.ts @@ -6,26 +6,6 @@ import { SymlinkFollowMode } from '../../lib/fs'; import * as util from '../../lib/fs/utils'; nodeunitShim({ - shouldExclude: { - 'excludes nothing by default'(test: Test) { - test.ok(!util.shouldExclude([], path.join('some', 'file', 'path'))); - test.done(); - }, - - 'excludes requested files'(test: Test) { - const exclusions = ['*.ignored']; - test.ok(util.shouldExclude(exclusions, path.join('some', 'file.ignored'))); - test.ok(!util.shouldExclude(exclusions, path.join('some', 'important', 'file'))); - test.done(); - }, - - 'does not exclude whitelisted files'(test: Test) { - const exclusions = ['*.ignored', '!important.*']; - test.ok(!util.shouldExclude(exclusions, path.join('some', 'important.ignored'))); - test.done(); - }, - }, - shouldFollow: { always: { 'follows internal'(test: Test) { diff --git a/packages/@aws-cdk/cx-api/lib/features.ts b/packages/@aws-cdk/cx-api/lib/features.ts index 0a4ee8b8d02b0..d28a88071f10d 100644 --- a/packages/@aws-cdk/cx-api/lib/features.ts +++ b/packages/@aws-cdk/cx-api/lib/features.ts @@ -44,6 +44,18 @@ export const NEW_STYLE_STACK_SYNTHESIS_CONTEXT = '@aws-cdk/core:newStyleStackSyn */ export const STACK_RELATIVE_EXPORTS_CONTEXT = '@aws-cdk/core:stackRelativeExports'; +/** + * DockerImageAsset properly supports `.dockerignore` files by default + * + * If this flag is not set, the default behavior for `DockerImageAsset` is to use + * glob semantics for `.dockerignore` files. If this flag is set, the default behavior + * is standard Docker ignore semantics. + * + * This is a feature flag as the old behavior was technically incorrect but + * users may have come to depend on it. + */ +export const DOCKER_IGNORE_SUPPORT = '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport'; + /** * This map includes context keys and values for feature flags that enable * capabilities "from the future", which we could not introduce as the default @@ -61,6 +73,7 @@ export const FUTURE_FLAGS = { [ENABLE_STACK_NAME_DUPLICATES_CONTEXT]: 'true', [ENABLE_DIFF_NO_FAIL_CONTEXT]: 'true', [STACK_RELATIVE_EXPORTS_CONTEXT]: 'true', + [DOCKER_IGNORE_SUPPORT]: true, // We will advertise this flag when the feature is complete // [NEW_STYLE_STACK_SYNTHESIS_CONTEXT]: 'true', @@ -75,6 +88,7 @@ const FUTURE_FLAGS_DEFAULTS: { [key: string]: boolean } = { [ENABLE_DIFF_NO_FAIL_CONTEXT]: false, [STACK_RELATIVE_EXPORTS_CONTEXT]: false, [NEW_STYLE_STACK_SYNTHESIS_CONTEXT]: false, + [DOCKER_IGNORE_SUPPORT]: false, }; export function futureFlagDefault(flag: string): boolean { diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 2f8b786e7e01b..2f03821f61c73 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -78,8 +78,10 @@ }, "license": "Apache-2.0", "bundledDependencies": [ + "@balena/dockerignore", "case", "fs-extra", + "ignore", "jsonschema", "minimatch", "punycode", @@ -87,8 +89,10 @@ "yaml" ], "dependencies": { + "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^9.0.1", + "ignore": "^5.1.8", "jsonschema": "^1.4.0", "minimatch": "^3.0.4", "punycode": "^2.1.1", diff --git a/packages/monocdk/NOTICE b/packages/monocdk/NOTICE index 12897b42a4062..201344067fcb2 100644 --- a/packages/monocdk/NOTICE +++ b/packages/monocdk/NOTICE @@ -144,4 +144,52 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------- \ No newline at end of file +---------------- + +** ignore - https://www.npmjs.com/package/ignore +Copyright (c) 2013 Kael Zhang , contributors +http://kael.me/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- + +** @balena/dockerignore - https://www.npmjs.com/package/@balena/dockerignore +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +---------------- diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 8783378fbef4f..f6b5dc263a9fb 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -77,8 +77,10 @@ }, "license": "Apache-2.0", "bundledDependencies": [ + "@balena/dockerignore", "case", "fs-extra", + "ignore", "jsonschema", "minimatch", "punycode", @@ -86,8 +88,10 @@ "yaml" ], "dependencies": { + "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^9.0.1", + "ignore": "^5.1.8", "jsonschema": "^1.4.0", "minimatch": "^3.0.4", "punycode": "^2.1.1", diff --git a/tools/cdk-integ-tools/lib/integ-helpers.ts b/tools/cdk-integ-tools/lib/integ-helpers.ts index fb262278deb1e..3a81fe8466465 100644 --- a/tools/cdk-integ-tools/lib/integ-helpers.ts +++ b/tools/cdk-integ-tools/lib/integ-helpers.ts @@ -337,6 +337,7 @@ export const DEFAULT_SYNTH_OPTIONS = { }, ], }, + '@aws-cdk/aws-ecr-assets:dockerIgnoreSupport': true, }, env: { CDK_INTEG_ACCOUNT: '12345678', diff --git a/yarn.lock b/yarn.lock index be4190620c931..d019493b4c634 100644 --- a/yarn.lock +++ b/yarn.lock @@ -967,6 +967,11 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -7626,7 +7631,7 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4: +ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== From 787cc468b83f24bcf61d2a4ed21d5cc58178a214 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Tue, 10 Nov 2020 14:10:05 +0200 Subject: [PATCH 04/25] chore: 2.0.0a0 is accidentally identified as 0.0.0 by pack script (#11389) Backported from https://github.com/aws/aws-cdk/commit/9299d4e78222a43d8608090a79e95db7f65c4454 The pack script defensively checks if there are any artifacts versioned 0.0.0 under the `dist/` directory. Python artifacts are named like so: `aws_cdk.aws_iotanalytics-2.0.0a0-py3-none-any.whl` and since by default grep uses regular expressions, this matches `grep 0.0.0`. The fix is to use `-F` so that the search string is not treated as regex. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- pack.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pack.sh b/pack.sh index a61a461ce9f3e..de48b7dea0c2f 100755 --- a/pack.sh +++ b/pack.sh @@ -84,7 +84,7 @@ cp ${changelog_file} ${distdir}/CHANGELOG.md # defensive: make sure our artifacts don't use the version marker (this means # that "pack" will always fails when building in a dev environment) # when we get to 10.0.0, we can fix this... -if find dist/ | grep "${marker}"; then +if find dist/ | grep -F "${marker}"; then echo "ERROR: build artifacts use the version marker '${marker}' instead of a real version." echo "This is expected for builds in a development environment but should not happen in CI builds!" exit 1 From 76c795ae37d4168e8a98b3bc81034b455a8ae05e Mon Sep 17 00:00:00 2001 From: Petrovskyi Anatolii Date: Tue, 10 Nov 2020 13:39:37 +0100 Subject: [PATCH 05/25] feat(eks): IAM Roles for service accounts in imported clusters (#10774) Hi this is a try to fix #10601 I didn't add proper documentation and tests now because discussions about how to implement that are stale so I've decided to push it forward by creating this PR if you guys think this is a good approach I will proceed with the unit tests and proper documentation ---- *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 | 26 +++ packages/@aws-cdk/aws-eks/lib/cluster.ts | 70 ++++++--- packages/@aws-cdk/aws-eks/lib/index.ts | 3 +- .../@aws-cdk/aws-eks/lib/legacy-cluster.ts | 21 +++ .../@aws-cdk/aws-eks/lib/oidc-provider.ts | 59 +++++++ .../@aws-cdk/aws-eks/lib/service-account.ts | 9 +- packages/@aws-cdk/aws-eks/package.json | 3 +- .../test/integ.eks-cluster.expected.json | 40 +++-- .../integ.eks-oidc-provider.expected.json | 148 ++++++++++++++++++ .../aws-eks/test/integ.eks-oidc-provider.ts | 12 ++ .../aws-eks/test/test.service-account.ts | 65 +++++++- .../@aws-cdk/aws-iam/lib/oidc-provider.ts | 31 +++- .../aws-iam/test/oidc-provider.test.ts | 36 ++++- 13 files changed, 473 insertions(+), 50 deletions(-) create mode 100644 packages/@aws-cdk/aws-eks/lib/oidc-provider.ts create mode 100644 packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.expected.json create mode 100644 packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.ts diff --git a/packages/@aws-cdk/aws-eks/README.md b/packages/@aws-cdk/aws-eks/README.md index de599ac1614ec..ad39037e100f7 100644 --- a/packages/@aws-cdk/aws-eks/README.md +++ b/packages/@aws-cdk/aws-eks/README.md @@ -643,6 +643,32 @@ new cdk.CfnOutput(this, 'ServiceAccountIamRole', { value: sa.role.roleArn }) Note that using `sa.serviceAccountName` above **does not** translate into a resource dependency. This is why an explicit dependency is needed. See for more details. +You can also add service accounts to existing clusters. +To do so, pass the `openIdConnectProvider` property when you import the cluster into the application. +```ts +// you can import an existing provider +const provider = eks.OpenIdConnectProvider.fromOpenIdConnectProviderArn(this, 'Provider', 'arn:aws:iam::123456:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/AB123456ABC'); + +// or create a new one using an existing issuer url +const provider = new eks.OpenIdConnectProvider(this, 'Provider', issuerUrl); + +const cluster = eks.Cluster.fromClusterAttributes({ + clusterName: 'Cluster', + openIdConnectProvider: provider, + kubectlRoleArn: 'arn:aws:iam::123456:role/service-role/k8sservicerole', +}); + +const sa = cluster.addServiceAccount('MyServiceAccount'); + +const bucket = new Bucket(this, 'Bucket'); +bucket.grantReadWrite(serviceAccount); + +// ... +``` +Note that adding service accounts requires running `kubectl` commands against the cluster. +This means you must also pass the `kubectlRoleArn` when importing the cluster. +See [Using existing Clusters](https://github.com/aws/aws-cdk/tree/master/packages/@aws-cdk/aws-eks#using-existing-clusters). + ## Applying Kubernetes Resources The library supports several popular resource deployment mechanisms, among which are: diff --git a/packages/@aws-cdk/aws-eks/lib/cluster.ts b/packages/@aws-cdk/aws-eks/lib/cluster.ts index 7388c497a9906..ec6f048a4de58 100644 --- a/packages/@aws-cdk/aws-eks/lib/cluster.ts +++ b/packages/@aws-cdk/aws-eks/lib/cluster.ts @@ -19,6 +19,7 @@ import { KubernetesObjectValue } from './k8s-object-value'; import { KubernetesPatch } from './k8s-patch'; import { KubectlProvider } from './kubectl-provider'; import { Nodegroup, NodegroupOptions } from './managed-nodegroup'; +import { OpenIdConnectProvider } from './oidc-provider'; import { BottleRocketImage } from './private/bottlerocket'; import { ServiceAccount, ServiceAccountOptions } from './service-account'; import { LifecycleLabel, renderAmazonLinuxUserData, renderBottlerocketUserData } from './user-data'; @@ -77,6 +78,11 @@ export interface ICluster extends IResource, ec2.IConnectable { */ readonly clusterEncryptionConfigKeyArn: string; + /** + * The Open ID Connect Provider of the cluster used to configure Service Accounts. + */ + readonly openIdConnectProvider: iam.IOpenIdConnectProvider; + /** * An IAM role that can perform kubectl operations against this cluster. * @@ -113,6 +119,14 @@ export interface ICluster extends IResource, ec2.IConnectable { */ readonly kubectlLayer?: lambda.ILayerVersion; + /** + * Creates a new service account with corresponding IAM Role (IRSA). + * + * @param id logical id of service account + * @param options service account options + */ + addServiceAccount(id: string, options?: ServiceAccountOptions): ServiceAccount; + /** * Defines a Kubernetes resource in this cluster. * @@ -220,6 +234,14 @@ export interface ClusterAttributes { */ readonly kubectlPrivateSubnetIds?: string[]; + /** + * An Open ID Connect provider for this cluster that can be used to configure service accounts. + * You can either import an existing provider using `iam.OpenIdConnectProvider.fromProviderArn`, + * or create a new provider using `new eks.OpenIdConnectProvider` + * @default - if not specified `cluster.openIdConnectProvider` and `cluster.addServiceAccount` will throw an error. + */ + readonly openIdConnectProvider?: iam.IOpenIdConnectProvider; + /** * An AWS Lambda Layer which includes `kubectl`, Helm and the AWS CLI. * @@ -608,6 +630,7 @@ abstract class ClusterBase extends Resource implements ICluster { public abstract readonly kubectlEnvironment?: { [key: string]: string }; public abstract readonly kubectlSecurityGroup?: ec2.ISecurityGroup; public abstract readonly kubectlPrivateSubnets?: ec2.ISubnet[]; + public abstract readonly openIdConnectProvider: iam.IOpenIdConnectProvider; /** * Defines a Kubernetes resource in this cluster. @@ -651,6 +674,13 @@ abstract class ClusterBase extends Resource implements ICluster { return this.addManifest(id, ...cdk8sChart.toJson()); } + + public addServiceAccount(id: string, options: ServiceAccountOptions = {}): ServiceAccount { + return new ServiceAccount(this, id, { + ...options, + cluster: this, + }); + } } /** @@ -801,6 +831,11 @@ export class Cluster extends ClusterBase { */ private readonly _fargateProfiles: FargateProfile[] = []; + /** + * an Open ID Connect Provider instance + */ + private _openIdConnectProvider?: iam.IOpenIdConnectProvider; + /** * The AWS Lambda layer that contains `kubectl`, `helm` and the AWS CLI. If * undefined, a SAR app that contains this layer will be used. @@ -819,8 +854,6 @@ export class Cluster extends ClusterBase { */ private _awsAuth?: AwsAuth; - private _openIdConnectProvider?: iam.OpenIdConnectProvider; - private _spotInterruptHandler?: HelmChart; private _neuronDevicePlugin?: KubernetesManifest; @@ -851,7 +884,7 @@ export class Cluster extends ClusterBase { * Initiates an EKS Cluster with the supplied arguments * * @param scope a Construct, most likely a cdk.Stack created - * @param name the name of the Construct to create + * @param id the id of the Construct to create * @param props properties in the IClusterProps interface */ constructor(scope: Construct, id: string, props: ClusterProps) { @@ -1249,15 +1282,8 @@ export class Cluster extends ClusterBase { */ public get openIdConnectProvider() { if (!this._openIdConnectProvider) { - this._openIdConnectProvider = new iam.OpenIdConnectProvider(this, 'OpenIdConnectProvider', { + this._openIdConnectProvider = new OpenIdConnectProvider(this, 'OpenIdConnectProvider', { url: this.clusterOpenIdConnectIssuerUrl, - clientIds: ['sts.amazonaws.com'], - /** - * For some reason EKS isn't validating the root certificate but a intermediat certificate - * which is one level up in the tree. Because of the a constant thumbprint value has to be - * stated with this OpenID Connect provider. The certificate thumbprint is the same for all the regions. - */ - thumbprints: ['9e99a48a9960b14926bb7f3b02e22da2b0ab7280'], }); } @@ -1278,19 +1304,6 @@ export class Cluster extends ClusterBase { }); } - /** - * Adds a service account to this cluster. - * - * @param id the id of this service account - * @param options service account options - */ - public addServiceAccount(id: string, options: ServiceAccountOptions = { }) { - return new ServiceAccount(this, id, { - ...options, - cluster: this, - }); - } - /** * Internal API used by `FargateProfile` to keep inventory of Fargate profiles associated with * this cluster, for the sake of ensuring the profiles are created sequentially. @@ -1606,7 +1619,7 @@ export interface AutoScalingGroupOptions { /** * Import a cluster to use in another stack */ -class ImportedCluster extends ClusterBase implements ICluster { +class ImportedCluster extends ClusterBase { public readonly clusterName: string; public readonly clusterArn: string; public readonly connections = new ec2.Connections(); @@ -1672,6 +1685,13 @@ class ImportedCluster extends ClusterBase implements ICluster { } return this.props.clusterEncryptionConfigKeyArn; } + + public get openIdConnectProvider(): iam.IOpenIdConnectProvider { + if (!this.props.openIdConnectProvider) { + throw new Error('"openIdConnectProvider" is not defined for this imported cluster'); + } + return this.props.openIdConnectProvider; + } } /** diff --git a/packages/@aws-cdk/aws-eks/lib/index.ts b/packages/@aws-cdk/aws-eks/lib/index.ts index 2e4b7e47ae49c..633b51cc9ca30 100644 --- a/packages/@aws-cdk/aws-eks/lib/index.ts +++ b/packages/@aws-cdk/aws-eks/lib/index.ts @@ -11,4 +11,5 @@ export * from './k8s-object-value'; export * from './fargate-cluster'; export * from './service-account'; export * from './managed-nodegroup'; -export * from './kubectl-layer'; \ No newline at end of file +export * from './kubectl-layer'; +export * from './oidc-provider'; diff --git a/packages/@aws-cdk/aws-eks/lib/legacy-cluster.ts b/packages/@aws-cdk/aws-eks/lib/legacy-cluster.ts index 5fead1f4818e4..e19540cf7c3d4 100644 --- a/packages/@aws-cdk/aws-eks/lib/legacy-cluster.ts +++ b/packages/@aws-cdk/aws-eks/lib/legacy-cluster.ts @@ -11,6 +11,7 @@ import { CfnCluster, CfnClusterProps } from './eks.generated'; import { HelmChartOptions, HelmChart } from './helm-chart'; import { KubernetesManifest } from './k8s-manifest'; import { Nodegroup, NodegroupOptions } from './managed-nodegroup'; +import { ServiceAccount, ServiceAccountOptions } from './service-account'; import { renderAmazonLinuxUserData, renderBottlerocketUserData } from './user-data'; // defaults are based on https://eksctl.io @@ -244,6 +245,18 @@ export class LegacyCluster extends Resource implements ICluster { } } + public addServiceAccount(_id: string, _options?: ServiceAccountOptions): ServiceAccount { + throw new Error('legacy cluster does not support adding service accounts'); + } + + /** + * Since we dont really want to make it required on the top-level ICluster + * we do this trick here in return type to match interface type + */ + public get openIdConnectProvider(): iam.IOpenIdConnectProvider { + throw new Error('legacy cluster does not support open id connect providers'); + } + /** * Add nodes to this EKS cluster * @@ -437,6 +450,14 @@ class ImportedCluster extends Resource implements ICluster { throw new Error('legacy cluster does not support adding cdk8s charts'); } + public addServiceAccount(_id: string, _options?: ServiceAccountOptions): ServiceAccount { + throw new Error('legacy cluster does not support adding service accounts'); + } + + public get openIdConnectProvider(): iam.IOpenIdConnectProvider { + throw new Error('legacy cluster does not support open id connect providers'); + } + public get vpc() { if (!this.props.vpc) { throw new Error('"vpc" is not defined for this imported cluster'); diff --git a/packages/@aws-cdk/aws-eks/lib/oidc-provider.ts b/packages/@aws-cdk/aws-eks/lib/oidc-provider.ts new file mode 100644 index 0000000000000..5a3e90b1bdc38 --- /dev/null +++ b/packages/@aws-cdk/aws-eks/lib/oidc-provider.ts @@ -0,0 +1,59 @@ +import * as iam from '@aws-cdk/aws-iam'; +import { Construct } from 'constructs'; + +/** + * Initialization properties for `OpenIdConnectProvider`. + */ +export interface OpenIdConnectProviderProps { + /** + * The URL of the identity provider. The URL must begin with https:// and + * should correspond to the iss claim in the provider's OpenID Connect ID + * tokens. Per the OIDC standard, path components are allowed but query + * parameters are not. Typically the URL consists of only a hostname, like + * https://server.example.org or https://example.com. + * + * You can find your OIDC Issuer URL by: + * aws eks describe-cluster --name %cluster_name% --query "cluster.identity.oidc.issuer" --output text + */ + readonly url: string; +} + +/** + * IAM OIDC identity providers are entities in IAM that describe an external + * identity provider (IdP) service that supports the OpenID Connect (OIDC) + * standard, such as Google or Salesforce. You use an IAM OIDC identity provider + * when you want to establish trust between an OIDC-compatible IdP and your AWS + * account. + * + * This implementation has default values for thumbprints and clientIds props + * that will be compatible with the eks cluster + * + * @see http://openid.net/connect + * @see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html + * + * @resource AWS::CloudFormation::CustomResource + */ +export class OpenIdConnectProvider extends iam.OpenIdConnectProvider { + /** + * Defines an OpenID Connect provider. + * @param scope The definition scope + * @param id Construct ID + * @param props Initialization properties + */ + public constructor(scope: Construct, id: string, props: OpenIdConnectProviderProps) { + /** + * For some reason EKS isn't validating the root certificate but a intermediate certificate + * which is one level up in the tree. Because of the a constant thumbprint value has to be + * stated with this OpenID Connect provider. The certificate thumbprint is the same for all the regions. + */ + const thumbprints = ['9e99a48a9960b14926bb7f3b02e22da2b0ab7280']; + + const clientIds = ['sts.amazonaws.com']; + + super(scope, id, { + url: props.url, + thumbprints, + clientIds, + }); + } +} diff --git a/packages/@aws-cdk/aws-eks/lib/service-account.ts b/packages/@aws-cdk/aws-eks/lib/service-account.ts index 17907d7f1685a..0ad6b238fdf89 100644 --- a/packages/@aws-cdk/aws-eks/lib/service-account.ts +++ b/packages/@aws-cdk/aws-eks/lib/service-account.ts @@ -1,7 +1,7 @@ import { AddToPrincipalPolicyResult, IPrincipal, IRole, OpenIdConnectPrincipal, PolicyStatement, PrincipalPolicyFragment, Role } from '@aws-cdk/aws-iam'; import { CfnJson, Names } from '@aws-cdk/core'; import { Construct } from 'constructs'; -import { Cluster } from './cluster'; +import { ICluster } from './cluster'; import { KubernetesManifest } from './k8s-manifest'; // v2 - keep this import as a separate section to reduce merge conflict when forward merging with the v2 branch. @@ -31,9 +31,8 @@ export interface ServiceAccountOptions { export interface ServiceAccountProps extends ServiceAccountOptions { /** * The cluster to apply the patch to. - * [disable-awslint:ref-via-interface] */ - readonly cluster: Cluster; + readonly cluster: ICluster; } /** @@ -71,8 +70,8 @@ export class ServiceAccount extends CoreConstruct implements IPrincipal { */ const conditions = new CfnJson(this, 'ConditionJson', { value: { - [`${cluster.clusterOpenIdConnectIssuer}:aud`]: 'sts.amazonaws.com', - [`${cluster.clusterOpenIdConnectIssuer}:sub`]: `system:serviceaccount:${this.serviceAccountNamespace}:${this.serviceAccountName}`, + [`${cluster.openIdConnectProvider.openIdConnectProviderIssuer}:aud`]: 'sts.amazonaws.com', + [`${cluster.openIdConnectProvider.openIdConnectProviderIssuer}:sub`]: `system:serviceaccount:${this.serviceAccountNamespace}:${this.serviceAccountName}`, }, }); const principal = new OpenIdConnectPrincipal(cluster.openIdConnectProvider).withConditions({ diff --git a/packages/@aws-cdk/aws-eks/package.json b/packages/@aws-cdk/aws-eks/package.json index 6a2b597e8108b..2b92f430c7a24 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -116,7 +116,8 @@ }, "awslint": { "exclude": [ - "props-no-arn-refs:@aws-cdk/aws-eks.ClusterProps.outputMastersRoleArn" + "props-no-arn-refs:@aws-cdk/aws-eks.ClusterProps.outputMastersRoleArn", + "props-physical-name:@aws-cdk/aws-eks.OpenIdConnectProviderProps" ] }, "stability": "experimental", 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 1d47ee8f4d1c1..3cccffb7a31e3 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 @@ -3526,16 +3526,30 @@ [ "{\"", { - "Fn::GetAtt": [ - "Cluster9EE0221C", - "OpenIdConnectIssuer" + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "oidc-provider/", + { + "Ref": "ClusterOpenIdConnectProviderE7EB0530" + } + ] + } ] }, ":aud\":\"sts.amazonaws.com\",\"", { - "Fn::GetAtt": [ - "Cluster9EE0221C", - "OpenIdConnectIssuer" + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "oidc-provider/", + { + "Ref": "ClusterOpenIdConnectProviderE7EB0530" + } + ] + } ] }, ":sub\":\"system:serviceaccount:default:awscdkeksclustertestclustermyserviceaccount4080bcdd\"}" @@ -3940,7 +3954,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters952bd1c03e8201c4c1c67d6de0f3fdaaf88fda05f89a1232c3f6364343cd5344S3Bucket055DC235" + "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3Bucket055DC235" }, "S3Key": { "Fn::Join": [ @@ -3953,7 +3967,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters952bd1c03e8201c4c1c67d6de0f3fdaaf88fda05f89a1232c3f6364343cd5344S3VersionKey2FFFA299" + "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3VersionKey2FFFA299" } ] } @@ -3966,7 +3980,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters952bd1c03e8201c4c1c67d6de0f3fdaaf88fda05f89a1232c3f6364343cd5344S3VersionKey2FFFA299" + "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3VersionKey2FFFA299" } ] } @@ -4039,7 +4053,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3Bucket14156880" + "Ref": "AssetParameters952bd1c03e8201c4c1c67d6de0f3fdaaf88fda05f89a1232c3f6364343cd5344S3Bucket14156880" }, "S3Key": { "Fn::Join": [ @@ -4052,7 +4066,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3VersionKey5225BCA4" + "Ref": "AssetParameters952bd1c03e8201c4c1c67d6de0f3fdaaf88fda05f89a1232c3f6364343cd5344S3VersionKey5225BCA4" } ] } @@ -4065,7 +4079,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3VersionKey5225BCA4" + "Ref": "AssetParameters952bd1c03e8201c4c1c67d6de0f3fdaaf88fda05f89a1232c3f6364343cd5344S3VersionKey5225BCA4" } ] } @@ -4612,4 +4626,4 @@ "Default": "/aws/service/eks/optimized-ami/1.14/amazon-linux-2/recommended/image_id" } } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.expected.json b/packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.expected.json new file mode 100644 index 0000000000000..615f6f5d97d00 --- /dev/null +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.expected.json @@ -0,0 +1,148 @@ +{ + "Resources": { + "NoClientsNoThumbprint8BF1533F": { + "Type": "Custom::AWSCDKOpenIdConnectProvider", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomAWSCDKOpenIdConnectProviderCustomResourceProviderHandlerF2C543E0", + "Arn" + ] + }, + "ThumbprintList": [ + "9e99a48a9960b14926bb7f3b02e22da2b0ab7280" + ], + "ClientIDList": [ + "sts.amazonaws.com" + ], + "Url": { + "Fn::Join": [ + "", + [ + "https://oidc.eks.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/id/test2" + ] + ] + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "CustomAWSCDKOpenIdConnectProviderCustomResourceProviderRole517FED65": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ] + }, + "ManagedPolicyArns": [ + { + "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + } + ], + "Policies": [ + { + "PolicyName": "Inline", + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Resource": "*", + "Action": [ + "iam:CreateOpenIDConnectProvider", + "iam:DeleteOpenIDConnectProvider", + "iam:UpdateOpenIDConnectProviderThumbprint", + "iam:AddClientIDToOpenIDConnectProvider", + "iam:RemoveClientIDFromOpenIDConnectProvider" + ] + } + ] + } + } + ] + } + }, + "CustomAWSCDKOpenIdConnectProviderCustomResourceProviderHandlerF2C543E0": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3Bucket14156880" + }, + "S3Key": { + "Fn::Join": [ + "", + [ + { + "Fn::Select": [ + 0, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3VersionKey5225BCA4" + } + ] + } + ] + }, + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3VersionKey5225BCA4" + } + ] + } + ] + } + ] + ] + } + }, + "Timeout": 900, + "MemorySize": 128, + "Handler": "__entrypoint__.handler", + "Role": { + "Fn::GetAtt": [ + "CustomAWSCDKOpenIdConnectProviderCustomResourceProviderRole517FED65", + "Arn" + ] + }, + "Runtime": "nodejs12.x" + }, + "DependsOn": [ + "CustomAWSCDKOpenIdConnectProviderCustomResourceProviderRole517FED65" + ] + } + }, + "Parameters": { + "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3Bucket14156880": { + "Type": "String", + "Description": "S3 bucket for asset \"b075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0de\"" + }, + "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deS3VersionKey5225BCA4": { + "Type": "String", + "Description": "S3 key for asset version \"b075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0de\"" + }, + "AssetParametersb075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0deArtifactHashC509349A": { + "Type": "String", + "Description": "Artifact hash for asset \"b075459e6bf309093fbd4b9a9e576a5f172b91c14d84eedb0f069566f6abb0de\"" + } + } +} diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.ts b/packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.ts new file mode 100644 index 0000000000000..79a7ad4493b28 --- /dev/null +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-oidc-provider.ts @@ -0,0 +1,12 @@ +/// !cdk-integ pragma:ignore-assets +import { App, Stack } from '@aws-cdk/core'; +import * as eks from '../lib'; + +const app = new App(); +const stack = new Stack(app, 'oidc-provider-integ-test'); + +new eks.OpenIdConnectProvider(stack, 'NoClientsNoThumbprint', { + url: `https://oidc.eks.${Stack.of(stack).region}.amazonaws.com/id/test2`, +}); + +app.synth(); diff --git a/packages/@aws-cdk/aws-eks/test/test.service-account.ts b/packages/@aws-cdk/aws-eks/test/test.service-account.ts index df60b6d1dadfa..14207c92cf64d 100644 --- a/packages/@aws-cdk/aws-eks/test/test.service-account.ts +++ b/packages/@aws-cdk/aws-eks/test/test.service-account.ts @@ -2,7 +2,7 @@ import { expect, haveResource } from '@aws-cdk/assert'; import * as iam from '@aws-cdk/aws-iam'; import { Test } from 'nodeunit'; import * as eks from '../lib'; -import { testFixtureCluster } from './util'; +import { testFixture, testFixtureCluster } from './util'; /* eslint-disable max-len */ @@ -110,5 +110,68 @@ export = { test.throws(() => cluster.addServiceAccount('MyServiceAccount')); test.done(); }, + 'addServiceAccount for imported cluster'(test: Test) { + const { stack } = testFixture(); + const oidcProvider = new iam.OpenIdConnectProvider(stack, 'ClusterOpenIdConnectProvider', { + url: 'oidc_issuer', + }); + const cluster = eks.Cluster.fromClusterAttributes(stack, 'Cluster', { + clusterName: 'Cluster', + openIdConnectProvider: oidcProvider, + kubectlRoleArn: 'arn:aws:iam::123456:role/service-role/k8sservicerole', + }); + + cluster.addServiceAccount('MyServiceAccount'); + + expect(stack).to(haveResource(eks.KubernetesManifest.RESOURCE_TYPE, { + ServiceToken: { + 'Fn::GetAtt': [ + 'StackClusterF0EB02FAKubectlProviderNestedStackStackClusterF0EB02FAKubectlProviderNestedStackResource739D12C4', + 'Outputs.StackStackClusterF0EB02FAKubectlProviderframeworkonEvent8377F076Arn', + ], + }, + Manifest: { + 'Fn::Join': [ + '', + [ + '[{"apiVersion":"v1","kind":"ServiceAccount","metadata":{"name":"stackclustermyserviceaccount373b933c","namespace":"default","labels":{"app.kubernetes.io/name":"stackclustermyserviceaccount373b933c"},"annotations":{"eks.amazonaws.com/role-arn":"', + { + 'Fn::GetAtt': [ + 'ClusterMyServiceAccountRole85337B29', + 'Arn', + ], + }, + '"}}}]', + ], + ], + }, + })); + + expect(stack).to(haveResource(iam.CfnRole.CFN_RESOURCE_TYPE_NAME, { + AssumeRolePolicyDocument: { + Statement: [ + { + Action: 'sts:AssumeRoleWithWebIdentity', + Condition: { + StringEquals: { + 'Fn::GetAtt': [ + 'ClusterMyServiceAccountConditionJson671C0633', + 'Value', + ], + }, + }, + Effect: 'Allow', + Principal: { + Federated: { + Ref: 'ClusterOpenIdConnectProviderA8B8E987', + }, + }, + }, + ], + Version: '2012-10-17', + }, + })); + test.done(); + }, }, }; diff --git a/packages/@aws-cdk/aws-iam/lib/oidc-provider.ts b/packages/@aws-cdk/aws-iam/lib/oidc-provider.ts index 3e4dda8a4d7cb..ba2ebc880893d 100644 --- a/packages/@aws-cdk/aws-iam/lib/oidc-provider.ts +++ b/packages/@aws-cdk/aws-iam/lib/oidc-provider.ts @@ -1,5 +1,14 @@ import * as path from 'path'; -import { CustomResource, CustomResourceProvider, CustomResourceProviderRuntime, IResource, Resource, Token } from '@aws-cdk/core'; +import { + CustomResource, + CustomResourceProvider, + CustomResourceProviderRuntime, + IResource, + Resource, + Stack, + Token, + Fn, +} from '@aws-cdk/core'; import { Construct } from 'constructs'; const RESOURCE_TYPE = 'Custom::AWSCDKOpenIdConnectProvider'; @@ -14,6 +23,11 @@ export interface IOpenIdConnectProvider extends IResource { * The Amazon Resource Name (ARN) of the IAM OpenID Connect provider. */ readonly openIdConnectProviderArn: string; + + /** + * The issuer for OIDC Provider + */ + readonly openIdConnectProviderIssuer: string; } /** @@ -99,9 +113,21 @@ export class OpenIdConnectProvider extends Resource implements IOpenIdConnectPro * @param openIdConnectProviderArn the ARN to import */ public static fromOpenIdConnectProviderArn(scope: Construct, id: string, openIdConnectProviderArn: string): IOpenIdConnectProvider { + const parsedResourceName = Stack.of(scope).parseArn(openIdConnectProviderArn).resourceName; + if (!parsedResourceName) { + throw new Error(`Invalid arn: ${openIdConnectProviderArn}. Unable to extract issuer url`); + } + + // this needed because TS don't understand that prev. condition + // actually does mutate the type from "string | undefined" to "string" + // inside class definition, + const resourceName = parsedResourceName; + class Import extends Resource implements IOpenIdConnectProvider { public readonly openIdConnectProviderArn = openIdConnectProviderArn; + public readonly openIdConnectProviderIssuer = resourceName; } + return new Import(scope, id); } @@ -110,6 +136,8 @@ export class OpenIdConnectProvider extends Resource implements IOpenIdConnectPro */ public readonly openIdConnectProviderArn: string; + public readonly openIdConnectProviderIssuer: string; + /** * Defines an OpenID Connect provider. * @param scope The definition scope @@ -130,6 +158,7 @@ export class OpenIdConnectProvider extends Resource implements IOpenIdConnectPro }); this.openIdConnectProviderArn = Token.asString(resource.ref); + this.openIdConnectProviderIssuer = Fn.select(1, Fn.split('oidc-provider/', this.openIdConnectProviderArn)); } private getOrCreateProvider() { diff --git a/packages/@aws-cdk/aws-iam/test/oidc-provider.test.ts b/packages/@aws-cdk/aws-iam/test/oidc-provider.test.ts index 99fe98419457b..4f157be9ab191 100644 --- a/packages/@aws-cdk/aws-iam/test/oidc-provider.test.ts +++ b/packages/@aws-cdk/aws-iam/test/oidc-provider.test.ts @@ -6,6 +6,8 @@ import { arrayDiff } from '../lib/oidc-provider/diff'; import { external } from '../lib/oidc-provider/external'; import * as handler from '../lib/oidc-provider/index'; +const arnOfProvider = 'arn:aws:iam::1234567:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/someid'; + describe('OpenIdConnectProvider resource', () => { test('minimal configuration (no clients and no thumbprint)', () => { @@ -41,10 +43,10 @@ describe('OpenIdConnectProvider resource', () => { const stack = new Stack(); // WHEN - const provider = iam.OpenIdConnectProvider.fromOpenIdConnectProviderArn(stack, 'MyProvider', 'arn:of:provider'); + const provider = iam.OpenIdConnectProvider.fromOpenIdConnectProviderArn(stack, 'MyProvider', arnOfProvider); // THEN - expect(stack.resolve(provider.openIdConnectProviderArn)).toStrictEqual('arn:of:provider'); + expect(stack.resolve(provider.openIdConnectProviderArn)).toStrictEqual(arnOfProvider); }); test('thumbprint list and client ids can be specified', () => { @@ -388,6 +390,34 @@ describe('arrayDiff', () => { }); }); +describe('OIDC issuer', () => { + test('extract issuer properly in the new provider', () => { + // GIVEN + const stack = new Stack(); + + // WHEN + const provider = new iam.OpenIdConnectProvider(stack, 'MyProvider', { + url: 'https://my-issuer', + }); + + // THEN + expect(stack.resolve(provider.openIdConnectProviderIssuer)).toStrictEqual( + { 'Fn::Select': [1, { 'Fn::Split': ['oidc-provider/', { Ref: 'MyProvider730BA1C8' }] }] }, + ); + }); + + test('extract issuer properly in the imported provider', () => { + // GIVEN + const stack = new Stack(); + + // WHEN + const provider = iam.OpenIdConnectProvider.fromOpenIdConnectProviderArn(stack, 'MyProvider', arnOfProvider); + + // THEN + expect(stack.resolve(provider.openIdConnectProviderIssuer)).toStrictEqual('oidc.eks.us-east-1.amazonaws.com/id/someid'); + }); +}); + async function invokeHandler(event: Partial) { return handler.handler(event as any); -} \ No newline at end of file +} From e3fcfadcad56a2c809280baa03ac49b444c51c79 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2020 13:47:11 +0000 Subject: [PATCH 06/25] chore(deps): bump promptly from 3.1.0 to 3.2.0 (#11393) Bumps [promptly](https://github.com/moxystudio/node-promptly) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/moxystudio/node-promptly/releases) - [Changelog](https://github.com/moxystudio/node-promptly/blob/master/CHANGELOG.md) - [Commits](https://github.com/moxystudio/node-promptly/compare/v3.1.0...v3.2.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 | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index 39850c64a5576..9437c52bddad2 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -80,7 +80,7 @@ "glob": "^7.1.6", "json-diff": "^0.5.4", "minimatch": ">=3.0", - "promptly": "^3.1.0", + "promptly": "^3.2.0", "proxy-agent": "^4.0.0", "semver": "^7.3.2", "source-map-support": "^0.5.19", diff --git a/yarn.lock b/yarn.lock index d019493b4c634..f69b687ca86c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7631,7 +7631,7 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: +ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -11373,10 +11373,10 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" -promptly@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.1.0.tgz#7f723392f527f032dc295991060d3be612186ea1" - integrity sha512-ygvIcmkt+eWtrQwI1/w7wDfzfAWI7IJX1AUVsWQEQwTmpQ5jeSyiD1g6NuI9VXWhz8LK5a5Bcngp/sKnOgQtiA== +promptly@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8" + integrity sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug== dependencies: read "^1.0.4" From 64ae54103abc3362ec1fa4ddd1510667f3d1fd26 Mon Sep 17 00:00:00 2001 From: Niranjan Jayakar Date: Tue, 10 Nov 2020 14:17:09 +0000 Subject: [PATCH 07/25] chore(ubergen): switch to ubergen.exclude as a filter instead of private (#11375) Currently, ubergen excludes packages that are marked as 'private'. In v2, all packages under `@aws-cdk/` will be marked as 'private'. This will mean that 'monocdk' and 'aws-cdk-lib' modules will have no packages included. Introduce another field `ubergen.exclude` in `package.json` that will be explicitly exclude packages from the monolithic modules. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../example-construct-library/package.json | 3 +++ packages/aws-cdk-lib/package.json | 3 +++ tools/cdk-build-tools/package.json | 3 +++ tools/cdk-integ-tools/package.json | 3 +++ tools/cfn2ts/package.json | 3 +++ tools/pkglint/lib/rules.ts | 24 +++++++++++++++++++ tools/pkgtools/package.json | 3 +++ tools/ubergen/bin/ubergen.ts | 4 ++-- tools/ubergen/package.json | 3 +++ tools/yarn-cling/package.json | 3 +++ 10 files changed, 50 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/example-construct-library/package.json b/packages/@aws-cdk/example-construct-library/package.json index 5874fd037829d..d63466a31f20c 100644 --- a/packages/@aws-cdk/example-construct-library/package.json +++ b/packages/@aws-cdk/example-construct-library/package.json @@ -100,5 +100,8 @@ }, "cdk-build": { "jest": true + }, + "ubergen": { + "exclude": true } } diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 2f03821f61c73..113df7a9afce8 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -284,5 +284,8 @@ ], "awscdkio": { "announce": false + }, + "ubergen": { + "exclude": true } } diff --git a/tools/cdk-build-tools/package.json b/tools/cdk-build-tools/package.json index 7edcf795f04b4..9504a4075cb86 100644 --- a/tools/cdk-build-tools/package.json +++ b/tools/cdk-build-tools/package.json @@ -66,5 +66,8 @@ "homepage": "https://github.com/aws/aws-cdk", "engines": { "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 871da4eb75467..6237634e6be3d 100644 --- a/tools/cdk-integ-tools/package.json +++ b/tools/cdk-integ-tools/package.json @@ -52,5 +52,8 @@ }, "peerDependencies": { "@aws-cdk/assert": "0.0.0" + }, + "ubergen": { + "exclude": true } } diff --git a/tools/cfn2ts/package.json b/tools/cfn2ts/package.json index 76ff69dc0f04a..7ef2c7f940205 100644 --- a/tools/cfn2ts/package.json +++ b/tools/cfn2ts/package.json @@ -50,5 +50,8 @@ "homepage": "https://github.com/aws/aws-cdk", "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "ubergen": { + "exclude": true } } diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index 9c35dc39ca0f0..203af4cb41605 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -1457,6 +1457,30 @@ export class JestSetup extends ValidationRule { } } +export class UbergenPackageVisibility extends ValidationRule { + public readonly name = 'ubergen/package-visibility'; + + public validate(pkg: PackageJson): void { + // eslint-disable-next-line @typescript-eslint/no-require-imports + const releaseJson = require(`${__dirname}/../../../release.json`); + if (releaseJson.majorVersion === 2) { + // skip in v2 for now + return; + } + if (pkg.json.private && !pkg.json.ubergen?.exclude) { + pkg.report({ + ruleName: this.name, + message: 'ubergen.exclude must be configured for private packages', + fix: () => { + pkg.json.ubergen = { + exclude: true, + }; + }, + }); + } + } +} + /** * Determine whether this is a JSII package * diff --git a/tools/pkgtools/package.json b/tools/pkgtools/package.json index 836ed85516754..0337051d556fb 100644 --- a/tools/pkgtools/package.json +++ b/tools/pkgtools/package.json @@ -45,5 +45,8 @@ "homepage": "https://github.com/aws/aws-cdk", "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "ubergen": { + "exclude": true } } diff --git a/tools/ubergen/bin/ubergen.ts b/tools/ubergen/bin/ubergen.ts index 3026eb04c8430..a85a64ce7f2b9 100644 --- a/tools/ubergen/bin/ubergen.ts +++ b/tools/ubergen/bin/ubergen.ts @@ -87,8 +87,8 @@ async function findLibrariesToPackage(): Promise { for (const dir of await fs.readdir(librariesRoot)) { const packageJson = await fs.readJson(path.resolve(librariesRoot, dir, 'package.json')); - if (packageJson.private) { - console.log(`\t⚠️ Skipping (private): ${packageJson.name}`); + if (packageJson.ubergen?.exclude) { + console.log(`\t⚠️ Skipping (ubergen excluded): ${packageJson.name}`); continue; } else if (packageJson.deprecated) { console.log(`\t⚠️ Skipping (deprecated): ${packageJson.name}`); diff --git a/tools/ubergen/package.json b/tools/ubergen/package.json index 4698e84f54300..12c4c622f2fe4 100644 --- a/tools/ubergen/package.json +++ b/tools/ubergen/package.json @@ -41,5 +41,8 @@ "homepage": "https://github.com/aws/aws-cdk", "engines": { "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 448e2cc950c2e..9dbbd8dc51331 100644 --- a/tools/yarn-cling/package.json +++ b/tools/yarn-cling/package.json @@ -55,5 +55,8 @@ "homepage": "https://github.com/aws/aws-cdk", "engines": { "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "ubergen": { + "exclude": true } } From a8cef9a7bae3fe0d0108b9cd66d201e49e2bb1f5 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Tue, 10 Nov 2020 22:41:21 +0200 Subject: [PATCH 08/25] chore: do not login to DockerHub (#11358) --- buildspec-pr.yaml | 9 ++++----- buildspec.yaml | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/buildspec-pr.yaml b/buildspec-pr.yaml index 98db30c019f7e..46805c4dcdc80 100644 --- a/buildspec-pr.yaml +++ b/buildspec-pr.yaml @@ -5,11 +5,10 @@ version: 0.2 phases: install: commands: - # Start docker daemon inside the container - - nohup /usr/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2& - - timeout 15 sh -c "until docker info; do echo .; sleep 1; done" - # login to DockerHub to avoid throttling - - docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD} + + # baked in our image. + # this also takes care of launching the docker daemon. + - /root/ecr-proxy/start.sh # Install yarn if it wasn't already present in the image - yarn --version || npm -g install yarn diff --git a/buildspec.yaml b/buildspec.yaml index a3e28f521d25c..d24d7c77ab1a2 100644 --- a/buildspec.yaml +++ b/buildspec.yaml @@ -5,11 +5,10 @@ version: 0.2 phases: install: commands: - # Start docker daemon inside the container - - nohup /usr/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2& - - timeout 15 sh -c "until docker info; do echo .; sleep 1; done" - # login to DockerHub to avoid throttling - - docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD} + + # baked in our image. + # this also takes care of launching the docker daemon. + - /root/ecr-proxy/start.sh # Install yarn if it wasn't already present in the image - yarn --version || npm -g install yarn From 2468fdc57a3a4b6f70321fed473882a1cf37094b Mon Sep 17 00:00:00 2001 From: tiefps <68519546+tiefps@users.noreply.github.com> Date: Tue, 10 Nov 2020 14:11:44 -0700 Subject: [PATCH 09/25] docs(codedeploy): correct pre-defined Deployment Configuration names (#11227) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../@aws-cdk/aws-codedeploy/lib/server/deployment-config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-codedeploy/lib/server/deployment-config.ts b/packages/@aws-cdk/aws-codedeploy/lib/server/deployment-config.ts index b6937db3a475d..058fad91341ad 100644 --- a/packages/@aws-cdk/aws-codedeploy/lib/server/deployment-config.ts +++ b/packages/@aws-cdk/aws-codedeploy/lib/server/deployment-config.ts @@ -6,7 +6,7 @@ import { arnForDeploymentConfig } from '../utils'; /** * The Deployment Configuration of an EC2/on-premise Deployment Group. * The default, pre-defined Configurations are available as constants on the {@link ServerDeploymentConfig} class - * (`ServerDeploymentConfig.HalfAtATime`, `ServerDeploymentConfig.AllAtOnce`, etc.). + * (`ServerDeploymentConfig.HALF_AT_A_TIME`, `ServerDeploymentConfig.ALL_AT_ONCE`, etc.). * To create a custom Deployment Configuration, * instantiate the {@link ServerDeploymentConfig} Construct. */ From 9638924b6fc6421ea385c5008fc862ede7b5bee2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 04:11:50 +0000 Subject: [PATCH 10/25] chore(deps-dev): bump nock from 13.0.4 to 13.0.5 (#11404) Bumps [nock](https://github.com/nock/nock) from 13.0.4 to 13.0.5. - [Release notes](https://github.com/nock/nock/releases) - [Changelog](https://github.com/nock/nock/blob/main/CHANGELOG.md) - [Commits](https://github.com/nock/nock/compare/v13.0.4...v13.0.5) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- packages/@aws-cdk/aws-logs/package.json | 2 +- packages/@aws-cdk/custom-resources/package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@aws-cdk/aws-logs/package.json b/packages/@aws-cdk/aws-logs/package.json index 508e513186f94..71750ee266617 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -78,7 +78,7 @@ "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", - "nock": "^13.0.4", + "nock": "^13.0.5", "nodeunit": "^0.11.3", "pkglint": "0.0.0", "sinon": "^9.2.1" diff --git a/packages/@aws-cdk/custom-resources/package.json b/packages/@aws-cdk/custom-resources/package.json index 9177928a2a80d..a556f8703693e 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -85,7 +85,7 @@ "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", "fs-extra": "^9.0.1", - "nock": "^13.0.4", + "nock": "^13.0.5", "pkglint": "0.0.0", "sinon": "^9.2.1" }, diff --git a/yarn.lock b/yarn.lock index f69b687ca86c4..34748fee2bab5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9931,10 +9931,10 @@ nise@^4.0.4: just-extend "^4.0.2" path-to-regexp "^1.7.0" -nock@^13.0.4: - version "13.0.4" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.0.4.tgz#9fb74db35d0aa056322e3c45be14b99105cd7510" - integrity sha512-alqTV8Qt7TUbc74x1pKRLSENzfjp4nywovcJgi/1aXDiUxXdt7TkruSTF5MDWPP7UoPVgea4F9ghVdmX0xxnSA== +nock@^13.0.5: + version "13.0.5" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.0.5.tgz#a618c6f86372cb79fac04ca9a2d1e4baccdb2414" + integrity sha512-1ILZl0zfFm2G4TIeJFW0iHknxr2NyA+aGCMTjDVUsBY4CkMRispF1pfIYkTRdAR/3Bg+UzdEuK0B6HczMQZcCg== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" From daf2a20a7442e144bf8ae1b6aad7d38018e1c6fb Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 04:52:40 +0000 Subject: [PATCH 11/25] chore(deps): bump aws-sdk from 2.788.0 to 2.789.0 (#11398) Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.788.0 to 2.789.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.788.0...v2.789.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 d9940d592b470..06e954237cdf8 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/package.json +++ b/packages/@aws-cdk/aws-cloudfront-origins/package.json @@ -72,7 +72,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 96cb83b76975d..587776d1d4edb 100644 --- a/packages/@aws-cdk/aws-cloudfront/package.json +++ b/packages/@aws-cdk/aws-cloudfront/package.json @@ -73,7 +73,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 faeaca29856f8..3146f7f682988 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -73,7 +73,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 256ef54a8043c..001cec43f99fd 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -79,7 +79,7 @@ "@aws-cdk/aws-sns": "0.0.0", "@aws-cdk/aws-sqs": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 37c2db758c4e1..53beb4f72810b 100644 --- a/packages/@aws-cdk/aws-codecommit/package.json +++ b/packages/@aws-cdk/aws-codecommit/package.json @@ -79,7 +79,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-sns": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 2971848607c8f..d4de8e8e1d2a0 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/jest": "^26.0.15", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 2b92f430c7a24..f23de775f4ba2 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -74,7 +74,7 @@ "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", "@types/yaml": "1.9.6", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 a7e9ff3977ed0..c9d8e2fd475b9 100644 --- a/packages/@aws-cdk/aws-events-targets/package.json +++ b/packages/@aws-cdk/aws-events-targets/package.json @@ -75,7 +75,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-codecommit": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 71750ee266617..9034ee8214849 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 923eac82a25dc..c2ae9cfcb68b6 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 58c766ae01919..f1a5ee11d78bb 100644 --- a/packages/@aws-cdk/aws-sqs/package.json +++ b/packages/@aws-cdk/aws-sqs/package.json @@ -74,7 +74,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 a556f8703693e..b8942190103fe 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -79,7 +79,7 @@ "@types/aws-lambda": "^8.10.64", "@types/fs-extra": "^8.1.1", "@types/sinon": "^9.0.8", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 9437c52bddad2..375fe4b4f9ff6 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -71,7 +71,7 @@ "@aws-cdk/region-info": "0.0.0", "@aws-cdk/yaml-cfn": "0.0.0", "archiver": "^5.0.2", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.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 d5f9201c5b79b..6d82300abeb4d 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.0.2", - "aws-sdk": "^2.788.0", + "aws-sdk": "^2.789.0", "glob": "^7.1.6", "yargs": "^16.1.0" }, diff --git a/yarn.lock b/yarn.lock index 34748fee2bab5..aae1f4a455d64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3877,10 +3877,10 @@ aws-sdk-mock@^5.1.0: sinon "^9.0.1" traverse "^0.6.6" -aws-sdk@^2.637.0, aws-sdk@^2.788.0: - version "2.788.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.788.0.tgz#020f84975db9623d0a434105991e7074c488693f" - integrity sha512-UKc+4MFRezIkgk668mylj7MpVD2dCtiDBppgx05SwYSDGT60bixrKv3nE/YJK+gAv53CWVf7WL6hNv76+TWkTA== +aws-sdk@^2.637.0, aws-sdk@^2.789.0: + version "2.789.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.789.0.tgz#a1b0a8b8b4227a7947c04e8d75239ba27d2deb93" + integrity sha512-Jqq+M4N0EgkyS4OPf05UHa7IWUcpuBdnpwMRgBnu4Ju6PxpOTh1UQcmYepVmIN3m6YVpLwFctEYzAMJFM3LT1A== dependencies: buffer "4.9.2" events "1.1.1" From 8545350306fb7cff27a63a3ce3023a7c4cc369e8 Mon Sep 17 00:00:00 2001 From: Niranjan Jayakar Date: Wed, 11 Nov 2020 11:45:57 +0000 Subject: [PATCH 12/25] chore: include attributions for aws-cdk-lib (#11413) In the v2 branch, `aws-cdk-lib` will be made public. Hence, include attributions for these. Update the pkglint rule to also check `aws-cdk-lib` in the `master` branch. ---- *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/.npmignore | 3 +- packages/aws-cdk-lib/NOTICE | 193 ++++++++++++++++++++++++++++++++ tools/pkglint/lib/rules.ts | 3 +- 3 files changed, 197 insertions(+), 2 deletions(-) diff --git a/packages/aws-cdk-lib/.npmignore b/packages/aws-cdk-lib/.npmignore index b5bc540300d0f..e44d8d8404b14 100644 --- a/packages/aws-cdk-lib/.npmignore +++ b/packages/aws-cdk-lib/.npmignore @@ -4,6 +4,7 @@ *.snk !*.d.ts !*.js +test/ # Coverage coverage @@ -23,4 +24,4 @@ tsconfig.json .eslintrc.js # exclude cdk artifacts **/cdk.out -junit.xml \ No newline at end of file +junit.xml diff --git a/packages/aws-cdk-lib/NOTICE b/packages/aws-cdk-lib/NOTICE index bfccac9a7f69c..201344067fcb2 100644 --- a/packages/aws-cdk-lib/NOTICE +++ b/packages/aws-cdk-lib/NOTICE @@ -1,2 +1,195 @@ AWS Cloud Development Kit (AWS CDK) Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + +------------------------------------------------------------------------------- + +The AWS CDK includes the following third-party software/licensing: + +** minimatch - https://www.npmjs.com/package/minimatch +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------- + +** fs-extra - https://www.npmjs.com/package/fs-extra +Copyright (c) 2011-2017 JP Richardson + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files +(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- + +** semver - https://www.npmjs.com/package/semver +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------- + +** yaml - https://www.npmjs.com/package/yaml +Copyright 2018 Eemeli Aro + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +---------------- + +** case - https://www.npmjs.com/package/case +Copyright (c) 2013 Nathan Bubna + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +---------------- + +** jsonschema - https://www.npmjs.com/package/jsonschema +Copyright (C) 2012-2015 Tom de Grunt + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +---------------- + +** punycode - https://www.npmjs.com/package/punycode +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- + +** ignore - https://www.npmjs.com/package/ignore +Copyright (c) 2013 Kael Zhang , contributors +http://kael.me/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- + +** @balena/dockerignore - https://www.npmjs.com/package/@balena/dockerignore +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +---------------- diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index 203af4cb41605..b3ae82fce7160 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -142,7 +142,8 @@ export class ThirdPartyAttributions extends ValidationRule { public readonly name = 'license/3p-attributions'; public validate(pkg: PackageJson): void { - if (pkg.json.private) { + const alwaysCheck = ['monocdk', 'aws-cdk-lib']; + if (pkg.json.private && !alwaysCheck.includes(pkg.json.name)) { return; } const bundled = pkg.getBundledDependencies(); From a9e40faa35cbcf4602430c0c7972c175b6a11508 Mon Sep 17 00:00:00 2001 From: AWS CDK Team Date: Wed, 11 Nov 2020 11:48:49 +0000 Subject: [PATCH 13/25] chore(release): 1.73.0 --- CHANGELOG.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ version.v1.json | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bcb4c89cfe00..941f81402e7d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,50 @@ 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.73.0](https://github.com/aws/aws-cdk/compare/v1.72.0...v1.73.0) (2020-11-11) + + +### ⚠ BREAKING CHANGES TO EXPERIMENTAL FEATURES + +* **apigatewayv2:** `LambdaProxyIntegration` and `HttpProxyIntegration` +classes have moved to the `@aws-cdk/aws-apigatewayv2-integration` module. +* **appmesh:** VirtualRouter's Listeners are no longer a struct; use the static factory methods of the `VirtualNodeListener` class to obtain instances of them +* **appmesh:** VirtualRouter accepts a list of listeners instead of a single listener +* **appmesh:** all `fromResourceName()` methods in the AppMesh module have been replaced with `fromResourceAttributes()` + +### Features + +* **apigateway:** default value for enum type in schema models ([#11064](https://github.com/aws/aws-cdk/issues/11064)) ([9eff751](https://github.com/aws/aws-cdk/commit/9eff751609597c35baadb559144b2069a2211215)), closes [#11065](https://github.com/aws/aws-cdk/issues/11065) +* **appmesh:** change VirtualRouter's Listener to a union-like class ([#11277](https://github.com/aws/aws-cdk/issues/11277)) ([0a3e980](https://github.com/aws/aws-cdk/commit/0a3e980cb880ee546d0840281aa9e2a781d7412b)) +* **appmesh:** remove from*Name() methods and replace with from*Attributes() ([#11266](https://github.com/aws/aws-cdk/issues/11266)) ([13d713e](https://github.com/aws/aws-cdk/commit/13d713e6358b29e55a626c44c7b2f0dcd946fddc)) +* **cli:** process credentials ([#11114](https://github.com/aws/aws-cdk/issues/11114)) ([6efa5e1](https://github.com/aws/aws-cdk/commit/6efa5e10e01a5f46b914601a807b932b4c745dae)), closes [#3008](https://github.com/aws/aws-cdk/issues/3008) +* **cloudwatch:** add methods for lazy addition of graph metrics ([#11380](https://github.com/aws/aws-cdk/issues/11380)) ([55e9576](https://github.com/aws/aws-cdk/commit/55e9576810d8cb3115b7bd52d704ffe793a3dd27)), closes [#11305](https://github.com/aws/aws-cdk/issues/11305) +* **cloudwatch:** different view types in GraphWidget ([#11160](https://github.com/aws/aws-cdk/issues/11160)) ([24de577](https://github.com/aws/aws-cdk/commit/24de5774379b7258f3629448a760b86613acc397)), closes [#11063](https://github.com/aws/aws-cdk/issues/11063) +* **cognito:** user pool resource server ([#11118](https://github.com/aws/aws-cdk/issues/11118)) ([474f6c6](https://github.com/aws/aws-cdk/commit/474f6c673e9f419bbc80c1a7797348e98767e8c9)) +* **cognito:** user pools - non-ascii email domains ([#11099](https://github.com/aws/aws-cdk/issues/11099)) ([5d907b6](https://github.com/aws/aws-cdk/commit/5d907b62abd4428c27677965353fb04d92267e2c)), closes [#8473](https://github.com/aws/aws-cdk/issues/8473) [#8473](https://github.com/aws/aws-cdk/issues/8473) +* **core:** natively support .dockerignore ([#10922](https://github.com/aws/aws-cdk/issues/10922)) ([cdb9942](https://github.com/aws/aws-cdk/commit/cdb9942bebc60abf98a74c6f9071e3527f0f01e1)) +* **eks:** IAM Roles for service accounts in imported clusters ([#10774](https://github.com/aws/aws-cdk/issues/10774)) ([76c795a](https://github.com/aws/aws-cdk/commit/76c795ae37d4168e8a98b3bc81034b455a8ae05e)), closes [#10601](https://github.com/aws/aws-cdk/issues/10601) +* **elasticloadbalancingv2:** add load balancer lookups ([#11089](https://github.com/aws/aws-cdk/issues/11089)) ([0153028](https://github.com/aws/aws-cdk/commit/0153028e6438eb13b07b8f2043745e5bc3faa6b7)), closes [#11088](https://github.com/aws/aws-cdk/issues/11088) +* **pipelines:** room for extra sequential intermediary actions in CdkStage addApplication() ([#11376](https://github.com/aws/aws-cdk/issues/11376)) ([32c164c](https://github.com/aws/aws-cdk/commit/32c164c4aa498b9bce03583f76cc21c7257a48ef)) +* **pipelines:** ShellScriptAction can configure environment ([#11229](https://github.com/aws/aws-cdk/issues/11229)) ([ab9bcf2](https://github.com/aws/aws-cdk/commit/ab9bcf26ecb8c171cf4ba3bdc795cb45c7096fd8)), closes [#10919](https://github.com/aws/aws-cdk/issues/10919) +* **region-info:** added AppMesh ECR account for eu-south-1 region ([#11207](https://github.com/aws/aws-cdk/issues/11207)) ([54c276d](https://github.com/aws/aws-cdk/commit/54c276d215fd636c2f8970795512a838377b2f21)) +* **route53-targets:** aws-apigatewayv2 target ([#10191](https://github.com/aws/aws-cdk/issues/10191)) ([030c5c5](https://github.com/aws/aws-cdk/commit/030c5c58e2cedda8e74d7988dc44b042def9e703)) + + +### Bug Fixes + +* **apigateway:** api key not supported for SpecRestApi ([#11235](https://github.com/aws/aws-cdk/issues/11235)) ([52da8cb](https://github.com/aws/aws-cdk/commit/52da8cb3c65c41bf7cbd3c8001cf586a5c89041b)), closes [#11079](https://github.com/aws/aws-cdk/issues/11079) +* **appsync:** HttpDataSource extends BackedDataSource instead of BaseDataSource ([#11185](https://github.com/aws/aws-cdk/issues/11185)) ([4b4d011](https://github.com/aws/aws-cdk/commit/4b4d0114e849ad96fccafd4cebb0edbead83ed83)), closes [#11183](https://github.com/aws/aws-cdk/issues/11183) +* **cfn-include:** Fn::FindInMap cannot be used for boolean properties ([#11323](https://github.com/aws/aws-cdk/issues/11323)) ([47b698e](https://github.com/aws/aws-cdk/commit/47b698ebfea300978e101234bcd80145b6f1ed17)), closes [#11300](https://github.com/aws/aws-cdk/issues/11300) +* **cli:** deployments are skipped if stack is in a _failed state ([#10847](https://github.com/aws/aws-cdk/issues/10847)) ([4887ba6](https://github.com/aws/aws-cdk/commit/4887ba6004b20c86c0025d16e235b8333d6efa6b)), closes [#10784](https://github.com/aws/aws-cdk/issues/10784) +* **cli:** Python `id` parameter in init template conflicts with built-in ([#10874](https://github.com/aws/aws-cdk/issues/10874)) ([37a149b](https://github.com/aws/aws-cdk/commit/37a149b03751810d9ed984e415bbfb216881e74b)) +* **cloudwatch:** composite alarm ARN uses wrong separator ([#11186](https://github.com/aws/aws-cdk/issues/11186)) ([3009490](https://github.com/aws/aws-cdk/commit/3009490c4e1e1a10a9e4ea52cefe03aac296d649)) +* **elasticsearch:** use correct latency metric names ([#11175](https://github.com/aws/aws-cdk/issues/11175)) ([7ab5ab8](https://github.com/aws/aws-cdk/commit/7ab5ab8dad9ad08ff43602d5ee78c31e6b8413ed)), closes [#11174](https://github.com/aws/aws-cdk/issues/11174) +* **rds:** customizing secret results in unusable password and lost attachment ([#11237](https://github.com/aws/aws-cdk/issues/11237)) ([a4567f5](https://github.com/aws/aws-cdk/commit/a4567f53d6e06d50f22d56364f69f0209c48874e)), closes [#11040](https://github.com/aws/aws-cdk/issues/11040) + + +* **apigatewayv2:** move lambda and http proxy integrations to the 'integrations' module ([#11339](https://github.com/aws/aws-cdk/issues/11339)) ([17611d6](https://github.com/aws/aws-cdk/commit/17611d6e0f1085505c90cf4d6d4f22b91c530ce1)) + ## [1.72.0](https://github.com/aws/aws-cdk/compare/v1.71.0...v1.72.0) (2020-11-06) diff --git a/version.v1.json b/version.v1.json index b7d663f683e0e..80ff54da9d296 100644 --- a/version.v1.json +++ b/version.v1.json @@ -1,3 +1,3 @@ { - "version": "1.72.0" + "version": "1.73.0" } From a70bceb6022fcad08b35eb6742c24e1223f57c93 Mon Sep 17 00:00:00 2001 From: Niranjan Jayakar Date: Wed, 11 Nov 2020 12:39:46 +0000 Subject: [PATCH 14/25] chore(pkglint): rule to ensure that only allowed packages are public (#11317) In the v2 branch, most packages are private except a handful. Update the pkglint rule to carry an allowlist on the set of packages that should be private. Prevents accidentally publishing new packages. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- tools/pkglint/lib/rules.ts | 45 +++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index b3ae82fce7160..c669ce1efef31 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -1460,24 +1460,43 @@ export class JestSetup extends ValidationRule { export class UbergenPackageVisibility extends ValidationRule { public readonly name = 'ubergen/package-visibility'; + private readonly publicPackages = ['aws-cdk-lib', 'cdk', 'aws-cdk', 'awslint']; public validate(pkg: PackageJson): void { // eslint-disable-next-line @typescript-eslint/no-require-imports const releaseJson = require(`${__dirname}/../../../release.json`); if (releaseJson.majorVersion === 2) { - // skip in v2 for now - return; - } - if (pkg.json.private && !pkg.json.ubergen?.exclude) { - pkg.report({ - ruleName: this.name, - message: 'ubergen.exclude must be configured for private packages', - fix: () => { - pkg.json.ubergen = { - exclude: true, - }; - }, - }); + // 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({ + ruleName: this.name, + message: 'Package must be public', + fix: () => { + delete pkg.json.private; + }, + }); + } else if (!this.publicPackages.includes(pkg.json.name) && pkg.json.private !== true) { + pkg.report({ + ruleName: this.name, + message: 'Package must not be public', + fix: () => { + delete pkg.json.private; + pkg.json.private = true; + }, + }); + } + } else { + if (pkg.json.private && !pkg.json.ubergen?.exclude) { + pkg.report({ + ruleName: this.name, + message: 'ubergen.exclude must be configured for private packages', + fix: () => { + pkg.json.ubergen = { + exclude: true, + }; + }, + }); + } } } } From f251ce656e1786e49a078d797883ed2753939ecb Mon Sep 17 00:00:00 2001 From: AWS CDK Automation <43080478+aws-cdk-automation@users.noreply.github.com> Date: Wed, 11 Nov 2020 18:30:36 +0100 Subject: [PATCH 15/25] chore: npm-check-updates && yarn upgrade (#11418) Ran npm-check-updates and yarn upgrade to keep the `yarn.lock` file up-to-date. --- .../package.json | 8 +- .../aws-global-table-coordinator/package.json | 6 +- scripts/script-tests/package.json | 2 +- tools/cdk-build-tools/package.json | 4 +- tools/eslint-plugin-cdk/package.json | 4 +- yarn.lock | 155 ++++++++++++------ 6 files changed, 116 insertions(+), 63 deletions(-) diff --git a/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json b/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json index 9f25bfc9d6683..85da591914c1d 100644 --- a/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json +++ b/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json @@ -29,15 +29,15 @@ "devDependencies": { "aws-sdk": "^2.596.0", "aws-sdk-mock": "^5.1.0", - "eslint": "^7.12.1", + "eslint": "^7.13.0", "eslint-config-standard": "^14.1.1", "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.2", + "eslint-plugin-standard": "^4.1.0", "jest": "^26.6.3", "lambda-tester": "^3.6.0", - "nock": "^13.0.4", - "ts-jest": "^26.4.3" + "nock": "^13.0.5", + "ts-jest": "^26.4.4" } } diff --git a/packages/@aws-cdk/aws-dynamodb-global/lambda-packages/aws-global-table-coordinator/package.json b/packages/@aws-cdk/aws-dynamodb-global/lambda-packages/aws-global-table-coordinator/package.json index e19b1fe502b2d..2dc031452ab61 100644 --- a/packages/@aws-cdk/aws-dynamodb-global/lambda-packages/aws-global-table-coordinator/package.json +++ b/packages/@aws-cdk/aws-dynamodb-global/lambda-packages/aws-global-table-coordinator/package.json @@ -29,14 +29,14 @@ "devDependencies": { "aws-sdk": "^2.596.0", "aws-sdk-mock": "^5.1.0", - "eslint": "^7.12.1", + "eslint": "^7.13.0", "eslint-config-standard": "^14.1.1", "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.2", + "eslint-plugin-standard": "^4.1.0", "jest": "^26.6.3", "lambda-tester": "^3.6.0", - "nock": "^13.0.4" + "nock": "^13.0.5" } } diff --git a/scripts/script-tests/package.json b/scripts/script-tests/package.json index 2c6d0ff48e94a..91bca5735c77a 100644 --- a/scripts/script-tests/package.json +++ b/scripts/script-tests/package.json @@ -10,6 +10,6 @@ "build+test+package": "npm run build+test" }, "devDependencies": { - "jest": "^26.6.2" + "jest": "^26.6.3" } } diff --git a/tools/cdk-build-tools/package.json b/tools/cdk-build-tools/package.json index 9504a4075cb86..5877dba95bcef 100644 --- a/tools/cdk-build-tools/package.json +++ b/tools/cdk-build-tools/package.json @@ -40,11 +40,11 @@ }, "dependencies": { "@typescript-eslint/eslint-plugin": "^4.7.0", - "@typescript-eslint/parser": "^4.6.1", + "@typescript-eslint/parser": "^4.7.0", "eslint-plugin-cdk": "0.0.0", "awslint": "0.0.0", "colors": "^1.4.0", - "eslint": "^7.12.1", + "eslint": "^7.13.0", "eslint-import-resolver-node": "^0.3.4", "eslint-import-resolver-typescript": "^2.3.0", "eslint-plugin-import": "^2.22.1", diff --git a/tools/eslint-plugin-cdk/package.json b/tools/eslint-plugin-cdk/package.json index 24c0c14813522..e07a275ab288a 100644 --- a/tools/eslint-plugin-cdk/package.json +++ b/tools/eslint-plugin-cdk/package.json @@ -21,8 +21,8 @@ "typescript": "~3.9.7" }, "dependencies": { - "@typescript-eslint/parser": "^4.6.1", - "eslint": "^7.12.1", + "@typescript-eslint/parser": "^4.7.0", + "eslint": "^7.13.0", "fs-extra": "^9.0.1" }, "jest": { diff --git a/yarn.lock b/yarn.lock index aae1f4a455d64..d401cd2040c16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3313,23 +3313,15 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.6.1.tgz#b801bff67b536ecc4a840ac9289ba2be57e02428" - integrity sha512-lScKRPt1wM9UwyKkGKyQDqf0bh6jm8DQ5iN37urRIXDm16GEv+HGEmum2Fc423xlk5NUOkOpfTnKZc/tqKZkDQ== - dependencies: - "@typescript-eslint/scope-manager" "4.6.1" - "@typescript-eslint/types" "4.6.1" - "@typescript-eslint/typescript-estree" "4.6.1" - debug "^4.1.1" - -"@typescript-eslint/scope-manager@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.6.1.tgz#21872b91cbf7adfc7083f17b8041149148baf992" - integrity sha512-f95+80r6VdINYscJY1KDUEDcxZ3prAWHulL4qRDfNVD0I5QAVSGqFkwHERDoLYJJWmEAkUMdQVvx7/c2Hp+Bjg== +"@typescript-eslint/parser@^4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.7.0.tgz#44bdab0f788b478178368baa65d3365fdc63da1c" + integrity sha512-+meGV8bMP1sJHBI2AFq1GeTwofcGiur8LoIr6v+rEmD9knyCqDlrQcFHR0KDDfldHIFDU/enZ53fla6ReF4wRw== dependencies: - "@typescript-eslint/types" "4.6.1" - "@typescript-eslint/visitor-keys" "4.6.1" + "@typescript-eslint/scope-manager" "4.7.0" + "@typescript-eslint/types" "4.7.0" + "@typescript-eslint/typescript-estree" "4.7.0" + debug "^4.1.1" "@typescript-eslint/scope-manager@4.7.0": version "4.7.0" @@ -3339,30 +3331,11 @@ "@typescript-eslint/types" "4.7.0" "@typescript-eslint/visitor-keys" "4.7.0" -"@typescript-eslint/types@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.6.1.tgz#d3ad7478f53f22e7339dc006ab61aac131231552" - integrity sha512-k2ZCHhJ96YZyPIsykickez+OMHkz06xppVLfJ+DY90i532/Cx2Z+HiRMH8YZQo7a4zVd/TwNBuRCdXlGK4yo8w== - "@typescript-eslint/types@4.7.0": version "4.7.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.7.0.tgz#5e95ef5c740f43d942542b35811f87b62fccca69" integrity sha512-uLszFe0wExJc+I7q0Z/+BnP7wao/kzX0hB5vJn4LIgrfrMLgnB2UXoReV19lkJQS1a1mHWGGODSxnBx6JQC3Sg== -"@typescript-eslint/typescript-estree@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.1.tgz#6025cce724329413f57e4959b2d676fceeca246f" - integrity sha512-/J/kxiyjQQKqEr5kuKLNQ1Finpfb8gf/NpbwqFFYEBjxOsZ621r9AqwS9UDRA1Rrr/eneX/YsbPAIhU2rFLjXQ== - dependencies: - "@typescript-eslint/types" "4.6.1" - "@typescript-eslint/visitor-keys" "4.6.1" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - "@typescript-eslint/typescript-estree@4.7.0": version "4.7.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.7.0.tgz#539531167f05ba20eb0b6785567076679e29d393" @@ -3377,14 +3350,6 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.1.tgz#6b125883402d8939df7b54528d879e88f7ba3614" - integrity sha512-owABze4toX7QXwOLT3/D5a8NecZEjEWU1srqxENTfqsY3bwVnl3YYbOh6s1rp2wQKO9RTHFGjKes08FgE7SVMw== - dependencies: - "@typescript-eslint/types" "4.6.1" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.7.0": version "4.7.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.7.0.tgz#6783824f22acfc49e754970ed21b88ac03b80e6f" @@ -3610,6 +3575,11 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-path@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" + integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== + append-transform@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" @@ -3877,7 +3847,7 @@ aws-sdk-mock@^5.1.0: sinon "^9.0.1" traverse "^0.6.6" -aws-sdk@^2.637.0, aws-sdk@^2.789.0: +aws-sdk@^2.596.0, aws-sdk@^2.637.0, aws-sdk@^2.789.0: version "2.789.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.789.0.tgz#a1b0a8b8b4227a7947c04e8d75239ba27d2deb93" integrity sha512-Jqq+M4N0EgkyS4OPf05UHa7IWUcpuBdnpwMRgBnu4Ju6PxpOTh1UQcmYepVmIN3m6YVpLwFctEYzAMJFM3LT1A== @@ -5995,11 +5965,21 @@ dotenv-expand@^5.1.0: resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== +dotenv-json@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dotenv-json/-/dotenv-json-1.0.0.tgz#fc7f672aafea04bed33818733b9f94662332815c" + integrity sha512-jAssr+6r4nKhKRudQ0HOzMskOFFi9+ubXWwmrSGJFgTvpjyPXCXsCsYbjif6mXp7uxA7xY3/LGaiTQukZzSbOQ== + dotenv@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== +dotenv@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + dotgitignore@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" @@ -6269,6 +6249,11 @@ escodegen@^1.11.0, escodegen@^1.14.1, escodegen@^1.8.1: optionalDependencies: source-map "~0.6.1" +eslint-config-standard@^14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" + integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== + eslint-import-resolver-node@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" @@ -6296,6 +6281,14 @@ eslint-module-utils@^2.6.0: debug "^2.6.9" pkg-dir "^2.0.0" +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + eslint-plugin-import@^2.22.1: version "2.22.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" @@ -6315,11 +6308,33 @@ eslint-plugin-import@^2.22.1: resolve "^1.17.0" tsconfig-paths "^3.9.0" +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + eslint-plugin-rulesdir@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-rulesdir/-/eslint-plugin-rulesdir-0.1.0.tgz#ad144d7e98464fda82963eff3fab331aecb2bf08" integrity sha1-rRRNfphGT9qClj7/P6szGuyyvwg= +eslint-plugin-standard@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz#0c3bf3a67e853f8bbbc580fb4945fbf16f41b7c5" + integrity sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ== + eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -6345,10 +6360,10 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.12.1: - version "7.12.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" - integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== +eslint@^7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da" + integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ== dependencies: "@babel/code-frame" "^7.0.0" "@eslint/eslintrc" "^0.2.1" @@ -7631,7 +7646,7 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8: +ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -7863,6 +7878,13 @@ is-core-module@^2.0.0: dependencies: has "^1.0.3" +is-core-module@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" + integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -8707,7 +8729,7 @@ jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^26.6.2, jest@^26.6.3: +jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== @@ -9039,6 +9061,24 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +lambda-leak@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lambda-leak/-/lambda-leak-2.0.0.tgz#771985d3628487f6e885afae2b54510dcfb2cd7e" + integrity sha1-dxmF02KEh/boha+uK1RRDc+yzX4= + +lambda-tester@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/lambda-tester/-/lambda-tester-3.6.0.tgz#ceb7d4f4f0da768487a05cff37dcd088508b5247" + integrity sha512-F2ZTGWCLyIR95o/jWK46V/WnOCFAEUG/m/V7/CLhPJ7PCM+pror1rZ6ujP3TkItSGxUfpJi0kqwidw+M/nEqWw== + dependencies: + app-root-path "^2.2.1" + dotenv "^8.0.0" + dotenv-json "^1.0.0" + lambda-leak "^2.0.0" + semver "^6.1.1" + uuid "^3.3.2" + vandium-utils "^1.1.1" + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -11984,6 +12024,14 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13 dependencies: path-parse "^1.0.6" +resolve@^1.10.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + resolve@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" @@ -12184,7 +12232,7 @@ semver@7.x, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -13797,6 +13845,11 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +vandium-utils@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/vandium-utils/-/vandium-utils-1.2.0.tgz#44735de4b7641a05de59ebe945f174e582db4f59" + integrity sha1-RHNd5LdkGgXeWevpRfF05YLbT1k= + vendors@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" From ec72c859c31a069406994433fe430f56ff0e5ff3 Mon Sep 17 00:00:00 2001 From: Alban Esc Date: Wed, 11 Nov 2020 09:58:53 -0800 Subject: [PATCH 16/25] feat(efs): import access point - `fromAccessPointAttributes()` (#10712) Cannot use `efs.AccessPoint.fromAccessPointId()` with `lambda.FileSystem.fromEfsAccessPoint()`. the former returns an `IAccessPoint` when the later expect an `AccessPoint`. I think following the CDK guidelines, `lambda.FileSystem.fromEfsAccessPoint()` should expect an `IAccessPoint`, not an `AccessPoint`. Argument of type `IAccessPoint` is not assignable to parameter of type `AccessPoint`. ### Solution ---- Add a new import method to the `AccessPoint` class called `fromAccessPointAttributes()` allowing to pass a fileSystem as an attribute. Closes #10711. ---- *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-efs/README.md | 19 ++ packages/@aws-cdk/aws-efs/lib/access-point.ts | 123 ++++++++- .../@aws-cdk/aws-efs/lib/efs-file-system.ts | 53 +++- .../aws-efs/test/access-point.test.ts | 85 +++++- .../@aws-cdk/aws-lambda/lib/filesystem.ts | 2 +- .../integ.lambda.filesystem.expected.json | 258 +++++++++++++++++- .../test/integ.lambda.filesystem.ts | 42 ++- 7 files changed, 542 insertions(+), 40 deletions(-) diff --git a/packages/@aws-cdk/aws-efs/README.md b/packages/@aws-cdk/aws-efs/README.md index 853ae097327cb..6a598f1146624 100644 --- a/packages/@aws-cdk/aws-efs/README.md +++ b/packages/@aws-cdk/aws-efs/README.md @@ -56,6 +56,25 @@ the access point. You may specify custom path with the `path` property. If `path created with the settings defined in the `creationInfo`. See [Creating Access Points](https://docs.aws.amazon.com/efs/latest/ug/create-access-point.html) for more details. +Any access point that has been created outside the stack can be imported into your CDK app. + +Use the `fromAccessPointAttributes()` API to import an existing access point. + +```ts +efs.AccessPoint.fromAccessPointAttributes(this, 'ap', { + accessPointArn: 'fsap-1293c4d9832fo0912', + fileSystem: efs.FileSystem.fromFileSystemAttributes(this, 'efs', { + fileSystemId: 'fs-099d3e2f', + securityGroup: SecurityGroup.fromSecurityGroupId(this, 'sg', 'sg-51530134'), + }), +}); +``` + +⚠️ Notice: When importing an Access Point using `fromAccessPointAttributes()`, you must make sure the mount targets are deployed and their lifecycle state is `available`. Otherwise, you may encounter the following error when deploying: +> EFS file system referenced by access point has +mount targets created in all availability zones the function will execute in, but not all are in the available life cycle +state yet. Please wait for them to become available and try the request again. + ### Connecting To control who can access the EFS, use the `.connections` attribute. EFS has diff --git a/packages/@aws-cdk/aws-efs/lib/access-point.ts b/packages/@aws-cdk/aws-efs/lib/access-point.ts index 7f43d88523bf1..29d22a5ec6032 100644 --- a/packages/@aws-cdk/aws-efs/lib/access-point.ts +++ b/packages/@aws-cdk/aws-efs/lib/access-point.ts @@ -20,11 +20,16 @@ export interface IAccessPoint extends IResource { * @attribute */ readonly accessPointArn: string; + + /** + * The efs filesystem + */ + readonly fileSystem: IFileSystem; } /** * Permissions as POSIX ACL - */ +*/ export interface Acl { /** * Specifies the POSIX user ID to apply to the RootDirectory. Accepts values from 0 to 2^32 (4294967295). @@ -109,23 +114,71 @@ export interface AccessPointProps extends AccessPointOptions { readonly fileSystem: IFileSystem; } +/** + * Attributes that can be specified when importing an AccessPoint + */ +export interface AccessPointAttributes { + /** + * The ID of the AccessPoint + * One of this, of {@link accessPointArn} is required + * + * @default - determined based on accessPointArn + */ + readonly accessPointId?: string; + + /** + * The ARN of the AccessPoint + * One of this, of {@link accessPointId} is required + * + * @default - determined based on accessPointId + */ + readonly accessPointArn?: string; + + /** + * The EFS filesystem + * + * @default - no EFS filesystem + */ + readonly fileSystem?: IFileSystem; +} + +abstract class AccessPointBase extends Resource implements IAccessPoint { + /** + * The ARN of the Access Point + * @attribute + */ + public abstract readonly accessPointArn: string; + + /** + * The ID of the Access Point + * @attribute + */ + public abstract readonly accessPointId: string; + + /** + * The filesystem of the access point + */ + public abstract readonly fileSystem: IFileSystem; +} + /** * Represents the AccessPoint */ -export class AccessPoint extends Resource implements IAccessPoint { +export class AccessPoint extends AccessPointBase { /** - * Import an existing Access Point + * Import an existing Access Point by attributes + */ + public static fromAccessPointAttributes(scope: Construct, id: string, attrs: AccessPointAttributes): IAccessPoint { + return new ImportedAccessPoint(scope, id, attrs); + } + + /** + * Import an existing Access Point by id */ public static fromAccessPointId(scope: Construct, id: string, accessPointId: string): IAccessPoint { - class Import extends Resource implements IAccessPoint { - public readonly accessPointId = accessPointId; - public readonly accessPointArn = Stack.of(scope).formatArn({ - service: 'elasticfilesystem', - resource: 'access-point', - resourceName: accessPointId, - }); - } - return new Import(scope, id); + return new ImportedAccessPoint(scope, id, { + accessPointId: accessPointId, + }); } /** @@ -174,3 +227,49 @@ export class AccessPoint extends Resource implements IAccessPoint { this.fileSystem = props.fileSystem; } } + +class ImportedAccessPoint extends AccessPointBase { + public readonly accessPointId: string; + public readonly accessPointArn: string; + private readonly _fileSystem?: IFileSystem; + + constructor(scope: Construct, id: string, attrs: AccessPointAttributes) { + super(scope, id); + + if (!attrs.accessPointId) { + if (!attrs.accessPointArn) { + throw new Error('One of accessPointId or AccessPointArn is required!'); + } + + this.accessPointArn = attrs.accessPointArn; + let maybeApId = Stack.of(scope).parseArn(attrs.accessPointArn).resourceName; + + if (!maybeApId) { + throw new Error('ARN for AccessPoint must provide the resource name.'); + } + + this.accessPointId = maybeApId; + } else { + if (attrs.accessPointArn) { + throw new Error('Only one of accessPointId or AccessPointArn can be provided!'); + } + + this.accessPointId = attrs.accessPointId; + this.accessPointArn = Stack.of(scope).formatArn({ + service: 'elasticfilesystem', + resource: 'access-point', + resourceName: attrs.accessPointId, + }); + } + + this._fileSystem = attrs.fileSystem; + } + + public get fileSystem() { + if (!this._fileSystem) { + throw new Error("fileSystem is not available when 'fromAccessPointId()' is used. Use 'fromAccessPointAttributes()' instead"); + } + + return this._fileSystem; + } +} diff --git a/packages/@aws-cdk/aws-efs/lib/efs-file-system.ts b/packages/@aws-cdk/aws-efs/lib/efs-file-system.ts index 2c28375667fe4..8572d85bf920d 100644 --- a/packages/@aws-cdk/aws-efs/lib/efs-file-system.ts +++ b/packages/@aws-cdk/aws-efs/lib/efs-file-system.ts @@ -206,28 +206,18 @@ export interface FileSystemAttributes { * @resource AWS::EFS::FileSystem */ export class FileSystem extends Resource implements IFileSystem { + /** + * The default port File System listens on. + */ + public static readonly DEFAULT_PORT: number = 2049; /** * Import an existing File System from the given properties. */ public static fromFileSystemAttributes(scope: Construct, id: string, attrs: FileSystemAttributes): IFileSystem { - class Import extends Resource implements IFileSystem { - public readonly fileSystemId = attrs.fileSystemId; - public readonly connections = new ec2.Connections({ - securityGroups: [attrs.securityGroup], - defaultPort: ec2.Port.tcp(FileSystem.DEFAULT_PORT), - }); - public readonly mountTargetsAvailable = new ConcreteDependable(); - } - - return new Import(scope, id); + return new ImportedFileSystem(scope, id, attrs); } - /** - * The default port File System listens on. - */ - private static readonly DEFAULT_PORT: number = 2049; - /** * The security groups/rules used to allow network connections to the file system. */ @@ -303,3 +293,36 @@ export class FileSystem extends Resource implements IFileSystem { }); } } + + +class ImportedFileSystem extends Resource implements IFileSystem { + /** + * The security groups/rules used to allow network connections to the file system. + */ + public readonly connections: ec2.Connections; + + /** + * @attribute + */ + public readonly fileSystemId: string; + + /** + * Dependable that can be depended upon to ensure the mount targets of the filesystem are ready + */ + public readonly mountTargetsAvailable: IDependable; + + constructor(scope: Construct, id: string, attrs: FileSystemAttributes) { + super(scope, id); + + this.fileSystemId = attrs.fileSystemId; + + this.connections = new ec2.Connections({ + securityGroups: [attrs.securityGroup], + defaultPort: ec2.Port.tcp(FileSystem.DEFAULT_PORT), + }); + + this.mountTargetsAvailable = new ConcreteDependable(); + } + + +} diff --git a/packages/@aws-cdk/aws-efs/test/access-point.test.ts b/packages/@aws-cdk/aws-efs/test/access-point.test.ts index 761594507c779..29770d2077d2f 100644 --- a/packages/@aws-cdk/aws-efs/test/access-point.test.ts +++ b/packages/@aws-cdk/aws-efs/test/access-point.test.ts @@ -31,7 +31,7 @@ test('new AccessPoint correctly', () => { expectCDK(stack).to(haveResource('AWS::EFS::AccessPoint')); }); -test('import correctly', () => { +test('import an AccessPoint using fromAccessPointId', () => { // WHEN const ap = new AccessPoint(stack, 'MyAccessPoint', { fileSystem, @@ -41,6 +41,87 @@ test('import correctly', () => { expect(imported.accessPointId).toEqual(ap.accessPointId); }); +test('import an AccessPoint using fromAccessPointId', () => { + // WHEN + const ap = new AccessPoint(stack, 'MyAccessPoint', { + fileSystem, + }); + const imported = AccessPoint.fromAccessPointId(stack, 'ImportedAccessPoint', ap.accessPointId); + // THEN + expect(() => imported.fileSystem).toThrow(/fileSystem is not available when 'fromAccessPointId\(\)' is used. Use 'fromAccessPointAttributes\(\)' instead/); +}); + +test('import an AccessPoint using fromAccessPointAttributes and the accessPointId', () => { + // WHEN + const ap = new AccessPoint(stack, 'MyAccessPoint', { + fileSystem, + }); + const imported = AccessPoint.fromAccessPointAttributes(stack, 'ImportedAccessPoint', { + accessPointId: ap.accessPointId, + fileSystem: fileSystem, + }); + // THEN + expect(imported.accessPointId).toEqual(ap.accessPointId); + expect(imported.accessPointArn).toEqual(ap.accessPointArn); + expect(imported.fileSystem).toEqual(ap.fileSystem); +}); + +test('import an AccessPoint using fromAccessPointAttributes and the accessPointArn', () => { + // WHEN + const ap = new AccessPoint(stack, 'MyAccessPoint', { + fileSystem, + }); + const imported = AccessPoint.fromAccessPointAttributes(stack, 'ImportedAccessPoint', { + accessPointArn: ap.accessPointArn, + fileSystem: fileSystem, + }); + // THEN + expect(imported.accessPointId).toEqual(ap.accessPointId); + expect(imported.accessPointArn).toEqual(ap.accessPointArn); + expect(imported.fileSystem).toEqual(ap.fileSystem); +}); + +test('import using accessPointArn', () => { + // WHEN + const ap = new AccessPoint(stack, 'MyAccessPoint', { + fileSystem, + }); + const imported = AccessPoint.fromAccessPointAttributes(stack, 'ImportedAccessPoint', { + accessPointArn: ap.accessPointArn, + fileSystem: fileSystem, + }); + // THEN + expect(imported.accessPointId).toEqual(ap.accessPointId); + expect(imported.accessPointArn).toEqual(ap.accessPointArn); + expect(imported.fileSystem).toEqual(ap.fileSystem); +}); + +test('throw when import using accessPointArn and accessPointId', () => { + // WHEN + const ap = new AccessPoint(stack, 'MyAccessPoint', { + fileSystem, + }); + + // THEN + expect(() => AccessPoint.fromAccessPointAttributes(stack, 'ImportedAccessPoint', { + accessPointArn: ap.accessPointArn, + accessPointId: ap.accessPointId, + fileSystem: fileSystem, + })).toThrow(/Only one of accessPointId or AccessPointArn can be provided!/); +}); + +test('throw when import without accessPointArn or accessPointId', () => { + // WHEN + new AccessPoint(stack, 'MyAccessPoint', { + fileSystem, + }); + + // THEN + expect(() => AccessPoint.fromAccessPointAttributes(stack, 'ImportedAccessPoint', { + fileSystem: fileSystem, + })).toThrow(/One of accessPointId or AccessPointArn is required!/); +}); + test('custom access point is created correctly', () => { // WHEN new AccessPoint(stack, 'MyAccessPoint', { @@ -83,4 +164,4 @@ test('custom access point is created correctly', () => { Path: '/export/share', }, })); -}); \ No newline at end of file +}); diff --git a/packages/@aws-cdk/aws-lambda/lib/filesystem.ts b/packages/@aws-cdk/aws-lambda/lib/filesystem.ts index 20b0cb1fc130d..388db50e045ec 100644 --- a/packages/@aws-cdk/aws-lambda/lib/filesystem.ts +++ b/packages/@aws-cdk/aws-lambda/lib/filesystem.ts @@ -50,7 +50,7 @@ export class FileSystem { * @param ap the Amazon EFS access point * @param mountPath the target path in the lambda runtime environment */ - public static fromEfsAccessPoint(ap: efs.AccessPoint, mountPath: string): FileSystem { + public static fromEfsAccessPoint(ap: efs.IAccessPoint, mountPath: string): FileSystem { return new FileSystem({ localMountPath: mountPath, arn: ap.accessPointArn, diff --git a/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.expected.json b/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.expected.json index ff7a04f8b7fd5..3d17a0e6ca6bf 100644 --- a/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.expected.json +++ b/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.expected.json @@ -736,7 +736,7 @@ "Type": "AWS::Lambda::Function", "Properties": { "Code": { - "ZipFile": "\nimport json\nimport os\nimport string\nimport random\nimport datetime\n\nMSG_FILE_PATH = '/mnt/msg/content'\n\ndef randomString(stringLength=10):\n letters = string.ascii_lowercase\n return ''.join(random.choice(letters) for i in range(stringLength))\n\ndef lambda_handler(event, context):\n with open(MSG_FILE_PATH, 'a') as f:\n f.write(f\"{datetime.datetime.utcnow():%Y-%m-%d-%H:%M:%S} \" + randomString(5) + ' ')\n\n file = open(MSG_FILE_PATH, \"r\")\n file_content = file.read()\n file.close()\n\n return {\n 'statusCode': 200,\n 'body': str(file_content)\n }\n " + "ZipFile": "\nimport json\nimport os\nimport string\nimport random\nimport datetime\n\nMSG_FILE_PATH = '/mnt/msg/content'\n\ndef randomString(stringLength=10):\n letters = string.ascii_lowercase\n return ''.join(random.choice(letters) for i in range(stringLength))\n\ndef lambda_handler(event, context):\n with open(MSG_FILE_PATH, 'a') as f:\n f.write(f\"{datetime.datetime.utcnow():%Y-%m-%d-%H:%M:%S} \" + randomString(5) + ' ')\n\n file = open(MSG_FILE_PATH, \"r\")\n file_content = file.read()\n file.close()\n\n return {\n 'statusCode': 200,\n 'body': str(file_content)\n }\n" }, "Handler": "index.lambda_handler", "Role": { @@ -746,6 +746,34 @@ ] }, "Runtime": "python3.7", + "FileSystemConfigs": [ + { + "LocalMountPath": "/mnt/msg", + "Arn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":elasticfilesystem:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":access-point/", + { + "Ref": "EfsAccessPointE419FED9" + } + ] + ] + } + } + ], "VpcConfig": { "SecurityGroupIds": [ { @@ -766,7 +794,203 @@ "Ref": "VpcPrivateSubnet3SubnetF258B56E" } ] + } + }, + "DependsOn": [ + "EfsEfsMountTarget195B2DD2E", + "EfsEfsMountTarget2315C927F", + "EfsEfsMountTarget36646B9A0", + "MyLambdaServiceRoleDefaultPolicy5BBC6F68", + "MyLambdaServiceRole4539ECB6" + ] + }, + "securityGroupfromawscdklambda1MyLambda2SecurityGroup7492F70D20498301D9D2": { + "Type": "AWS::EC2::SecurityGroupIngress", + "Properties": { + "IpProtocol": "tcp", + "Description": "from awscdklambda1MyLambda2SecurityGroup7492F70D:2049", + "FromPort": 2049, + "GroupId": { + "Fn::GetAtt": [ + "EfsEfsSecurityGroup6F40EA3B", + "GroupId" + ] + }, + "SourceSecurityGroupId": { + "Fn::GetAtt": [ + "MyLambda2SecurityGroup3C507954", + "GroupId" + ] + }, + "ToPort": 2049 + } + }, + "MyLambda2ServiceRoleD09B370C": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" + ] + ] + } + ] + }, + "DependsOn": [ + "MyLambdaCCE802FB", + "MyLambdaSecurityGroup1E71A818", + "MyLambdaServiceRoleDefaultPolicy5BBC6F68", + "MyLambdaServiceRole4539ECB6" + ] + }, + "MyLambda2ServiceRoleDefaultPolicy2BECE79D": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "elasticfilesystem:ClientMount", + "Condition": { + "StringEquals": { + "elasticfilesystem:AccessPointArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":elasticfilesystem:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":access-point/", + { + "Ref": "EfsAccessPointE419FED9" + } + ] + ] + } + } + }, + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "elasticfilesystem:ClientWrite", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":elasticfilesystem:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":file-system/", + { + "Ref": "Efs9E8BF36B" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "MyLambda2ServiceRoleDefaultPolicy2BECE79D", + "Roles": [ + { + "Ref": "MyLambda2ServiceRoleD09B370C" + } + ] + }, + "DependsOn": [ + "MyLambdaCCE802FB", + "MyLambdaSecurityGroup1E71A818", + "MyLambdaServiceRoleDefaultPolicy5BBC6F68", + "MyLambdaServiceRole4539ECB6" + ] + }, + "MyLambda2SecurityGroup3C507954": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "Automatic security group for Lambda Function awscdklambda1MyLambda232FB7CD2", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } + }, + "DependsOn": [ + "MyLambdaCCE802FB", + "MyLambdaSecurityGroup1E71A818", + "MyLambdaServiceRoleDefaultPolicy5BBC6F68", + "MyLambdaServiceRole4539ECB6" + ] + }, + "MyLambda2254B54D5": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "\nimport json\nimport os\nimport string\nimport random\nimport datetime\n\nMSG_FILE_PATH = '/mnt/msg/content'\n\ndef randomString(stringLength=10):\n letters = string.ascii_lowercase\n return ''.join(random.choice(letters) for i in range(stringLength))\n\ndef lambda_handler(event, context):\n with open(MSG_FILE_PATH, 'a') as f:\n f.write(f\"{datetime.datetime.utcnow():%Y-%m-%d-%H:%M:%S} \" + randomString(5) + ' ')\n\n file = open(MSG_FILE_PATH, \"r\")\n file_content = file.read()\n file.close()\n\n return {\n 'statusCode': 200,\n 'body': str(file_content)\n }\n" + }, + "Handler": "index.lambda_handler", + "Role": { + "Fn::GetAtt": [ + "MyLambda2ServiceRoleD09B370C", + "Arn" + ] }, + "Runtime": "python3.7", "FileSystemConfigs": [ { "LocalMountPath": "/mnt/msg", @@ -794,14 +1018,36 @@ ] } } - ] + ], + "VpcConfig": { + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "MyLambda2SecurityGroup3C507954", + "GroupId" + ] + } + ], + "SubnetIds": [ + { + "Ref": "VpcPrivateSubnet1Subnet536B997A" + }, + { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" + }, + { + "Ref": "VpcPrivateSubnet3SubnetF258B56E" + } + ] + } }, "DependsOn": [ - "EfsEfsMountTarget195B2DD2E", - "EfsEfsMountTarget2315C927F", - "EfsEfsMountTarget36646B9A0", + "MyLambdaCCE802FB", + "MyLambdaSecurityGroup1E71A818", "MyLambdaServiceRoleDefaultPolicy5BBC6F68", - "MyLambdaServiceRole4539ECB6" + "MyLambdaServiceRole4539ECB6", + "MyLambda2ServiceRoleDefaultPolicy2BECE79D", + "MyLambda2ServiceRoleD09B370C" ] } } diff --git a/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.ts b/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.ts index da6515233e770..c9441c1cd0a52 100644 --- a/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.ts +++ b/packages/@aws-cdk/aws-lambda/test/integ.lambda.filesystem.ts @@ -7,6 +7,7 @@ const app = new cdk.App(); const stack = new cdk.Stack(app, 'aws-cdk-lambda-1'); + const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 3, natGateways: 1, @@ -31,9 +32,7 @@ const accessPoint = fileSystem.addAccessPoint('AccessPoint', { }, }); -// this function will mount the access point to '/mnt/msg' and write content onto /mnt/msg/content -new lambda.Function(stack, 'MyLambda', { - code: new lambda.InlineCode(` +const lambdaCode = new lambda.InlineCode(` import json import os import string @@ -58,11 +57,46 @@ def lambda_handler(event, context): 'statusCode': 200, 'body': str(file_content) } - `), +`); + +// this function will mount the access point to '/mnt/msg' and write content onto /mnt/msg/content +const lambda1 = new lambda.Function(stack, 'MyLambda', { + code: lambdaCode, handler: 'index.lambda_handler', runtime: lambda.Runtime.PYTHON_3_7, vpc, filesystem: lambda.FileSystem.fromEfsAccessPoint(accessPoint, '/mnt/msg'), }); +let importedFileSystem = efs.FileSystem.fromFileSystemAttributes(stack, 'fileSystemImported', { + fileSystemId: fileSystem.fileSystemId, + securityGroup: ec2.SecurityGroup.fromSecurityGroupId( + stack, + 'securityGroup', + fileSystem.connections.securityGroups[0].securityGroupId, + ), +}); + +let importedAccessPoint = efs.AccessPoint.fromAccessPointAttributes(stack, 'AccessPointImported', { + accessPointId: accessPoint.accessPointId, + fileSystem: importedFileSystem, +}); + +// this function will mount the access point to '/mnt/msg' and write content onto /mnt/msg/content +const lambda2 = new lambda.Function(stack, 'MyLambda2', { + code: lambdaCode, + handler: 'index.lambda_handler', + runtime: lambda.Runtime.PYTHON_3_7, + vpc, + filesystem: lambda.FileSystem.fromEfsAccessPoint( + importedAccessPoint, + '/mnt/msg', + ), +}); + +// lambda2 doesn't have dependencies on MountTargets because the fileSystem is imported. +// Ideally, lambda2 would be deployed in another stack but integ doesn't support it. +// We are adding a dependency on the first lambda to simulate this situation. +lambda2.node.addDependency(lambda1); + app.synth(); From 8c17a35746271d38289f6e200aea35b201b8a93d Mon Sep 17 00:00:00 2001 From: AWS CDK Automation <43080478+aws-cdk-automation@users.noreply.github.com> Date: Wed, 11 Nov 2020 19:27:10 +0100 Subject: [PATCH 17/25] feat(cfnspec): cloudformation spec v20.0.0 (#11319) Following are open issues for missing properties that will be added with the update: - Closes https://github.com/aws/aws-cdk/issues/11275 --- packages/@aws-cdk/aws-ec2/lib/vpc.ts | 7 + .../@aws-cdk/aws-iotsitewise/.eslintrc.js | 3 + packages/@aws-cdk/aws-iotsitewise/.gitignore | 19 + packages/@aws-cdk/aws-iotsitewise/.npmignore | 28 + packages/@aws-cdk/aws-iotsitewise/LICENSE | 201 ++ packages/@aws-cdk/aws-iotsitewise/NOTICE | 2 + packages/@aws-cdk/aws-iotsitewise/README.md | 16 + .../@aws-cdk/aws-iotsitewise/jest.config.js | 2 + .../@aws-cdk/aws-iotsitewise/lib/index.ts | 2 + .../@aws-cdk/aws-iotsitewise/package.json | 96 + .../aws-iotsitewise/test/iotsitewise.test.ts | 6 + packages/@aws-cdk/aws-ivs/.eslintrc.js | 3 + packages/@aws-cdk/aws-ivs/.gitignore | 19 + packages/@aws-cdk/aws-ivs/.npmignore | 28 + packages/@aws-cdk/aws-ivs/LICENSE | 201 ++ packages/@aws-cdk/aws-ivs/NOTICE | 2 + packages/@aws-cdk/aws-ivs/README.md | 16 + packages/@aws-cdk/aws-ivs/jest.config.js | 2 + packages/@aws-cdk/aws-ivs/lib/index.ts | 2 + packages/@aws-cdk/aws-ivs/package.json | 96 + packages/@aws-cdk/aws-ivs/test/ivs.test.ts | 6 + .../@aws-cdk/aws-mediapackage/.eslintrc.js | 3 + packages/@aws-cdk/aws-mediapackage/.gitignore | 19 + packages/@aws-cdk/aws-mediapackage/.npmignore | 28 + packages/@aws-cdk/aws-mediapackage/LICENSE | 201 ++ packages/@aws-cdk/aws-mediapackage/NOTICE | 2 + packages/@aws-cdk/aws-mediapackage/README.md | 16 + .../@aws-cdk/aws-mediapackage/jest.config.js | 2 + .../@aws-cdk/aws-mediapackage/lib/index.ts | 2 + .../@aws-cdk/aws-mediapackage/package.json | 96 + .../test/mediapackage.test.ts | 6 + packages/@aws-cdk/cfnspec/CHANGELOG.md | 152 ++ packages/@aws-cdk/cfnspec/cfn.version | 2 +- ...0_CloudFormationResourceSpecification.json | 2350 ++++++++++++++++- ...aPackage_PackagingConfiguration_patch.json | 29 + ...80_AutoScaling_AutoScalingGroup_patch.json | 31 + .../680_MediaPackage_Channel_patch.json | 15 + .../cloudformation-include/package.json | 6 + packages/aws-cdk-lib/package.json | 3 + packages/decdk/package.json | 3 + packages/monocdk/package.json | 5 +- 41 files changed, 3587 insertions(+), 141 deletions(-) create mode 100644 packages/@aws-cdk/aws-iotsitewise/.eslintrc.js create mode 100644 packages/@aws-cdk/aws-iotsitewise/.gitignore create mode 100644 packages/@aws-cdk/aws-iotsitewise/.npmignore create mode 100644 packages/@aws-cdk/aws-iotsitewise/LICENSE create mode 100644 packages/@aws-cdk/aws-iotsitewise/NOTICE create mode 100644 packages/@aws-cdk/aws-iotsitewise/README.md create mode 100644 packages/@aws-cdk/aws-iotsitewise/jest.config.js create mode 100644 packages/@aws-cdk/aws-iotsitewise/lib/index.ts create mode 100644 packages/@aws-cdk/aws-iotsitewise/package.json create mode 100644 packages/@aws-cdk/aws-iotsitewise/test/iotsitewise.test.ts create mode 100644 packages/@aws-cdk/aws-ivs/.eslintrc.js create mode 100644 packages/@aws-cdk/aws-ivs/.gitignore create mode 100644 packages/@aws-cdk/aws-ivs/.npmignore create mode 100644 packages/@aws-cdk/aws-ivs/LICENSE create mode 100644 packages/@aws-cdk/aws-ivs/NOTICE create mode 100644 packages/@aws-cdk/aws-ivs/README.md create mode 100644 packages/@aws-cdk/aws-ivs/jest.config.js create mode 100644 packages/@aws-cdk/aws-ivs/lib/index.ts create mode 100644 packages/@aws-cdk/aws-ivs/package.json create mode 100644 packages/@aws-cdk/aws-ivs/test/ivs.test.ts create mode 100644 packages/@aws-cdk/aws-mediapackage/.eslintrc.js create mode 100644 packages/@aws-cdk/aws-mediapackage/.gitignore create mode 100644 packages/@aws-cdk/aws-mediapackage/.npmignore create mode 100644 packages/@aws-cdk/aws-mediapackage/LICENSE create mode 100644 packages/@aws-cdk/aws-mediapackage/NOTICE create mode 100644 packages/@aws-cdk/aws-mediapackage/README.md create mode 100644 packages/@aws-cdk/aws-mediapackage/jest.config.js create mode 100644 packages/@aws-cdk/aws-mediapackage/lib/index.ts create mode 100644 packages/@aws-cdk/aws-mediapackage/package.json create mode 100644 packages/@aws-cdk/aws-mediapackage/test/mediapackage.test.ts create mode 100644 packages/@aws-cdk/cfnspec/spec-source/670_MediaPackage_PackagingConfiguration_patch.json create mode 100644 packages/@aws-cdk/cfnspec/spec-source/680_AutoScaling_AutoScalingGroup_patch.json create mode 100644 packages/@aws-cdk/cfnspec/spec-source/680_MediaPackage_Channel_patch.json diff --git a/packages/@aws-cdk/aws-ec2/lib/vpc.ts b/packages/@aws-cdk/aws-ec2/lib/vpc.ts index f73a3b4c08c2a..e46113b14c89a 100644 --- a/packages/@aws-cdk/aws-ec2/lib/vpc.ts +++ b/packages/@aws-cdk/aws-ec2/lib/vpc.ts @@ -1485,6 +1485,12 @@ export class Subnet extends Resource implements ISubnet { */ public readonly subnetIpv6CidrBlocks: string[]; + /** + * The Amazon Resource Name (ARN) of the Outpost for this subnet (if one exists). + * @attribute + */ + public readonly subnetOutpostArn: string; + /** * @attribute */ @@ -1525,6 +1531,7 @@ export class Subnet extends Resource implements ISubnet { this.subnetVpcId = subnet.attrVpcId; this.subnetAvailabilityZone = subnet.attrAvailabilityZone; this.subnetIpv6CidrBlocks = subnet.attrIpv6CidrBlocks; + this.subnetOutpostArn = subnet.attrOutpostArn; // subnet.attrNetworkAclAssociationId is the default ACL after the subnet // was just created. However, the ACL can be replaced at a later time. diff --git a/packages/@aws-cdk/aws-iotsitewise/.eslintrc.js b/packages/@aws-cdk/aws-iotsitewise/.eslintrc.js new file mode 100644 index 0000000000000..61dd8dd001f63 --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/.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-iotsitewise/.gitignore b/packages/@aws-cdk/aws-iotsitewise/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/.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-iotsitewise/.npmignore b/packages/@aws-cdk/aws-iotsitewise/.npmignore new file mode 100644 index 0000000000000..e4486030fcb17 --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/.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-iotsitewise/LICENSE b/packages/@aws-cdk/aws-iotsitewise/LICENSE new file mode 100644 index 0000000000000..b71ec1688783a --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/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-2020 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-iotsitewise/NOTICE b/packages/@aws-cdk/aws-iotsitewise/NOTICE new file mode 100644 index 0000000000000..bfccac9a7f69c --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-iotsitewise/README.md b/packages/@aws-cdk/aws-iotsitewise/README.md new file mode 100644 index 0000000000000..c92df247f85b4 --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/README.md @@ -0,0 +1,16 @@ +## AWS::IoTSiteWise 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](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) are always stable and safe to use. + +--- + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts +import iotsitewise = require('@aws-cdk/aws-iotsitewise'); +``` diff --git a/packages/@aws-cdk/aws-iotsitewise/jest.config.js b/packages/@aws-cdk/aws-iotsitewise/jest.config.js new file mode 100644 index 0000000000000..54e28beb9798b --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/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-iotsitewise/lib/index.ts b/packages/@aws-cdk/aws-iotsitewise/lib/index.ts new file mode 100644 index 0000000000000..c31b4b7c13647 --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::IoTSiteWise CloudFormation Resources: +export * from './iotsitewise.generated'; diff --git a/packages/@aws-cdk/aws-iotsitewise/package.json b/packages/@aws-cdk/aws-iotsitewise/package.json new file mode 100644 index 0000000000000..8291616094fca --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/package.json @@ -0,0 +1,96 @@ +{ + "name": "@aws-cdk/aws-iotsitewise", + "version": "0.0.0", + "description": "The CDK Construct Library for AWS::IoTSiteWise", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTSiteWise", + "packageId": "Amazon.CDK.AWS.IoTSiteWise", + "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.iotsitewise", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "iotsitewise" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ], + "distName": "aws-cdk.aws-iotsitewise", + "module": "aws_cdk.aws_iotsitewise" + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-iotsitewise" + }, + "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" + }, + "cdk-build": { + "cloudformation": "AWS::IoTSiteWise", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::IoTSiteWise", + "aws-iotsitewise" + ], + "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-iotsitewise/test/iotsitewise.test.ts b/packages/@aws-cdk/aws-iotsitewise/test/iotsitewise.test.ts new file mode 100644 index 0000000000000..e394ef336bfb4 --- /dev/null +++ b/packages/@aws-cdk/aws-iotsitewise/test/iotsitewise.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-ivs/.eslintrc.js b/packages/@aws-cdk/aws-ivs/.eslintrc.js new file mode 100644 index 0000000000000..61dd8dd001f63 --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/.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-ivs/.gitignore b/packages/@aws-cdk/aws-ivs/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/.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-ivs/.npmignore b/packages/@aws-cdk/aws-ivs/.npmignore new file mode 100644 index 0000000000000..e4486030fcb17 --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/.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-ivs/LICENSE b/packages/@aws-cdk/aws-ivs/LICENSE new file mode 100644 index 0000000000000..b71ec1688783a --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/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-2020 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-ivs/NOTICE b/packages/@aws-cdk/aws-ivs/NOTICE new file mode 100644 index 0000000000000..bfccac9a7f69c --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-ivs/README.md b/packages/@aws-cdk/aws-ivs/README.md new file mode 100644 index 0000000000000..0e8b591f39c21 --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/README.md @@ -0,0 +1,16 @@ +## AWS::IVS 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](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) are always stable and safe to use. + +--- + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts +import ivs = require('@aws-cdk/aws-ivs'); +``` diff --git a/packages/@aws-cdk/aws-ivs/jest.config.js b/packages/@aws-cdk/aws-ivs/jest.config.js new file mode 100644 index 0000000000000..54e28beb9798b --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/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-ivs/lib/index.ts b/packages/@aws-cdk/aws-ivs/lib/index.ts new file mode 100644 index 0000000000000..418b7c6157e85 --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::IVS CloudFormation Resources: +export * from './ivs.generated'; diff --git a/packages/@aws-cdk/aws-ivs/package.json b/packages/@aws-cdk/aws-ivs/package.json new file mode 100644 index 0000000000000..ea872b6960b3f --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/package.json @@ -0,0 +1,96 @@ +{ + "name": "@aws-cdk/aws-ivs", + "version": "0.0.0", + "description": "The CDK Construct Library for AWS::IVS", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IVS", + "packageId": "Amazon.CDK.AWS.IVS", + "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.ivs", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "ivs" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ], + "distName": "aws-cdk.aws-ivs", + "module": "aws_cdk.aws_ivs" + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-ivs" + }, + "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" + }, + "cdk-build": { + "cloudformation": "AWS::IVS", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::IVS", + "aws-ivs" + ], + "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-ivs/test/ivs.test.ts b/packages/@aws-cdk/aws-ivs/test/ivs.test.ts new file mode 100644 index 0000000000000..e394ef336bfb4 --- /dev/null +++ b/packages/@aws-cdk/aws-ivs/test/ivs.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-mediapackage/.eslintrc.js b/packages/@aws-cdk/aws-mediapackage/.eslintrc.js new file mode 100644 index 0000000000000..61dd8dd001f63 --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/.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-mediapackage/.gitignore b/packages/@aws-cdk/aws-mediapackage/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/.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-mediapackage/.npmignore b/packages/@aws-cdk/aws-mediapackage/.npmignore new file mode 100644 index 0000000000000..e4486030fcb17 --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/.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-mediapackage/LICENSE b/packages/@aws-cdk/aws-mediapackage/LICENSE new file mode 100644 index 0000000000000..b71ec1688783a --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/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-2020 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-mediapackage/NOTICE b/packages/@aws-cdk/aws-mediapackage/NOTICE new file mode 100644 index 0000000000000..bfccac9a7f69c --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-mediapackage/README.md b/packages/@aws-cdk/aws-mediapackage/README.md new file mode 100644 index 0000000000000..11d84261af563 --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/README.md @@ -0,0 +1,16 @@ +## AWS::MediaPackage 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](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) are always stable and safe to use. + +--- + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts +import mediapackage = require('@aws-cdk/aws-mediapackage'); +``` diff --git a/packages/@aws-cdk/aws-mediapackage/jest.config.js b/packages/@aws-cdk/aws-mediapackage/jest.config.js new file mode 100644 index 0000000000000..54e28beb9798b --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/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-mediapackage/lib/index.ts b/packages/@aws-cdk/aws-mediapackage/lib/index.ts new file mode 100644 index 0000000000000..730abc4ac52fc --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::MediaPackage CloudFormation Resources: +export * from './mediapackage.generated'; diff --git a/packages/@aws-cdk/aws-mediapackage/package.json b/packages/@aws-cdk/aws-mediapackage/package.json new file mode 100644 index 0000000000000..c3561ae1027bf --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/package.json @@ -0,0 +1,96 @@ +{ + "name": "@aws-cdk/aws-mediapackage", + "version": "0.0.0", + "description": "The CDK Construct Library for AWS::MediaPackage", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaPackage", + "packageId": "Amazon.CDK.AWS.MediaPackage", + "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.mediapackage", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "mediapackage" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ], + "distName": "aws-cdk.aws-mediapackage", + "module": "aws_cdk.aws_mediapackage" + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-mediapackage" + }, + "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" + }, + "cdk-build": { + "cloudformation": "AWS::MediaPackage", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::MediaPackage", + "aws-mediapackage" + ], + "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-mediapackage/test/mediapackage.test.ts b/packages/@aws-cdk/aws-mediapackage/test/mediapackage.test.ts new file mode 100644 index 0000000000000..e394ef336bfb4 --- /dev/null +++ b/packages/@aws-cdk/aws-mediapackage/test/mediapackage.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 80dcd61c194ee..9c3b7d9e1e6d0 100644 --- a/packages/@aws-cdk/cfnspec/CHANGELOG.md +++ b/packages/@aws-cdk/cfnspec/CHANGELOG.md @@ -1,3 +1,155 @@ +# CloudFormation Resource Specification v20.0.0 + +## New Resource Types + +* AWS::IVS::Channel +* AWS::IVS::PlaybackKeyPair +* AWS::IVS::StreamKey +* AWS::IoTSiteWise::Asset +* AWS::IoTSiteWise::AssetModel +* AWS::IoTSiteWise::Gateway +* AWS::MediaPackage::Asset +* AWS::MediaPackage::Channel +* AWS::MediaPackage::OriginEndpoint +* AWS::MediaPackage::PackagingConfiguration +* AWS::MediaPackage::PackagingGroup + +## Attribute Changes + +* AWS::AutoScaling::AutoScalingGroup LaunchConfigurationName (__added__) +* AWS::AutoScaling::AutoScalingGroup LaunchTemplateSpecification (__added__) +* AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy (__added__) +* AWS::AutoScaling::AutoScalingGroup PlacementGroup (__added__) +* AWS::AutoScaling::AutoScalingGroup VPCZoneIdentifier (__added__) +* AWS::EC2::Subnet OutpostArn (__added__) + +## Property Changes + +* AWS::AmazonMQ::Broker LdapMetadata (__deleted__) +* AWS::AppSync::ApiKey ApiKeyId (__added__) +* AWS::AppSync::FunctionConfiguration SyncConfig (__added__) +* AWS::Athena::NamedQuery WorkGroup (__added__) +* AWS::AutoScaling::AutoScalingGroup CapacityRebalance (__added__) +* AWS::AutoScaling::LaunchConfiguration MetadataOptions (__added__) +* AWS::Batch::ComputeEnvironment Tags (__added__) +* AWS::Batch::JobDefinition Tags (__added__) +* AWS::Batch::JobQueue Tags (__added__) +* AWS::EC2::ClientVpnEndpoint SelfServicePortal (__added__) +* AWS::EC2::Route CarrierGatewayId (__added__) +* AWS::EC2::Route LocalGatewayId (__added__) +* AWS::EC2::Route VpcEndpointId (__added__) +* AWS::EC2::Subnet OutpostArn (__added__) +* AWS::EC2::VPCEndpointService ApplianceLoadBalancerArns (__deleted__) +* AWS::EMR::Cluster LogEncryptionKmsKeyId (__added__) +* AWS::EMR::Cluster ManagedScalingPolicy (__added__) +* AWS::EMR::Cluster StepConcurrencyLevel (__added__) +* AWS::ElastiCache::ReplicationGroup GlobalReplicationGroupId (__added__) +* AWS::ElastiCache::ReplicationGroup MultiAZEnabled.UpdateType (__changed__) + * Old: Immutable + * New: Mutable +* AWS::ElasticLoadBalancingV2::Listener Port.Required (__changed__) + * Old: true + * New: false +* AWS::ElasticLoadBalancingV2::Listener Protocol.Required (__changed__) + * Old: true + * New: false +* AWS::ElasticLoadBalancingV2::LoadBalancer SubnetMappings.UpdateType (__changed__) + * Old: Immutable + * New: Mutable +* AWS::GameLift::MatchmakingConfiguration FlexMatchMode (__added__) +* AWS::GameLift::MatchmakingConfiguration GameSessionQueueArns.Required (__changed__) + * Old: true + * New: false +* AWS::GlobalAccelerator::EndpointGroup PortOverrides (__added__) +* AWS::KinesisFirehose::DeliveryStream DeliveryStreamEncryptionConfigurationInput (__added__) +* AWS::KinesisFirehose::DeliveryStream Tags (__added__) +* AWS::KinesisFirehose::DeliveryStream KinesisStreamSourceConfiguration.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::LakeFormation::DataLakeSettings TrustedResourceOwners (__added__) +* AWS::Lambda::EventSourceMapping Queues (__added__) +* AWS::Lambda::EventSourceMapping SourceAccessConfigurations (__added__) +* AWS::Logs::LogGroup KmsKeyId (__added__) +* AWS::Logs::LogGroup LogGroupName.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-cwl-loggroup-loggroupname + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-logs-loggroup-loggroupname +* AWS::Logs::LogGroup RetentionInDays.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-cwl-loggroup-retentionindays + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-logs-loggroup-retentionindays +* AWS::RDS::DBCluster GlobalClusterIdentifier (__added__) +* AWS::RDS::DBCluster Engine.UpdateType (__changed__) + * Old: Immutable + * New: Conditional +* AWS::RDS::DBCluster EngineVersion.UpdateType (__changed__) + * Old: Immutable + * New: Mutable +* AWS::RDS::DBInstance Engine.UpdateType (__changed__) + * Old: Immutable + * New: Conditional +* AWS::SNS::Subscription SubscriptionRoleArn (__added__) +* AWS::SNS::Topic FifoTopic (__added__) + +## Property Type Changes + +* AWS::AmazonMQ::Broker.InterBrokerCred (__removed__) +* AWS::AmazonMQ::Broker.LdapMetadata (__removed__) +* AWS::AmazonMQ::Broker.ServerMetadata (__removed__) +* AWS::AppSync::FunctionConfiguration.LambdaConflictHandlerConfig (__added__) +* AWS::AppSync::FunctionConfiguration.SyncConfig (__added__) +* AWS::AutoScaling::LaunchConfiguration.MetadataOption (__added__) +* AWS::CloudFront::Distribution.OriginShield (__added__) +* AWS::EMR::Cluster.ComputeLimits (__added__) +* AWS::EMR::Cluster.ManagedScalingPolicy (__added__) +* AWS::EMR::Cluster.OnDemandProvisioningSpecification (__added__) +* AWS::EMR::InstanceFleetConfig.OnDemandProvisioningSpecification (__added__) +* AWS::Events::Rule.DeadLetterConfig (__added__) +* AWS::Events::Rule.RedshiftDataParameters (__added__) +* AWS::Events::Rule.RetryPolicy (__added__) +* AWS::GlobalAccelerator::EndpointGroup.PortOverride (__added__) +* AWS::KinesisFirehose::DeliveryStream.DeliveryStreamEncryptionConfigurationInput (__added__) +* AWS::Lambda::EventSourceMapping.SourceAccessConfiguration (__added__) +* AWS::SageMaker::Model.ImageConfig (__added__) +* AWS::Transfer::Server.SecurityGroupId (__added__) +* AWS::AutoScaling::AutoScalingGroup.LaunchTemplateOverrides LaunchTemplateSpecification (__added__) +* AWS::CloudFront::Distribution.Origin OriginShield (__added__) +* AWS::DLM::LifecyclePolicy.Parameters NoReboot (__added__) +* AWS::EC2::ClientVpnEndpoint.FederatedAuthenticationRequest SelfServiceSAMLProviderArn (__added__) +* AWS::EMR::Cluster.InstanceFleetProvisioningSpecifications OnDemandSpecification (__added__) +* AWS::EMR::Cluster.InstanceFleetProvisioningSpecifications SpotSpecification.Required (__changed__) + * Old: true + * New: false +* AWS::EMR::Cluster.SpotProvisioningSpecification AllocationStrategy (__added__) +* AWS::EMR::InstanceFleetConfig.InstanceFleetProvisioningSpecifications OnDemandSpecification (__added__) +* AWS::EMR::InstanceFleetConfig.InstanceFleetProvisioningSpecifications SpotSpecification.Required (__changed__) + * Old: true + * New: false +* AWS::EMR::InstanceFleetConfig.SpotProvisioningSpecification AllocationStrategy (__added__) +* AWS::ElasticLoadBalancingV2::LoadBalancer.SubnetMapping IPv6Address (__added__) +* AWS::ElasticLoadBalancingV2::TargetGroup.Matcher HttpCode.Required (__changed__) + * Old: true + * New: false +* AWS::Elasticsearch::Domain.ElasticsearchClusterConfig WarmCount (__added__) +* AWS::Elasticsearch::Domain.ElasticsearchClusterConfig WarmEnabled (__added__) +* AWS::Elasticsearch::Domain.ElasticsearchClusterConfig WarmType (__added__) +* AWS::Events::Rule.Target DeadLetterConfig (__added__) +* AWS::Events::Rule.Target RedshiftDataParameters (__added__) +* AWS::Events::Rule.Target RetryPolicy (__added__) +* AWS::KinesisFirehose::DeliveryStream.KinesisStreamSourceConfiguration KinesisStreamARN.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::KinesisFirehose::DeliveryStream.KinesisStreamSourceConfiguration RoleARN.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::S3::Bucket.Metrics EventThreshold.Required (__changed__) + * Old: true + * New: false +* AWS::S3::Bucket.SourceSelectionCriteria SseKmsEncryptedObjects.Required (__changed__) + * Old: true + * New: false +* AWS::SageMaker::Model.ContainerDefinition ImageConfig (__added__) +* AWS::Transfer::Server.EndpointDetails SecurityGroupIds (__added__) + + # CloudFormation Resource Specification v18.7.0 ## New Resource Types diff --git a/packages/@aws-cdk/cfnspec/cfn.version b/packages/@aws-cdk/cfnspec/cfn.version index fb67e3d517039..e88320d7c3862 100644 --- a/packages/@aws-cdk/cfnspec/cfn.version +++ b/packages/@aws-cdk/cfnspec/cfn.version @@ -1 +1 @@ -18.7.0 +20.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 a118251db1d89..e5bb42cdaee87 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json +++ b/packages/@aws-cdk/cfnspec/spec-source/000_CloudFormationResourceSpecification.json @@ -236,41 +236,6 @@ } } }, - "AWS::AmazonMQ::Broker.InterBrokerCred": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-interbrokercred.html", - "Properties": { - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-interbrokercred.html#cfn-amazonmq-broker-interbrokercred-password", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Username": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-interbrokercred.html#cfn-amazonmq-broker-interbrokercred-username", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmazonMQ::Broker.LdapMetadata": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-ldapmetadata.html", - "Properties": { - "InterBrokerCreds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-ldapmetadata.html#cfn-amazonmq-broker-ldapmetadata-interbrokercreds", - "ItemType": "InterBrokerCred", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "ServerMetadata": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-ldapmetadata.html#cfn-amazonmq-broker-ldapmetadata-servermetadata", - "Required": true, - "Type": "ServerMetadata", - "UpdateType": "Mutable" - } - } - }, "AWS::AmazonMQ::Broker.LdapServerMetadata": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-ldapservermetadata.html", "Properties": { @@ -383,78 +348,6 @@ } } }, - "AWS::AmazonMQ::Broker.ServerMetadata": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html", - "Properties": { - "Hosts": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-hosts", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - }, - "RoleBase": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-rolebase", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "RoleName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-rolename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleSearchMatching": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-rolesearchmatching", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "RoleSearchSubtree": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-rolesearchsubtree", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "ServiceAccountPassword": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-serviceaccountpassword", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ServiceAccountUsername": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-serviceaccountusername", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "UserBase": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-userbase", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "UserRoleName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-userrolename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "UserSearchMatching": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-usersearchmatching", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "UserSearchSubtree": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-servermetadata.html#cfn-amazonmq-broker-servermetadata-usersearchsubtree", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - } - } - }, "AWS::AmazonMQ::Broker.TagsEntry": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-tagsentry.html", "Properties": { @@ -5284,6 +5177,40 @@ } } }, + "AWS::AppSync::FunctionConfiguration.LambdaConflictHandlerConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-lambdaconflicthandlerconfig.html", + "Properties": { + "LambdaConflictHandlerArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-lambdaconflicthandlerconfig.html#cfn-appsync-functionconfiguration-lambdaconflicthandlerconfig-lambdaconflicthandlerarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::AppSync::FunctionConfiguration.SyncConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html", + "Properties": { + "ConflictDetection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html#cfn-appsync-functionconfiguration-syncconfig-conflictdetection", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ConflictHandler": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html#cfn-appsync-functionconfiguration-syncconfig-conflicthandler", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "LambdaConflictHandlerConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-functionconfiguration-syncconfig.html#cfn-appsync-functionconfiguration-syncconfig-lambdaconflicthandlerconfig", + "Required": false, + "Type": "LambdaConflictHandlerConfig", + "UpdateType": "Mutable" + } + } + }, "AWS::AppSync::GraphQLApi.AdditionalAuthenticationProvider": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-additionalauthenticationprovider.html", "Properties": { @@ -6255,6 +6182,12 @@ "Required": false, "UpdateType": "Mutable" }, + "LaunchTemplateSpecification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-as-mixedinstancespolicy-launchtemplateoverrides.html#cfn-autoscaling-autoscalinggroup-launchtemplateoverrides-launchtemplatespecification", + "Required": false, + "Type": "LaunchTemplateSpecification", + "UpdateType": "Mutable" + }, "WeightedCapacity": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-as-mixedinstancespolicy-launchtemplateoverrides.html#cfn-autoscaling-autoscalinggroup-launchtemplateoverrides-weightedcapacity", "PrimitiveType": "String", @@ -6481,6 +6414,29 @@ } } }, + "AWS::AutoScaling::LaunchConfiguration.MetadataOption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-launchconfig-metadataoption.html", + "Properties": { + "HttpEndpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-launchconfig-metadataoption.html#cfn-autoscaling-launchconfig-metadataoption-httpendpoint", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "HttpPutResponseHopLimit": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-launchconfig-metadataoption.html#cfn-autoscaling-launchconfig-metadataoption-httpputresponsehoplimit", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "HttpTokens": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-launchconfig-metadataoption.html#cfn-autoscaling-launchconfig-metadataoption-httptokens", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::AutoScaling::ScalingPolicy.CustomizedMetricSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-scalingpolicy-customizedmetricspecification.html", "Properties": { @@ -8812,6 +8768,12 @@ "Required": false, "UpdateType": "Mutable" }, + "OriginShield": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-originshield", + "Required": false, + "Type": "OriginShield", + "UpdateType": "Mutable" + }, "S3OriginConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html#cfn-cloudfront-distribution-origin-s3originconfig", "Required": false, @@ -8918,6 +8880,23 @@ } } }, + "AWS::CloudFront::Distribution.OriginShield": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-originshield.html", + "Properties": { + "Enabled": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-originshield.html#cfn-cloudfront-distribution-originshield-enabled", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + }, + "OriginShieldRegion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-originshield.html#cfn-cloudfront-distribution-originshield-originshieldregion", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::CloudFront::Distribution.Restrictions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-restrictions.html", "Properties": { @@ -12194,6 +12173,12 @@ "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Mutable" + }, + "NoReboot": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-parameters.html#cfn-dlm-lifecyclepolicy-parameters-noreboot", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" } } }, @@ -13016,6 +13001,12 @@ "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" + }, + "SelfServiceSAMLProviderArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-federatedauthenticationrequest.html#cfn-ec2-clientvpnendpoint-federatedauthenticationrequest-selfservicesamlproviderarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" } } }, @@ -16824,6 +16815,41 @@ } } }, + "AWS::EMR::Cluster.ComputeLimits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html", + "Properties": { + "MaximumCapacityUnits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-maximumcapacityunits", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + }, + "MaximumCoreCapacityUnits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-maximumcorecapacityunits", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaximumOnDemandCapacityUnits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-maximumondemandcapacityunits", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MinimumCapacityUnits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-minimumcapacityunits", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + }, + "UnitType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-computelimits.html#cfn-elasticmapreduce-cluster-computelimits-unittype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::EMR::Cluster.Configuration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-configuration.html", "Properties": { @@ -16960,9 +16986,15 @@ "AWS::EMR::Cluster.InstanceFleetProvisioningSpecifications": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html", "Properties": { + "OnDemandSpecification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-cluster-instancefleetprovisioningspecifications-ondemandspecification", + "Required": false, + "Type": "OnDemandProvisioningSpecification", + "UpdateType": "Mutable" + }, "SpotSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-cluster-instancefleetprovisioningspecifications-spotspecification", - "Required": true, + "Required": false, "Type": "SpotProvisioningSpecification", "UpdateType": "Mutable" } @@ -17225,6 +17257,17 @@ } } }, + "AWS::EMR::Cluster.ManagedScalingPolicy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-managedscalingpolicy.html", + "Properties": { + "ComputeLimits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-managedscalingpolicy.html#cfn-elasticmapreduce-cluster-managedscalingpolicy-computelimits", + "Required": false, + "Type": "ComputeLimits", + "UpdateType": "Mutable" + } + } + }, "AWS::EMR::Cluster.MetricDimension": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-metricdimension.html", "Properties": { @@ -17242,6 +17285,17 @@ } } }, + "AWS::EMR::Cluster.OnDemandProvisioningSpecification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandprovisioningspecification.html", + "Properties": { + "AllocationStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-ondemandprovisioningspecification.html#cfn-elasticmapreduce-cluster-ondemandprovisioningspecification-allocationstrategy", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::EMR::Cluster.PlacementType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-placementtype.html", "Properties": { @@ -17372,6 +17426,12 @@ "AWS::EMR::Cluster.SpotProvisioningSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html", "Properties": { + "AllocationStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-allocationstrategy", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "BlockDurationMinutes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-blockdurationminutes", "PrimitiveType": "Integer", @@ -17504,9 +17564,15 @@ "AWS::EMR::InstanceFleetConfig.InstanceFleetProvisioningSpecifications": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html", "Properties": { + "OnDemandSpecification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications-ondemandspecification", + "Required": false, + "Type": "OnDemandProvisioningSpecification", + "UpdateType": "Mutable" + }, "SpotSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications-spotspecification", - "Required": true, + "Required": false, "Type": "SpotProvisioningSpecification", "UpdateType": "Mutable" } @@ -17555,9 +17621,26 @@ } } }, + "AWS::EMR::InstanceFleetConfig.OnDemandProvisioningSpecification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification.html", + "Properties": { + "AllocationStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-ondemandprovisioningspecification-allocationstrategy", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::EMR::InstanceFleetConfig.SpotProvisioningSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html", "Properties": { + "AllocationStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-allocationstrategy", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "BlockDurationMinutes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-blockdurationminutes", "PrimitiveType": "Integer", @@ -19173,6 +19256,12 @@ "Required": false, "UpdateType": "Mutable" }, + "IPv6Address": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmapping-ipv6address", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "PrivateIPv4Address": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-subnetmapping.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmapping-privateipv4address", "PrimitiveType": "String", @@ -19193,7 +19282,7 @@ "HttpCode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-matcher.html#cfn-elasticloadbalancingv2-targetgroup-matcher-httpcode", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -19369,6 +19458,24 @@ "Required": false, "UpdateType": "Mutable" }, + "WarmCount": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticsearchclusterconfig-warmcount", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "WarmEnabled": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticsearchclusterconfig-warmenabled", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "WarmType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticsearchclusterconfig-warmtype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "ZoneAwarenessConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticsearchclusterconfig-zoneawarenessconfig", "Required": false, @@ -19646,6 +19753,17 @@ } } }, + "AWS::Events::Rule.DeadLetterConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-deadletterconfig.html", + "Properties": { + "Arn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-deadletterconfig.html#cfn-events-rule-deadletterconfig-arn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Events::Rule.EcsParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-ecsparameters.html", "Properties": { @@ -19757,6 +19875,64 @@ } } }, + "AWS::Events::Rule.RedshiftDataParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-redshiftdataparameters.html", + "Properties": { + "Database": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-redshiftdataparameters.html#cfn-events-rule-redshiftdataparameters-database", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "DbUser": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-redshiftdataparameters.html#cfn-events-rule-redshiftdataparameters-dbuser", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SecretManagerArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-redshiftdataparameters.html#cfn-events-rule-redshiftdataparameters-secretmanagerarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Sql": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-redshiftdataparameters.html#cfn-events-rule-redshiftdataparameters-sql", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "StatementName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-redshiftdataparameters.html#cfn-events-rule-redshiftdataparameters-statementname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "WithEvent": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-redshiftdataparameters.html#cfn-events-rule-redshiftdataparameters-withevent", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Events::Rule.RetryPolicy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-retrypolicy.html", + "Properties": { + "MaximumEventAgeInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-retrypolicy.html#cfn-events-rule-retrypolicy-maximumeventageinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaximumRetryAttempts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-retrypolicy.html#cfn-events-rule-retrypolicy-maximumretryattempts", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Events::Rule.RunCommandParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-runcommandparameters.html", "Properties": { @@ -19815,6 +19991,12 @@ "Type": "BatchParameters", "UpdateType": "Mutable" }, + "DeadLetterConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-deadletterconfig", + "Required": false, + "Type": "DeadLetterConfig", + "UpdateType": "Mutable" + }, "EcsParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-ecsparameters", "Required": false, @@ -19857,6 +20039,18 @@ "Type": "KinesisParameters", "UpdateType": "Mutable" }, + "RedshiftDataParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-redshiftdataparameters", + "Required": false, + "Type": "RedshiftDataParameters", + "UpdateType": "Mutable" + }, + "RetryPolicy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-retrypolicy", + "Required": false, + "Type": "RetryPolicy", + "UpdateType": "Mutable" + }, "RoleArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-rolearn", "PrimitiveType": "String", @@ -20460,6 +20654,23 @@ } } }, + "AWS::GlobalAccelerator::EndpointGroup.PortOverride": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-globalaccelerator-endpointgroup-portoverride.html", + "Properties": { + "EndpointPort": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-globalaccelerator-endpointgroup-portoverride.html#cfn-globalaccelerator-endpointgroup-portoverride-endpointport", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + }, + "ListenerPort": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-globalaccelerator-endpointgroup-portoverride.html#cfn-globalaccelerator-endpointgroup-portoverride-listenerport", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::GlobalAccelerator::Listener.PortRange": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-globalaccelerator-listener-portrange.html", "Properties": { @@ -25378,6 +25589,281 @@ } } }, + "AWS::IoTSiteWise::Asset.AssetHierarchy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-asset-assethierarchy.html", + "Properties": { + "ChildAssetId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-asset-assethierarchy.html#cfn-iotsitewise-asset-assethierarchy-childassetid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "LogicalId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-asset-assethierarchy.html#cfn-iotsitewise-asset-assethierarchy-logicalid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::Asset.AssetProperty": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-asset-assetproperty.html", + "Properties": { + "Alias": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-asset-assetproperty.html#cfn-iotsitewise-asset-assetproperty-alias", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "LogicalId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-asset-assetproperty.html#cfn-iotsitewise-asset-assetproperty-logicalid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "NotificationState": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-asset-assetproperty.html#cfn-iotsitewise-asset-assetproperty-notificationstate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.AssetModelHierarchy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelhierarchy.html", + "Properties": { + "ChildAssetModelId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelhierarchy.html#cfn-iotsitewise-assetmodel-assetmodelhierarchy-childassetmodelid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "LogicalId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelhierarchy.html#cfn-iotsitewise-assetmodel-assetmodelhierarchy-logicalid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelhierarchy.html#cfn-iotsitewise-assetmodel-assetmodelhierarchy-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.AssetModelProperty": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelproperty.html", + "Properties": { + "DataType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelproperty.html#cfn-iotsitewise-assetmodel-assetmodelproperty-datatype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "LogicalId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelproperty.html#cfn-iotsitewise-assetmodel-assetmodelproperty-logicalid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelproperty.html#cfn-iotsitewise-assetmodel-assetmodelproperty-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelproperty.html#cfn-iotsitewise-assetmodel-assetmodelproperty-type", + "Required": true, + "Type": "PropertyType", + "UpdateType": "Mutable" + }, + "Unit": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelproperty.html#cfn-iotsitewise-assetmodel-assetmodelproperty-unit", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.Attribute": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-attribute.html", + "Properties": { + "DefaultValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-attribute.html#cfn-iotsitewise-assetmodel-attribute-defaultvalue", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.ExpressionVariable": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-expressionvariable.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-expressionvariable.html#cfn-iotsitewise-assetmodel-expressionvariable-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-expressionvariable.html#cfn-iotsitewise-assetmodel-expressionvariable-value", + "Required": true, + "Type": "VariableValue", + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.Metric": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-metric.html", + "Properties": { + "Expression": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-metric.html#cfn-iotsitewise-assetmodel-metric-expression", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Variables": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-metric.html#cfn-iotsitewise-assetmodel-metric-variables", + "ItemType": "ExpressionVariable", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "Window": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-metric.html#cfn-iotsitewise-assetmodel-metric-window", + "Required": true, + "Type": "MetricWindow", + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.MetricWindow": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-metricwindow.html", + "Properties": { + "Tumbling": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-metricwindow.html#cfn-iotsitewise-assetmodel-metricwindow-tumbling", + "Required": false, + "Type": "TumblingWindow", + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.PropertyType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-propertytype.html", + "Properties": { + "Attribute": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-propertytype.html#cfn-iotsitewise-assetmodel-propertytype-attribute", + "Required": false, + "Type": "Attribute", + "UpdateType": "Mutable" + }, + "Metric": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-propertytype.html#cfn-iotsitewise-assetmodel-propertytype-metric", + "Required": false, + "Type": "Metric", + "UpdateType": "Mutable" + }, + "Transform": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-propertytype.html#cfn-iotsitewise-assetmodel-propertytype-transform", + "Required": false, + "Type": "Transform", + "UpdateType": "Mutable" + }, + "TypeName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-propertytype.html#cfn-iotsitewise-assetmodel-propertytype-typename", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.Transform": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-transform.html", + "Properties": { + "Expression": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-transform.html#cfn-iotsitewise-assetmodel-transform-expression", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Variables": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-transform.html#cfn-iotsitewise-assetmodel-transform-variables", + "ItemType": "ExpressionVariable", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.TumblingWindow": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-tumblingwindow.html", + "Properties": { + "Interval": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-tumblingwindow.html#cfn-iotsitewise-assetmodel-tumblingwindow-interval", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel.VariableValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-variablevalue.html", + "Properties": { + "HierarchyLogicalId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-variablevalue.html#cfn-iotsitewise-assetmodel-variablevalue-hierarchylogicalid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PropertyLogicalId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-variablevalue.html#cfn-iotsitewise-assetmodel-variablevalue-propertylogicalid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::Gateway.GatewayCapabilitySummary": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-gateway-gatewaycapabilitysummary.html", + "Properties": { + "CapabilityConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-gateway-gatewaycapabilitysummary.html#cfn-iotsitewise-gateway-gatewaycapabilitysummary-capabilityconfiguration", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "CapabilityNamespace": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-gateway-gatewaycapabilitysummary.html#cfn-iotsitewise-gateway-gatewaycapabilitysummary-capabilitynamespace", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::Gateway.GatewayPlatform": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-gateway-gatewayplatform.html", + "Properties": { + "Greengrass": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-gateway-gatewayplatform.html#cfn-iotsitewise-gateway-gatewayplatform-greengrass", + "Required": true, + "Type": "Greengrass", + "UpdateType": "Immutable" + } + } + }, + "AWS::IoTSiteWise::Gateway.Greengrass": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-gateway-greengrass.html", + "Properties": { + "GroupArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-gateway-greengrass.html#cfn-iotsitewise-gateway-greengrass-grouparn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::IoTThingsGraph::FlowTemplate.DefinitionDocument": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotthingsgraph-flowtemplate-definitiondocument.html", "Properties": { @@ -27728,6 +28214,23 @@ } } }, + "AWS::KinesisFirehose::DeliveryStream.DeliveryStreamEncryptionConfigurationInput": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-deliverystreamencryptionconfigurationinput.html", + "Properties": { + "KeyARN": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-deliverystreamencryptionconfigurationinput.html#cfn-kinesisfirehose-deliverystream-deliverystreamencryptionconfigurationinput-keyarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "KeyType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-deliverystreamencryptionconfigurationinput.html#cfn-kinesisfirehose-deliverystream-deliverystreamencryptionconfigurationinput-keytype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::KinesisFirehose::DeliveryStream.Deserializer": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-deserializer.html", "Properties": { @@ -28110,13 +28613,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-kinesisstreamsourceconfiguration.html#cfn-kinesisfirehose-deliverystream-kinesisstreamsourceconfiguration-kinesisstreamarn", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "RoleARN": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-kinesisstreamsourceconfiguration.html#cfn-kinesisfirehose-deliverystream-kinesisstreamsourceconfiguration-rolearn", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } }, @@ -28894,6 +29397,23 @@ } } }, + "AWS::Lambda::EventSourceMapping.SourceAccessConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-eventsourcemapping-sourceaccessconfiguration.html", + "Properties": { + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-eventsourcemapping-sourceaccessconfiguration.html#cfn-lambda-eventsourcemapping-sourceaccessconfiguration-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "URI": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-eventsourcemapping-sourceaccessconfiguration.html#cfn-lambda-eventsourcemapping-sourceaccessconfiguration-uri", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Lambda::Function.Code": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html", "Properties": { @@ -33717,6 +34237,832 @@ } } }, + "AWS::MediaPackage::Asset.EgressEndpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-asset-egressendpoint.html", + "Properties": { + "PackagingConfigurationId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-asset-egressendpoint.html#cfn-mediapackage-asset-egressendpoint-packagingconfigurationid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-asset-egressendpoint.html#cfn-mediapackage-asset-egressendpoint-url", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::Channel.HlsIngest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-hlsingest.html", + "Properties": { + "ingestEndpoints": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-hlsingest.html#cfn-mediapackage-channel-hlsingest-ingestendpoints", + "ItemType": "IngestEndpoint", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::Channel.IngestEndpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html", + "Properties": { + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-id", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Password": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-password", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-url", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Username": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-username", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.Authorization": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-authorization.html", + "Properties": { + "CdnIdentifierSecret": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-authorization.html#cfn-mediapackage-originendpoint-authorization-cdnidentifiersecret", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SecretsRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-authorization.html#cfn-mediapackage-originendpoint-authorization-secretsrolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.CmafEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafencryption.html", + "Properties": { + "KeyRotationIntervalSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafencryption.html#cfn-mediapackage-originendpoint-cmafencryption-keyrotationintervalseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafencryption.html#cfn-mediapackage-originendpoint-cmafencryption-spekekeyprovider", + "Required": true, + "Type": "SpekeKeyProvider", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.CmafPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafpackage.html", + "Properties": { + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafpackage.html#cfn-mediapackage-originendpoint-cmafpackage-encryption", + "Required": false, + "Type": "CmafEncryption", + "UpdateType": "Mutable" + }, + "HlsManifests": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafpackage.html#cfn-mediapackage-originendpoint-cmafpackage-hlsmanifests", + "ItemType": "HlsManifest", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafpackage.html#cfn-mediapackage-originendpoint-cmafpackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentPrefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafpackage.html#cfn-mediapackage-originendpoint-cmafpackage-segmentprefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafpackage.html#cfn-mediapackage-originendpoint-cmafpackage-streamselection", + "Required": false, + "Type": "StreamSelection", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.DashEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashencryption.html", + "Properties": { + "KeyRotationIntervalSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashencryption.html#cfn-mediapackage-originendpoint-dashencryption-keyrotationintervalseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashencryption.html#cfn-mediapackage-originendpoint-dashencryption-spekekeyprovider", + "Required": true, + "Type": "SpekeKeyProvider", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.DashPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html", + "Properties": { + "AdTriggers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-adtriggers", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "AdsOnDeliveryRestrictions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-adsondeliveryrestrictions", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-encryption", + "Required": false, + "Type": "DashEncryption", + "UpdateType": "Mutable" + }, + "ManifestLayout": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-manifestlayout", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ManifestWindowSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-manifestwindowseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MinBufferTimeSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-minbuffertimeseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MinUpdatePeriodSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-minupdateperiodseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "PeriodTriggers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-periodtriggers", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Profile": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-profile", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentTemplateFormat": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-segmenttemplateformat", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-streamselection", + "Required": false, + "Type": "StreamSelection", + "UpdateType": "Mutable" + }, + "SuggestedPresentationDelaySeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-suggestedpresentationdelayseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.HlsEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsencryption.html", + "Properties": { + "ConstantInitializationVector": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsencryption.html#cfn-mediapackage-originendpoint-hlsencryption-constantinitializationvector", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "EncryptionMethod": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsencryption.html#cfn-mediapackage-originendpoint-hlsencryption-encryptionmethod", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "KeyRotationIntervalSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsencryption.html#cfn-mediapackage-originendpoint-hlsencryption-keyrotationintervalseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "RepeatExtXKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsencryption.html#cfn-mediapackage-originendpoint-hlsencryption-repeatextxkey", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsencryption.html#cfn-mediapackage-originendpoint-hlsencryption-spekekeyprovider", + "Required": true, + "Type": "SpekeKeyProvider", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.HlsManifest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html", + "Properties": { + "AdMarkers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-admarkers", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "AdTriggers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-adtriggers", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "AdsOnDeliveryRestrictions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-adsondeliveryrestrictions", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-id", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "IncludeIframeOnlyStream": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-includeiframeonlystream", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "ManifestName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-manifestname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PlaylistType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-playlisttype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PlaylistWindowSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-playlistwindowseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "ProgramDateTimeIntervalSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-programdatetimeintervalseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-url", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.HlsPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html", + "Properties": { + "AdMarkers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-admarkers", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "AdTriggers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-adtriggers", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "AdsOnDeliveryRestrictions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-adsondeliveryrestrictions", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-encryption", + "Required": false, + "Type": "HlsEncryption", + "UpdateType": "Mutable" + }, + "IncludeIframeOnlyStream": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-includeiframeonlystream", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "PlaylistType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-playlisttype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PlaylistWindowSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-playlistwindowseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "ProgramDateTimeIntervalSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-programdatetimeintervalseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-streamselection", + "Required": false, + "Type": "StreamSelection", + "UpdateType": "Mutable" + }, + "UseAudioRenditionGroup": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-useaudiorenditiongroup", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.MssEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-mssencryption.html", + "Properties": { + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-mssencryption.html#cfn-mediapackage-originendpoint-mssencryption-spekekeyprovider", + "Required": true, + "Type": "SpekeKeyProvider", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.MssPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-msspackage.html", + "Properties": { + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-msspackage.html#cfn-mediapackage-originendpoint-msspackage-encryption", + "Required": false, + "Type": "MssEncryption", + "UpdateType": "Mutable" + }, + "ManifestWindowSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-msspackage.html#cfn-mediapackage-originendpoint-msspackage-manifestwindowseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-msspackage.html#cfn-mediapackage-originendpoint-msspackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-msspackage.html#cfn-mediapackage-originendpoint-msspackage-streamselection", + "Required": false, + "Type": "StreamSelection", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-spekekeyprovider.html", + "Properties": { + "CertificateArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-spekekeyprovider.html#cfn-mediapackage-originendpoint-spekekeyprovider-certificatearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ResourceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-spekekeyprovider.html#cfn-mediapackage-originendpoint-spekekeyprovider-resourceid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-spekekeyprovider.html#cfn-mediapackage-originendpoint-spekekeyprovider-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SystemIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-spekekeyprovider.html#cfn-mediapackage-originendpoint-spekekeyprovider-systemids", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-spekekeyprovider.html#cfn-mediapackage-originendpoint-spekekeyprovider-url", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint.StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-streamselection.html", + "Properties": { + "MaxVideoBitsPerSecond": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-streamselection.html#cfn-mediapackage-originendpoint-streamselection-maxvideobitspersecond", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MinVideoBitsPerSecond": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-streamselection.html#cfn-mediapackage-originendpoint-streamselection-minvideobitspersecond", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamOrder": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-streamselection.html#cfn-mediapackage-originendpoint-streamselection-streamorder", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.CmafEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-cmafencryption.html", + "Properties": { + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-cmafencryption.html#cfn-mediapackage-packagingconfiguration-cmafencryption-spekekeyprovider", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.CmafPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-cmafpackage.html", + "Properties": { + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-cmafpackage.html#cfn-mediapackage-packagingconfiguration-cmafpackage-encryption", + "Required": false, + "Type": "CmafEncryption", + "UpdateType": "Mutable" + }, + "HlsManifests": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-cmafpackage.html#cfn-mediapackage-packagingconfiguration-cmafpackage-hlsmanifests", + "ItemType": "HlsManifest", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-cmafpackage.html#cfn-mediapackage-packagingconfiguration-cmafpackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.DashEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashencryption.html", + "Properties": { + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashencryption.html#cfn-mediapackage-packagingconfiguration-dashencryption-spekekeyprovider", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.DashManifest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashmanifest.html", + "Properties": { + "ManifestLayout": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashmanifest.html#cfn-mediapackage-packagingconfiguration-dashmanifest-manifestlayout", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ManifestName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashmanifest.html#cfn-mediapackage-packagingconfiguration-dashmanifest-manifestname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MinBufferTimeSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashmanifest.html#cfn-mediapackage-packagingconfiguration-dashmanifest-minbuffertimeseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Profile": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashmanifest.html#cfn-mediapackage-packagingconfiguration-dashmanifest-profile", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashmanifest.html#cfn-mediapackage-packagingconfiguration-dashmanifest-streamselection", + "Required": false, + "Type": "StreamSelection", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.DashPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html", + "Properties": { + "DashManifests": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html#cfn-mediapackage-packagingconfiguration-dashpackage-dashmanifests", + "ItemType": "DashManifest", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html#cfn-mediapackage-packagingconfiguration-dashpackage-encryption", + "Required": false, + "Type": "DashEncryption", + "UpdateType": "Mutable" + }, + "PeriodTriggers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html#cfn-mediapackage-packagingconfiguration-dashpackage-periodtriggers", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html#cfn-mediapackage-packagingconfiguration-dashpackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentTemplateFormat": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html#cfn-mediapackage-packagingconfiguration-dashpackage-segmenttemplateformat", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.HlsEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsencryption.html", + "Properties": { + "ConstantInitializationVector": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsencryption.html#cfn-mediapackage-packagingconfiguration-hlsencryption-constantinitializationvector", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "EncryptionMethod": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsencryption.html#cfn-mediapackage-packagingconfiguration-hlsencryption-encryptionmethod", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsencryption.html#cfn-mediapackage-packagingconfiguration-hlsencryption-spekekeyprovider", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.HlsManifest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsmanifest.html", + "Properties": { + "AdMarkers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsmanifest.html#cfn-mediapackage-packagingconfiguration-hlsmanifest-admarkers", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "IncludeIframeOnlyStream": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsmanifest.html#cfn-mediapackage-packagingconfiguration-hlsmanifest-includeiframeonlystream", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "ManifestName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsmanifest.html#cfn-mediapackage-packagingconfiguration-hlsmanifest-manifestname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ProgramDateTimeIntervalSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsmanifest.html#cfn-mediapackage-packagingconfiguration-hlsmanifest-programdatetimeintervalseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "RepeatExtXKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsmanifest.html#cfn-mediapackage-packagingconfiguration-hlsmanifest-repeatextxkey", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlsmanifest.html#cfn-mediapackage-packagingconfiguration-hlsmanifest-streamselection", + "Required": false, + "Type": "StreamSelection", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.HlsPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlspackage.html", + "Properties": { + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlspackage.html#cfn-mediapackage-packagingconfiguration-hlspackage-encryption", + "Required": false, + "Type": "HlsEncryption", + "UpdateType": "Mutable" + }, + "HlsManifests": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlspackage.html#cfn-mediapackage-packagingconfiguration-hlspackage-hlsmanifests", + "ItemType": "HlsManifest", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlspackage.html#cfn-mediapackage-packagingconfiguration-hlspackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "UseAudioRenditionGroup": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlspackage.html#cfn-mediapackage-packagingconfiguration-hlspackage-useaudiorenditiongroup", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.MssEncryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-mssencryption.html", + "Properties": { + "SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-mssencryption.html#cfn-mediapackage-packagingconfiguration-mssencryption-spekekeyprovider", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.MssManifest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-mssmanifest.html", + "Properties": { + "ManifestName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-mssmanifest.html#cfn-mediapackage-packagingconfiguration-mssmanifest-manifestname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-mssmanifest.html#cfn-mediapackage-packagingconfiguration-mssmanifest-streamselection", + "Required": false, + "Type": "StreamSelection", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.MssPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-msspackage.html", + "Properties": { + "Encryption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-msspackage.html#cfn-mediapackage-packagingconfiguration-msspackage-encryption", + "Required": false, + "Type": "MssEncryption", + "UpdateType": "Mutable" + }, + "MssManifests": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-msspackage.html#cfn-mediapackage-packagingconfiguration-msspackage-mssmanifests", + "ItemType": "MssManifest", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "SegmentDurationSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-msspackage.html#cfn-mediapackage-packagingconfiguration-msspackage-segmentdurationseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.SpekeKeyProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-spekekeyprovider.html", + "Properties": { + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-spekekeyprovider.html#cfn-mediapackage-packagingconfiguration-spekekeyprovider-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SystemIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-spekekeyprovider.html#cfn-mediapackage-packagingconfiguration-spekekeyprovider-systemids", + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-spekekeyprovider.html#cfn-mediapackage-packagingconfiguration-spekekeyprovider-url", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration.StreamSelection": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-streamselection.html", + "Properties": { + "MaxVideoBitsPerSecond": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-streamselection.html#cfn-mediapackage-packagingconfiguration-streamselection-maxvideobitspersecond", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MinVideoBitsPerSecond": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-streamselection.html#cfn-mediapackage-packagingconfiguration-streamselection-minvideobitspersecond", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StreamOrder": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-streamselection.html#cfn-mediapackage-packagingconfiguration-streamselection-streamorder", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingGroup.Authorization": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packaginggroup-authorization.html", + "Properties": { + "CdnIdentifierSecret": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packaginggroup-authorization.html#cfn-mediapackage-packaginggroup-authorization-cdnidentifiersecret", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SecretsRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packaginggroup-authorization.html#cfn-mediapackage-packaginggroup-authorization-secretsrolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaStore::Container.CorsRule": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediastore-container-corsrule.html", "Properties": { @@ -36707,7 +38053,7 @@ "Properties": { "EventThreshold": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-metrics.html#cfn-s3-bucket-metrics-eventthreshold", - "Required": true, + "Required": false, "Type": "ReplicationTimeValue", "UpdateType": "Mutable" }, @@ -37285,7 +38631,7 @@ "Properties": { "SseKmsEncryptedObjects": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-sourceselectioncriteria.html#cfn-s3-bucket-sourceselectioncriteria-ssekmsencryptedobjects", - "Required": true, + "Required": false, "Type": "SseKmsEncryptedObjects", "UpdateType": "Mutable" } @@ -38478,6 +39824,12 @@ "Required": false, "UpdateType": "Immutable" }, + "ImageConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-imageconfig", + "Required": false, + "Type": "ImageConfig", + "UpdateType": "Immutable" + }, "Mode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-mode", "PrimitiveType": "String", @@ -38498,6 +39850,17 @@ } } }, + "AWS::SageMaker::Model.ImageConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition-imageconfig.html", + "Properties": { + "RepositoryAccessMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition-imageconfig.html#cfn-sagemaker-model-containerdefinition-imageconfig-repositoryaccessmode", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::SageMaker::Model.VpcConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-vpcconfig.html", "Properties": { @@ -39511,6 +40874,13 @@ "Type": "List", "UpdateType": "Conditional" }, + "SecurityGroupIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-server-endpointdetails.html#cfn-transfer-server-endpointdetails-securitygroupids", + "ItemType": "SecurityGroupId", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-server-endpointdetails.html#cfn-transfer-server-endpointdetails-subnetids", "PrimitiveItemType": "String", @@ -39552,6 +40922,9 @@ "AWS::Transfer::Server.Protocol": { "PrimitiveType": "String" }, + "AWS::Transfer::Server.SecurityGroupId": { + "PrimitiveType": "String" + }, "AWS::Transfer::User.HomeDirectoryMapEntry": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-user-homedirectorymapentry.html", "Properties": { @@ -41698,7 +43071,7 @@ } } }, - "ResourceSpecificationVersion": "18.7.0", + "ResourceSpecificationVersion": "20.0.0", "ResourceTypes": { "AWS::ACMPCA::Certificate": { "Attributes": { @@ -41956,12 +43329,6 @@ "Required": true, "UpdateType": "Mutable" }, - "LdapMetadata": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amazonmq-broker.html#cfn-amazonmq-broker-ldapmetadata", - "Required": false, - "Type": "LdapMetadata", - "UpdateType": "Mutable" - }, "LdapServerMetadata": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amazonmq-broker.html#cfn-amazonmq-broker-ldapservermetadata", "Required": false, @@ -45088,6 +46455,12 @@ "Required": true, "UpdateType": "Immutable" }, + "ApiKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-apikeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "Description": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-description", "PrimitiveType": "String", @@ -45245,6 +46618,12 @@ "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" + }, + "SyncConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html#cfn-appsync-functionconfiguration-syncconfig", + "Required": false, + "Type": "SyncConfig", + "UpdateType": "Mutable" } } }, @@ -45666,6 +47045,12 @@ "PrimitiveType": "String", "Required": true, "UpdateType": "Immutable" + }, + "WorkGroup": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-namedquery.html#cfn-athena-namedquery-workgroup", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" } } }, @@ -45722,6 +47107,23 @@ } }, "AWS::AutoScaling::AutoScalingGroup": { + "Attributes": { + "LaunchConfigurationName": { + "PrimitiveType": "String" + }, + "LaunchTemplateSpecification": { + "PrimitiveType": "String" + }, + "MixedInstancesPolicy": { + "PrimitiveType": "String" + }, + "PlacementGroup": { + "PrimitiveType": "String" + }, + "VPCZoneIdentifier": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html", "Properties": { "AutoScalingGroupName": { @@ -45738,6 +47140,12 @@ "Type": "List", "UpdateType": "Mutable" }, + "CapacityRebalance": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-capacityrebalance", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, "Cooldown": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-cooldown", "PrimitiveType": "String", @@ -45973,6 +47381,12 @@ "Required": false, "UpdateType": "Immutable" }, + "MetadataOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-autoscaling-launchconfig-metadataoptions", + "Required": false, + "Type": "MetadataOption", + "UpdateType": "Immutable" + }, "PlacementTenancy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-placementtenancy", "PrimitiveType": "String", @@ -46323,6 +47737,12 @@ "Required": false, "UpdateType": "Mutable" }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-batch-computeenvironment.html#cfn-batch-computeenvironment-tags", + "PrimitiveType": "Json", + "Required": false, + "UpdateType": "Immutable" + }, "Type": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-batch-computeenvironment.html#cfn-batch-computeenvironment-type", "PrimitiveType": "String", @@ -46364,6 +47784,12 @@ "Type": "RetryStrategy", "UpdateType": "Mutable" }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-batch-jobdefinition.html#cfn-batch-jobdefinition-tags", + "PrimitiveType": "Json", + "Required": false, + "UpdateType": "Immutable" + }, "Timeout": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-batch-jobdefinition.html#cfn-batch-jobdefinition-timeout", "Required": false, @@ -46405,6 +47831,12 @@ "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-batch-jobqueue.html#cfn-batch-jobqueue-tags", + "PrimitiveType": "Json", + "Required": false, + "UpdateType": "Immutable" } } }, @@ -50651,6 +52083,12 @@ "Type": "List", "UpdateType": "Mutable" }, + "SelfServicePortal": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-selfserviceportal", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "ServerCertificateArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-servercertificatearn", "PrimitiveType": "String", @@ -51771,6 +53209,12 @@ "AWS::EC2::Route": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html", "Properties": { + "CarrierGatewayId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-carriergatewayid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "DestinationCidrBlock": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationcidrblock", "PrimitiveType": "String", @@ -51801,6 +53245,12 @@ "Required": false, "UpdateType": "Mutable" }, + "LocalGatewayId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-localgatewayid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "NatGatewayId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-natgatewayid", "PrimitiveType": "String", @@ -51825,6 +53275,12 @@ "Required": false, "UpdateType": "Mutable" }, + "VpcEndpointId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-vpcendpointid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "VpcPeeringConnectionId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-vpcpeeringconnectionid", "PrimitiveType": "String", @@ -52066,6 +53522,9 @@ "NetworkAclAssociationId": { "PrimitiveType": "String" }, + "OutpostArn": { + "PrimitiveType": "String" + }, "VpcId": { "PrimitiveType": "String" } @@ -52102,6 +53561,12 @@ "Required": false, "UpdateType": "Mutable" }, + "OutpostArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-outpostarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-tags", "DuplicatesAllowed": true, @@ -52727,13 +54192,6 @@ "Required": false, "UpdateType": "Mutable" }, - "ApplianceLoadBalancerArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-applianceloadbalancerarns", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, "NetworkLoadBalancerArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-networkloadbalancerarns", "PrimitiveItemType": "String", @@ -53941,12 +55399,24 @@ "Type": "KerberosAttributes", "UpdateType": "Immutable" }, + "LogEncryptionKmsKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-logencryptionkmskeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, "LogUri": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-loguri", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, + "ManagedScalingPolicy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-managedscalingpolicy", + "Required": false, + "Type": "ManagedScalingPolicy", + "UpdateType": "Mutable" + }, "Name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-name", "PrimitiveType": "String", @@ -53977,6 +55447,12 @@ "Required": true, "UpdateType": "Immutable" }, + "StepConcurrencyLevel": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-stepconcurrencylevel", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, "Steps": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html#cfn-elasticmapreduce-cluster-steps", "DuplicatesAllowed": false, @@ -54442,6 +55918,12 @@ "Required": false, "UpdateType": "Mutable" }, + "GlobalReplicationGroupId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-globalreplicationgroupid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, "KmsKeyId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-kmskeyid", "PrimitiveType": "String", @@ -54452,7 +55934,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-multiazenabled", "PrimitiveType": "Boolean", "Required": false, - "UpdateType": "Immutable" + "UpdateType": "Mutable" }, "NodeGroupConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-nodegroupconfiguration", @@ -54986,13 +56468,13 @@ "Port": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-port", "PrimitiveType": "Integer", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "Protocol": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-protocol", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "SslPolicy": { @@ -55116,7 +56598,7 @@ "ItemType": "SubnetMapping", "Required": false, "Type": "List", - "UpdateType": "Immutable" + "UpdateType": "Mutable" }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-subnets", @@ -56184,6 +57666,12 @@ "Required": false, "UpdateType": "Mutable" }, + "FlexMatchMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-flexmatchmode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "GameProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-gameproperties", "ItemType": "GameProperty", @@ -56200,7 +57688,7 @@ "GameSessionQueueArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-gamesessionqueuearns", "PrimitiveItemType": "String", - "Required": true, + "Required": false, "Type": "List", "UpdateType": "Mutable" }, @@ -56382,6 +57870,13 @@ "Required": true, "UpdateType": "Immutable" }, + "PortOverrides": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-globalaccelerator-endpointgroup.html#cfn-globalaccelerator-endpointgroup-portoverrides", + "ItemType": "PortOverride", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "ThresholdCount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-globalaccelerator-endpointgroup.html#cfn-globalaccelerator-endpointgroup-thresholdcount", "PrimitiveType": "Integer", @@ -58096,6 +59591,114 @@ } } }, + "AWS::IVS::Channel": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "IngestEndpoint": { + "PrimitiveType": "String" + }, + "PlaybackUrl": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html", + "Properties": { + "Authorized": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-authorized", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "LatencyMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-latencymode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html#cfn-ivs-channel-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IVS::PlaybackKeyPair": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "Fingerprint": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "PublicKeyMaterial": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-publickeymaterial", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::IVS::StreamKey": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "Value": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html", + "Properties": { + "ChannelArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#cfn-ivs-streamkey-channelarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-streamkey.html#cfn-ivs-streamkey-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::ImageBuilder::Component": { "Attributes": { "Arn": { @@ -59115,6 +60718,137 @@ } } }, + "AWS::IoTSiteWise::Asset": { + "Attributes": { + "AssetArn": { + "PrimitiveType": "String" + }, + "AssetId": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html", + "Properties": { + "AssetHierarchies": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html#cfn-iotsitewise-asset-assethierarchies", + "ItemType": "AssetHierarchy", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "AssetModelId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html#cfn-iotsitewise-asset-assetmodelid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "AssetName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html#cfn-iotsitewise-asset-assetname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "AssetProperties": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html#cfn-iotsitewise-asset-assetproperties", + "ItemType": "AssetProperty", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html#cfn-iotsitewise-asset-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::AssetModel": { + "Attributes": { + "AssetModelArn": { + "PrimitiveType": "String" + }, + "AssetModelId": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html", + "Properties": { + "AssetModelDescription": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-assetmodeldescription", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "AssetModelHierarchies": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-assetmodelhierarchies", + "ItemType": "AssetModelHierarchy", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "AssetModelName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-assetmodelname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "AssetModelProperties": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-assetmodelproperties", + "ItemType": "AssetModelProperty", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-tags", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTSiteWise::Gateway": { + "Attributes": { + "GatewayId": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-gateway.html", + "Properties": { + "GatewayCapabilitySummaries": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-gateway.html#cfn-iotsitewise-gateway-gatewaycapabilitysummaries", + "DuplicatesAllowed": false, + "ItemType": "GatewayCapabilitySummary", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "GatewayName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-gateway.html#cfn-iotsitewise-gateway-gatewayname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "GatewayPlatform": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-gateway.html#cfn-iotsitewise-gateway-gatewayplatform", + "Required": true, + "Type": "GatewayPlatform", + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-gateway.html#cfn-iotsitewise-gateway-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::IoTThingsGraph::FlowTemplate": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotthingsgraph-flowtemplate.html", "Properties": { @@ -59623,6 +61357,12 @@ }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html", "Properties": { + "DeliveryStreamEncryptionConfigurationInput": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-deliverystreamencryptionconfigurationinput", + "Required": false, + "Type": "DeliveryStreamEncryptionConfigurationInput", + "UpdateType": "Mutable" + }, "DeliveryStreamName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-deliverystreamname", "PrimitiveType": "String", @@ -59657,7 +61397,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-kinesisstreamsourceconfiguration", "Required": false, "Type": "KinesisStreamSourceConfiguration", - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "RedshiftDestinationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-redshiftdestinationconfiguration", @@ -59676,6 +61416,13 @@ "Required": false, "Type": "SplunkDestinationConfiguration", "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-tags", + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" } } }, @@ -59687,6 +61434,13 @@ "Required": false, "Type": "Admins", "UpdateType": "Mutable" + }, + "TrustedResourceOwners": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lakeformation-datalakesettings.html#cfn-lakeformation-datalakesettings-trustedresourceowners", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" } } }, @@ -59888,6 +61642,22 @@ "Required": false, "UpdateType": "Mutable" }, + "Queues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-queues", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "SourceAccessConfigurations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-sourceaccessconfigurations", + "DuplicatesAllowed": false, + "ItemType": "SourceAccessConfiguration", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "StartingPosition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-startingposition", "PrimitiveType": "String", @@ -60204,14 +61974,20 @@ }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html", "Properties": { + "KmsKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-logs-loggroup-kmskeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "LogGroupName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-cwl-loggroup-loggroupname", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-logs-loggroup-loggroupname", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "RetentionInDays": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-cwl-loggroup-retentionindays", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-logs-loggroup-retentionindays", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" @@ -60899,6 +62675,284 @@ } } }, + "AWS::MediaPackage::Asset": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "CreatedAt": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html", + "Properties": { + "EgressEndpoints": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html#cfn-mediapackage-asset-egressendpoints", + "ItemType": "EgressEndpoint", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html#cfn-mediapackage-asset-id", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "PackagingGroupId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html#cfn-mediapackage-asset-packaginggroupid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ResourceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html#cfn-mediapackage-asset-resourceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SourceArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html#cfn-mediapackage-asset-sourcearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SourceRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html#cfn-mediapackage-asset-sourcerolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-asset.html#cfn-mediapackage-asset-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::Channel": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "HlsIngest": { + "Type": "HlsIngest" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-channel.html", + "Properties": { + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-channel.html#cfn-mediapackage-channel-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-channel.html#cfn-mediapackage-channel-id", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-channel.html#cfn-mediapackage-channel-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, + "AWS::MediaPackage::OriginEndpoint": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "Url": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html", + "Properties": { + "Authorization": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-authorization", + "Required": false, + "Type": "Authorization", + "UpdateType": "Mutable" + }, + "ChannelId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-channelid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "CmafPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-cmafpackage", + "Required": false, + "Type": "CmafPackage", + "UpdateType": "Mutable" + }, + "DashPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-dashpackage", + "Required": false, + "Type": "DashPackage", + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "HlsPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-hlspackage", + "Required": false, + "Type": "HlsPackage", + "UpdateType": "Mutable" + }, + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-id", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ManifestName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-manifestname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MssPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-msspackage", + "Required": false, + "Type": "MssPackage", + "UpdateType": "Mutable" + }, + "Origination": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-origination", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StartoverWindowSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-startoverwindowseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "TimeDelaySeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-timedelayseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Whitelist": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-whitelist", + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingConfiguration": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html", + "Properties": { + "CmafPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html#cfn-mediapackage-packagingconfiguration-cmafpackage", + "Required": false, + "Type": "CmafPackage", + "UpdateType": "Mutable" + }, + "DashPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html#cfn-mediapackage-packagingconfiguration-dashpackage", + "Required": false, + "Type": "DashPackage", + "UpdateType": "Mutable" + }, + "HlsPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html#cfn-mediapackage-packagingconfiguration-hlspackage", + "Required": false, + "Type": "HlsPackage", + "UpdateType": "Mutable" + }, + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html#cfn-mediapackage-packagingconfiguration-id", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "MssPackage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html#cfn-mediapackage-packagingconfiguration-msspackage", + "Required": false, + "Type": "MssPackage", + "UpdateType": "Mutable" + }, + "PackagingGroupId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html#cfn-mediapackage-packagingconfiguration-packaginggroupid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packagingconfiguration.html#cfn-mediapackage-packagingconfiguration-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::PackagingGroup": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "DomainName": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packaginggroup.html", + "Properties": { + "Authorization": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packaginggroup.html#cfn-mediapackage-packaginggroup-authorization", + "Required": false, + "Type": "Authorization", + "UpdateType": "Mutable" + }, + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packaginggroup.html#cfn-mediapackage-packaginggroup-id", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-packaginggroup.html#cfn-mediapackage-packaginggroup-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, "AWS::MediaStore::Container": { "Attributes": { "Endpoint": { @@ -63466,7 +65520,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-engine", "PrimitiveType": "String", "Required": true, - "UpdateType": "Immutable" + "UpdateType": "Conditional" }, "EngineMode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-enginemode", @@ -63478,7 +65532,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-engineversion", "PrimitiveType": "String", "Required": false, - "UpdateType": "Immutable" + "UpdateType": "Mutable" + }, + "GlobalClusterIdentifier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-globalclusteridentifier", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Conditional" }, "KmsKeyId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-kmskeyid", @@ -63778,7 +65838,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-engine", "PrimitiveType": "String", "Required": false, - "UpdateType": "Immutable" + "UpdateType": "Conditional" }, "EngineVersion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-engineversion", @@ -65594,6 +67654,12 @@ "Required": false, "UpdateType": "Mutable" }, + "SubscriptionRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#cfn-sns-subscription-subscriptionrolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "TopicArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#topicarn", "PrimitiveType": "String", @@ -65622,6 +67688,12 @@ "Required": false, "UpdateType": "Mutable" }, + "FifoTopic": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-fifotopic", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, "KmsMasterKeyId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-kmsmasterkeyid", "PrimitiveType": "String", diff --git a/packages/@aws-cdk/cfnspec/spec-source/670_MediaPackage_PackagingConfiguration_patch.json b/packages/@aws-cdk/cfnspec/spec-source/670_MediaPackage_PackagingConfiguration_patch.json new file mode 100644 index 0000000000000..ed0f382b5ba59 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/670_MediaPackage_PackagingConfiguration_patch.json @@ -0,0 +1,29 @@ +{ + "PropertyTypes": { + "patch": { + "description": "missing type information for SpekeKeyProvider - mirrors patch in cfn-lint (https://github.com/aws-cloudformation/cfn-python-lint/pull/1751)", + "operations": [ + { + "op": "add", + "path": "/AWS::MediaPackage::PackagingConfiguration.CmafEncryption/Properties/SpekeKeyProvider/Type", + "value": "SpekeKeyProvider" + }, + { + "op": "add", + "path": "/AWS::MediaPackage::PackagingConfiguration.DashEncryption/Properties/SpekeKeyProvider/Type", + "value": "SpekeKeyProvider" + }, + { + "op": "add", + "path": "/AWS::MediaPackage::PackagingConfiguration.HlsEncryption/Properties/SpekeKeyProvider/Type", + "value": "SpekeKeyProvider" + }, + { + "op": "add", + "path": "/AWS::MediaPackage::PackagingConfiguration.MssEncryption/Properties/SpekeKeyProvider/Type", + "value": "SpekeKeyProvider" + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/cfnspec/spec-source/680_AutoScaling_AutoScalingGroup_patch.json b/packages/@aws-cdk/cfnspec/spec-source/680_AutoScaling_AutoScalingGroup_patch.json new file mode 100644 index 0000000000000..c79b21da417e1 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/680_AutoScaling_AutoScalingGroup_patch.json @@ -0,0 +1,31 @@ +{ + "ResourceTypes": { + "AWS::AutoScaling::AutoScalingGroup": { + "patch": { + "description": "remove (presumed accidentally included) new autoscaling group attributes", + "operations": [ + { + "op": "remove", + "path": "/Attributes/LaunchConfigurationName" + }, + { + "op": "remove", + "path": "/Attributes/LaunchTemplateSpecification" + }, + { + "op": "remove", + "path": "/Attributes/MixedInstancesPolicy" + }, + { + "op": "remove", + "path": "/Attributes/PlacementGroup" + }, + { + "op": "remove", + "path": "/Attributes/VPCZoneIdentifier" + } + ] + } + } + } +} diff --git a/packages/@aws-cdk/cfnspec/spec-source/680_MediaPackage_Channel_patch.json b/packages/@aws-cdk/cfnspec/spec-source/680_MediaPackage_Channel_patch.json new file mode 100644 index 0000000000000..5eb3d2a657645 --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/680_MediaPackage_Channel_patch.json @@ -0,0 +1,15 @@ +{ + "ResourceTypes": { + "AWS::MediaPackage::Channel": { + "patch": { + "description": "remove the unusable attribute HlsIngest, which represents a complex type and cannot be directly converted to a primitive type", + "operations": [ + { + "op": "remove", + "path": "/Attributes/HlsIngest" + } + ] + } + } + } +} diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index 5504214ff2f62..a62d181f8243a 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -141,7 +141,9 @@ "@aws-cdk/aws-iot1click": "0.0.0", "@aws-cdk/aws-iotanalytics": "0.0.0", "@aws-cdk/aws-iotevents": "0.0.0", + "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", + "@aws-cdk/aws-ivs": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", "@aws-cdk/aws-kinesisfirehose": "0.0.0", @@ -154,6 +156,7 @@ "@aws-cdk/aws-managedblockchain": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", + "@aws-cdk/aws-mediapackage": "0.0.0", "@aws-cdk/aws-mediastore": "0.0.0", "@aws-cdk/aws-msk": "0.0.0", "@aws-cdk/aws-neptune": "0.0.0", @@ -271,7 +274,9 @@ "@aws-cdk/aws-iot1click": "0.0.0", "@aws-cdk/aws-iotanalytics": "0.0.0", "@aws-cdk/aws-iotevents": "0.0.0", + "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", + "@aws-cdk/aws-ivs": "@aws-cdk/aws-ivs", "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", @@ -284,6 +289,7 @@ "@aws-cdk/aws-managedblockchain": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", + "@aws-cdk/aws-mediapackage": "0.0.0", "@aws-cdk/aws-mediastore": "0.0.0", "@aws-cdk/aws-msk": "0.0.0", "@aws-cdk/aws-neptune": "0.0.0", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 113df7a9afce8..c1b5e38a89280 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -190,7 +190,9 @@ "@aws-cdk/aws-iot1click": "0.0.0", "@aws-cdk/aws-iotanalytics": "0.0.0", "@aws-cdk/aws-iotevents": "0.0.0", + "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", + "@aws-cdk/aws-ivs": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", "@aws-cdk/aws-kinesisfirehose": "0.0.0", @@ -208,6 +210,7 @@ "@aws-cdk/aws-managedblockchain": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", + "@aws-cdk/aws-mediapackage": "0.0.0", "@aws-cdk/aws-mediastore": "0.0.0", "@aws-cdk/aws-msk": "0.0.0", "@aws-cdk/aws-neptune": "0.0.0", diff --git a/packages/decdk/package.json b/packages/decdk/package.json index 0871274f0b016..adc9732761f1f 100644 --- a/packages/decdk/package.json +++ b/packages/decdk/package.json @@ -117,7 +117,9 @@ "@aws-cdk/aws-iot1click": "0.0.0", "@aws-cdk/aws-iotanalytics": "0.0.0", "@aws-cdk/aws-iotevents": "0.0.0", + "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", + "@aws-cdk/aws-ivs": "0.0.0", "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", @@ -135,6 +137,7 @@ "@aws-cdk/aws-managedblockchain": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", + "@aws-cdk/aws-mediapackage": "0.0.0", "@aws-cdk/aws-mediastore": "0.0.0", "@aws-cdk/aws-msk": "0.0.0", "@aws-cdk/aws-neptune": "0.0.0", diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index f6b5dc263a9fb..7123a4b0469e8 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -189,11 +189,13 @@ "@aws-cdk/aws-iot1click": "0.0.0", "@aws-cdk/aws-iotanalytics": "0.0.0", "@aws-cdk/aws-iotevents": "0.0.0", + "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", + "@aws-cdk/aws-ivs": "0.0.0", + "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", "@aws-cdk/aws-kinesisfirehose": "0.0.0", - "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kms": "0.0.0", "@aws-cdk/aws-lakeformation": "0.0.0", "@aws-cdk/aws-lambda": "0.0.0", @@ -207,6 +209,7 @@ "@aws-cdk/aws-managedblockchain": "0.0.0", "@aws-cdk/aws-mediaconvert": "0.0.0", "@aws-cdk/aws-medialive": "0.0.0", + "@aws-cdk/aws-mediapackage": "0.0.0", "@aws-cdk/aws-mediastore": "0.0.0", "@aws-cdk/aws-msk": "0.0.0", "@aws-cdk/aws-neptune": "0.0.0", From 62baa7b51b49c1a669c7144e5883375fe9ab5d35 Mon Sep 17 00:00:00 2001 From: Shivam Verma <68244110+sshver@users.noreply.github.com> Date: Wed, 11 Nov 2020 10:56:46 -0800 Subject: [PATCH 18/25] feat(appmesh): add listener timeout to Virtual Nodes (#10793) Adds listener timeout to Virtual Nodes. BREAKING CHANGE: `IVirtualNode` no longer has the `addBackends()` method. A backend can be added to `VirtualNode` using the `addBackend()` method which accepts a single `IVirtualService` * **appmesh**: `IVirtualNode` no longer has the `addListeners()` method. A listener can be added to `VirtualNode` using the `addListener()` method which accepts a single `VirtualNodeListener` * **appmesh**: `VirtualNode` no longer has a default listener. It is valid to have a `VirtualNode` without any listeners * **appmesh**: the construction property `listener` of `VirtualNode` has been renamed to `listeners`, and its type changed to an array of listeners * **appmesh**: the struct `VirtualNodeListener` has been removed. To create Virtual Node listeners, use the static factory methods of the `VirtualNodeListener` class ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../lib/extensions/appmesh.ts | 25 +- packages/@aws-cdk/aws-appmesh/README.md | 25 +- packages/@aws-cdk/aws-appmesh/lib/index.ts | 1 + .../aws-appmesh/lib/shared-interfaces.ts | 38 --- .../aws-appmesh/lib/virtual-node-listener.ts | 219 +++++++++++++++++ .../@aws-cdk/aws-appmesh/lib/virtual-node.ts | 105 +++----- packages/@aws-cdk/aws-appmesh/package.json | 7 +- .../@aws-cdk/aws-appmesh/test/integ.mesh.ts | 14 +- .../aws-appmesh/test/test.health-check.ts | 30 +-- .../@aws-cdk/aws-appmesh/test/test.mesh.ts | 38 +-- .../aws-appmesh/test/test.virtual-node.ts | 228 +++++++++++++++--- .../aws-appmesh/test/test.virtual-router.ts | 50 ++-- 12 files changed, 524 insertions(+), 256 deletions(-) create mode 100644 packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts 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 583ca06435c09..614a1eeea2312 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 @@ -259,17 +259,28 @@ export class AppMeshExtension extends ServiceExtension { throw new Error('You must add a CloudMap namespace to the ECS cluster in order to use the AppMesh extension'); } + function addListener(protocol: appmesh.Protocol, port: number): appmesh.VirtualNodeListener { + switch (protocol) { + case appmesh.Protocol.HTTP : + return appmesh.VirtualNodeListener.http({ port }); + + case appmesh.Protocol.HTTP2 : + return appmesh.VirtualNodeListener.http2({ port }); + + case appmesh.Protocol.GRPC : + return appmesh.VirtualNodeListener.grpc({ port }); + + case appmesh.Protocol.TCP : + return appmesh.VirtualNodeListener.tcp({ port }); + } + } + // Create a virtual node for the name service this.virtualNode = new appmesh.VirtualNode(this.scope, `${this.parentService.id}-virtual-node`, { mesh: this.mesh, virtualNodeName: this.parentService.id, cloudMapService: service.cloudMapService, - listener: { - portMapping: { - port: containerextension.trafficPort, - protocol: this.protocol, - }, - }, + listeners: [addListener(this.protocol, containerextension.trafficPort)], }); // Create a virtual router for this service. This allows for retries @@ -326,7 +337,7 @@ export class AppMeshExtension extends ServiceExtension { // Next update the app mesh config so that the local Envoy // proxy on this service knows how to route traffic to // nodes from the other service. - this.virtualNode.addBackends(otherAppMesh.virtualService); + this.virtualNode.addBackend(otherAppMesh.virtualService); } private virtualRouterListener(port: number): appmesh.VirtualRouterListener { diff --git a/packages/@aws-cdk/aws-appmesh/README.md b/packages/@aws-cdk/aws-appmesh/README.md index 9c0a4b7f1da2e..dff8a6808c701 100644 --- a/packages/@aws-cdk/aws-appmesh/README.md +++ b/packages/@aws-cdk/aws-appmesh/README.md @@ -139,11 +139,8 @@ const service = namespace.createService('Svc'); const node = mesh.addVirtualNode('virtual-node', { cloudMapService: service, - listener: { - portMapping: { - port: 8081, - protocol: Protocol.HTTP, - }, + listeners: [appmesh.VirtualNodeListener.httpNodeListener({ + port: 8081, healthCheck: { healthyThreshold: 3, interval: Duration.seconds(5), // minimum @@ -153,9 +150,9 @@ const node = mesh.addVirtualNode('virtual-node', { timeout: Duration.seconds(2), // minimum unhealthyThreshold: 2, }, - }, + })], accessLog: appmesh.AccessLog.fromFilePath('/dev/stdout'), -}) +}); ``` Create a `VirtualNode` with the the constructor and add tags. @@ -164,11 +161,8 @@ Create a `VirtualNode` with the the constructor and add tags. const node = new VirtualNode(this, 'node', { mesh, cloudMapService: service, - listener: { - portMapping: { - port: 8080, - protocol: Protocol.HTTP, - }, + listeners: [appmesh.VirtualNodeListener.httpNodeListener({ + port: 8080, healthCheck: { healthyThreshold: 3, interval: Duration.seconds(5), // min @@ -177,15 +171,18 @@ const node = new VirtualNode(this, 'node', { protocol: Protocol.HTTP, timeout: Duration.seconds(2), // min unhealthyThreshold: 2, + }, + timeout: { + idle: cdk.Duration.seconds(5), }, - }, + })], accessLog: appmesh.AccessLog.fromFilePath('/dev/stdout'), }); cdk.Tag.add(node, 'Environment', 'Dev'); ``` -The listeners property can be left blank and added later with the `node.addListeners()` method. The `healthcheck` property is optional but if specifying a listener, the `portMappings` must contain at least one property. +The `listeners` property can be left blank and added later with the `node.addListener()` method. The `healthcheck` and `timeout` properties are optional but if specifying a listener, the `port` must be added. ## Adding a Route diff --git a/packages/@aws-cdk/aws-appmesh/lib/index.ts b/packages/@aws-cdk/aws-appmesh/lib/index.ts index d95c017c2071e..4c09b13ba730c 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/index.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/index.ts @@ -7,6 +7,7 @@ export * from './virtual-node'; export * from './virtual-router'; export * from './virtual-router-listener'; export * from './virtual-service'; +export * from './virtual-node-listener'; export * from './virtual-gateway'; export * from './virtual-gateway-listener'; export * from './gateway-route'; diff --git a/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts b/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts index 39111389b0a03..21ab96b6ce56a 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/shared-interfaces.ts @@ -68,44 +68,6 @@ export interface HealthCheck { readonly unhealthyThreshold?: number; } -/** - * Port mappings for resources that require these attributes, such as VirtualNodes and Routes - */ -export interface PortMapping { - /** - * Port mapped to the VirtualNode / Route - * - * @default 8080 - */ - readonly port: number; - - /** - * Protocol for the VirtualNode / Route, only GRPC, HTTP, HTTP2, or TCP is supported - * - * @default HTTP - */ - readonly protocol: Protocol; -} - -/** - * Represents the properties needed to define healthy and active listeners for nodes - */ -export interface VirtualNodeListener { - /** - * Array of PortMappingProps for the listener - * - * @default - HTTP port 8080 - */ - readonly portMapping?: PortMapping; - - /** - * Health checking strategy upstream nodes should use when communicating with the listener - * - * @default - no healthcheck - */ - readonly healthCheck?: HealthCheck; -} - /** * All Properties for Envoy Access logs for mesh endpoints */ diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts new file mode 100644 index 0000000000000..e3e433d8e25d8 --- /dev/null +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-node-listener.ts @@ -0,0 +1,219 @@ +import * as cdk from '@aws-cdk/core'; +import { CfnVirtualNode } from './appmesh.generated'; +import { validateHealthChecks } from './private/utils'; +import { HealthCheck, Protocol } from './shared-interfaces'; + +/** + * Properties for a VirtualNode listener + */ +export interface VirtualNodeListenerConfig { + /** + * Single listener config for a VirtualNode + */ + readonly listener: CfnVirtualNode.ListenerProperty, +} + +/** + * Represents the properties needed to define a Listeners for a VirtualNode + */ +interface VirtualNodeListenerCommonOptions { + /** + * Port to listen for connections on + * + * @default - 8080 + */ + readonly port?: number + + /** + * The health check information for the listener + * + * @default - no healthcheck + */ + readonly healthCheck?: HealthCheck; +} + +/** + * Represent the HTTP Node Listener prorperty + */ +export interface HttpVirtualNodeListenerOptions extends VirtualNodeListenerCommonOptions { + /** + * Timeout for HTTP protocol + * + * @default - None + */ + readonly timeout?: HttpTimeout; +} + +/** + * Represent the GRPC Node Listener prorperty + */ +export interface GrpcVirtualNodeListenerOptions extends VirtualNodeListenerCommonOptions { + /** + * Timeout for GRPC protocol + * + * @default - None + */ + readonly timeout?: GrpcTimeout; +} + +/** + * Represent the TCP Node Listener prorperty + */ +export interface TcpVirtualNodeListenerOptions extends VirtualNodeListenerCommonOptions { + /** + * Timeout for TCP protocol + * + * @default - None + */ + readonly timeout?: TcpTimeout; +} + +/** + * Represents timeouts for HTTP protocols. + */ +export interface HttpTimeout { + /** + * Represents an idle timeout. The amount of time that a connection may be idle. + * + * @default - none + */ + readonly idle?: cdk.Duration; + + /** + * Represents per request timeout. + * + * @default - 15 s + */ + readonly perRequest?: cdk.Duration; +} + +/** + * Represents timeouts for GRPC protocols. + */ +export interface GrpcTimeout { + /** + * Represents an idle timeout. The amount of time that a connection may be idle. + * + * @default - none + */ + readonly idle?: cdk.Duration; + + /** + * Represents per request timeout. + * + * @default - 15 s + */ + readonly perRequest?: cdk.Duration; +} + +/** + * Represents timeouts for TCP protocols. + */ +export interface TcpTimeout { + /** + * Represents an idle timeout. The amount of time that a connection may be idle. + * + * @default - none + */ + readonly idle?: cdk.Duration; +} + +/** + * Defines listener for a VirtualNode + */ +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); + } + + /** + * Returns an HTTP2 Listener for a VirtualNode + */ + public static http2(props: HttpVirtualNodeListenerOptions = {}): VirtualNodeListener { + 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); + } + + /** + * Returns an TCP Listener for a VirtualNode + */ + public static tcp(props: TcpVirtualNodeListenerOptions = {}): VirtualNodeListener { + return new VirtualNodeListenerImpl(Protocol.TCP, props.healthCheck, props.timeout, props.port); + } + + /** + * Binds the current object when adding Listener to a VirtualNode + */ + public abstract bind(scope: cdk.Construct): VirtualNodeListenerConfig; + +} + +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(); } + + public bind(_scope: cdk.Construct): VirtualNodeListenerConfig { + return { + listener: { + portMapping: { + port: this.port, + protocol: this.protocol, + }, + healthCheck: this.healthCheck ? this.renderHealthCheck(this.healthCheck) : undefined, + timeout: this.timeout ? this.renderTimeout(this.timeout) : undefined, + }, + }; + } + + private renderHealthCheck(hc: HealthCheck): CfnVirtualNode.HealthCheckProperty | undefined { + if (hc === undefined) { return undefined; } + + if (hc.protocol === Protocol.TCP && hc.path) { + throw new Error('The path property cannot be set with Protocol.TCP'); + } + + if (hc.protocol === Protocol.GRPC && hc.path) { + throw new Error('The path property cannot be set with Protocol.GRPC'); + } + + const healthCheck: CfnVirtualNode.HealthCheckProperty = { + healthyThreshold: hc.healthyThreshold || 2, + intervalMillis: (hc.interval || cdk.Duration.seconds(5)).toMilliseconds(), // min + path: hc.path || (hc.protocol === Protocol.HTTP ? '/' : undefined), + port: hc.port || this.port, + protocol: hc.protocol || this.protocol, + timeoutMillis: (hc.timeout || cdk.Duration.seconds(2)).toMilliseconds(), + unhealthyThreshold: hc.unhealthyThreshold || 2, + }; + + validateHealthChecks(healthCheck); + + return healthCheck; + } + + private renderTimeout(timeout: HttpTimeout): CfnVirtualNode.ListenerTimeoutProperty { + return ({ + [this.protocol]: { + idle: timeout?.idle !== undefined ? { + unit: 'ms', + value: timeout?.idle.toMilliseconds(), + } : undefined, + perRequest: timeout?.perRequest !== undefined ? { + unit: 'ms', + value: timeout?.perRequest.toMilliseconds(), + } : undefined, + }, + }); + } +} diff --git a/packages/@aws-cdk/aws-appmesh/lib/virtual-node.ts b/packages/@aws-cdk/aws-appmesh/lib/virtual-node.ts index b8b9da2026715..fd8b2cadc87db 100644 --- a/packages/@aws-cdk/aws-appmesh/lib/virtual-node.ts +++ b/packages/@aws-cdk/aws-appmesh/lib/virtual-node.ts @@ -3,8 +3,8 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CfnVirtualNode } from './appmesh.generated'; import { IMesh, Mesh } from './mesh'; -import { validateHealthChecks } from './private/utils'; -import { AccessLog, HealthCheck, PortMapping, Protocol, VirtualNodeListener } from './shared-interfaces'; +import { AccessLog } from './shared-interfaces'; +import { VirtualNodeListener, VirtualNodeListenerConfig } from './virtual-node-listener'; import { IVirtualService } from './virtual-service'; /** @@ -34,15 +34,6 @@ export interface IVirtualNode extends cdk.IResource { */ readonly mesh: IMesh; - /** - * Utility method to add backends for existing or new VirtualNodes - */ - addBackends(...props: IVirtualService[]): void; - - /** - * Utility method to add Node Listeners for new or existing VirtualNodes - */ - addListeners(...listeners: VirtualNodeListener[]): void; } /** @@ -95,7 +86,7 @@ export interface VirtualNodeBaseProps { * * @default - No listeners */ - readonly listener?: VirtualNodeListener; + readonly listeners?: VirtualNodeListener[]; /** * Access Logging Configuration for the virtual node @@ -130,71 +121,10 @@ abstract class VirtualNodeBase extends cdk.Resource implements IVirtualNode { * The Mesh which the VirtualNode belongs to */ public abstract readonly mesh: IMesh; - - protected readonly backends = new Array(); - protected readonly listeners = new Array(); - - /** - * Add a VirtualServices that this node is expected to send outbound traffic to - */ - public addBackends(...props: IVirtualService[]) { - for (const s of props) { - this.backends.push({ - virtualService: { - virtualServiceName: s.virtualServiceName, - }, - }); - } - } - - /** - * Utility method to add an inbound listener for this virtual node - */ - public addListeners(...listeners: VirtualNodeListener[]) { - if (this.listeners.length + listeners.length > 1) { - throw new Error('VirtualNode may have at most one listener'); - } - - for (const listener of listeners) { - const portMapping = listener.portMapping || { port: 8080, protocol: Protocol.HTTP }; - this.listeners.push({ - portMapping, - healthCheck: renderHealthCheck(listener.healthCheck, portMapping), - }); - } - } -} - -function renderHealthCheck(hc: HealthCheck | undefined, pm: PortMapping): CfnVirtualNode.HealthCheckProperty | undefined { - if (hc === undefined) { return undefined; } - - if (hc.protocol === Protocol.TCP && hc.path) { - throw new Error('The path property cannot be set with Protocol.TCP'); - } - - if (hc.protocol === Protocol.GRPC && hc.path) { - throw new Error('The path property cannot be set with Protocol.GRPC'); - } - - const protocol = hc.protocol ?? pm.protocol; - - const healthCheck: CfnVirtualNode.HealthCheckProperty = { - healthyThreshold: hc.healthyThreshold || 2, - intervalMillis: (hc.interval || cdk.Duration.seconds(5)).toMilliseconds(), // min - path: hc.path || (protocol === Protocol.HTTP ? '/' : undefined), - port: hc.port || pm.port, - protocol: hc.protocol || pm.protocol, - timeoutMillis: (hc.timeout || cdk.Duration.seconds(2)).toMilliseconds(), - unhealthyThreshold: hc.unhealthyThreshold || 2, - }; - - validateHealthChecks(healthCheck); - - return healthCheck; } /** - * VirtualNode represents a newly defined App Mesh VirtualNode + * VirtualNode represents a newly defined AppMesh VirtualNode * * Any inbound traffic that your virtual node expects should be specified as a * listener. Any outbound traffic that your virtual node expects to reach @@ -245,6 +175,9 @@ export class VirtualNode extends VirtualNodeBase { */ public readonly mesh: IMesh; + private readonly backends = new Array(); + private readonly listeners = new Array(); + constructor(scope: Construct, id: string, props: VirtualNodeProps) { super(scope, id, { physicalName: props.virtualNodeName || cdk.Lazy.stringValue({ produce: () => cdk.Names.uniqueId(this) }), @@ -252,8 +185,8 @@ export class VirtualNode extends VirtualNodeBase { this.mesh = props.mesh; - this.addBackends(...props.backends || []); - this.addListeners(...props.listener ? [props.listener] : []); + props.backends?.forEach(backend => this.addBackend(backend)); + props.listeners?.forEach(listener => this.addListener(listener)); const accessLogging = props.accessLog?.bind(this); const node = new CfnVirtualNode(this, 'Resource', { @@ -261,7 +194,7 @@ export class VirtualNode extends VirtualNodeBase { meshName: this.mesh.meshName, spec: { backends: cdk.Lazy.anyValue({ produce: () => this.backends }, { omitEmptyArray: true }), - listeners: cdk.Lazy.anyValue({ produce: () => this.listeners }, { omitEmptyArray: true }), + listeners: cdk.Lazy.anyValue({ produce: () => this.listeners.map(listener => listener.listener) }, { omitEmptyArray: true }), serviceDiscovery: { dns: props.dnsHostName !== undefined ? { hostname: props.dnsHostName } : undefined, awsCloudMap: props.cloudMapService !== undefined ? { @@ -283,6 +216,24 @@ export class VirtualNode extends VirtualNodeBase { resourceName: this.physicalName, }); } + + /** + * Utility method to add an inbound listener for this VirtualNode + */ + public addListener(listener: VirtualNodeListener) { + this.listeners.push(listener.bind(this)); + } + + /** + * Add a Virtual Services that this node is expected to send outbound traffic to + */ + public addBackend(virtualService: IVirtualService) { + this.backends.push({ + virtualService: { + virtualServiceName: virtualService.virtualServiceName, + }, + }); + } } function renderAttributes(attrs?: {[key: string]: string}) { diff --git a/packages/@aws-cdk/aws-appmesh/package.json b/packages/@aws-cdk/aws-appmesh/package.json index 2789d9085284c..6b58c9981965a 100644 --- a/packages/@aws-cdk/aws-appmesh/package.json +++ b/packages/@aws-cdk/aws-appmesh/package.json @@ -153,6 +153,7 @@ "resource-attribute:@aws-cdk/aws-appmesh.VirtualGateway.virtualGatewayResourceOwner", "resource-attribute:@aws-cdk/aws-appmesh.VirtualGateway.virtualGatewayUid", "resource-attribute:@aws-cdk/aws-appmesh.VirtualNode.virtualNodeMeshName", + "duration-prop-type:@aws-cdk/aws-appmesh.VirtualNodeListener.timeout", "resource-attribute:@aws-cdk/aws-appmesh.VirtualNode.virtualNodeMeshOwner", "resource-attribute:@aws-cdk/aws-appmesh.VirtualNode.virtualNodeResourceOwner", "resource-attribute:@aws-cdk/aws-appmesh.VirtualNode.virtualNodeUid", @@ -172,7 +173,11 @@ "props-default-doc:@aws-cdk/aws-appmesh.VirtualRouterAttributes.virtualRouterName", "docs-public-apis:@aws-cdk/aws-appmesh.Protocol.HTTP", "docs-public-apis:@aws-cdk/aws-appmesh.Protocol.HTTP2", - "docs-public-apis:@aws-cdk/aws-appmesh.Protocol.GRPC" + "docs-public-apis:@aws-cdk/aws-appmesh.Protocol.GRPC", + "duration-prop-type:@aws-cdk/aws-appmesh.GrpcVirtualNodeListenerOptions.timeout", + "duration-prop-type:@aws-cdk/aws-appmesh.HttpVirtualNodeListenerOptions.timeout", + "duration-prop-type:@aws-cdk/aws-appmesh.Http2VirtualNodeListenerOptions.timeout", + "duration-prop-type:@aws-cdk/aws-appmesh.TcpVirtualNodeListenerOptions.timeout" ] }, "stability": "experimental", diff --git a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts index 3de6eb20c77d2..8bad51d706a32 100644 --- a/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts +++ b/packages/@aws-cdk/aws-appmesh/test/integ.mesh.ts @@ -31,18 +31,18 @@ const virtualService = mesh.addVirtualService('service', { const node = mesh.addVirtualNode('node', { dnsHostName: `node1.${namespace.namespaceName}`, - listener: { + listeners: [appmesh.VirtualNodeListener.http({ healthCheck: { healthyThreshold: 3, path: '/check-path', }, - }, + })], backends: [ virtualService, ], }); -node.addBackends(new appmesh.VirtualService(stack, 'service-2', { +node.addBackend(new appmesh.VirtualService(stack, 'service-2', { virtualServiceName: 'service2.domain.local', mesh, }), @@ -60,7 +60,7 @@ router.addRoute('route-1', { const node2 = mesh.addVirtualNode('node2', { dnsHostName: `node2.${namespace.namespaceName}`, - listener: { + listeners: [appmesh.VirtualNodeListener.http({ healthCheck: { healthyThreshold: 3, interval: cdk.Duration.seconds(5), @@ -70,7 +70,7 @@ const node2 = mesh.addVirtualNode('node2', { timeout: cdk.Duration.seconds(2), unhealthyThreshold: 2, }, - }, + })], backends: [ new appmesh.VirtualService(stack, 'service-3', { virtualServiceName: 'service3.domain.local', @@ -81,7 +81,7 @@ const node2 = mesh.addVirtualNode('node2', { const node3 = mesh.addVirtualNode('node3', { dnsHostName: `node3.${namespace.namespaceName}`, - listener: { + listeners: [appmesh.VirtualNodeListener.http({ healthCheck: { healthyThreshold: 3, interval: cdk.Duration.seconds(5), @@ -91,7 +91,7 @@ const node3 = mesh.addVirtualNode('node3', { timeout: cdk.Duration.seconds(2), unhealthyThreshold: 2, }, - }, + })], accessLog: appmesh.AccessLog.fromFilePath('/dev/stdout'), }); diff --git a/packages/@aws-cdk/aws-appmesh/test/test.health-check.ts b/packages/@aws-cdk/aws-appmesh/test/test.health-check.ts index 6f33658598efa..d65177a124b70 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.health-check.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.health-check.ts @@ -21,9 +21,9 @@ export = { const [min, max] = [5000, 300000]; // WHEN - const toThrow = (millis: number) => getNode(stack).addListeners({ + const toThrow = (millis: number) => getNode(stack).addListener(appmesh.VirtualNodeListener.http2({ healthCheck: { interval: cdk.Duration.millis(millis) }, - }); + })); // THEN test.doesNotThrow(() => toThrow(min)); @@ -40,9 +40,9 @@ export = { const [min, max] = [2000, 60000]; // WHEN - const toThrow = (millis: number) => getNode(stack).addListeners({ + const toThrow = (millis: number) => getNode(stack).addListener(appmesh.VirtualNodeListener.http2({ healthCheck: { timeout: cdk.Duration.millis(millis) }, - }); + })); // THEN test.doesNotThrow(() => toThrow(min)); @@ -59,9 +59,9 @@ export = { const [min, max] = [1, 65535]; // WHEN - const toThrow = (port: number) => getNode(stack).addListeners({ + const toThrow = (port: number) => getNode(stack).addListener(appmesh.VirtualNodeListener.http({ healthCheck: { port }, - }); + })); // THEN test.doesNotThrow(() => toThrow(min)); @@ -79,9 +79,9 @@ export = { const [min, max] = [2, 10]; // WHEN - const toThrow = (healthyThreshold: number) => getNode(stack).addListeners({ + const toThrow = (healthyThreshold: number) => getNode(stack).addListener(appmesh.VirtualNodeListener.http({ healthCheck: { healthyThreshold }, - }); + })); // THEN test.doesNotThrow(() => toThrow(min)); @@ -98,9 +98,9 @@ export = { const [min, max] = [2, 10]; // WHEN - const toThrow = (unhealthyThreshold: number) => getNode(stack).addListeners({ + const toThrow = (unhealthyThreshold: number) => getNode(stack).addListener(appmesh.VirtualNodeListener.http({ healthCheck: { unhealthyThreshold }, - }); + })); // THEN test.doesNotThrow(() => toThrow(min)); @@ -115,12 +115,12 @@ export = { const stack = new cdk.Stack(); // WHEN - const toThrow = (protocol: appmesh.Protocol) => getNode(stack).addListeners({ + const toThrow = (protocol: appmesh.Protocol) => getNode(stack).addListener(appmesh.VirtualNodeListener.http({ healthCheck: { protocol, path: '/', }, - }); + })); // THEN test.doesNotThrow(() => toThrow(appmesh.Protocol.HTTP)); @@ -134,12 +134,12 @@ export = { const stack = new cdk.Stack(); // WHEN - const toThrow = (protocol: appmesh.Protocol) => getNode(stack).addListeners({ + const toThrow = (protocol: appmesh.Protocol) => getNode(stack).addListener(appmesh.VirtualNodeListener.http({ healthCheck: { protocol, path: '/', }, - }); + })); // THEN test.doesNotThrow(() => toThrow(appmesh.Protocol.HTTP)); @@ -148,4 +148,4 @@ export = { test.done(); }, -}; +}; \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appmesh/test/test.mesh.ts b/packages/@aws-cdk/aws-appmesh/test/test.mesh.ts index 690dce4a08ddc..1f67c708e561a 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.mesh.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.mesh.ts @@ -57,7 +57,7 @@ export = { 'When adding a Virtual Router to existing mesh': { 'with at least one complete port mappings': { - 'shoulld create proper router'(test: Test) { + 'should create proper router'(test: Test) { // GIVEN const stack = new cdk.Stack(); @@ -208,12 +208,9 @@ export = { const node = mesh.addVirtualNode('test-node', { dnsHostName: 'test.domain.local', - listener: { - portMapping: { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], }); mesh.addVirtualService('service2', { @@ -287,12 +284,9 @@ export = { mesh.addVirtualNode('test-node', { dnsHostName: 'test.domain.local', - listener: { - portMapping: { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], }); // THEN @@ -329,11 +323,8 @@ export = { mesh.addVirtualNode('test-node', { dnsHostName: 'test.domain.local', - listener: { - portMapping: { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, healthCheck: { healthyThreshold: 3, path: '/', @@ -341,7 +332,7 @@ export = { timeout: cdk.Duration.seconds(2), // min unhealthyThreshold: 2, }, - }, + })], }); // THEN @@ -388,12 +379,9 @@ export = { mesh.addVirtualNode('test-node', { dnsHostName: 'test.domain.local', - listener: { - portMapping: { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], backends: [ service1, ], 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 06928a4a25351..75c7d0579e71b 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.virtual-node.ts @@ -28,41 +28,39 @@ export = { const node = new appmesh.VirtualNode(stack, 'test-node', { mesh, dnsHostName: 'test', - listener: {}, backends: [service1], }); - node.addBackends(service2); + node.addBackend(service2); // THEN - expect(stack).to( - haveResourceLike('AWS::AppMesh::VirtualNode', { - Spec: { - Backends: [ - { - VirtualService: { - VirtualServiceName: { - 'Fn::GetAtt': ['service1A48078CF', 'VirtualServiceName'], - }, + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Backends: [ + { + VirtualService: { + VirtualServiceName: { + 'Fn::GetAtt': ['service1A48078CF', 'VirtualServiceName'], }, }, - { - VirtualService: { - VirtualServiceName: { - 'Fn::GetAtt': ['service27C65CF7D', 'VirtualServiceName'], - }, + }, + { + VirtualService: { + VirtualServiceName: { + 'Fn::GetAtt': ['service27C65CF7D', 'VirtualServiceName'], }, }, - ], - }, - }), - ); + }, + ], + }, + })); test.done(); }, }, + 'when a single portmapping is added': { - 'should add the portmapping to the resoource'(test: Test) { + 'should add the portmapping to the resource'(test: Test) { // GIVEN const stack = new cdk.Stack(); @@ -75,28 +73,184 @@ export = { dnsHostName: 'test', }); - node.addListeners({ - portMapping: { - port: 8081, - protocol: appmesh.Protocol.TCP, + node.addListener(appmesh.VirtualNodeListener.tcp({ + port: 8081, + })); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Listeners: [ + { + PortMapping: { + Port: 8081, + Protocol: 'tcp', + }, + }, + ], }, + })); + + test.done(); + }, + }, + + 'when a listener is added with timeout': { + 'should add the listener timeout to the resource'(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, + dnsHostName: 'test', + listeners: [appmesh.VirtualNodeListener.grpc({ + port: 80, + timeout: { + idle: cdk.Duration.seconds(10), + perRequest: cdk.Duration.seconds(10), + }, + })], }); // THEN - expect(stack).to( - haveResourceLike('AWS::AppMesh::VirtualNode', { - Spec: { - Listeners: [ - { - PortMapping: { - Port: 8081, - Protocol: 'tcp', + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Listeners: [ + { + PortMapping: { + Port: 80, + Protocol: 'grpc', + }, + Timeout: { + GRPC: { + Idle: { + Unit: 'ms', + Value: 10000, + }, + PerRequest: { + Unit: 'ms', + Value: 10000, + }, }, }, - ], - }, - }), - ); + }, + ], + }, + })); + + test.done(); + }, + }, + + 'when a listener is added with healthcheck ': { + 'should add a default listener healthcheck to the resource'(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, + dnsHostName: 'test', + listeners: [appmesh.VirtualNodeListener.http2({ + port: 80, + healthCheck: {}, + timeout: { idle: cdk.Duration.seconds(10) }, + })], + }); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Listeners: [ + { + HealthCheck: { + HealthyThreshold: 2, + IntervalMillis: 5000, + Port: 80, + Protocol: 'http2', + TimeoutMillis: 2000, + UnhealthyThreshold: 2, + }, + PortMapping: { + Port: 80, + Protocol: 'http2', + }, + Timeout: { + HTTP2: { + Idle: { + Unit: 'ms', + Value: 10000, + }, + }, + }, + }, + ], + }, + })); + + test.done(); + }, + }, + + 'when a listener is added with healthcheck with user defined props': { + 'should add a listener healthcheck to the resource'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const mesh = new appmesh.Mesh(stack, 'mesh', { + meshName: 'test-mesh', + }); + + const node = new appmesh.VirtualNode(stack, 'test-node', { + mesh, + dnsHostName: 'test', + }); + + node.addListener(appmesh.VirtualNodeListener.tcp({ + port: 80, + healthCheck: { timeout: cdk.Duration.seconds(3) }, + timeout: { idle: cdk.Duration.seconds(10) }, + })); + + // THEN + expect(stack).to(haveResourceLike('AWS::AppMesh::VirtualNode', { + Spec: { + Listeners: [ + { + HealthCheck: { + HealthyThreshold: 2, + IntervalMillis: 5000, + Port: 80, + Protocol: 'tcp', + TimeoutMillis: 3000, + UnhealthyThreshold: 2, + }, + PortMapping: { + Port: 80, + Protocol: 'tcp', + }, + Timeout: { + TCP: { + Idle: { + Unit: 'ms', + Value: 10000, + }, + }, + }, + }, + ], + }, + })); test.done(); }, diff --git a/packages/@aws-cdk/aws-appmesh/test/test.virtual-router.ts b/packages/@aws-cdk/aws-appmesh/test/test.virtual-router.ts index 72510c83c4de2..56960564d6981 100644 --- a/packages/@aws-cdk/aws-appmesh/test/test.virtual-router.ts +++ b/packages/@aws-cdk/aws-appmesh/test/test.virtual-router.ts @@ -106,13 +106,9 @@ export = { const node = mesh.addVirtualNode('test-node', { dnsHostName: 'test', - listener: { - portMapping: - { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], backends: [service1], }); @@ -179,39 +175,27 @@ export = { const node = mesh.addVirtualNode('test-node', { dnsHostName: 'test', - listener: { - portMapping: - { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], backends: [ service1, ], }); const node2 = mesh.addVirtualNode('test-node2', { dnsHostName: 'test', - listener: { - portMapping: - { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], backends: [ service2, ], }); const node3 = mesh.addVirtualNode('test-node3', { dnsHostName: 'test', - listener: { - portMapping: - { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], backends: [ service1, ], @@ -337,13 +321,9 @@ export = { const node = mesh.addVirtualNode('test-node', { dnsHostName: 'test', - listener: { - portMapping: - { - port: 8080, - protocol: appmesh.Protocol.HTTP, - }, - }, + listeners: [appmesh.VirtualNodeListener.http({ + port: 8080, + })], backends: [ service1, ], From 544e80274a307df9009798aed928b90faf4554dc Mon Sep 17 00:00:00 2001 From: Nick Lynch Date: Wed, 11 Nov 2020 19:35:24 +0000 Subject: [PATCH 19/25] chore: automatically add missing libraries to more packages (#11428) The `create-missing-packages` script currently adds new libraries to `decdk`; this change does the same for our other "mega" packages that need some kind of dependency on each new service construct library. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../build-tools/create-missing-libraries.ts | 28 +++++++++++++------ .../cloudformation-include/package.json | 4 +-- packages/aws-cdk-lib/package.json | 2 +- 3 files changed, 23 insertions(+), 11 deletions(-) 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 2bf2b707b6a09..55863ee5f8e13 100644 --- a/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts +++ b/packages/@aws-cdk/cfnspec/build-tools/create-missing-libraries.ts @@ -298,19 +298,31 @@ async function main() { await fs.copy(path.join(templateDir, file), path.join(packagePath, file)); } - // update decdk - const decdkPkgJsonPath = path.join(__dirname, '..', '..', '..', 'decdk', 'package.json'); - const decdkPkg = JSON.parse(await fs.readFile(decdkPkgJsonPath, 'utf8')); + await addDependencyToMegaPackage(path.join('@aws-cdk', 'cloudformation-include'), packageName, version, ['dependencies', 'peerDependencies']); + await addDependencyToMegaPackage('aws-cdk-lib', packageName, version, ['devDependencies']); + await addDependencyToMegaPackage('monocdk', packageName, version, ['devDependencies']); + await addDependencyToMegaPackage('decdk', packageName, version, ['dependencies']); + } +} + +/** + * A few of our packages (e.g., decdk, aws-cdk-lib) require a dependency on every service package. + * This automates adding the dependency (and peer dependency) to the package.json. + */ +async function addDependencyToMegaPackage(megaPackageName: string, packageName: string, version: string, dependencyTypes: string[]) { + const packageJsonPath = path.join(__dirname, '..', '..', '..', megaPackageName, 'package.json'); + const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8')); + dependencyTypes.forEach(dependencyType => { const unorderedDeps = { - ...decdkPkg.dependencies, + ...packageJson[dependencyType], [packageName]: version, }; - decdkPkg.dependencies = {}; + packageJson[dependencyType] = {}; Object.keys(unorderedDeps).sort().forEach(k => { - decdkPkg.dependencies[k] = unorderedDeps[k]; + packageJson[dependencyType][k] = unorderedDeps[k]; }); - await fs.writeFile(decdkPkgJsonPath, JSON.stringify(decdkPkg, null, 2) + '\n'); - } + }); + await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n'); } main().catch(e => { diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index a62d181f8243a..787e999447b0c 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -144,10 +144,10 @@ "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", "@aws-cdk/aws-ivs": "0.0.0", + "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", "@aws-cdk/aws-kinesisfirehose": "0.0.0", - "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kms": "0.0.0", "@aws-cdk/aws-lakeformation": "0.0.0", "@aws-cdk/aws-lambda": "0.0.0", @@ -276,7 +276,7 @@ "@aws-cdk/aws-iotevents": "0.0.0", "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", - "@aws-cdk/aws-ivs": "@aws-cdk/aws-ivs", + "@aws-cdk/aws-ivs": "0.0.0", "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index c1b5e38a89280..9ab275a5198ba 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -193,10 +193,10 @@ "@aws-cdk/aws-iotsitewise": "0.0.0", "@aws-cdk/aws-iotthingsgraph": "0.0.0", "@aws-cdk/aws-ivs": "0.0.0", + "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kinesis": "0.0.0", "@aws-cdk/aws-kinesisanalytics": "0.0.0", "@aws-cdk/aws-kinesisfirehose": "0.0.0", - "@aws-cdk/aws-kendra": "0.0.0", "@aws-cdk/aws-kms": "0.0.0", "@aws-cdk/aws-lakeformation": "0.0.0", "@aws-cdk/aws-lambda": "0.0.0", From 6967f7da3b072196f11cccc2cd1d34d8f2975598 Mon Sep 17 00:00:00 2001 From: Matt Simpson Date: Thu, 12 Nov 2020 09:04:11 +1300 Subject: [PATCH 20/25] docs(lamba-event-sources): Fix code example in README.md (#11411) Fix missing parenthesis in Kinesis code example ---- *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-event-sources/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-lambda-event-sources/README.md b/packages/@aws-cdk/aws-lambda-event-sources/README.md index b1fec3c4c78a7..656d09f56f448 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/README.md +++ b/packages/@aws-cdk/aws-lambda-event-sources/README.md @@ -202,7 +202,7 @@ const stream = new kinesis.Stream(this, 'MyStream'); myFunction.addEventSource(new KinesisEventSource(stream, { batchSize: 100, // default startingPosition: lambda.StartingPosition.TRIM_HORIZON -}); +})); ``` ## Roadmap From 5f3d646d9b7709becb6a033aae01cb09f8604c86 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 22:29:14 +0000 Subject: [PATCH 21/25] chore(deps): bump aws-sdk from 2.789.0 to 2.790.0 (#11432) Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.789.0 to 2.790.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.789.0...v2.790.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- .../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 +- .../@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 +- .../@aws-cdk/custom-resources/package.json | 2 +- packages/aws-cdk/package.json | 2 +- packages/cdk-assets/package.json | 2 +- yarn.lock | 100 ++---------------- 15 files changed, 20 insertions(+), 108 deletions(-) diff --git a/packages/@aws-cdk/aws-cloudfront-origins/package.json b/packages/@aws-cdk/aws-cloudfront-origins/package.json index 06e954237cdf8..3a2f8da53bcee 100644 --- a/packages/@aws-cdk/aws-cloudfront-origins/package.json +++ b/packages/@aws-cdk/aws-cloudfront-origins/package.json @@ -72,7 +72,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-ec2": "0.0.0", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 587776d1d4edb..cbe98e36ec2cb 100644 --- a/packages/@aws-cdk/aws-cloudfront/package.json +++ b/packages/@aws-cdk/aws-cloudfront/package.json @@ -73,7 +73,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 3146f7f682988..265bc78a5133d 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -73,7 +73,7 @@ "license": "Apache-2.0", "devDependencies": { "@aws-cdk/assert": "0.0.0", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 001cec43f99fd..fd8384c9da842 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -79,7 +79,7 @@ "@aws-cdk/aws-sns": "0.0.0", "@aws-cdk/aws-sqs": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 53beb4f72810b..df66b2582f1e4 100644 --- a/packages/@aws-cdk/aws-codecommit/package.json +++ b/packages/@aws-cdk/aws-codecommit/package.json @@ -79,7 +79,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-sns": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 d4de8e8e1d2a0..3ff3fa0d1a859 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/jest": "^26.0.15", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 f23de775f4ba2..dcbb43dceb5cb 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -74,7 +74,7 @@ "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", "@types/yaml": "1.9.6", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 c9d8e2fd475b9..a0ba41f0e6682 100644 --- a/packages/@aws-cdk/aws-events-targets/package.json +++ b/packages/@aws-cdk/aws-events-targets/package.json @@ -75,7 +75,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-codecommit": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 9034ee8214849..b64ccc157d4f1 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 c2ae9cfcb68b6..2d71393f32bd8 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 f1a5ee11d78bb..ccd18a54f2ac9 100644 --- a/packages/@aws-cdk/aws-sqs/package.json +++ b/packages/@aws-cdk/aws-sqs/package.json @@ -74,7 +74,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", "@types/nodeunit": "^0.0.31", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 b8942190103fe..cdae20b2b13e1 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -79,7 +79,7 @@ "@types/aws-lambda": "^8.10.64", "@types/fs-extra": "^8.1.1", "@types/sinon": "^9.0.8", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 375fe4b4f9ff6..dc7c21a9bd21e 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -71,7 +71,7 @@ "@aws-cdk/region-info": "0.0.0", "@aws-cdk/yaml-cfn": "0.0.0", "archiver": "^5.0.2", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.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 6d82300abeb4d..0359545c0768b 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.0.2", - "aws-sdk": "^2.789.0", + "aws-sdk": "^2.790.0", "glob": "^7.1.6", "yargs": "^16.1.0" }, diff --git a/yarn.lock b/yarn.lock index d401cd2040c16..a0e71abdf5ee2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3575,11 +3575,6 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -app-root-path@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" - integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== - append-transform@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" @@ -3847,10 +3842,10 @@ aws-sdk-mock@^5.1.0: sinon "^9.0.1" traverse "^0.6.6" -aws-sdk@^2.596.0, aws-sdk@^2.637.0, aws-sdk@^2.789.0: - version "2.789.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.789.0.tgz#a1b0a8b8b4227a7947c04e8d75239ba27d2deb93" - integrity sha512-Jqq+M4N0EgkyS4OPf05UHa7IWUcpuBdnpwMRgBnu4Ju6PxpOTh1UQcmYepVmIN3m6YVpLwFctEYzAMJFM3LT1A== +aws-sdk@^2.637.0, aws-sdk@^2.790.0: + version "2.790.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.790.0.tgz#0c01634e59ff2a761e889808bee26dfd1ea28a2d" + integrity sha512-L278KsE+g/LsXIjLhpdtbvMcEZzZ/5dTBLIh6VIcNF0z63xlnDJQ4IWTDZ3Op5fK9B6vwQxlPT7XD5+egu+qoA== dependencies: buffer "4.9.2" events "1.1.1" @@ -5965,21 +5960,11 @@ dotenv-expand@^5.1.0: resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -dotenv-json@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dotenv-json/-/dotenv-json-1.0.0.tgz#fc7f672aafea04bed33818733b9f94662332815c" - integrity sha512-jAssr+6r4nKhKRudQ0HOzMskOFFi9+ubXWwmrSGJFgTvpjyPXCXsCsYbjif6mXp7uxA7xY3/LGaiTQukZzSbOQ== - dotenv@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== -dotenv@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - dotgitignore@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" @@ -6249,11 +6234,6 @@ escodegen@^1.11.0, escodegen@^1.14.1, escodegen@^1.8.1: optionalDependencies: source-map "~0.6.1" -eslint-config-standard@^14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" - integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== - eslint-import-resolver-node@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" @@ -6281,14 +6261,6 @@ eslint-module-utils@^2.6.0: debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - eslint-plugin-import@^2.22.1: version "2.22.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" @@ -6308,33 +6280,11 @@ eslint-plugin-import@^2.22.1: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-promise@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== - eslint-plugin-rulesdir@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-rulesdir/-/eslint-plugin-rulesdir-0.1.0.tgz#ad144d7e98464fda82963eff3fab331aecb2bf08" integrity sha1-rRRNfphGT9qClj7/P6szGuyyvwg= -eslint-plugin-standard@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz#0c3bf3a67e853f8bbbc580fb4945fbf16f41b7c5" - integrity sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ== - eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -7646,7 +7596,7 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: +ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -7878,13 +7828,6 @@ is-core-module@^2.0.0: dependencies: has "^1.0.3" -is-core-module@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" - integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== - dependencies: - has "^1.0.3" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -9061,24 +9004,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -lambda-leak@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lambda-leak/-/lambda-leak-2.0.0.tgz#771985d3628487f6e885afae2b54510dcfb2cd7e" - integrity sha1-dxmF02KEh/boha+uK1RRDc+yzX4= - -lambda-tester@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/lambda-tester/-/lambda-tester-3.6.0.tgz#ceb7d4f4f0da768487a05cff37dcd088508b5247" - integrity sha512-F2ZTGWCLyIR95o/jWK46V/WnOCFAEUG/m/V7/CLhPJ7PCM+pror1rZ6ujP3TkItSGxUfpJi0kqwidw+M/nEqWw== - dependencies: - app-root-path "^2.2.1" - dotenv "^8.0.0" - dotenv-json "^1.0.0" - lambda-leak "^2.0.0" - semver "^6.1.1" - uuid "^3.3.2" - vandium-utils "^1.1.1" - lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -12024,14 +11949,6 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13 dependencies: path-parse "^1.0.6" -resolve@^1.10.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - resolve@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" @@ -12232,7 +12149,7 @@ semver@7.x, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -13845,11 +13762,6 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -vandium-utils@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vandium-utils/-/vandium-utils-1.2.0.tgz#44735de4b7641a05de59ebe945f174e582db4f59" - integrity sha1-RHNd5LdkGgXeWevpRfF05YLbT1k= - vendors@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" From e5c2e589f2e4f5f1d680b7df9e5a2da5ade01780 Mon Sep 17 00:00:00 2001 From: Nathan Peck Date: Wed, 11 Nov 2020 18:06:03 -0500 Subject: [PATCH 22/25] chore(ecs-service-extensions): Promoting the ecs-service-extensions package to stable (#11431) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../@aws-cdk-containers/ecs-service-extensions/README.md | 4 +--- .../@aws-cdk-containers/ecs-service-extensions/package.json | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/README.md b/packages/@aws-cdk-containers/ecs-service-extensions/README.md index 9302b90e5d9a3..cbca327f0ee12 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/README.md +++ b/packages/@aws-cdk-containers/ecs-service-extensions/README.md @@ -2,9 +2,7 @@ --- -![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. +![cdk-constructs: Stable](https://img.shields.io/badge/cdk--constructs-stable-success.svg?style=for-the-badge) --- diff --git a/packages/@aws-cdk-containers/ecs-service-extensions/package.json b/packages/@aws-cdk-containers/ecs-service-extensions/package.json index 4b1da71dd86fe..e33dc561b65b8 100644 --- a/packages/@aws-cdk-containers/ecs-service-extensions/package.json +++ b/packages/@aws-cdk-containers/ecs-service-extensions/package.json @@ -99,6 +99,6 @@ "awscdkio": { "announce": false }, - "maturity": "experimental", - "stability": "experimental" -} + "maturity": "stable", + "stability": "stable" +} \ No newline at end of file From cc28485fd6333377258d0506bcaa63fb79d1da19 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 12 Nov 2020 00:51:22 +0000 Subject: [PATCH 23/25] chore(deps-dev): bump parcel from 2.0.0-nightly.443 to 2.0.0-nightly.444 (#11435) Bumps [parcel](https://github.com/parcel-bundler/parcel) from 2.0.0-nightly.443 to 2.0.0-nightly.444. - [Release notes](https://github.com/parcel-bundler/parcel/releases) - [Changelog](https://github.com/parcel-bundler/parcel/blob/v2/CHANGELOG.md) - [Commits](https://github.com/parcel-bundler/parcel/commits) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- .../@aws-cdk/aws-lambda-nodejs/package.json | 2 +- yarn.lock | 920 +++++++++--------- 2 files changed, 461 insertions(+), 461 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/package.json b/packages/@aws-cdk/aws-lambda-nodejs/package.json index de6ea3d7b31a8..cf929a95db74c 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/package.json +++ b/packages/@aws-cdk/aws-lambda-nodejs/package.json @@ -67,7 +67,7 @@ "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "delay": "4.4.0", - "parcel": "2.0.0-nightly.443", + "parcel": "2.0.0-nightly.444", "pkglint": "0.0.0" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index a0e71abdf5ee2..4dc926663112b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2159,128 +2159,128 @@ dependencies: "@types/node" ">= 8" -"@parcel/babel-ast-utils@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/babel-ast-utils/-/babel-ast-utils-2.0.0-nightly.2067.tgz#bbb65a31eb2531a8d8bec1416b5d0047a74b57ac" - integrity sha512-1oWLszHqibl9giNCzzwd9DVePmivPridrcOlX+txSAkuQ2FG0mVSutv25XturJ6g/B6z78pL2tNV/fdVjf6lkA== +"@parcel/babel-ast-utils@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/babel-ast-utils/-/babel-ast-utils-2.0.0-nightly.2068.tgz#3671e1a2fecfd521414e992cbdd9a60552b3a174" + integrity sha512-5tAgLraq10c8GY7iInEUAQbxGigWAM6+X6K4L5hgns4pw6QgD5+XtDsAbQ4r5x6cHsxXDsPpJWtRPUNrVPBoyQ== dependencies: "@babel/generator" "^7.0.0" "@babel/parser" "^7.0.0" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/babel-preset-env@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/babel-preset-env/-/babel-preset-env-2.0.0-nightly.445.tgz#93ecf8ed29179c99e5e6d7e1534fcfae7a72a73e" - integrity sha512-fkYiZocLAsEyjz50nibkVIHULP0hwV9K2Qjl+/tqA1WJYh6/TMb1/EsaQ4T1CTY+zVsCh3TgRY4a+WqQ+OCu/A== +"@parcel/babel-preset-env@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/babel-preset-env/-/babel-preset-env-2.0.0-nightly.446.tgz#2a2718e9245762b1444970571fb373e5e419db92" + integrity sha512-vW18hGRxSw/Lul9GFm5p6+yJt7OIW6opCSIakza7Ed/D+fgCmCtrb1v+B0phpB9CgK/Q19BXY3INemELF/1G+w== dependencies: "@babel/preset-env" "^7.4.0" semver "^5.4.1" -"@parcel/babylon-walk@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/babylon-walk/-/babylon-walk-2.0.0-nightly.2067.tgz#102349d4f52d8046868429cb70f5fd4fe544957e" - integrity sha512-PlFGav6fC8HIsA1pS7moWTWgXuwL4OI+xH50Wee5Dc0Q3KNmfyqCJpnhRhCJTGmVe8KGYEgXF6MNwrvjVWUCbg== +"@parcel/babylon-walk@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/babylon-walk/-/babylon-walk-2.0.0-nightly.2068.tgz#4e825d931124c340c4031964236942b50093287c" + integrity sha512-f5jj0MRGMR78whdcDKIRQ5mmhv0mJCRcrTAUibYz7qzaAdZaVR5uOQ0N+AzSN4v5S2F4uw7AtwWph5YnWCJKcA== dependencies: "@babel/types" "^7.0.0" lodash.clone "^4.5.0" -"@parcel/bundler-default@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.0.0-nightly.445.tgz#bac962673e7ebe6c8314e5cab7e89f03a00fca77" - integrity sha512-v6zhPfvte103vtZkAUh4mJkVLCLvX9ZjI8p6ZP3fDSI1Y5F8akWe4LWXOo1ATMjfELcwbcb317rOAKgwvV6fiQ== +"@parcel/bundler-default@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.0.0-nightly.446.tgz#e993ed9904771d517bb1b574eab3f668883e9828" + integrity sha512-MWeDM2i9SY5qgbtogzPeaWmR0lgBH+jyYlEjzPPb5QLEB3vPBAZxLOp2s8d7EHy/nNHmKy22znzHg7lsftCkqg== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" -"@parcel/cache@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.0.0-nightly.445.tgz#ade1c56a3b8064223b5b4004d0f3a76116290617" - integrity sha512-HhOkWCCNRs8zdKRyiWUiYI63BZc4MjrgFCiNv00KxyDCtDXtZrD5yjzRdVbVMmJvoth8iAtNoSCrJ2hGsouPBQ== +"@parcel/cache@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.0.0-nightly.446.tgz#0cbcd98dc7c2896bc190809ced9bdb1a159b7f3c" + integrity sha512-Hqs+tA7pFm4EekHAv+QxUvqhwXclbafqTTYZKf1FXC3erQmhXeMdXBcpEeP6yZjJ1ZM5FEqjK+L8LOTcHoriWQ== dependencies: - "@parcel/logger" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/logger" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/codeframe@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.0.0-nightly.445.tgz#4a89d283e26a0e24eb91954e499ecd80cf4472a2" - integrity sha512-lptg9/JUko0GXe4dbG39w7sIVyOhT414qVem6mOC7P7Fy0Us7Qat23nAlWGLICZ4iYavOO44B9yIRbwUv/WB7g== +"@parcel/codeframe@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.0.0-nightly.446.tgz#c017240ad1868ef3d68a62510fe6c1795da40ba2" + integrity sha512-78jYfjl7qWIsltPUTfdvhzZCQtrP2e4IKiKItc3ToJgBIfkFnA0RT6EXKqlaecZQsJxsD/L5aNMpMVtCc70Zag== dependencies: chalk "^2.4.2" emphasize "^2.1.0" slice-ansi "^4.0.0" string-width "^4.2.0" -"@parcel/config-default@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.0.0-nightly.445.tgz#d48b91629ccf3b065702ce1b893fd7011a3cb494" - integrity sha512-v7l35yN+KYLzuzMEGxdHr8WSaTXhZlY7FQKeoZ7XupFRXAB2QsOyoIpm74LMkSsRLAWZ3JOQej3Ii79bbTvFHQ== - dependencies: - "@parcel/bundler-default" "2.0.0-nightly.445+adb92ee0" - "@parcel/namer-default" "2.0.0-nightly.445+adb92ee0" - "@parcel/optimizer-cssnano" "2.0.0-nightly.445+adb92ee0" - "@parcel/optimizer-data-url" "2.0.0-nightly.445+adb92ee0" - "@parcel/optimizer-htmlnano" "2.0.0-nightly.445+adb92ee0" - "@parcel/optimizer-terser" "2.0.0-nightly.445+adb92ee0" - "@parcel/packager-css" "2.0.0-nightly.445+adb92ee0" - "@parcel/packager-html" "2.0.0-nightly.445+adb92ee0" - "@parcel/packager-js" "2.0.0-nightly.445+adb92ee0" - "@parcel/packager-raw" "2.0.0-nightly.445+adb92ee0" - "@parcel/packager-raw-url" "2.0.0-nightly.2067+adb92ee0" - "@parcel/packager-ts" "2.0.0-nightly.445+adb92ee0" - "@parcel/reporter-bundle-analyzer" "2.0.0-nightly.2067+adb92ee0" - "@parcel/reporter-bundle-buddy" "2.0.0-nightly.2067+adb92ee0" - "@parcel/reporter-cli" "2.0.0-nightly.445+adb92ee0" - "@parcel/reporter-dev-server" "2.0.0-nightly.445+adb92ee0" - "@parcel/resolver-default" "2.0.0-nightly.445+adb92ee0" - "@parcel/runtime-browser-hmr" "2.0.0-nightly.445+adb92ee0" - "@parcel/runtime-js" "2.0.0-nightly.445+adb92ee0" - "@parcel/runtime-react-refresh" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-babel" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-coffeescript" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-css" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-glsl" "2.0.0-nightly.2067+adb92ee0" - "@parcel/transformer-graphql" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-html" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-image" "2.0.0-nightly.2067+adb92ee0" - "@parcel/transformer-inline-string" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-js" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-json" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-jsonld" "2.0.0-nightly.2067+adb92ee0" - "@parcel/transformer-less" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-mdx" "2.0.0-nightly.2067+adb92ee0" - "@parcel/transformer-postcss" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-posthtml" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-pug" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-raw" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-react-refresh-babel" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-react-refresh-wrap" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-sass" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-stylus" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-sugarss" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-toml" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-typescript-types" "2.0.0-nightly.445+adb92ee0" - "@parcel/transformer-vue" "2.0.0-nightly.2067+adb92ee0" - "@parcel/transformer-yaml" "2.0.0-nightly.445+adb92ee0" - -"@parcel/core@2.0.0-nightly.443+adb92ee0": - version "2.0.0-nightly.443" - resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.0.0-nightly.443.tgz#2aadb331972f97738d74e1032d8894cdd7b08fa1" - integrity sha512-tjxlSYwrR4X4244PvdKYQslAQf1jqsBSjVtb19tD+5r/B+nmWrZtVe3/S1JEu8rFVt54TGsgifrO4RyOOlvqVA== - dependencies: - "@parcel/cache" "2.0.0-nightly.445+adb92ee0" - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/events" "2.0.0-nightly.445+adb92ee0" - "@parcel/fs" "2.0.0-nightly.445+adb92ee0" - "@parcel/logger" "2.0.0-nightly.445+adb92ee0" - "@parcel/package-manager" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" +"@parcel/config-default@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.0.0-nightly.446.tgz#b0e51e62144add5da02e6ecd00ab7740b632f15b" + integrity sha512-VZPqQ1E43DxYzs5eYD9V/h4QtWLENaP6oOiFUtKDVRUftBfPXHP43TldKaIYHcKcWFTRTz16D3rrvzCw3DYGOw== + dependencies: + "@parcel/bundler-default" "2.0.0-nightly.446+3bfef282" + "@parcel/namer-default" "2.0.0-nightly.446+3bfef282" + "@parcel/optimizer-cssnano" "2.0.0-nightly.446+3bfef282" + "@parcel/optimizer-data-url" "2.0.0-nightly.446+3bfef282" + "@parcel/optimizer-htmlnano" "2.0.0-nightly.446+3bfef282" + "@parcel/optimizer-terser" "2.0.0-nightly.446+3bfef282" + "@parcel/packager-css" "2.0.0-nightly.446+3bfef282" + "@parcel/packager-html" "2.0.0-nightly.446+3bfef282" + "@parcel/packager-js" "2.0.0-nightly.446+3bfef282" + "@parcel/packager-raw" "2.0.0-nightly.446+3bfef282" + "@parcel/packager-raw-url" "2.0.0-nightly.2068+3bfef282" + "@parcel/packager-ts" "2.0.0-nightly.446+3bfef282" + "@parcel/reporter-bundle-analyzer" "2.0.0-nightly.2068+3bfef282" + "@parcel/reporter-bundle-buddy" "2.0.0-nightly.2068+3bfef282" + "@parcel/reporter-cli" "2.0.0-nightly.446+3bfef282" + "@parcel/reporter-dev-server" "2.0.0-nightly.446+3bfef282" + "@parcel/resolver-default" "2.0.0-nightly.446+3bfef282" + "@parcel/runtime-browser-hmr" "2.0.0-nightly.446+3bfef282" + "@parcel/runtime-js" "2.0.0-nightly.446+3bfef282" + "@parcel/runtime-react-refresh" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-babel" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-coffeescript" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-css" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-glsl" "2.0.0-nightly.2068+3bfef282" + "@parcel/transformer-graphql" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-html" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-image" "2.0.0-nightly.2068+3bfef282" + "@parcel/transformer-inline-string" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-js" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-json" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-jsonld" "2.0.0-nightly.2068+3bfef282" + "@parcel/transformer-less" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-mdx" "2.0.0-nightly.2068+3bfef282" + "@parcel/transformer-postcss" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-posthtml" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-pug" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-raw" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-react-refresh-babel" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-react-refresh-wrap" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-sass" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-stylus" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-sugarss" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-toml" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-typescript-types" "2.0.0-nightly.446+3bfef282" + "@parcel/transformer-vue" "2.0.0-nightly.2068+3bfef282" + "@parcel/transformer-yaml" "2.0.0-nightly.446+3bfef282" + +"@parcel/core@2.0.0-nightly.444+3bfef282": + version "2.0.0-nightly.444" + resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.0.0-nightly.444.tgz#cc652b318155cd3d228583efc2a607a05910af3c" + integrity sha512-zAOBus2xVDOcOebHBOHW7MEX7nvDUfBKWe3dSvgSu71STHQOU7rDvl/jTOx9fJ5JsQ7rD87xIhEmzvLXCOdfgw== + dependencies: + "@parcel/cache" "2.0.0-nightly.446+3bfef282" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/events" "2.0.0-nightly.446+3bfef282" + "@parcel/fs" "2.0.0-nightly.446+3bfef282" + "@parcel/logger" "2.0.0-nightly.446+3bfef282" + "@parcel/package-manager" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/types" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" - "@parcel/workers" "2.0.0-nightly.445+adb92ee0" + "@parcel/types" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" + "@parcel/workers" "2.0.0-nightly.446+3bfef282" abortcontroller-polyfill "^1.1.9" base-x "^3.0.8" browserslist "^4.6.6" @@ -2294,72 +2294,72 @@ querystring "^0.2.0" semver "^5.4.1" -"@parcel/diagnostic@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.0.0-nightly.445.tgz#9ee4346683445c7e6c05695d0c1e105dbc4a81ce" - integrity sha512-uURmdKGPQn5ZGHzJbuPTnTYDFWzsYlt6SBysVU5/OGoWXDlsW7nQ+MU7rfIQl9D5pgFtC9G+orwSPvjDmBi83w== +"@parcel/diagnostic@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.0.0-nightly.446.tgz#f0c0136bc9bf7e45491fe5789f4463a2a7922658" + integrity sha512-NPJNcbO5D1rpdiD57AJy77CmqgODq+Adjvk8ntt8yD/jVpzUp1ju21Ql3HbsuHDT5XFu8xEh2xUYgwuUy9KGAg== dependencies: json-source-map "^0.6.1" nullthrows "^1.1.1" -"@parcel/events@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.0.0-nightly.445.tgz#f8c7b0ab75bc9c2676bb65c428780467378f31ee" - integrity sha512-4w1NoPtP4lAl2IC0B3dNKEJgukSSArdnd/+D33Y57S6C9Ninw6nTrEQtfePmoZqNVcmEk/ztSBxixn484NE+IA== +"@parcel/events@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.0.0-nightly.446.tgz#82557b5f067b0adf17a391f028012ab6f21d7866" + integrity sha512-yShzChGKaDscBBIKcyy6eXX3/vXjne3pYkcBE+26vXATcDLhZr7ntN/LvBsgJ+/4a40lszymkc06aKDusBhCEA== -"@parcel/fs-write-stream-atomic@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/fs-write-stream-atomic/-/fs-write-stream-atomic-2.0.0-nightly.2067.tgz#e868a6d75e791f66477f9fbc6b65763c0cd9f16c" - integrity sha512-zIKF9CfZQPi7iwbHTaulTY2k8ZUcnSj4tVeHKrd2XiX+5yv7Q80Kuk5GbpcnMw/FxSubxNvHX/x7oxbtFCiXeA== +"@parcel/fs-write-stream-atomic@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/fs-write-stream-atomic/-/fs-write-stream-atomic-2.0.0-nightly.2068.tgz#a28e376bda170365665f681127715bc1b16b294e" + integrity sha512-HtBdsaMrXMOFzE+5k/Hsji4IGGmuVhvEBKBGjqFo5FYvrlaYsqT3fX7rFIxg5su4qFMMEZU24RI6IXVlFSoAKw== dependencies: graceful-fs "^4.1.2" iferr "^1.0.2" imurmurhash "^0.1.4" readable-stream "1 || 2" -"@parcel/fs@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.0.0-nightly.445.tgz#28bc385de0dc9ab7a776a0329fad92a33c5bc074" - integrity sha512-iQL/gAC7PfS8N1Vt6GZeb7b6zjtr0umEFlyC7uQ6lyV/Ln2syqTJWQ+OKCdpURdi2PY3dqzqD9OyNqVFpp5+IA== +"@parcel/fs@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.0.0-nightly.446.tgz#82cf51e6d48e207661ecb93a4847cf02d8f2a87f" + integrity sha512-K5k+j/DPG9EP0XOr2LJp0mQAodrpscIwSjWGMOvdEvGbY25FP4NB8Sg2Xs00KCaZVNlsKsrMpOsJyohP3ePpbg== dependencies: - "@parcel/fs-write-stream-atomic" "2.0.0-nightly.2067+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/fs-write-stream-atomic" "2.0.0-nightly.2068+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" "@parcel/watcher" "2.0.0-alpha.8" - "@parcel/workers" "2.0.0-nightly.445+adb92ee0" + "@parcel/workers" "2.0.0-nightly.446+3bfef282" graceful-fs "^4.2.4" mkdirp "^0.5.1" ncp "^2.0.0" nullthrows "^1.1.1" rimraf "^3.0.2" -"@parcel/logger@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.0.0-nightly.445.tgz#5085896f9f4cd398b94ce2956e74a497886825f6" - integrity sha512-AtTE3ciR/xrqDSaEqEBgFd0zhUK5mCq+G7tXYeCu71+OphnCo30vSVe9NhsoZmWHoFvtOjCZ0M9ECfTJzVXRuw== +"@parcel/logger@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.0.0-nightly.446.tgz#38e46be237872d57d8a240776a478e576285b6bd" + integrity sha512-q3/yovljZeYMWfG9/ThC0z8RwUDzKVvJaYislfVt1k/BGVrvBy8Z3M65iut4ub0hTzTSzZKLTwHwmYbPU+pquQ== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/events" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/events" "2.0.0-nightly.446+3bfef282" -"@parcel/markdown-ansi@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.0.0-nightly.445.tgz#5a271162f65e2a2a3c5de5a2a95999d72336c01e" - integrity sha512-CoVZYc5JsdQfsgt3BVlR9u+36I6EBAwQOo7y4iR4nNiF/MWb8s30PGLTNjykYxyNxBI92YfHl8RTMgyeGuHCqw== +"@parcel/markdown-ansi@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.0.0-nightly.446.tgz#23538d1116393ff15e0de85300a5ae2e1e2c5fd7" + integrity sha512-FHXlTFPq9Iu6kuTOjrs0qMNFQ8REFBE96kFuSeTQ5omcOHL6eNIBO9VCIxima2Cz+9pQSNXhNlaUAUVRPCXJ2Q== dependencies: chalk "^2.4.2" -"@parcel/namer-default@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.0.0-nightly.445.tgz#19bd7440ac7c9510cf8b321838e39e5549d83dfb" - integrity sha512-hsYj0OCkh8LSshTSuW6HKR6O0YbHTPJydZ+5+XrV5v87PDOp1QBLeuDCR6hporRqx7KWBp20PROWrrXgjcvJmQ== +"@parcel/namer-default@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.0.0-nightly.446.tgz#3c43cabff1ea6615af53454a32d1ab9ea0eb69e0" + integrity sha512-DmqpV/GpgjtQerbVSO3rOW3gT+AaxslJWPqa9diFbtAQSrnzbJcuENnaxJzKWyGLT7TgMFoG86iqTiIWFnqfNA== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" -"@parcel/node-libs-browser@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/node-libs-browser/-/node-libs-browser-2.0.0-nightly.2067.tgz#8b6195a0013f2c4018d637bcd9de7b778aaf6e42" - integrity sha512-0Q5ZwBM3bZM3tYsMvh7SEc3iMc5d3AgSkn5MG6+rRbLnFP3dwRQws/2qpCghX9//2ifTa9jNwU7cSqlMdVN/Ng== +"@parcel/node-libs-browser@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/node-libs-browser/-/node-libs-browser-2.0.0-nightly.2068.tgz#6178b587cdb236126b26a53bdbf4376b47bb4ebc" + integrity sha512-BNTYCeaBKyLUUeEaB4NNiV4b86VaJRcpzm1ykBpZRGsDSi4ts4KE1dzxJPm6Pe9N9NkMEXYdZX4VQA9CpxHXjA== dependencies: assert "^2.0.0" browserify-zlib "^0.2.0" @@ -2384,71 +2384,71 @@ util "^0.12.3" vm-browserify "^1.1.2" -"@parcel/node-resolver-core@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-2.0.0-nightly.2067.tgz#27b083414d0a6f4ec532c67441f4b844bffde5c7" - integrity sha512-pXh5flmV49zo25nhZPxDzeIdQmuUNCX5okXELQC7aCbbSInLHZNwCAks0PaGCMXo+Cx5nWtzRaC50URn2LnJVA== +"@parcel/node-resolver-core@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-2.0.0-nightly.2068.tgz#98537a4242537ed93aa0b1489c1a0870e57b1c49" + integrity sha512-BKa43I/Xi1j8TGn0XjvsM+BKPZeaJS7oLTy8GgZlA2Fk8cf5JFUem/t2iulF51qEb4B/CDQWHu63sEoC1IxarQ== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/node-libs-browser" "2.0.0-nightly.2067+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/node-libs-browser" "2.0.0-nightly.2068+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" micromatch "^3.0.4" nullthrows "^1.1.1" querystring "^0.2.0" -"@parcel/optimizer-cssnano@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-cssnano/-/optimizer-cssnano-2.0.0-nightly.445.tgz#b4e3e8a42dfbbfee6f3e93bfa794ea575ee17f6f" - integrity sha512-jD4AEtloLMmEN2kJ7wGD+bN6krv/7MFifNSQTLSjuHR4X5yE68LYanUDiFwZFLoA5PS6IN0k2MPV5uQx5b/Iag== +"@parcel/optimizer-cssnano@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-cssnano/-/optimizer-cssnano-2.0.0-nightly.446.tgz#73700f47036776d2b51fed6615468f1d9f05e3fc" + integrity sha512-pSqJFhnE3SjNhDmqbmEu5EPfMDY4Ghx2W6FSgAohk6FJy8wd4tS2ghlVavUHKOZopbcvAia3+OHJXqhl2K802w== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" cssnano "^4.1.10" postcss "^8.0.5" -"@parcel/optimizer-data-url@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-data-url/-/optimizer-data-url-2.0.0-nightly.445.tgz#ecf601c69be85a343d4d7889048163c9b06f71da" - integrity sha512-6aCjXaEBHcMtr9u/7FBNRd0v2de27CdG+AKcDUopHOeT7algwlam59dvFQK/cGqTFYjuoTRQcEZaC3R6tmLqwg== +"@parcel/optimizer-data-url@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-data-url/-/optimizer-data-url-2.0.0-nightly.446.tgz#d2feaf6e7cf40c21aae8d00758113b43ea611f3a" + integrity sha512-dCAutIyY0+shiTGFUfpTKTnixOg13sgjz/AAml6/iJHKWYcp4rvW6ilzXX2egi529OmfQkYq1hBFPaAMk5fcDA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" isbinaryfile "^4.0.2" mime "^2.4.4" -"@parcel/optimizer-htmlnano@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.0.0-nightly.445.tgz#d056a71c0f5e29a9a7c3103579a5cb977733fa2d" - integrity sha512-RiPJEStbZ4OtQYvTPd8KKuXANsgy86viA76u4mnadInupxsM+MRlxj/7eUt7t+kSqE/z6yoH1HTF69kpUgwXYw== +"@parcel/optimizer-htmlnano@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.0.0-nightly.446.tgz#fcd42db64dd9736470baebe844f27e4f294d885a" + integrity sha512-GeUEx5QTcxcvGrWVnVwSDbCgCaGqrQtvTVUndGaAJAYPnGzTzPZH3KzubD7WvBXYARXrrpjEvWCXmEN6hNsfSA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" htmlnano "^0.2.2" nullthrows "^1.1.1" posthtml "^0.11.3" -"@parcel/optimizer-terser@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-terser/-/optimizer-terser-2.0.0-nightly.445.tgz#3e48db6cc5725151b6ef2ed12c65b904a2422bfb" - integrity sha512-DH+0UZCcFmeBEwLlY64ZZWyvoHi1bjVnKW7WLaRauHPBwrT3xGVkIa+hN7QHQ+E2t4jDCQd7IpfoswzBqGohvA== +"@parcel/optimizer-terser@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-terser/-/optimizer-terser-2.0.0-nightly.446.tgz#9282e0a168b9b76b0380cc5aa32192ec4a38a6a0" + integrity sha512-lZXKeZLCTwTWf9aerhpENr5edc1xz8FmEGnyRPyqaln3VF1dJW7lLp/cCENh+8KyXwKvyxroZuIU+zTrNO0UDQ== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" terser "^5.2.0" -"@parcel/package-manager@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.0.0-nightly.445.tgz#5eaa68935f96ac11a92ccea99323aaa218f721b7" - integrity sha512-DhGslnPGIk/jd1DS5sNL3JLxk59GqvDn9Q+gAicB6QvKjF2Lq3GQLlnl6bi4bXetZwOYjdRBdaXikweJmKBs4A== +"@parcel/package-manager@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.0.0-nightly.446.tgz#56abd6a81be4a67e227bdc8ca1e49ff0bfb66eec" + integrity sha512-k0DD0AN2plk6NzwIIBWF+8uGxYWMp4kp9hfzE3ERmoLl6VKN77PEINCq2aGkcENhiXF4omO8u2A5K5Ns+I8QaA== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/fs" "2.0.0-nightly.445+adb92ee0" - "@parcel/logger" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" - "@parcel/workers" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/fs" "2.0.0-nightly.446+3bfef282" + "@parcel/logger" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" + "@parcel/workers" "2.0.0-nightly.446+3bfef282" command-exists "^1.2.6" cross-spawn "^6.0.4" nullthrows "^1.1.1" @@ -2456,91 +2456,91 @@ semver "^5.4.1" split2 "^3.1.1" -"@parcel/packager-css@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.0.0-nightly.445.tgz#688c2f1c96bd698325d8765c7acf3ebb049027ef" - integrity sha512-p1V4yBeF3RSds/o0e8V+Qs4/z+rDY32yakgdzBBYAtSYhPIIXUNaZMw0/DWqq7ClALeM6Xs+UQwFtT95worcIA== +"@parcel/packager-css@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.0.0-nightly.446.tgz#88d745452695bc09eb7e32039d61b196a928ff83" + integrity sha512-3SXRjRx5DD9QlcrICHINAWMaDxB/5Ki33eT4camu/1xDblpTvFcv7hRgYj37d1fXbyebKSUBKEzaUDjAUcwxOA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/packager-html@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.0.0-nightly.445.tgz#53fd08f3c9bd838940441a5098c2f70ac04a5099" - integrity sha512-LwOJELmGXX0yT0///njuzEzHSygjMZMDuDcJLMnMoiyA5MivoYWeVU/MTZvorTU8dzZ61SqiUIS1NbjDORp4vg== +"@parcel/packager-html@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.0.0-nightly.446.tgz#a2d4f92b69e1b0580a37515629fb18bcab70bc8b" + integrity sha512-qhNs0fcvSTsA6kNpjQq4MZYWFjTQETpDIXL9YSlSwgTAUwa7UEvn3a3C0W2X2OpgXaM+zqj/WifLuZQjrY0Qpg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/types" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/types" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" posthtml "^0.11.3" -"@parcel/packager-js@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.0.0-nightly.445.tgz#7ce928ed783c924457395d1a1adc48e56490dda4" - integrity sha512-ePZzrgLJgZW+RUDiX/qZLDme2UmkIsFUr/4Rhdyc2S/QBMDAHcmBgXb61bavItw9CdzmyWdabqSx7jDr6RqzMw== +"@parcel/packager-js@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.0.0-nightly.446.tgz#2fa64b00dd946c14eb14c01cae9fea2fbb4c4b35" + integrity sha512-UN/J+xGh2uGamxVb5NRYlsfQUkUeEClo7Mzm+mj9OFjTEbCKc768qhTPf1X2cEG5WtrD5xxIToYTPbdArAB/nw== dependencies: "@babel/traverse" "^7.2.3" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/scope-hoisting" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/scope-hoisting" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" -"@parcel/packager-raw-url@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/packager-raw-url/-/packager-raw-url-2.0.0-nightly.2067.tgz#5b93d627266ae4bd859c00c19da21a67cad56549" - integrity sha512-bCcOOrNAx17tOXMI5PJ1FtjJYj/idZokjmmeHZzrOmOjvppbGTNsDW92EyL3iBzB4aX0l9Dn9MSwV52/tWCVRA== +"@parcel/packager-raw-url@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/packager-raw-url/-/packager-raw-url-2.0.0-nightly.2068.tgz#7359309410e1115ad820df0c33d3e45fbad8f8ad" + integrity sha512-nQfoCPewW57EjQRvHXXVhBqpU3qo8r4cpSmltKDb+7Mdb9KctYMy7AdO/bipXdIgvqk8H3k/KRvmhSi17MLBcw== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/packager-raw@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.0.0-nightly.445.tgz#a02bda8f218a03bcca9660e88f14e91e48c1830e" - integrity sha512-ZxZoWc9+5Bs+FXD6Kw2EP3DRp6F+Ya3qq4R2Jd+9EjjnfuH8leYOKwPghUio/G+AkSQEeOmBYgjhsE18o8ZpvA== +"@parcel/packager-raw@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.0.0-nightly.446.tgz#0d07aa9d453a5d00d2ead0e0a63bfe464b68c911" + integrity sha512-YrUwZDap0iwWYEvu2wYPp9gZw9eggnAt0r46s1+KvTWdSdJaB1M1Ctm+sF3BQvPuzvT3li69idVeMFA2T1Zodw== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/packager-ts@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/packager-ts/-/packager-ts-2.0.0-nightly.445.tgz#04110a5ade9682fe90b26f6f547ff0da47f50af4" - integrity sha512-adNSvw8A736QEhjI7quvo5RzZOZW3Q14d/vmP86qx1nBrCSeHy/MFl/CyjeebQpJuZeGXnoiIHX8aWhz96kshQ== +"@parcel/packager-ts@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/packager-ts/-/packager-ts-2.0.0-nightly.446.tgz#2f062227ee2e436c5a51a463a9d94c6358f34a04" + integrity sha512-DdCaZk8kZpzdAIIbxoHia5ga8swe535lYiuAbrbKBB4O1lmzXAtDy3ko3yV4rSPjTDG49PAQD26r5Q8pVApZ2Q== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/plugin@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.0.0-nightly.445.tgz#c9f5a2ed3ad214d78744d761d4c3301ab2ff9fa2" - integrity sha512-qxcX+BiKRdHyCYTpEjjMOzjzLjpZmhdXdmL6PwAESg0PjqA7KCx1pL6zVJHaR68mQ/WBXE2lX7hl++Nfg2vtbw== +"@parcel/plugin@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.0.0-nightly.446.tgz#7881c9a01a9641a0113925a6ec5e86ca7d7b115f" + integrity sha512-Rzi7MH5EeanlWdssuWXUx3wztdh1TApOFAP+XHDft+sBhlhdcuazywGyk6vzILAr1hIdKxO5DkUxnHR9Db1biQ== dependencies: - "@parcel/types" "2.0.0-nightly.445+adb92ee0" + "@parcel/types" "2.0.0-nightly.446+3bfef282" -"@parcel/reporter-bundle-analyzer@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/reporter-bundle-analyzer/-/reporter-bundle-analyzer-2.0.0-nightly.2067.tgz#ddf3984b2e088d33b2332c6e8b07b8286172e74c" - integrity sha512-GitRUuMGk4cf2Jais2mSVNUH2R3hmojCUMS9zrxmK9zu+W9Okl1V4yhEX6NbwSmuzKXEUOU2utMlqUYN12z1dg== +"@parcel/reporter-bundle-analyzer@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/reporter-bundle-analyzer/-/reporter-bundle-analyzer-2.0.0-nightly.2068.tgz#cfd47198f4e608812c6aa06be26b0a41657a8c9b" + integrity sha512-rG2UhcbCQ/F32FzEGX/CnD0kNGz5+cUn9ZAZoQJgn6Rrsafv2Edh6TGWtRK4znj8l77h4E0Rc/yYMqfFzKCdCQ== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" -"@parcel/reporter-bundle-buddy@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/reporter-bundle-buddy/-/reporter-bundle-buddy-2.0.0-nightly.2067.tgz#38e05ca74d0c8c342a7269dc1a1bb65c064599d8" - integrity sha512-DEazr+ZzSTnDoP/kOamsPmD77IqwE8Fbp/HvDIDA4DQvkobxHLIt0w0Qr8lJ2tAgwzLRuAxA6UAHOvX6qVB1IQ== +"@parcel/reporter-bundle-buddy@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/reporter-bundle-buddy/-/reporter-bundle-buddy-2.0.0-nightly.2068.tgz#dabae907e36fedc14218644b7bdd42a25cffc983" + integrity sha512-GrF0CXwmsB/T8jafDeMpEmOfaab6/YVe+JPsBGcvz7qlLUhtw7+Os4yhFyC9fkHDEHQxEGE1s5aeKGIvEQ0URg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/reporter-cli@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.0.0-nightly.445.tgz#135ad99e1568ec2534d1d4553857b241537a6b9b" - integrity sha512-88oGRxN2Eimi3BqzEHb1fdITCh0XPRHf79EFxY7jUoxJobJwBIu967BzG+yy7NvARgYkm8aBa9+f+KyASrXPpw== +"@parcel/reporter-cli@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.0.0-nightly.446.tgz#7a8259fcbefebf1e62090938e3bd83f6aed0e9ff" + integrity sha512-aVTDkX5ID8pcSqjm+soA2urRgkpsraMC37k6dAKqO4IZQFyrOr1J8ZSTFboZkJpls4A3msdd6aKkpNSAniSpzQ== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/types" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/types" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" chalk "^3.0.0" filesize "^3.6.0" nullthrows "^1.1.1" @@ -2549,13 +2549,13 @@ strip-ansi "^6.0.0" term-size "^2.1.1" -"@parcel/reporter-dev-server@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.0.0-nightly.445.tgz#45b7d8d2bcf17609e4542e5c7b6872fa5aa15189" - integrity sha512-mYJ+t9KMCA52AaYvg0dxIMqdSZbnckxxunIM/uPe+J7Nd71ImfSNMv7K/xVx67RrSm/YD0gSgbGI4yfWX2/kGQ== +"@parcel/reporter-dev-server@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.0.0-nightly.446.tgz#675b4f68be8841e9c5b7806bf08905c2bed8f01c" + integrity sha512-/KF1QiNtEbwlCFl6+1hQNznKyt0npwvfgreo9ZJEgX9IWj04Sbdz0JhaPjESq5+3Kb/e3N94RZWc7+pysdgEYg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" connect "^3.7.0" ejs "^2.6.1" http-proxy-middleware "^1.0.0" @@ -2563,54 +2563,54 @@ serve-handler "^6.0.0" ws "^6.2.0" -"@parcel/resolver-default@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.0.0-nightly.445.tgz#3aeff1e04f6005f019e93304ffbf29e01e38903a" - integrity sha512-A5hpAqtvFeA4AifeMSRBvUuJcKI5AnXotPXJ+ZoP6H8GjRcUbdkGSpObc+B6W4ZmMuYEtojGSHFA+eHcyVgQsg== +"@parcel/resolver-default@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.0.0-nightly.446.tgz#527780f91fd932e1a62d0e5742edf777ff046719" + integrity sha512-8ECX0H4g0KvEjgtnpP2BPNl+Ios0FEqUeg8/6pntsVKbFlKT6mfVsTwH2iXVq/96qCBfn/kuZUlKONrIzXbQ8A== dependencies: - "@parcel/node-resolver-core" "2.0.0-nightly.2067+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/node-resolver-core" "2.0.0-nightly.2068+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/runtime-browser-hmr@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.0.0-nightly.445.tgz#04f2863e4a82a16a3f31f69535757d0077418899" - integrity sha512-kqUdNGh0oxHOM8UcMzxXW6EiDq6rSaAR3TGXam+HcLPyid9U5rPGUn0+476vtoiwH/mOrjKXRWEZJ0DsdfhnFw== +"@parcel/runtime-browser-hmr@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.0.0-nightly.446.tgz#8ae59b67cedbdf6070d98967ca1de44259192823" + integrity sha512-J4kfVfbmfVugL66Ttl1Ma9iCbY11cXEu3TzMg6SWxps2RV33gTBOhrkZ4b0BMKL7M5rHF9++DZkUpB2t1PJq3Q== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/runtime-js@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.0.0-nightly.445.tgz#da86efc2f7c05ce0b6fd1f2d7c7935434f088b9c" - integrity sha512-/8HEZVm9Kc/mXM/wS3vyQxU3XLwKq/zEMiX8dKmWIrgFyqHBnKg06Xru1665mj1vhgpw1Viwr5DfrdjYVbuVVg== +"@parcel/runtime-js@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.0.0-nightly.446.tgz#39a93aec6c2e3d5f72b6391ab1e199c8bf86e112" + integrity sha512-R9BbQliTU09WR+r0Py2iPuaPvq3wyyl6LWVVM0RB0Ccn1QuVOEwng3Nk7Vn6wTLejARsgLs2koVHln35pX1JGg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" -"@parcel/runtime-react-refresh@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.0.0-nightly.445.tgz#ef0edf335e69c0c659213de7445242373fa62390" - integrity sha512-4V8Hf3XumyPcfKRehf8/3mfTZduuWWN/tz+A4fh/9WRh9u6Hz1ozAbTjS/fpd78HnzK5BUIglUkvMyD5inhxoQ== +"@parcel/runtime-react-refresh@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.0.0-nightly.446.tgz#5666360f5dba7db41716d5199ce40a438aeb394f" + integrity sha512-wXKmWbdFmlER3NHqoM8Rh+ObfAUNQZOMIxMWjVZE9W6bcRdfId4bGv5APHgn2Aed56oPKjbC2FOx3UYThCJOwQ== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" react-refresh "^0.9.0" -"@parcel/scope-hoisting@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/scope-hoisting/-/scope-hoisting-2.0.0-nightly.445.tgz#bfe8f3bc4b5020e71df0d5845944c00136783277" - integrity sha512-+S9Ud91ONAQzG/F6LTOyrZwNGXeT394vrI6/FqAtVVqnHWZXK6JmN26kPnou+8SB8oxkMbzGhMxzoft7mORQVQ== +"@parcel/scope-hoisting@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/scope-hoisting/-/scope-hoisting-2.0.0-nightly.446.tgz#f350b4650b84af0ede793fbc280ee48039b6de00" + integrity sha512-mmT7WqSEIRXYP4ChHai0fEXqofruAEQTWC9GwwEPE2iFjTgpGmF0NQW9H+PG/RQkeCbzG6rdYAZlIlJkhvuXKg== dependencies: "@babel/generator" "^7.3.3" "@babel/parser" "^7.0.0" "@babel/template" "^7.4.0" "@babel/traverse" "^7.2.3" "@babel/types" "^7.3.3" - "@parcel/babel-ast-utils" "2.0.0-nightly.2067+adb92ee0" - "@parcel/babylon-walk" "2.0.0-nightly.2067+adb92ee0" - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" + "@parcel/babel-ast-utils" "2.0.0-nightly.2068+3bfef282" + "@parcel/babylon-walk" "2.0.0-nightly.2068+3bfef282" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" "@parcel/source-map@2.0.0-alpha.4.16": @@ -2621,10 +2621,10 @@ node-addon-api "^3.0.0" node-gyp-build "^4.2.2" -"@parcel/transformer-babel@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.0.0-nightly.445.tgz#b12affbcd5df92597d91e8d404698fd7add574b0" - integrity sha512-+vf48c1BLe/4GAz7XXARc9+O92yhQVELmmFOX5uV1dnNy1bdSg6Ek7Ln/uHe3iabcMJF4YbYKBKXJMWiUdalWw== +"@parcel/transformer-babel@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.0.0-nightly.446.tgz#778dd03df21206e23032cafa867e67f362c74240" + integrity sha512-CB5qQZZl0YA+vqnRQq+5huVhWDEe2xd6BNSz8U6K55ez/O9PRSaRosxRkkVIcQJr2jGAI7YTXC4zC3relcvMWA== dependencies: "@babel/core" "^7.0.0" "@babel/generator" "^7.0.0" @@ -2634,85 +2634,85 @@ "@babel/preset-env" "^7.0.0" "@babel/preset-react" "^7.0.0" "@babel/traverse" "^7.0.0" - "@parcel/babel-ast-utils" "2.0.0-nightly.2067+adb92ee0" - "@parcel/babel-preset-env" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/babel-ast-utils" "2.0.0-nightly.2068+3bfef282" + "@parcel/babel-preset-env" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" browserslist "^4.6.6" core-js "^3.2.1" nullthrows "^1.1.1" semver "^5.7.0" -"@parcel/transformer-coffeescript@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-coffeescript/-/transformer-coffeescript-2.0.0-nightly.445.tgz#b109291ec5d289cc3c02b3897aef64cb00a43358" - integrity sha512-81z83poTX4ZsoA7QnW0RqIsP7WXHsIz9X3+IXW78Gm12lmgXOXGD/cSY6QtlBi4oqFxtiE9gVgEWety4j8qcgw== +"@parcel/transformer-coffeescript@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-coffeescript/-/transformer-coffeescript-2.0.0-nightly.446.tgz#9315acf80e8a41726b0e8a9f7569e85895902a27" + integrity sha512-yJI5LvN9pVAv474Oz0OqbezegSzi+USMk7KLv9s7f+lCz870hoGXoxSX3u1WIvYT4j3VXblwDd895nBZ5KfV9g== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" coffeescript "^2.0.3" nullthrows "^1.1.1" semver "^5.4.1" -"@parcel/transformer-css@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.0.0-nightly.445.tgz#5c443563ae8e005af6be424b0de9ec5f81560ed6" - integrity sha512-g0tCf/U5PDVjbttEfS0OipXYkcJ9AgibkWt4K4BtP8q6t+lctB71eyinHamcNHFJoi/mKW0EzlObBER9pIV+4w== +"@parcel/transformer-css@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.0.0-nightly.446.tgz#5a904695c6f11bc68decfa06a5243b4582c484d1" + integrity sha512-mT6LJExHLeon7OXwfKpcxz1ATl1dsuAKYlDMo6F4pU82FcxdMFZD7dLUmvvsQ7rG43/ZPMermR5xlNPjfed+pA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" postcss "^8.0.5" postcss-value-parser "^4.1.0" semver "^5.4.1" -"@parcel/transformer-glsl@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/transformer-glsl/-/transformer-glsl-2.0.0-nightly.2067.tgz#11599d0f5804e1503f8e28e750b260c8bbc08cd1" - integrity sha512-IG0dggCM8R3EycMmMgT3BAhtIENfLf2FsaMGFlTiKcF71IXn9JPLjjbx+Yn5yASJyAHP0dWgycw4xCjrxxg5yA== +"@parcel/transformer-glsl@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/transformer-glsl/-/transformer-glsl-2.0.0-nightly.2068.tgz#55fce558f9b1ce40ed16a76c0f96b52088fc2ef0" + integrity sha512-Azf/840wQ/6R1uJV05+QxywA6cUdBDaqa9tU+LPNhonfvX1Cg8RyUMW3Guzs/Jrchuv1dW/YSDLFnNw5k6cepg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-graphql@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-graphql/-/transformer-graphql-2.0.0-nightly.445.tgz#fe311396f080a605810625fcaaa5a2238c2a74f6" - integrity sha512-i+lkzhzUp7DAOZeCWZbsa83+abzLRmijxMYVkMRKer8yaDNDlcqWfCVbzAcVFBI/wc6/mQ2nA/1erhePjqwfTA== +"@parcel/transformer-graphql@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-graphql/-/transformer-graphql-2.0.0-nightly.446.tgz#344270a83f7ccce671bf76ec2062df8430b5f74e" + integrity sha512-UrpBUzhnainKKUqauDAR1C7g5D6tHHNSz+226ZfoNJEVKCJ0C+dMH492yk4UqIU4PcPKCR6zRJCNA353G7x2NA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-html@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.0.0-nightly.445.tgz#561136797d7c6c476ab607f881dab34ca1b89d9e" - integrity sha512-sL1clzjug9xs25HN8VKyUnxKc1/wDfa9GBZNPUN7cysmbCCWGvPNiYd7LWp8EihMj+vEbyZ27rMF/hz6iN77UA== +"@parcel/transformer-html@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.0.0-nightly.446.tgz#ab9f94effe5e16ad3eaa0744440525ed92b33f96" + integrity sha512-5PIuqRj+CbqVeLFfSwbmaaDD6seRypNmp1A/+qxVgmz8ya/Wt7XwEHTT+4Mw2OAJykWl12Adp9qoRpWJCa20fw== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" posthtml "^0.11.3" posthtml-parser "^0.4.1" posthtml-render "^1.1.5" semver "^5.4.1" -"@parcel/transformer-image@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.0.0-nightly.2067.tgz#2ed9c82340861742466235e3adef342f61b2c553" - integrity sha512-9b/539/IUMu/JAAzrwRP+1rZ5c1jcrobOY3hfT6gPc9dYsZPg6GAI5Zgri8k+D769Y/nxVzT3wHjx4asjOTy1g== +"@parcel/transformer-image@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.0.0-nightly.2068.tgz#bc41cf314cb20639014c264c194f84cc1a056481" + integrity sha512-BFYM4eFn75RzSNt4t6Pmj33q6rcNypH+iExB5do1EB0Xv8he/s9O1ujO5nCy5AKJVdrR42ABjIR5/pl30ZRpLQ== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-inline-string@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-inline-string/-/transformer-inline-string-2.0.0-nightly.445.tgz#4646777d25bad1964ceef442d45e2d1701a31d25" - integrity sha512-5q4+7gMhDMDXZrrDFGc7BSAr59bE9Mh6lYfqF4pPK70Gr5L5+ntUMGtscySnRl7IoIMd2T59SuHWZjxHdfNWHg== +"@parcel/transformer-inline-string@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-inline-string/-/transformer-inline-string-2.0.0-nightly.446.tgz#bcfbbbec8544a0c6c3a90a1cb05067ae5d0890a6" + integrity sha512-d7H1kxB7Qy0MW5tYnTjzA3dNpCaxNUSQjJqvWvBpYwn9vct0PzS/YHM3b36tku76p5mk7+YP4ZxC2aT6i3yq+g== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-js@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.0.0-nightly.445.tgz#8fbae7bfb3b2a9a76a47219dcafd38948e4311c1" - integrity sha512-6/FN3GyBJAAsI5qR5rL1GNxdRCvnQli4p3lGvT2CGQZvy6FpScSw4KrtAKUzcGSTuJJM7P1fXkN0RYeR5RpD8w== +"@parcel/transformer-js@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.0.0-nightly.446.tgz#60af6368f0df6af66e0c9164567dfa9548f8143d" + integrity sha512-jO1dFhOHgwEb4nZ1lpBikPmM/3Nm/GXaqj3MbdTM3y8pSTGMUaLNZpzjJeL3NC8Ykqk1fjKA6cyLqjPlTPoisQ== dependencies: "@babel/core" "^7.0.0" "@babel/generator" "^7.0.0" @@ -2721,193 +2721,193 @@ "@babel/template" "^7.4.0" "@babel/traverse" "^7.0.0" "@babel/types" "^7.0.0" - "@parcel/babel-ast-utils" "2.0.0-nightly.2067+adb92ee0" - "@parcel/babylon-walk" "2.0.0-nightly.2067+adb92ee0" - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/scope-hoisting" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/babel-ast-utils" "2.0.0-nightly.2068+3bfef282" + "@parcel/babylon-walk" "2.0.0-nightly.2068+3bfef282" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/scope-hoisting" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" micromatch "^4.0.2" nullthrows "^1.1.1" semver "^5.4.1" -"@parcel/transformer-json@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.0.0-nightly.445.tgz#7a2218d38d392ef125f938c6093f7ef89d6fcda6" - integrity sha512-skEW2uwFs3NYSv56Nwa16rqKVnApYHbMrjv2DnuiNhlY3JP+f03aTvdYxtvoB8aQni5HzMUm68aRnBH+rEqypg== +"@parcel/transformer-json@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.0.0-nightly.446.tgz#63461c5537cf0b31edad814146ef397d48dbb570" + integrity sha512-xpyd+astuEqJG23oZzOCJCUd/UnqOPqKgeJ1YgZ7wxc42a8uQE/iObG+WT5HKlqxBOlBu9jEfJZug+fxWKkRGA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" json5 "^2.1.0" -"@parcel/transformer-jsonld@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/transformer-jsonld/-/transformer-jsonld-2.0.0-nightly.2067.tgz#b45351918734cd1b8a39ebae224bdc29db47bd9b" - integrity sha512-nppjkCAqGTVyHDUgKmBIfTfKsiARpiVA1TCN9T2QBbW8FNU0duFDZBF+++NfH2pLtOt2KbRk7dRE/fimpMjAxA== +"@parcel/transformer-jsonld@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/transformer-jsonld/-/transformer-jsonld-2.0.0-nightly.2068.tgz#5bbac69ccbbc3e89b27368ca1c024cfaa3c73815" + integrity sha512-bO8nK/Oj9uKOwLGGVjOGjBtG1lLIEK9wEqdVfUzJgeyEu6EUEJBy0iU0bKTEaGaGj//ZVChFp7n9vpuGnIATAw== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/types" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/types" "2.0.0-nightly.446+3bfef282" json5 "^2.1.2" -"@parcel/transformer-less@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-less/-/transformer-less-2.0.0-nightly.445.tgz#400612ba75ca3546b59c56807aaab415b751e27c" - integrity sha512-EjGK2ZsbGHQc5YD6CIVdVZn9hmL7sTM8SjuRU0/CFgKVQh3NI0e8vVjfA4UnMgRAsVAxFKDiyIc10pZuRrTBEQ== +"@parcel/transformer-less@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-less/-/transformer-less-2.0.0-nightly.446.tgz#b81cf260fe8c81c8e60de06e93766a83e584ff87" + integrity sha512-outojfO4ThAnMaMapVOwFRkJvkuBNQPh6jTUrtVCLeubXh4GdBcYSKWGy8JefbDe5tx2MqJx49JEiJjTlxyqHg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" -"@parcel/transformer-mdx@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/transformer-mdx/-/transformer-mdx-2.0.0-nightly.2067.tgz#4ac94a9a33c495ede3638d036d493999d6624e96" - integrity sha512-tRIJLA2W6EmxXjjvBc37t8xASNaR0ZmmFc4K0LmJbiO5kuHWfOjuw/npq6p+TShYUUZYTSgeVsN9HolCDw/v4g== +"@parcel/transformer-mdx@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/transformer-mdx/-/transformer-mdx-2.0.0-nightly.2068.tgz#55a15598d8cb1f7a04ae88650a738b4982abeb12" + integrity sha512-L9Jl8REp3UjKPXJfppNAWmTNxKoLwYuYwd/F09lrQCKe5H0Isnku/yKHugl3wDODItn1aZPThfk7uuxzejoj8A== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-postcss@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.0.0-nightly.445.tgz#18fd18252b035192ef2b53a4029bd3f29a75e2b3" - integrity sha512-vGfrP0zkbwo7eMLQmWd29K6JAmoyKUMRt3U8fOE3KMxWTR4EwR/jAnv9qwimlz5GoEDne7dsBv1eHcrqpl50uQ== +"@parcel/transformer-postcss@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.0.0-nightly.446.tgz#383fcc10d59794e85bc1a376cafa8efed00e613e" + integrity sha512-Yrux2pN3rUCkE5oyQmiahzyWmRYjAvEpK2FIYp2qlOsTghaI5ZBRNeduYO+XvZFE9PeeEP416JNsC0yomxXWjg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" css-modules-loader-core "^1.1.0" nullthrows "^1.1.1" postcss-value-parser "^4.1.0" semver "^5.4.1" -"@parcel/transformer-posthtml@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.0.0-nightly.445.tgz#49d26ae8bf6f0d210066517972315fbb45a36a2b" - integrity sha512-jTUj+zyXKCTNgnJHNOKgjzmJgpcbmQgPEnac8TEwrW1iENaAxU+6gUChczf9xyzLpsV3WRT/4F8UheSiTqbpvw== +"@parcel/transformer-posthtml@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.0.0-nightly.446.tgz#d20f4be828f2c91c65c3698affe05176f5516452" + integrity sha512-JM9vWvPIY5twP/w5uhD0VQFe4eZzHQA2pMq3R819euD4wrIyIpuCa6g6r4iI9z/w3ygWcx1Z6cTEbBb+39Y5Hg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" posthtml "^0.11.3" posthtml-parser "^0.4.1" posthtml-render "^1.1.5" semver "^5.4.1" -"@parcel/transformer-pug@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-pug/-/transformer-pug-2.0.0-nightly.445.tgz#a3df420a1bcb441381fb291e8d81b53be61ae3d0" - integrity sha512-0oMbtawueZgnWVRUxUZNBSZipfJ5IpzIDE++PnIkqChSukVHNtCaYuSYrsButDSmJ1R9lcbCfwGD6jKYiNGqtQ== +"@parcel/transformer-pug@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-pug/-/transformer-pug-2.0.0-nightly.446.tgz#6d72b8780c6243696fbb11d3abc001fa2866027f" + integrity sha512-HvNJ2vNOxKLka6HNH9asGOECIwASY1jaB1oZn9Z9aQAW7s0+1PeuNVfXH9wwupCUjjziByuOS0fRh1BhoS9pPQ== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-raw@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.0.0-nightly.445.tgz#ae26126a6e9100a0c2422f9bfdd205fe78b3b715" - integrity sha512-EpmlvQmEo0Efiq8UXw5zBB7N+cOUP8/2jT+Q3fTRO5dCwhVury/kE1dauApcrCoeUWyWNEyE19cQCirrdeNbZQ== +"@parcel/transformer-raw@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.0.0-nightly.446.tgz#2383d9d9ce24723e2c5e6306f84ee5953f7ea99e" + integrity sha512-1CMKCE1Lpc7Z9DiaiiGnz1mzpREg3Xa2FcmWoC3RlNWOfaKw6qd/wmucXY4wj5+4qAKYyHxjTZGy1tgcxfzDVw== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-react-refresh-babel@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-babel/-/transformer-react-refresh-babel-2.0.0-nightly.445.tgz#742e48f22fc9bb1418bb0e75217f44276b0f6283" - integrity sha512-3bY1JfS2m/4yXQEO5Lu7IAGcWmAyGu5KzGAtNXlC9lQRB2xSkNaSDuuIaj2XdQ3MmJUssnwUNjI2J+BQO+/2HA== +"@parcel/transformer-react-refresh-babel@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-babel/-/transformer-react-refresh-babel-2.0.0-nightly.446.tgz#d688703f415ec296dcc6e1ff9faaaee929f4b6db" + integrity sha512-C/QN4lgzukcQWzayEUQqpdP2ijDzADB3yT7P9SfNtXCBocbbOY+NbwGLQtnJ4REcx+5uRbJ9GpKPB8417WnwDQ== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" react-refresh "^0.9.0" -"@parcel/transformer-react-refresh-wrap@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.0.0-nightly.445.tgz#0290c472f753b2b313dc2d04b75304513bec4911" - integrity sha512-9+97jl4sGdyMXKcVyqEQiHPdPjkyIa5bDWxGCuZ3JuefrTrFcghHTTl7Q/BenFV/m0iBkqmaQ5fFGmAUQWZ1OQ== +"@parcel/transformer-react-refresh-wrap@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.0.0-nightly.446.tgz#670e642972b8d8057dc46f324ebe15711b26ffae" + integrity sha512-8OE0hvbdXHlhExJNQXaecph2QbCjwHNQtgkazSSfqo80lVuZzDOdyQ9h9/c8hn+oj7fnt359Hw3syWLj+2O3OA== dependencies: "@babel/generator" "^7.0.0" "@babel/parser" "^7.0.0" "@babel/template" "^7.4.0" "@babel/types" "^7.0.0" - "@parcel/babel-ast-utils" "2.0.0-nightly.2067+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/babel-ast-utils" "2.0.0-nightly.2068+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" react-refresh "^0.9.0" semver "^5.4.1" -"@parcel/transformer-sass@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-sass/-/transformer-sass-2.0.0-nightly.445.tgz#8d2e998f637ecb691f6f6c0062ccf2fdc74b04cf" - integrity sha512-Hioyt64523DpDq2dMK1Ww8PFyvnyReuTSuwEi4TCgXeZsUX0cmwZILe0X1e/nhYUsPZMPjnnQL3qnRNoxK3cVg== +"@parcel/transformer-sass@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-sass/-/transformer-sass-2.0.0-nightly.446.tgz#46f9ed91e8dea8effeea539054f1e13baacb6d01" + integrity sha512-9ezq2DHw1Qhvm/AAd2l/6Yk10I45osE0prxWa2MkC1xveGllbi14poDfbNhK3gxX0K7TV/S+ibyKc+naHAVEIw== dependencies: - "@parcel/fs" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/fs" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-stylus@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-stylus/-/transformer-stylus-2.0.0-nightly.445.tgz#b1d96c46207300a66e55c37fd9876f9550bc9f45" - integrity sha512-y1/dkOu37IwODQhKo0Bp01ouToO4OwTHO1Ibs6gojqTsc2T7ac0SeX02J20K1bmYvucj9rT/y4yyWuW6xk49KA== +"@parcel/transformer-stylus@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-stylus/-/transformer-stylus-2.0.0-nightly.446.tgz#b628ac5100177968740f204862a0d6709b9023db" + integrity sha512-tYjteN7dnw+g40ODbIGPUX33rdKnHojohAX8NXOtvf5S+eXHxshQLQM9UHTpUFRlZ5Il3hwbOFJFaLzm+EecrQ== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-sugarss@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-sugarss/-/transformer-sugarss-2.0.0-nightly.445.tgz#745d8862f895b3a98dc30f4be21f9a043994a639" - integrity sha512-256XNk0p8Kd5tEEVRN7KjGq+NDlNr+CrqFUAuNdr2C4tnxB+DrtNLRXh16UDdfD3jgWOxLHp4rmFjnqpLBHEHA== +"@parcel/transformer-sugarss@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-sugarss/-/transformer-sugarss-2.0.0-nightly.446.tgz#daa130f7959afb74f6af4b311eb1caa32f3273fb" + integrity sha512-D1mpHwxzA/sxQYA6Uc0nQSHYTUbe2Q6o32F72sABocZvV/ax0guYockl6aNONr+dwu07/5kY5maTyfYAZ/iM/g== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" postcss "^8.0.5" -"@parcel/transformer-toml@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-toml/-/transformer-toml-2.0.0-nightly.445.tgz#fd179834e5ff0b8219eeb926e41de0b08b05ce7c" - integrity sha512-wGTqFwVI4is8O3JWEvSDTk7Z/U58DlEHB49C2CwqR0xVSjCQbKuFt+fLOSaEhs7D4lTcr9U1dBwwXRgA38yBJg== +"@parcel/transformer-toml@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-toml/-/transformer-toml-2.0.0-nightly.446.tgz#981119cc34ecf49a891f4acce3221a1fa77e633c" + integrity sha512-leLjjKU2xXRw5cbXgFXHuaNKExn4Q3Fzne65nZj1G/3QHk+tiWnTms9msx5wDR2iZuQjWQc7cI1TZia+VRVUKA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/transformer-typescript-types@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-typescript-types/-/transformer-typescript-types-2.0.0-nightly.445.tgz#8dc435fdea20a1b8e84e48ce78762c4c5b0dcf45" - integrity sha512-NtcZOYLoSpoV3oVLxEDDGfZhziMKQS/znOxwVrNgy04pens2cQ028Tj42sdjL05V8vUEf3kVXVZlZGSyHFQhQQ== +"@parcel/transformer-typescript-types@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-typescript-types/-/transformer-typescript-types-2.0.0-nightly.446.tgz#7f3290031529726e7c768980777af61f45191ee4" + integrity sha512-Hk9sX3LKo21FS0YqeBthg9IiiCawXsuTXHuJj32hjmSacYEIRTTyLnkA3B0YTrjJgmojuoFi6CiSZU2gMR0uzg== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/ts-utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/ts-utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" -"@parcel/transformer-vue@2.0.0-nightly.2067+adb92ee0": - version "2.0.0-nightly.2067" - resolved "https://registry.yarnpkg.com/@parcel/transformer-vue/-/transformer-vue-2.0.0-nightly.2067.tgz#41bf71f2e6d5189fe40e9eaacf9f7871a51992b9" - integrity sha512-O8Yn74mwz5fiws1vDsc13xtNyFIKL83vebs+SrW6ALZUJzIndQr2J8WRvic5C25WF2NEtnUni+dUlUAUKUqXdg== +"@parcel/transformer-vue@2.0.0-nightly.2068+3bfef282": + version "2.0.0-nightly.2068" + resolved "https://registry.yarnpkg.com/@parcel/transformer-vue/-/transformer-vue-2.0.0-nightly.2068.tgz#7fd00e4e3524611aa5d313dabfced33649d475d9" + integrity sha512-oPouURopmkOUTwQAMFxOUfcPK3zKsopy5isR7QNyhkmWxsA72Cj2IWWUM/A0rHJPX0+FmxVvyOauIqUzkkcFhw== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" nullthrows "^1.1.1" semver "^5.4.1" -"@parcel/transformer-yaml@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/transformer-yaml/-/transformer-yaml-2.0.0-nightly.445.tgz#e23988b79c50039d581b1753e32272645ed87771" - integrity sha512-V7kMbEPf5NAjAPWY4c2hezX4D23VhZwiDkFycFKD0f3SuDfnSVa/taZcH15h9cu6mAVl11X3w4X2R/v+RZhA6A== +"@parcel/transformer-yaml@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/transformer-yaml/-/transformer-yaml-2.0.0-nightly.446.tgz#18edb6d64351acad5ef811022998c1c89bafbfce" + integrity sha512-HhL/0+wA1bfk7B5EWAlLiI5/Ys0oBIAI7tku3oR9ygbirTCUMvK9rIu+4RxXz60ePobSjRePNHD+QMrH8gt2iA== dependencies: - "@parcel/plugin" "2.0.0-nightly.445+adb92ee0" + "@parcel/plugin" "2.0.0-nightly.446+3bfef282" -"@parcel/ts-utils@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/ts-utils/-/ts-utils-2.0.0-nightly.445.tgz#ff958629a2389184cb37eac5a14ee91fd30da5f2" - integrity sha512-gSsShUlj/zw/Ds9MmcbTkjsFbe0Il2MZhITc1U6ID1dUxdGVaRehhkCgwN8562L+rjS9ZRZUZACR7fTGiacSZA== +"@parcel/ts-utils@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/ts-utils/-/ts-utils-2.0.0-nightly.446.tgz#75c998d0ebe3fdbc8229c070dca10dc2b8ff216d" + integrity sha512-yabMSQRMkZAsW8Mv3ovtS9eyR/mLDB5cw+7m1J8C7t4tNyAoJzKVGF6+7J+VdweJNrblslEKZ3HlcJiJxGZTbw== dependencies: nullthrows "^1.1.1" -"@parcel/types@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.0.0-nightly.445.tgz#835026da93994a76a12e9066b48956b4a4e7e627" - integrity sha512-sY6fx7C7RAmfB6hSoVayRm2W5+TB04sLw8OK/aRDu5xiwAKX0h4ebUX+2G9EtGYKUF8gfhiQ6njt/f/SevXGdw== +"@parcel/types@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.0.0-nightly.446.tgz#c35ffc4a6b09f7a8aeb5198615cb668635f7545e" + integrity sha512-wnfp5Yoom7wSWOhjv74/BqFgF4LgM+dpIbwEfBY8h9hwFXKEIpiGLzZm5QtDJ5cF9LjBzHeZfgJ6n9Hs1Dqemg== -"@parcel/utils@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.0.0-nightly.445.tgz#fdeedba16af79b05ff61ced710ce479f154c4a09" - integrity sha512-srgHWtlvd8Jua7EmVvEBVvzO1ZDB8qIE0u677g39WDIBe7OAJ90ybHyV+zJZVRUD4JSEo4R7AFv3L7L4gkX3Mw== +"@parcel/utils@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.0.0-nightly.446.tgz#45543a6822e0aadc356d007be0abfa31256435d0" + integrity sha512-TvvNo/bRXGFdV8qNFHwPy9AhhQI9UOX02xBoNIlf8H00hlLnMdWg1blZJikJz9S0o5/l0JbbD/bbyKD65HAPsg== dependencies: "@iarna/toml" "^2.2.0" - "@parcel/codeframe" "2.0.0-nightly.445+adb92ee0" - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/logger" "2.0.0-nightly.445+adb92ee0" - "@parcel/markdown-ansi" "2.0.0-nightly.445+adb92ee0" + "@parcel/codeframe" "2.0.0-nightly.446+3bfef282" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/logger" "2.0.0-nightly.446+3bfef282" + "@parcel/markdown-ansi" "2.0.0-nightly.446+3bfef282" "@parcel/source-map" "2.0.0-alpha.4.16" ansi-html "^0.0.7" chalk "^2.4.2" @@ -2932,14 +2932,14 @@ node-addon-api "^3.0.0" node-gyp-build "^4.2.1" -"@parcel/workers@2.0.0-nightly.445+adb92ee0": - version "2.0.0-nightly.445" - resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.0.0-nightly.445.tgz#b3366b7c4abe4bcfaae954c4e9bb97727523d3c7" - integrity sha512-692D89hFYrqU36UxxA9VtVMzbGH4OXsWJshE1GibjurICJ8L149/pxu8v/oCsE/M8Ng1Hj9iIKdtiCrS6w6Z0w== +"@parcel/workers@2.0.0-nightly.446+3bfef282": + version "2.0.0-nightly.446" + resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.0.0-nightly.446.tgz#064827fb164be593de4adaa20a5d7504ad875173" + integrity sha512-xgw3SnURvNLP5f2nJQF9/zWCdWhnvKEIQu9aPznE/MJouVKxeCW5ZQIFt7+dIBu2PzecEBmZOV3iR1TtYxn07A== dependencies: - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/logger" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/logger" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" chrome-trace-event "^1.0.2" nullthrows "^1.1.1" @@ -10587,19 +10587,19 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -parcel@2.0.0-nightly.443: - version "2.0.0-nightly.443" - resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.0.0-nightly.443.tgz#40f709a86acf1a6c44db6dd60ef3e9006abe3fb1" - integrity sha512-teFdXNFYWh77eBc86RVHdeKTUJch+mU51/2r2Djn75qqXglgxG5gSn613Ul52YxEjaRjI7MeZzqtY5EeaAaJTA== - dependencies: - "@parcel/config-default" "2.0.0-nightly.445+adb92ee0" - "@parcel/core" "2.0.0-nightly.443+adb92ee0" - "@parcel/diagnostic" "2.0.0-nightly.445+adb92ee0" - "@parcel/events" "2.0.0-nightly.445+adb92ee0" - "@parcel/fs" "2.0.0-nightly.445+adb92ee0" - "@parcel/logger" "2.0.0-nightly.445+adb92ee0" - "@parcel/package-manager" "2.0.0-nightly.445+adb92ee0" - "@parcel/utils" "2.0.0-nightly.445+adb92ee0" +parcel@2.0.0-nightly.444: + version "2.0.0-nightly.444" + resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.0.0-nightly.444.tgz#d6ce4f75fbed148dcca60821f9509eba34aeb875" + integrity sha512-T3ZK8QKxt0PHeGQZe1vhFu2KP229BRRH14qn8UkKforaSwIT5BWngaFxAuh7vQulXCc+lNi38xK5MtqH6TQ7zg== + dependencies: + "@parcel/config-default" "2.0.0-nightly.446+3bfef282" + "@parcel/core" "2.0.0-nightly.444+3bfef282" + "@parcel/diagnostic" "2.0.0-nightly.446+3bfef282" + "@parcel/events" "2.0.0-nightly.446+3bfef282" + "@parcel/fs" "2.0.0-nightly.446+3bfef282" + "@parcel/logger" "2.0.0-nightly.446+3bfef282" + "@parcel/package-manager" "2.0.0-nightly.446+3bfef282" + "@parcel/utils" "2.0.0-nightly.446+3bfef282" chalk "^2.1.0" commander "^2.19.0" get-port "^4.2.0" From b5c3f84c8be855107d3ea6738bbf8511f2ecdb8e Mon Sep 17 00:00:00 2001 From: Jan Brauer Date: Thu, 12 Nov 2020 02:50:52 +0100 Subject: [PATCH 24/25] feat(applicationautoscaling): Add KAFKA to ServiceNamespace (#11394) Add `KAFKA` to ServiceNamespace. This allows targeting MSK's autoscaling feature. Fixes https://github.com/aws/aws-cdk/issues/11366 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../aws-applicationautoscaling/lib/scalable-target.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/scalable-target.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/scalable-target.ts index 14bf3f4913b34..9549ff5c6598c 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/scalable-target.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/scalable-target.ts @@ -274,4 +274,9 @@ export enum ServiceNamespace { * Comprehend */ COMPREHEND = 'comprehend', + + /** + * Kafka + */ + KAFKA = 'kafka', } From 182abfc48228b51e4ce5fd2be1b2dfdbc5c8c9b5 Mon Sep 17 00:00:00 2001 From: Satoru Abe Date: Thu, 12 Nov 2020 13:04:20 +0900 Subject: [PATCH 25/25] docs: fix typo of package name `@aws-cdk/aws-apigatewayv2-integrations` in CHANGELOG (#11436) There is no module named `@aws-cdk/aws-apigatewayv2-integration` (`s` for plural form is missing) - https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-apigatewayv2-integrations - https://www.npmjs.com/package/@aws-cdk/aws-apigatewayv2-integrations ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 941f81402e7d2..ed8d8f2fceb1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file. See [standa ### ⚠ BREAKING CHANGES TO EXPERIMENTAL FEATURES * **apigatewayv2:** `LambdaProxyIntegration` and `HttpProxyIntegration` -classes have moved to the `@aws-cdk/aws-apigatewayv2-integration` module. +classes have moved to the `@aws-cdk/aws-apigatewayv2-integrations` module. * **appmesh:** VirtualRouter's Listeners are no longer a struct; use the static factory methods of the `VirtualNodeListener` class to obtain instances of them * **appmesh:** VirtualRouter accepts a list of listeners instead of a single listener * **appmesh:** all `fromResourceName()` methods in the AppMesh module have been replaced with `fromResourceAttributes()`