From 6e89877c38e5f828a5410eb1e0f231af79017f32 Mon Sep 17 00:00:00 2001 From: Cory Hall <43035978+corymhall@users.noreply.github.com> Date: Mon, 11 Nov 2024 14:23:22 -0500 Subject: [PATCH] Add integration tests for CloudFront construct library (#208) re #183 --- examples/alb/package.json | 2 +- .../package.json | 2 +- examples/apprunner/package.json | 2 +- examples/appsvc/package.json | 2 +- examples/cloudfront-lambda-urls/package.json | 2 +- examples/cron-lambda/package.json | 2 +- examples/ec2-instance/package.json | 2 +- examples/ecscluster/package.json | 2 +- examples/eventbridge-atm/package.json | 2 +- examples/eventbridge-sns/package.json | 2 +- examples/fargate/package.json | 2 +- examples/lookups/package.json | 2 +- examples/s3-object-lambda/package.json | 2 +- examples/scalable-webhook/package.json | 2 +- examples/the-big-fan/package.json | 2 +- integration/apigateway-domain/package.json | 2 +- integration/apigateway/package.json | 2 +- integration/cloudfront/Pulumi.yaml | 3 + integration/cloudfront/index.ts | 127 ++++++++++++++++++ integration/cloudfront/package.json | 15 +++ integration/cloudfront/tsconfig.json | 18 +++ integration/ec2/package.json | 2 +- integration/examples_nodejs_test.go | 13 ++ integration/kms/package.json | 2 +- integration/route53/package.json | 2 +- package.json | 2 +- yarn.lock | 17 ++- 27 files changed, 210 insertions(+), 25 deletions(-) create mode 100644 integration/cloudfront/Pulumi.yaml create mode 100644 integration/cloudfront/index.ts create mode 100644 integration/cloudfront/package.json create mode 100644 integration/cloudfront/tsconfig.json diff --git a/examples/alb/package.json b/examples/alb/package.json index 58fe6f0d..3ab75a7f 100644 --- a/examples/alb/package.json +++ b/examples/alb/package.json @@ -7,7 +7,7 @@ "@pulumi/aws": "^6.0.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "@pulumi/cdk": "^0.5.0" } diff --git a/examples/api-websocket-lambda-dynamodb/package.json b/examples/api-websocket-lambda-dynamodb/package.json index 6d2550b0..6fdfc1bb 100644 --- a/examples/api-websocket-lambda-dynamodb/package.json +++ b/examples/api-websocket-lambda-dynamodb/package.json @@ -11,7 +11,7 @@ "@pulumi/aws-native": "^1.0.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0" } } diff --git a/examples/apprunner/package.json b/examples/apprunner/package.json index 41775945..04e2065d 100644 --- a/examples/apprunner/package.json +++ b/examples/apprunner/package.json @@ -7,7 +7,7 @@ "@pulumi/aws": "^6.0.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "@pulumi/cdk": "^0.5.0", "@aws-cdk/aws-apprunner-alpha": "2.20.0-alpha.0" diff --git a/examples/appsvc/package.json b/examples/appsvc/package.json index 3c7270ff..87bc0525 100644 --- a/examples/appsvc/package.json +++ b/examples/appsvc/package.json @@ -7,7 +7,7 @@ "@pulumi/aws": "^6.0.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "@pulumi/cdk": "^0.5.0" } diff --git a/examples/cloudfront-lambda-urls/package.json b/examples/cloudfront-lambda-urls/package.json index 032452d7..36cd4da5 100644 --- a/examples/cloudfront-lambda-urls/package.json +++ b/examples/cloudfront-lambda-urls/package.json @@ -9,7 +9,7 @@ "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", "@types/aws-lambda": "^8.10.145", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "aws-lambda": "^1.0.7", "constructs": "10.3.0", "esbuild": "^0.24.0" diff --git a/examples/cron-lambda/package.json b/examples/cron-lambda/package.json index 6ece7247..5a633bb5 100644 --- a/examples/cron-lambda/package.json +++ b/examples/cron-lambda/package.json @@ -7,7 +7,7 @@ "@pulumi/aws": "^6.0.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "@pulumi/cdk": "^0.5.0" } diff --git a/examples/ec2-instance/package.json b/examples/ec2-instance/package.json index 3c7270ff..87bc0525 100644 --- a/examples/ec2-instance/package.json +++ b/examples/ec2-instance/package.json @@ -7,7 +7,7 @@ "@pulumi/aws": "^6.0.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "@pulumi/cdk": "^0.5.0" } diff --git a/examples/ecscluster/package.json b/examples/ecscluster/package.json index 3c7270ff..87bc0525 100644 --- a/examples/ecscluster/package.json +++ b/examples/ecscluster/package.json @@ -7,7 +7,7 @@ "@pulumi/aws": "^6.0.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "@pulumi/cdk": "^0.5.0" } diff --git a/examples/eventbridge-atm/package.json b/examples/eventbridge-atm/package.json index f0a82d3f..742a9260 100644 --- a/examples/eventbridge-atm/package.json +++ b/examples/eventbridge-atm/package.json @@ -9,7 +9,7 @@ "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", "@types/aws-lambda": "^8.10.145", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/examples/eventbridge-sns/package.json b/examples/eventbridge-sns/package.json index cd8d15fb..ffc5c758 100644 --- a/examples/eventbridge-sns/package.json +++ b/examples/eventbridge-sns/package.json @@ -8,7 +8,7 @@ "@pulumi/aws-native": "^1.0.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/examples/fargate/package.json b/examples/fargate/package.json index 58fe6f0d..3ab75a7f 100644 --- a/examples/fargate/package.json +++ b/examples/fargate/package.json @@ -7,7 +7,7 @@ "@pulumi/aws": "^6.0.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "@pulumi/cdk": "^0.5.0" } diff --git a/examples/lookups/package.json b/examples/lookups/package.json index 82f6ffeb..c3d51556 100644 --- a/examples/lookups/package.json +++ b/examples/lookups/package.json @@ -7,7 +7,7 @@ "@pulumi/aws-native": "^1.0.2", "@pulumi/aws": "^6.0.0", "@pulumi/cdk": "^0.5.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0" } } diff --git a/examples/s3-object-lambda/package.json b/examples/s3-object-lambda/package.json index ef48de6c..adff1f12 100644 --- a/examples/s3-object-lambda/package.json +++ b/examples/s3-object-lambda/package.json @@ -7,7 +7,7 @@ "@pulumi/cdk": "^0.5.0", "@pulumi/aws-native": "^1.0.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0" } } diff --git a/examples/scalable-webhook/package.json b/examples/scalable-webhook/package.json index 16f599a8..a58d481b 100644 --- a/examples/scalable-webhook/package.json +++ b/examples/scalable-webhook/package.json @@ -11,7 +11,7 @@ "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", "@types/aws-lambda": "^8.10.145", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/examples/the-big-fan/package.json b/examples/the-big-fan/package.json index a2027c03..029f334a 100644 --- a/examples/the-big-fan/package.json +++ b/examples/the-big-fan/package.json @@ -9,7 +9,7 @@ "@pulumi/aws-native": "^1.0.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/integration/apigateway-domain/package.json b/integration/apigateway-domain/package.json index b53cfd11..03b52439 100644 --- a/integration/apigateway-domain/package.json +++ b/integration/apigateway-domain/package.json @@ -8,7 +8,7 @@ "@pulumi/aws-native": "^1.0.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/integration/apigateway/package.json b/integration/apigateway/package.json index b53cfd11..03b52439 100644 --- a/integration/apigateway/package.json +++ b/integration/apigateway/package.json @@ -8,7 +8,7 @@ "@pulumi/aws-native": "^1.0.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/integration/cloudfront/Pulumi.yaml b/integration/cloudfront/Pulumi.yaml new file mode 100644 index 00000000..4d5fb1ba --- /dev/null +++ b/integration/cloudfront/Pulumi.yaml @@ -0,0 +1,3 @@ +name: pulumi-aws-cloudfront +runtime: nodejs +description: cloudfront integration test diff --git a/integration/cloudfront/index.ts b/integration/cloudfront/index.ts new file mode 100644 index 00000000..c8b76778 --- /dev/null +++ b/integration/cloudfront/index.ts @@ -0,0 +1,127 @@ +import * as pulumi from '@pulumi/pulumi'; +import * as kinesis from 'aws-cdk-lib/aws-kinesis'; +import * as s3 from 'aws-cdk-lib/aws-s3'; +import * as origins from 'aws-cdk-lib/aws-cloudfront-origins'; +import * as pulumicdk from '@pulumi/cdk'; +import * as cloudfront from 'aws-cdk-lib/aws-cloudfront'; +import { Duration } from 'aws-cdk-lib'; + +class CloudFrontStack extends pulumicdk.Stack { + public readonly bucketName: pulumi.Output; + constructor(app: pulumicdk.App, id: string, options?: pulumicdk.StackOptions) { + super(app, id, options); + const bucket = new s3.Bucket(this, 'Bucket'); + this.bucketName = this.asOutput(bucket.bucketName); + const cachePolicy = new cloudfront.CachePolicy(this, 'CachePolicy', { + maxTtl: Duration.days(1), + minTtl: Duration.minutes(1), + defaultTtl: Duration.hours(1), + comment: 'A cache policy for the bucket', + cookieBehavior: cloudfront.CacheCookieBehavior.all(), + headerBehavior: cloudfront.CacheHeaderBehavior.allowList('X-Custom-Header'), + queryStringBehavior: cloudfront.CacheQueryStringBehavior.denyList('username', 'password'), + enableAcceptEncodingGzip: true, + enableAcceptEncodingBrotli: true, + }); + const originRequestPolicy = new cloudfront.OriginRequestPolicy(this, 'OriginRequestPolicy', { + queryStringBehavior: cloudfront.OriginRequestQueryStringBehavior.all(), + headerBehavior: cloudfront.OriginRequestHeaderBehavior.allowList('X-Custom-Header'), + comment: 'An origin request policy for the bucket', + cookieBehavior: cloudfront.OriginRequestCookieBehavior.all(), + }); + + const responseHeadersPolicy = new cloudfront.ResponseHeadersPolicy(this, 'ResponseHeadersPolicy', { + responseHeadersPolicyName: 'MyPolicy', + comment: 'A default policy', + corsBehavior: { + accessControlAllowCredentials: false, + accessControlAllowHeaders: ['X-Custom-Header-1', 'X-Custom-Header-2'], + accessControlAllowMethods: ['GET', 'POST'], + accessControlAllowOrigins: ['*'], + accessControlExposeHeaders: ['X-Custom-Header-1', 'X-Custom-Header-2'], + accessControlMaxAge: Duration.seconds(600), + originOverride: true, + }, + customHeadersBehavior: { + customHeaders: [ + { header: 'X-Amz-Date', value: 'some-value', override: true }, + { header: 'X-Amz-Security-Token', value: 'some-value', override: false }, + ], + }, + securityHeadersBehavior: { + contentSecurityPolicy: { contentSecurityPolicy: 'default-src https:;', override: true }, + contentTypeOptions: { override: true }, + frameOptions: { frameOption: cloudfront.HeadersFrameOption.DENY, override: true }, + referrerPolicy: { referrerPolicy: cloudfront.HeadersReferrerPolicy.NO_REFERRER, override: true }, + strictTransportSecurity: { + accessControlMaxAge: Duration.seconds(600), + includeSubdomains: true, + override: true, + }, + xssProtection: { + protection: true, + modeBlock: false, + reportUri: 'https://example.com/csp-report', + override: true, + }, + }, + removeHeaders: ['Server'], + serverTimingSamplingRate: 50, + }); + const keyGroup = new cloudfront.KeyGroup(this, 'AwesomeKeyGroup', { + items: [ + new cloudfront.PublicKey(this, 'AwesomePublicKey', { + encodedKey: `-----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAudf8/iNkQgdvjEdm6xYS + JAyxd/kGTbJfQNg9YhInb7TSm0dGu0yx8yZ3fnpmxuRPqJIlaVr+fT4YRl71gEYa + dlhHmnVegyPNjP9dNqZ7zwNqMEPOPnS/NOHbJj1KYKpn1f8pPNycQ5MQCntKGnSj + 6fc+nbcC0joDvGz80xuy1W4hLV9oC9c3GT26xfZb2jy9MVtA3cppNuTwqrFi3t6e + 0iGpraxZlT5wewjZLpQkngqYr6s3aucPAZVsGTEYPo4nD5mswmtZOm+tgcOrivtD + /3sD/qZLQ6c5siqyS8aTraD6y+VXugujfarTU65IeZ6QAUbLMsWuZOIi5Jn8zAwx + NQIDAQAB + -----END PUBLIC KEY----- + `, + }), + ], + }); + + const stream = new kinesis.Stream(this, 'stream', { + encryption: kinesis.StreamEncryption.UNENCRYPTED, + }); + const realtimeLogConfig = new cloudfront.RealtimeLogConfig(this, 'realtimeLog', { + endPoints: [cloudfront.Endpoint.fromKinesisStream(stream)], + fields: ['timestamp', 'c-ip', 'time-to-first-byte', 'sc-status'], + realtimeLogConfigName: 'my-delivery-stream', + samplingRate: 100, + }); + + const distro = new cloudfront.Distribution(this, 'distro', { + defaultBehavior: { + origin: origins.S3BucketOrigin.withOriginAccessControl(bucket), + cachePolicy, + originRequestPolicy, + responseHeadersPolicy, + trustedKeyGroups: [keyGroup], + realtimeLogConfig, + }, + }); + distro.addBehavior('/s3website', new origins.S3StaticWebsiteOrigin(bucket)); + distro.addBehavior('/s3identity', origins.S3BucketOrigin.withOriginAccessIdentity(bucket)); + distro.addBehavior( + 'failover', + new origins.OriginGroup({ + primaryOrigin: origins.S3BucketOrigin.withBucketDefaults(bucket), + fallbackOrigin: new origins.HttpOrigin('example.com'), + }), + ); + } +} + +const app = new pulumicdk.App('app', (scope: pulumicdk.App) => { + const stack = new CloudFrontStack(scope, 'teststack'); + return { + bucketName: stack.bucketName, + }; +}); + +export const bucketName = app.outputs['bucketName']; diff --git a/integration/cloudfront/package.json b/integration/cloudfront/package.json new file mode 100644 index 00000000..a8bf49ff --- /dev/null +++ b/integration/cloudfront/package.json @@ -0,0 +1,15 @@ +{ + "name": "pulumi-aws-cdk", + "devDependencies": { + "@types/node": "^10.0.0" + }, + "dependencies": { + "@pulumi/aws": "^6.0.0", + "@pulumi/aws-native": "^1.5.0", + "@pulumi/cdk": "^0.5.0", + "@pulumi/pulumi": "^3.0.0", + "aws-cdk-lib": "2.156.0", + "constructs": "10.3.0", + "esbuild": "^0.24.0" + } +} diff --git a/integration/cloudfront/tsconfig.json b/integration/cloudfront/tsconfig.json new file mode 100644 index 00000000..eac442cb --- /dev/null +++ b/integration/cloudfront/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "strict": true, + "outDir": "bin", + "target": "es2019", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "experimentalDecorators": true, + "pretty": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "forceConsistentCasingInFileNames": true + }, + "include": [ + "./*.ts" + ] +} diff --git a/integration/ec2/package.json b/integration/ec2/package.json index b9eaf5db..b85571ab 100644 --- a/integration/ec2/package.json +++ b/integration/ec2/package.json @@ -8,7 +8,7 @@ "@pulumi/aws-native": "^1.6.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/integration/examples_nodejs_test.go b/integration/examples_nodejs_test.go index d9c5b2dc..13f4b909 100644 --- a/integration/examples_nodejs_test.go +++ b/integration/examples_nodejs_test.go @@ -105,6 +105,19 @@ func TestMisc(t *testing.T) { integration.ProgramTest(t, &test) } +func TestCloudFront(t *testing.T) { + test := getJSBaseOptions(t). + With(integration.ProgramTestOptions{ + Dir: filepath.Join(getCwd(t), "cloudfront"), + ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) { + bucketName := stack.Outputs["bucketName"].(string) + assert.Containsf(t, bucketName, "bucket83908e77", "Bucket name should contain 'bucket'") + }, + }) + + integration.ProgramTest(t, &test) +} + func getJSBaseOptions(t *testing.T) integration.ProgramTestOptions { base := getBaseOptions(t) baseJS := base.With(integration.ProgramTestOptions{ diff --git a/integration/kms/package.json b/integration/kms/package.json index 888282a9..a8bf49ff 100644 --- a/integration/kms/package.json +++ b/integration/kms/package.json @@ -8,7 +8,7 @@ "@pulumi/aws-native": "^1.5.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/integration/route53/package.json b/integration/route53/package.json index 888282a9..a8bf49ff 100644 --- a/integration/route53/package.json +++ b/integration/route53/package.json @@ -8,7 +8,7 @@ "@pulumi/aws-native": "^1.5.0", "@pulumi/cdk": "^0.5.0", "@pulumi/pulumi": "^3.0.0", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "esbuild": "^0.24.0" } diff --git a/package.json b/package.json index 1d1c2ecf..96144f99 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@types/jest": "^29.5.2", "@types/mock-fs": "^4.13.4", "@types/node": "^20.12.13", - "aws-cdk-lib": "2.149.0", + "aws-cdk-lib": "2.156.0", "constructs": "10.3.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", diff --git a/yarn.lock b/yarn.lock index 6a85eb0d..5b22a82d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,6 +35,14 @@ resolved "https://registry.yarnpkg.com/@aws-cdk/cli-lib-alpha/-/cli-lib-alpha-2.161.1-alpha.0.tgz#f00f5190f7da2e8f62807c5a01fb629298c767f4" integrity sha512-HCokBr85Msv0tXiKth/3ZJZaQLzMmydk3NNEEA9fD/tzBh1zUcnlsBQnclOBmd0uKMNSZQertrroJmZv3mBOeg== +"@aws-cdk/cloud-assembly-schema@^36.0.5": + version "36.3.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-36.3.0.tgz#17aeb389cbbff72f2b8d5b3b25d8d21d6ec3f0ef" + integrity sha512-mLSYgcMFTNCXrGAD7xob95p9s47/7WwEWUJiexxM46H2GxiijhlhLQJs31AS5uRRP6Cx1DLEu4qayKAUOOVGrw== + dependencies: + jsonschema "^1.4.1" + semver "^7.6.3" + "@aws-cdk/cloud-assembly-schema@^38.0.1": version "38.0.1" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-38.0.1.tgz#cdf4684ae8778459e039cd44082ea644a3504ca9" @@ -1720,14 +1728,15 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -aws-cdk-lib@2.149.0: - version "2.149.0" - resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.149.0.tgz#5f13a6b2c222f6a1db66be6a58129a67845bf6e8" - integrity sha512-bmbgnF2dEYlsZlVaNoSfcjyIUirnvmsvNXJwBMmUCZn2IZ+YWvkMv+rr4e/GO3gPKrdNzew1jNVvHSYxlun6rA== +aws-cdk-lib@2.156.0: + version "2.156.0" + resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.156.0.tgz#928b2fbcfd4a0a79800a2de45a4264c2697ac7fd" + integrity sha512-iZJEWlJYGcwtHcaLVps5IjMegaka5btXcOH8hgTTjcFMFwR83KVBix6mDkhbGcLMIoIZBYBpp5t9fgG+ZuyNoA== dependencies: "@aws-cdk/asset-awscli-v1" "^2.2.202" "@aws-cdk/asset-kubectl-v20" "^2.1.2" "@aws-cdk/asset-node-proxy-agent-v6" "^2.0.3" + "@aws-cdk/cloud-assembly-schema" "^36.0.5" "@balena/dockerignore" "^1.0.2" case "1.6.3" fs-extra "^11.2.0"