diff --git a/packages/@aws-cdk/aws-ivs/lib/channel.ts b/packages/@aws-cdk/aws-ivs/lib/channel.ts index 0768847e4b668..3ba8f1bbfb4b8 100644 --- a/packages/@aws-cdk/aws-ivs/lib/channel.ts +++ b/packages/@aws-cdk/aws-ivs/lib/channel.ts @@ -1,4 +1,5 @@ import * as core from '@aws-cdk/core'; +import { Lazy, Names } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CfnChannel } from './ivs.generated'; import { StreamKey } from './stream-key'; @@ -93,11 +94,11 @@ export interface ChannelProps { readonly latencyMode?: LatencyMode; /** - * Channel name. + * A name for the channel. * - * @default - None + * @default Automatically generated name */ - readonly name?: string; + readonly channelName?: string; /** * The channel type, which determines the allowable resolution and bitrate. @@ -152,17 +153,19 @@ export class Channel extends ChannelBase { constructor(scope: Construct, id: string, props: ChannelProps = {}) { super(scope, id, { - physicalName: props.name, + physicalName: props.channelName ?? Lazy.string({ + produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '-_' }), + }), }); - if (props.name && !core.Token.isUnresolved(props.name) && !/^[a-zA-Z0-9-_]*$/.test(props.name)) { - throw new Error(`name must contain only numbers, letters, hyphens and underscores, got: '${props.name}'`); + if (this.physicalName && !core.Token.isUnresolved(this.physicalName) && !/^[a-zA-Z0-9-_]*$/.test(this.physicalName)) { + throw new Error(`channelName must contain only numbers, letters, hyphens and underscores, got: '${this.physicalName}'`); } const resource = new CfnChannel(this, 'Resource', { authorized: props.authorized, latencyMode: props.latencyMode, - name: props.name, + name: this.physicalName, type: props.type, }); diff --git a/packages/@aws-cdk/aws-ivs/lib/playback-key-pair.ts b/packages/@aws-cdk/aws-ivs/lib/playback-key-pair.ts index 4a74f6dbd3215..0c000ba8f1474 100644 --- a/packages/@aws-cdk/aws-ivs/lib/playback-key-pair.ts +++ b/packages/@aws-cdk/aws-ivs/lib/playback-key-pair.ts @@ -1,4 +1,5 @@ import * as core from '@aws-cdk/core'; +import { Lazy, Names } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CfnPlaybackKeyPair } from './ivs.generated'; @@ -35,9 +36,9 @@ export interface PlaybackKeyPairProps { * An arbitrary string (a nickname) assigned to a playback key pair that helps the customer identify that resource. * The value does not need to be unique. * - * @default None + * @default Automatically generated name */ - readonly name?: string; + readonly playbackKeyPairName?: string; } /** @@ -54,15 +55,19 @@ export class PlaybackKeyPair extends PlaybackKeyPairBase { public readonly playbackKeyPairFingerprint: string; constructor(scope: Construct, id: string, props: PlaybackKeyPairProps) { - super(scope, id, {}); + super(scope, id, { + physicalName: props.playbackKeyPairName ?? Lazy.string({ + produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '-_' }), + }), + }); - if (props.name && !core.Token.isUnresolved(props.name) && !/^[a-zA-Z0-9-_]*$/.test(props.name)) { - throw new Error(`name must contain only numbers, letters, hyphens and underscores, got: '${props.name}'`); + if (props.playbackKeyPairName && !core.Token.isUnresolved(props.playbackKeyPairName) && !/^[a-zA-Z0-9-_]*$/.test(props.playbackKeyPairName)) { + throw new Error(`playbackKeyPairName must contain only numbers, letters, hyphens and underscores, got: '${props.playbackKeyPairName}'`); } const resource = new CfnPlaybackKeyPair(this, 'Resource', { publicKeyMaterial: props.publicKeyMaterial, - name: props.name, + name: props.playbackKeyPairName, }); this.playbackKeyPairArn = resource.attrArn; diff --git a/packages/@aws-cdk/aws-ivs/package.json b/packages/@aws-cdk/aws-ivs/package.json index c3488073be859..967f55540d81e 100644 --- a/packages/@aws-cdk/aws-ivs/package.json +++ b/packages/@aws-cdk/aws-ivs/package.json @@ -40,9 +40,7 @@ }, "awslint": { "exclude": [ - "props-physical-name:@aws-cdk/aws-ivs.ChannelProps", "props-physical-name:@aws-cdk/aws-ivs.StreamKeyProps", - "props-physical-name:@aws-cdk/aws-ivs.PlaybackKeyPairProps", "from-method:@aws-cdk/aws-ivs.StreamKey", "from-method:@aws-cdk/aws-ivs.PlaybackKeyPair" ] diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.assets.json b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.assets.json index 78dab35b7d3dd..dbb542ffc25cf 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.assets.json +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.assets.json @@ -1,7 +1,7 @@ { - "version": "30.0.0", + "version": "31.0.0", "files": { - "71d02f468f201d8c79d33a72cd8debac3b538f4e0efb492c6c06aca0055029f8": { + "fef396e89f5ce4eed5b6b04937e297b9abeab6a5db8cd808498a20aca8c61ef3": { "source": { "path": "aws-cdk-ivs.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "71d02f468f201d8c79d33a72cd8debac3b538f4e0efb492c6c06aca0055029f8.json", + "objectKey": "fef396e89f5ce4eed5b6b04937e297b9abeab6a5db8cd808498a20aca8c61ef3.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.template.json b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.template.json index d84b0c8826002..a1c0e5fc1a09e 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.template.json +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/aws-cdk-ivs.template.json @@ -1,13 +1,25 @@ { "Resources": { - "PlaybackKeyPairBE17315B": { + "DefaultPropertiesPlaybackKeyPairaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaB5D4BE27": { + "Type": "AWS::IVS::PlaybackKeyPair", + "Properties": { + "PublicKeyMaterial": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEHBm/D9UFf1z4czcAFuM7w+tstxxzoLVo\nfa1OT0gQjRYsy/YTcrKI5FS7ur3NZIcmiwqerr7dP0wSZjfEMNe82W1zWdkxHJ6Y\n73g9gZDxwGdjowZjEOIvAeH2Of6NeDOo\n-----END PUBLIC KEY-----" + } + }, + "DefaultPropertiesChannelaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa201FBD46": { + "Type": "AWS::IVS::Channel", + "Properties": { + "Name": "aws-cdk-ivsDefaultPropertiesChannel-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEDEAEDA9" + } + }, + "AllPropertiesPlaybackKeyPair96291E97": { "Type": "AWS::IVS::PlaybackKeyPair", "Properties": { "Name": "IVSIntegrationTestPlaybackKeyPair", "PublicKeyMaterial": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs6k8Xf6WyFq3yZXoup8G/gH6DntSATqD\nYfo83eX0GJCKxJ8fr09h9LP9HDGof8/bo66P+SGHeAARGF/O9WPAQVUgSlm/KMFX\nEPtPtOm1s0GR9k1ydU5hkI++f9CoZ5lM\n-----END PUBLIC KEY-----" } }, - "Channel4048F119": { + "AllPropertiesChannel737C871D": { "Type": "AWS::IVS::Channel", "Properties": { "Authorized": true, @@ -16,12 +28,12 @@ "Type": "BASIC" } }, - "StreamKey9F296F4F": { + "AllPropertiesStreamKey2A169FFE": { "Type": "AWS::IVS::StreamKey", "Properties": { "ChannelArn": { "Fn::GetAtt": [ - "Channel4048F119", + "AllPropertiesChannel737C871D", "Arn" ] } @@ -29,26 +41,26 @@ } }, "Outputs": { - "PlaybackKeyPairArn": { + "AllPropertiesPlaybackKeyPairArn9C29D23B": { "Value": { "Fn::GetAtt": [ - "PlaybackKeyPairBE17315B", + "AllPropertiesPlaybackKeyPair96291E97", "Arn" ] } }, - "ChannelArn": { + "AllPropertiesChannelArn97A102C5": { "Value": { "Fn::GetAtt": [ - "Channel4048F119", + "AllPropertiesChannel737C871D", "Arn" ] } }, - "StreamKeyArn": { + "AllPropertiesStreamKeyArnB62C0761": { "Value": { "Fn::GetAtt": [ - "StreamKey9F296F4F", + "AllPropertiesStreamKey2A169FFE", "Arn" ] } diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/cdk.out b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/cdk.out index ae4b03c54e770..7925065efbcc4 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"30.0.0"} \ No newline at end of file +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/integ.json b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/integ.json index 2e9520959e157..f290b955fa1ea 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "30.0.0", + "version": "31.0.0", "testCases": { "ivs-test/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/ivstestDefaultTestDeployAssertDCE80D47.assets.json b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/ivstestDefaultTestDeployAssertDCE80D47.assets.json index 2de961928c03b..7458f8859801c 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/ivstestDefaultTestDeployAssertDCE80D47.assets.json +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/ivstestDefaultTestDeployAssertDCE80D47.assets.json @@ -1,5 +1,5 @@ { - "version": "30.0.0", + "version": "31.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/manifest.json b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/manifest.json index 6307a0ba7f9d9..27aa8cdb3f3d0 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "30.0.0", + "version": "31.0.0", "artifacts": { "aws-cdk-ivs.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/71d02f468f201d8c79d33a72cd8debac3b538f4e0efb492c6c06aca0055029f8.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/fef396e89f5ce4eed5b6b04937e297b9abeab6a5db8cd808498a20aca8c61ef3.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -33,40 +33,52 @@ "aws-cdk-ivs.assets" ], "metadata": { - "/aws-cdk-ivs/PlaybackKeyPair/Resource": [ + "/aws-cdk-ivs/DefaultProperties/PlaybackKeyPair-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Resource": [ { "type": "aws:cdk:logicalId", - "data": "PlaybackKeyPairBE17315B" + "data": "DefaultPropertiesPlaybackKeyPairaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaB5D4BE27" } ], - "/aws-cdk-ivs/Channel/Resource": [ + "/aws-cdk-ivs/DefaultProperties/Channel-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Resource": [ { "type": "aws:cdk:logicalId", - "data": "Channel4048F119" + "data": "DefaultPropertiesChannelaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa201FBD46" } ], - "/aws-cdk-ivs/StreamKey/Resource": [ + "/aws-cdk-ivs/AllProperties/PlaybackKeyPair/Resource": [ { "type": "aws:cdk:logicalId", - "data": "StreamKey9F296F4F" + "data": "AllPropertiesPlaybackKeyPair96291E97" } ], - "/aws-cdk-ivs/PlaybackKeyPairArn": [ + "/aws-cdk-ivs/AllProperties/Channel/Resource": [ { "type": "aws:cdk:logicalId", - "data": "PlaybackKeyPairArn" + "data": "AllPropertiesChannel737C871D" } ], - "/aws-cdk-ivs/ChannelArn": [ + "/aws-cdk-ivs/AllProperties/StreamKey/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ChannelArn" + "data": "AllPropertiesStreamKey2A169FFE" } ], - "/aws-cdk-ivs/StreamKeyArn": [ + "/aws-cdk-ivs/AllProperties/PlaybackKeyPairArn": [ { "type": "aws:cdk:logicalId", - "data": "StreamKeyArn" + "data": "AllPropertiesPlaybackKeyPairArn9C29D23B" + } + ], + "/aws-cdk-ivs/AllProperties/ChannelArn": [ + { + "type": "aws:cdk:logicalId", + "data": "AllPropertiesChannelArn97A102C5" + } + ], + "/aws-cdk-ivs/AllProperties/StreamKeyArn": [ + { + "type": "aws:cdk:logicalId", + "data": "AllPropertiesStreamKeyArnB62C0761" } ], "/aws-cdk-ivs/BootstrapVersion": [ diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/tree.json b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/tree.json index def06fccd26a2..d4eda9d8b3567 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.js.snapshot/tree.json @@ -8,109 +8,177 @@ "id": "aws-cdk-ivs", "path": "aws-cdk-ivs", "children": { - "PlaybackKeyPair": { - "id": "PlaybackKeyPair", - "path": "aws-cdk-ivs/PlaybackKeyPair", + "DefaultProperties": { + "id": "DefaultProperties", + "path": "aws-cdk-ivs/DefaultProperties", "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-ivs/PlaybackKeyPair/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IVS::PlaybackKeyPair", - "aws:cdk:cloudformation:props": { - "name": "IVSIntegrationTestPlaybackKeyPair", - "publicKeyMaterial": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs6k8Xf6WyFq3yZXoup8G/gH6DntSATqD\nYfo83eX0GJCKxJ8fr09h9LP9HDGof8/bo66P+SGHeAARGF/O9WPAQVUgSlm/KMFX\nEPtPtOm1s0GR9k1ydU5hkI++f9CoZ5lM\n-----END PUBLIC KEY-----" + "PlaybackKeyPair-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { + "id": "PlaybackKeyPair-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "path": "aws-cdk-ivs/DefaultProperties/PlaybackKeyPair-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-ivs/DefaultProperties/PlaybackKeyPair-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IVS::PlaybackKeyPair", + "aws:cdk:cloudformation:props": { + "publicKeyMaterial": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEHBm/D9UFf1z4czcAFuM7w+tstxxzoLVo\nfa1OT0gQjRYsy/YTcrKI5FS7ur3NZIcmiwqerr7dP0wSZjfEMNe82W1zWdkxHJ6Y\n73g9gZDxwGdjowZjEOIvAeH2Of6NeDOo\n-----END PUBLIC KEY-----" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-ivs.CfnPlaybackKeyPair", + "version": "0.0.0" + } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-ivs.CfnPlaybackKeyPair", + "fqn": "@aws-cdk/aws-ivs.PlaybackKeyPair", "version": "0.0.0" } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-ivs.PlaybackKeyPair", - "version": "0.0.0" - } - }, - "Channel": { - "id": "Channel", - "path": "aws-cdk-ivs/Channel", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-ivs/Channel/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IVS::Channel", - "aws:cdk:cloudformation:props": { - "authorized": true, - "latencyMode": "NORMAL", - "name": "IVSIntegrationTestChannel", - "type": "BASIC" + }, + "Channel-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { + "id": "Channel-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "path": "aws-cdk-ivs/DefaultProperties/Channel-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-ivs/DefaultProperties/Channel-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IVS::Channel", + "aws:cdk:cloudformation:props": { + "name": "aws-cdk-ivsDefaultPropertiesChannel-_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEDEAEDA9" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-ivs.CfnChannel", + "version": "0.0.0" + } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-ivs.CfnChannel", + "fqn": "@aws-cdk/aws-ivs.Channel", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-ivs.Channel", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.1.270" } }, - "StreamKey": { - "id": "StreamKey", - "path": "aws-cdk-ivs/StreamKey", + "AllProperties": { + "id": "AllProperties", + "path": "aws-cdk-ivs/AllProperties", "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-ivs/StreamKey/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IVS::StreamKey", - "aws:cdk:cloudformation:props": { - "channelArn": { - "Fn::GetAtt": [ - "Channel4048F119", - "Arn" - ] + "PlaybackKeyPair": { + "id": "PlaybackKeyPair", + "path": "aws-cdk-ivs/AllProperties/PlaybackKeyPair", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-ivs/AllProperties/PlaybackKeyPair/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IVS::PlaybackKeyPair", + "aws:cdk:cloudformation:props": { + "name": "IVSIntegrationTestPlaybackKeyPair", + "publicKeyMaterial": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs6k8Xf6WyFq3yZXoup8G/gH6DntSATqD\nYfo83eX0GJCKxJ8fr09h9LP9HDGof8/bo66P+SGHeAARGF/O9WPAQVUgSlm/KMFX\nEPtPtOm1s0GR9k1ydU5hkI++f9CoZ5lM\n-----END PUBLIC KEY-----" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-ivs.CfnPlaybackKeyPair", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-ivs.PlaybackKeyPair", + "version": "0.0.0" + } + }, + "Channel": { + "id": "Channel", + "path": "aws-cdk-ivs/AllProperties/Channel", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-ivs/AllProperties/Channel/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IVS::Channel", + "aws:cdk:cloudformation:props": { + "authorized": true, + "latencyMode": "NORMAL", + "name": "IVSIntegrationTestChannel", + "type": "BASIC" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-ivs.CfnChannel", + "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-ivs.CfnStreamKey", + "fqn": "@aws-cdk/aws-ivs.Channel", + "version": "0.0.0" + } + }, + "StreamKey": { + "id": "StreamKey", + "path": "aws-cdk-ivs/AllProperties/StreamKey", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-ivs/AllProperties/StreamKey/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IVS::StreamKey", + "aws:cdk:cloudformation:props": { + "channelArn": { + "Fn::GetAtt": [ + "AllPropertiesChannel737C871D", + "Arn" + ] + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-ivs.CfnStreamKey", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-ivs.StreamKey", + "version": "0.0.0" + } + }, + "PlaybackKeyPairArn": { + "id": "PlaybackKeyPairArn", + "path": "aws-cdk-ivs/AllProperties/PlaybackKeyPairArn", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnOutput", + "version": "0.0.0" + } + }, + "ChannelArn": { + "id": "ChannelArn", + "path": "aws-cdk-ivs/AllProperties/ChannelArn", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnOutput", + "version": "0.0.0" + } + }, + "StreamKeyArn": { + "id": "StreamKeyArn", + "path": "aws-cdk-ivs/AllProperties/StreamKeyArn", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnOutput", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-ivs.StreamKey", - "version": "0.0.0" - } - }, - "PlaybackKeyPairArn": { - "id": "PlaybackKeyPairArn", - "path": "aws-cdk-ivs/PlaybackKeyPairArn", - "constructInfo": { - "fqn": "@aws-cdk/core.CfnOutput", - "version": "0.0.0" - } - }, - "ChannelArn": { - "id": "ChannelArn", - "path": "aws-cdk-ivs/ChannelArn", - "constructInfo": { - "fqn": "@aws-cdk/core.CfnOutput", - "version": "0.0.0" - } - }, - "StreamKeyArn": { - "id": "StreamKeyArn", - "path": "aws-cdk-ivs/StreamKeyArn", - "constructInfo": { - "fqn": "@aws-cdk/core.CfnOutput", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.1.270" } }, "BootstrapVersion": { @@ -148,7 +216,7 @@ "path": "ivs-test/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.249" + "version": "10.1.270" } }, "DeployAssert": { @@ -194,7 +262,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.249" + "version": "10.1.270" } } }, diff --git a/packages/@aws-cdk/aws-ivs/test/integ.ivs.ts b/packages/@aws-cdk/aws-ivs/test/integ.ivs.ts index 990fb7287470b..281ca051d98dd 100644 --- a/packages/@aws-cdk/aws-ivs/test/integ.ivs.ts +++ b/packages/@aws-cdk/aws-ivs/test/integ.ivs.ts @@ -1,7 +1,55 @@ import { App, CfnOutput, Stack } from '@aws-cdk/core'; import { IntegTest } from '@aws-cdk/integ-tests'; +import { Construct } from 'constructs'; import * as ivs from '../lib'; +class DefaultProperties extends Construct { + constructor(scope: Construct, id: string) { + super(scope, id); + const publicKey = `-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEHBm/D9UFf1z4czcAFuM7w+tstxxzoLVo +fa1OT0gQjRYsy/YTcrKI5FS7ur3NZIcmiwqerr7dP0wSZjfEMNe82W1zWdkxHJ6Y +73g9gZDxwGdjowZjEOIvAeH2Of6NeDOo +-----END PUBLIC KEY-----`; + // Generated names are must be valid. + new ivs.PlaybackKeyPair(this, `PlaybackKeyPair-_${'a'.repeat(128)}`, { + publicKeyMaterial: publicKey, + }); + new ivs.Channel(this, `Channel-_${'a'.repeat(128)}`); + } +} + +class AllProperties extends Construct { + constructor(scope: Construct, id: string) { + super(scope, id); + const publicKey = `-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs6k8Xf6WyFq3yZXoup8G/gH6DntSATqD +Yfo83eX0GJCKxJ8fr09h9LP9HDGof8/bo66P+SGHeAARGF/O9WPAQVUgSlm/KMFX +EPtPtOm1s0GR9k1ydU5hkI++f9CoZ5lM +-----END PUBLIC KEY-----`; + const keypair = new ivs.PlaybackKeyPair(this, 'PlaybackKeyPair', { + publicKeyMaterial: publicKey, + playbackKeyPairName: 'IVSIntegrationTestPlaybackKeyPair', + }); + + const channel = new ivs.Channel(this, 'Channel', { + channelName: 'IVSIntegrationTestChannel', + authorized: true, + type: ivs.ChannelType.BASIC, + latencyMode: ivs.LatencyMode.NORMAL, + }); + + const streamKey = new ivs.StreamKey(this, 'StreamKey', { + channel: channel, + }); + + new CfnOutput(this, 'PlaybackKeyPairArn', { value: keypair.playbackKeyPairArn }); + new CfnOutput(this, 'ChannelArn', { value: channel.channelArn }); + new CfnOutput(this, 'StreamKeyArn', { value: streamKey.streamKeyArn }); + } +} + + /* * Creates a channel, playback key pair and stream key * @@ -15,32 +63,8 @@ import * as ivs from '../lib'; const app = new App(); const stack = new Stack(app, 'aws-cdk-ivs'); - -const publicKey = `-----BEGIN PUBLIC KEY----- -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs6k8Xf6WyFq3yZXoup8G/gH6DntSATqD -Yfo83eX0GJCKxJ8fr09h9LP9HDGof8/bo66P+SGHeAARGF/O9WPAQVUgSlm/KMFX -EPtPtOm1s0GR9k1ydU5hkI++f9CoZ5lM ------END PUBLIC KEY-----`; - -const keypair = new ivs.PlaybackKeyPair(stack, 'PlaybackKeyPair', { - publicKeyMaterial: publicKey, - name: 'IVSIntegrationTestPlaybackKeyPair', -}); - -const channel = new ivs.Channel(stack, 'Channel', { - name: 'IVSIntegrationTestChannel', - authorized: true, - type: ivs.ChannelType.BASIC, - latencyMode: ivs.LatencyMode.NORMAL, -}); - -const streamKey = new ivs.StreamKey(stack, 'StreamKey', { - channel: channel, -}); - -new CfnOutput(stack, 'PlaybackKeyPairArn', { value: keypair.playbackKeyPairArn }); -new CfnOutput(stack, 'ChannelArn', { value: channel.channelArn }); -new CfnOutput(stack, 'StreamKeyArn', { value: streamKey.streamKeyArn }); +new DefaultProperties(stack, 'DefaultProperties'); +new AllProperties(stack, 'AllProperties'); new IntegTest(app, 'ivs-test', { testCases: [stack], diff --git a/packages/@aws-cdk/aws-ivs/test/ivs.test.ts b/packages/@aws-cdk/aws-ivs/test/ivs.test.ts index 4104994ed882c..42f23ccd5d45c 100644 --- a/packages/@aws-cdk/aws-ivs/test/ivs.test.ts +++ b/packages/@aws-cdk/aws-ivs/test/ivs.test.ts @@ -1,4 +1,4 @@ -import { Match, Template } from '@aws-cdk/assertions'; +import { Template } from '@aws-cdk/assertions'; import { App, Stack } from '@aws-cdk/core'; import * as ivs from '../lib'; @@ -23,13 +23,15 @@ test('channel default properties', () => { new ivs.Channel(stack, 'Channel'); Template.fromStack(stack).hasResource('AWS::IVS::Channel', { - Properties: Match.absent(), + Properties: { + Name: 'Channel', + }, }); }); test('channel name', () => { new ivs.Channel(stack, 'Channel', { - name: 'CarrotsAreTasty', + channelName: 'CarrotsAreTasty', }); Template.fromStack(stack).hasResourceProperties('AWS::IVS::Channel', { @@ -75,8 +77,8 @@ test('channel from arn', () => { test('channel invalid name throws validation error', () => { expect(() => new ivs.Channel(stack, 'Channel', { - name: 'Would you like a carrot?', - })).toThrow('name must contain only numbers, letters, hyphens and underscores, got: \'Would you like a carrot?\''); + channelName: 'Would you like a carrot?', + })).toThrow('channelName must contain only numbers, letters, hyphens and underscores, got: \'Would you like a carrot?\''); }); test('playback key pair mandatory properties', () => { @@ -92,7 +94,7 @@ test('playback key pair mandatory properties', () => { test('playback key pair name', () => { new ivs.PlaybackKeyPair(stack, 'PlaybackKeyPair', { publicKeyMaterial: publicKey, - name: 'CarrotsAreNutritious', + playbackKeyPairName: 'CarrotsAreNutritious', }); Template.fromStack(stack).hasResourceProperties('AWS::IVS::PlaybackKeyPair', { @@ -104,8 +106,8 @@ test('playback key pair name', () => { test('playback key pair invalid name throws validation error', () => { expect(() => new ivs.PlaybackKeyPair(stack, 'PlaybackKeyPair', { publicKeyMaterial: 'Carrots Are Orange', - name: 'Would you like a carrot?', - })).toThrow('name must contain only numbers, letters, hyphens and underscores, got: \'Would you like a carrot?\''); + playbackKeyPairName: 'Would you like a carrot?', + })).toThrow('playbackKeyPairName must contain only numbers, letters, hyphens and underscores, got: \'Would you like a carrot?\''); }); test('stream key mandatory properties', () => {