@@ -91,7 +91,7 @@ const bridge = new mediaconnect.Bridge(stack, 'Bridge', {
9191 bridgeName: ' my-bridge' ,
9292 gateway: gateway ,
9393 config: mediaconnect .BridgeConfiguration .egress ({
94- maxBitrate: mediaconnect .Bitrate .mbps (10 ),
94+ maxBitrate: cdk .Bitrate .mbps (10 ),
9595 flowSources: [{
9696 name: ' flow-source' ,
9797 flow: flow ,
@@ -356,24 +356,47 @@ export interface IFlow extends IResource, IFlowRef {
356356 * @default - maximum over 60 seconds
357357 */
358358 metricFailoverSourceSelected(props ? : MetricOptions ): Metric ;
359+
360+ /**
361+ * Grant methods for this flow
362+ */
363+ readonly grants: FlowGrants ;
359364}
360365```
361366
362367Provide fromMethod capability - allowing imports of the resource:
363368
364369``` ts
365- /**
366- * Creates a Flow construct that represents an external (imported) Flow
367- */
368- public static fromFlowAttributes (scope : Construct , id : string , attrs : FlowAttributes ): IFlow {
369- class Import extends FlowBase implements IFlow {
370- public readonly flowArn = attrs .flowArn ;
371- public readonly sourceArn = attrs .primarySourceArn ;
372- public readonly isFailoverEnabled = attrs .isFailoverEnabled ?? false ;
373- }
374-
375- return new Import (scope , id );
376- }
370+ // Simple import — when you only need the flow ARN
371+ const importedFlow = mediaconnect .Flow .fromFlowArn (
372+ stack , ' ImportedFlow' ,
373+ ' arn:aws:mediaconnect:us-west-2:111122223333:flow:1-11111111111111111111111111111111:MyFlow' ,
374+ );
375+
376+ // Full import — when you need source ARN or failover state
377+ const importedFlow = mediaconnect .Flow .fromFlowAttributes (stack , ' ImportedFlow' , {
378+ flowArn: ' arn:aws:mediaconnect:us-west-2:111122223333:flow:1-11111111111111111111111111111111:MyFlow' ,
379+ sourceArn: ' arn:aws:mediaconnect:us-west-2:111122223333:source:2-22222222222222222222222222222222:MySource' ,
380+ isFailoverEnabled: true ,
381+ });
382+ ```
383+
384+ ##### Granting Permissions on Flows
385+
386+ Grant methods enable Lambda functions or Step Functions to orchestrate flow lifecycle without manual IAM policy wiring:
387+
388+ ``` ts
389+ declare const flow: mediaconnect .IFlow ;
390+ declare const fn: lambda .IFunction ;
391+
392+ // Grant permission to start the flow
393+ flow .grants .start (fn );
394+
395+ // Grant permission to stop the flow
396+ flow .grants .stop (fn );
397+
398+ // Grant arbitrary actions
399+ flow .grants .actions (fn , ' mediaconnect:UpdateFlow' );
377400```
378401
379402##### Flow Source Types
@@ -424,9 +447,10 @@ new mediaconnect.Flow(stack, 'MyFlow', {
424447
425448``` ts
426449// Import an entitlement from another AWS account
427- const entitlement = mediaconnect .FlowEntitlement .fromFlowEntitlementAttributes (stack , ' ImportedEntitlement' , {
428- entitlementArn: ' arn:aws:mediaconnect:us-west-2:111122223333:entitlement:1-11111111111111111111111111111111:MyEntitlement' ,
429- });
450+ const entitlement = mediaconnect .FlowEntitlement .fromFlowEntitlementArn (
451+ stack , ' ImportedEntitlement' ,
452+ ' arn:aws:mediaconnect:us-west-2:111122223333:entitlement:1-11111111111111111111111111111111:MyEntitlement' ,
453+ );
430454
431455new mediaconnect .Flow (stack , ' MyFlow' , {
432456 source: mediaconnect .SourceConfiguration .entitlement ({
@@ -435,6 +459,69 @@ new mediaconnect.Flow(stack, 'MyFlow', {
435459});
436460```
437461
462+ #### AWS Elemental MediaConnect Flow Source
463+
464+ A FlowSource (` AWS::MediaConnect::FlowSource ` ) is a standalone resource used to add secondary
465+ or failover sources to an existing flow. This is separate from the primary source defined in
466+ ` FlowProps ` — secondary sources are created as their own constructs and associated with a flow
467+ to enable failover configurations.
468+
469+ For further information refer to [ our documentation] ( https://docs.aws.amazon.com/mediaconnect/latest/ug/flows-source.html ) .
470+
471+ ``` ts
472+ declare const flow: mediaconnect .IFlow ;
473+
474+ new mediaconnect .FlowSource (stack , ' BackupSource' , {
475+ flow: flow ,
476+ flowSourceName: ' backup-source' ,
477+ source: mediaconnect .SourceConfiguration .srtListener ({
478+ flowSourceName: ' backup' ,
479+ port: 5001 ,
480+ network: mediaconnect .NetworkConfiguration .publicNetwork (' 203.0.113.0/24' ),
481+ }),
482+ });
483+ ```
484+
485+ This enables failover configurations where the primary source is defined on the Flow and secondary sources are added as separate constructs.
486+
487+ #### AWS Elemental MediaConnect Flow Entitlement
488+
489+ A FlowEntitlement (` AWS::MediaConnect::FlowEntitlement ` ) grants another AWS account permission
490+ to access content from your flow. It is created on the content originator's side and consumed
491+ by the subscriber via ` SourceConfiguration.entitlement() ` .
492+
493+ For further information refer to [ our documentation] ( https://docs.aws.amazon.com/mediaconnect/latest/ug/entitlements.html ) .
494+
495+ ##### Creating an Entitlement
496+
497+ ``` ts
498+ declare const flow: mediaconnect .IFlow ;
499+
500+ const entitlement = new mediaconnect .FlowEntitlement (stack , ' Entitlement' , {
501+ flow: flow ,
502+ entitlementName: ' partner-access' ,
503+ subscribers: [' 111122223333' ],
504+ description: ' Grant partner access to live feed' ,
505+ });
506+ ```
507+
508+ ##### Consuming an Entitlement (Subscriber Side)
509+
510+ The subscriber imports the entitlement ARN and uses it as a source in their own flow:
511+
512+ ``` ts
513+ const entitlement = mediaconnect .FlowEntitlement .fromFlowEntitlementArn (
514+ stack , ' ImportedEntitlement' ,
515+ ' arn:aws:mediaconnect:us-west-2:111122223333:entitlement:1-11111111111111111111111111111111:MyEntitlement' ,
516+ );
517+
518+ new mediaconnect .Flow (stack , ' SubscriberFlow' , {
519+ source: mediaconnect .SourceConfiguration .entitlement ({
520+ entitlement: entitlement ,
521+ }),
522+ });
523+ ```
524+
438525#### AWS Elemental MediaConnect VPC Interface
439526
440527VPC interfaces enable MediaConnect flows to send and receive content through
@@ -553,7 +640,7 @@ new mediaconnect.Bridge(stack, 'EgressBridge', {
553640 bridgeName: ' my-egress-bridge' ,
554641 gateway: gateway ,
555642 config: mediaconnect .BridgeConfiguration .egress ({
556- maxBitrate: mediaconnect .Bitrate .mbps (10 ),
643+ maxBitrate: cdk .Bitrate .mbps (10 ),
557644 flowSources: [{
558645 name: ' cloud-source' ,
559646 flow: flow ,
@@ -692,16 +779,17 @@ gateway.addNetwork({
692779You can import existing gateways for use in your CDK application:
693780
694781``` ts
695- const gateway = mediaconnect .Gateway .fromAttributes (stack , ' ImportedGateway' , {
696- gatewayArn: ' arn:aws:mediaconnect:us-west-2:111122223333:gateway:1-11111111111111111111111111111111:MyGateway' ,
697- });
782+ const gateway = mediaconnect .Gateway .fromGatewayArn (
783+ stack , ' ImportedGateway' ,
784+ ' arn:aws:mediaconnect:us-west-2:111122223333:gateway:1-11111111111111111111111111111111:MyGateway' ,
785+ );
698786
699787// Use the imported gateway with bridges
700788new mediaconnect .Bridge (stack , ' MyBridge' , {
701789 bridgeName: ' my-bridge' ,
702790 gateway: gateway ,
703791 config: mediaconnect .BridgeConfiguration .egress ({
704- maxBitrate: mediaconnect .Bitrate .mbps (10 ),
792+ maxBitrate: cdk .Bitrate .mbps (10 ),
705793 flowSources: [/* ... */ ],
706794 networkOutputs: [/* ... */ ],
707795 }),
@@ -812,7 +900,7 @@ const gateway = new mediaconnect.Gateway(stack, 'MyGateway', {
812900new mediaconnect .Bridge (stack , ' MyIngressBridge' , {
813901 bridgeName: ' my-ingress-bridge' ,
814902 config: mediaconnect .BridgeConfiguration .ingress ({
815- maxBitrate: mediaconnect .Bitrate .mbps (10 ),
903+ maxBitrate: cdk .Bitrate .mbps (10 ),
816904 maxOutputs: 2 ,
817905 networkSources: [{
818906 name: ' on-prem-source' ,
@@ -836,7 +924,7 @@ declare const vpcInterface: mediaconnect.VpcInterfaceConfig;
836924new mediaconnect .Bridge (stack , ' MyEgressBridge' , {
837925 bridgeName: ' my-egress-bridge' ,
838926 config: mediaconnect .BridgeConfiguration .egress ({
839- maxBitrate: mediaconnect .Bitrate .mbps (10 ),
927+ maxBitrate: cdk .Bitrate .mbps (10 ),
840928 flowSources: [{
841929 name: ' cloud-source' ,
842930 flow: flow ,
@@ -857,6 +945,17 @@ new mediaconnect.Bridge(stack, 'MyEgressBridge', {
857945});
858946```
859947
948+ ##### Importing Existing Bridges
949+
950+ You can import existing bridges for use in your CDK application:
951+
952+ ``` ts
953+ const importedBridge = mediaconnect .Bridge .fromBridgeArn (
954+ stack , ' ImportedBridge' ,
955+ ' arn:aws:mediaconnect:us-west-2:111122223333:bridge:1-11111111111111111111111111111111:MyBridge' ,
956+ );
957+ ```
958+
860959##### Adding Outputs to Bridges
861960
862961For egress bridges, the ` addOutput() ` method provides a convenient
@@ -866,7 +965,7 @@ way to add network outputs:
866965const bridge = new mediaconnect .Bridge (stack , ' MyEgressBridge' , {
867966 bridgeName: ' my-egress-bridge' ,
868967 config: mediaconnect .BridgeConfiguration .egress ({
869- maxBitrate: mediaconnect .Bitrate .mbps (10 ),
968+ maxBitrate: cdk .Bitrate .mbps (10 ),
870969 flowSources: [{
871970 name: ' cloud-source' ,
872971 flow: flow ,
@@ -955,6 +1054,30 @@ resources include network interfaces, inputs, and outputs.
9551054
9561055For further information refer to [ our documentation] ( https://docs.aws.amazon.com/mediaconnect/latest/ug/routers.html ) .
9571056
1057+ ##### Importing Existing Router Resources
1058+
1059+ You can import existing router resources for use in your CDK application:
1060+
1061+ ``` ts
1062+ // Import a router network interface
1063+ const importedInterface = mediaconnect .RouterNetworkInterface .fromRouterNetworkInterfaceArn (
1064+ stack , ' ImportedInterface' ,
1065+ ' arn:aws:mediaconnect:us-west-2:111122223333:router-network-interface:1-11111111111111111111111111111111:MyInterface' ,
1066+ );
1067+
1068+ // Import a router input
1069+ const importedInput = mediaconnect .RouterInput .fromRouterInputArn (
1070+ stack , ' ImportedInput' ,
1071+ ' arn:aws:mediaconnect:us-west-2:111122223333:router-input:1-11111111111111111111111111111111:MyInput' ,
1072+ );
1073+
1074+ // Import a router output
1075+ const importedOutput = mediaconnect .RouterOutput .fromRouterOutputArn (
1076+ stack , ' ImportedOutput' ,
1077+ ' arn:aws:mediaconnect:us-west-2:111122223333:router-output:1-11111111111111111111111111111111:MyOutput' ,
1078+ );
1079+ ```
1080+
9581081##### Router Network Interfaces
9591082
9601083Network interfaces define the network connectivity for router inputs and outputs:
@@ -964,7 +1087,7 @@ Network interfaces define the network connectivity for router inputs and outputs
9641087const publicInterface = new mediaconnect .RouterNetworkInterface (stack , ' PublicInterface' , {
9651088 routerNetworkInterfaceName: ' public-interface' ,
9661089 configuration: mediaconnect .RouterNetworkConfiguration .publicNetwork ({
967- cidr: [' 10 .0.0 .0/16 ' ],
1090+ cidr: [' 203 .0.113 .0/24 ' ],
9681091 }),
9691092});
9701093
@@ -991,7 +1114,7 @@ declare const networkInterface: mediaconnect.IRouterNetworkInterface;
9911114
9921115const input = new mediaconnect .RouterInput (stack , ' RtpInput' , {
9931116 routerInputName: ' rtp-input' ,
994- maximumBitrate: mediaconnect .Bitrate .mbps (10 ),
1117+ maximumBitrate: cdk .Bitrate .mbps (10 ),
9951118 routingScope: mediaconnect .RoutingScope .REGIONAL ,
9961119 tier: mediaconnect .RouterInputTier .INPUT_100 ,
9971120 availabilityZone: ' us-east-1a' ,
@@ -1009,7 +1132,7 @@ declare const flowOutput: mediaconnect.IFlowOutput;
10091132
10101133const flowInput = new mediaconnect .RouterInput (stack , ' FlowInput' , {
10111134 routerInputName: ' flow-input' ,
1012- maximumBitrate: mediaconnect .Bitrate .mbps (20 ),
1135+ maximumBitrate: cdk .Bitrate .mbps (20 ),
10131136 routingScope: mediaconnect .RoutingScope .REGIONAL ,
10141137 tier: mediaconnect .RouterInputTier .INPUT_50 ,
10151138 availabilityZone: ' us-east-1a' ,
@@ -1022,7 +1145,7 @@ const flowInput = new mediaconnect.RouterInput(stack, 'FlowInput', {
10221145// MediaConnect Flow input without specific connection (requires explicit AZ)
10231146const flowInputNoConnection = new mediaconnect .RouterInput (stack , ' FlowInputNoConnection' , {
10241147 routerInputName: ' flow-input-no-connection' ,
1025- maximumBitrate: mediaconnect .Bitrate .mbps (20 ),
1148+ maximumBitrate: cdk .Bitrate .mbps (20 ),
10261149 routingScope: mediaconnect .RoutingScope .REGIONAL ,
10271150 tier: mediaconnect .RouterInputTier .INPUT_50 ,
10281151 availabilityZone: ' us-east-1a' ,
@@ -1032,6 +1155,41 @@ const flowInputNoConnection = new mediaconnect.RouterInput(stack, 'FlowInputNoCo
10321155});
10331156```
10341157
1158+ ##### Router Input Grants
1159+
1160+ Grant methods enable orchestration of router input lifecycle:
1161+
1162+ ``` ts
1163+ declare const routerInput: mediaconnect .IRouterInput ;
1164+ declare const fn: lambda .IFunction ;
1165+
1166+ routerInput .grants .start (fn );
1167+ routerInput .grants .stop (fn );
1168+ routerInput .grants .restart (fn );
1169+ routerInput .grants .actions (fn , ' mediaconnect:UpdateRouterInput' );
1170+ ```
1171+
1172+ Interface for Router Input:
1173+
1174+ ``` ts
1175+ /**
1176+ * Interface for MediaConnect Router Input
1177+ */
1178+ export interface IRouterInput extends IResource {
1179+ /**
1180+ * The Amazon Resource Name (ARN) of the router input
1181+ *
1182+ * @attribute
1183+ */
1184+ readonly routerInputArn: string ;
1185+
1186+ /**
1187+ * Grant methods for this router input
1188+ */
1189+ readonly grants: RouterInputGrants ;
1190+ }
1191+ ```
1192+
10351193##### Router Outputs
10361194
10371195Router outputs send video streams to various destinations:
@@ -1042,7 +1200,7 @@ declare const networkInterface: mediaconnect.IRouterNetworkInterface;
10421200
10431201const output = new mediaconnect .RouterOutput (stack , ' SrtOutput' , {
10441202 routerOutputName: ' srt-output' ,
1045- maximumBitrate: mediaconnect .Bitrate .mbps (10 ),
1203+ maximumBitrate: cdk .Bitrate .mbps (10 ),
10461204 routingScope: mediaconnect .RoutingScope .REGIONAL ,
10471205 tier: mediaconnect .RouterOutputTier .OUTPUT_100 ,
10481206 configuration: mediaconnect .RouterOutputConfiguration .standard ({
@@ -1059,7 +1217,7 @@ declare const mediaLiveInput: medialive.CfnInput;
10591217
10601218const mediaLiveOutput = new mediaconnect .RouterOutput (stack , ' MediaLiveOutput' , {
10611219 routerOutputName: ' medialive-output' ,
1062- maximumBitrate: mediaconnect .Bitrate .mbps (15 ),
1220+ maximumBitrate: cdk .Bitrate .mbps (15 ),
10631221 routingScope: mediaconnect .RoutingScope .GLOBAL ,
10641222 tier: mediaconnect .RouterOutputTier .OUTPUT_50 ,
10651223 configuration: mediaconnect .RouterOutputConfiguration .mediaLiveInput ({
@@ -1071,7 +1229,7 @@ const mediaLiveOutput = new mediaconnect.RouterOutput(stack, 'MediaLiveOutput',
10711229// MediaLive output without specific connection (requires explicit AZ)
10721230const mediaLiveOutputNoConnection = new mediaconnect .RouterOutput (stack , ' MediaLiveOutputNoConnection' , {
10731231 routerOutputName: ' medialive-output-no-connection' ,
1074- maximumBitrate: mediaconnect .Bitrate .mbps (15 ),
1232+ maximumBitrate: cdk .Bitrate .mbps (15 ),
10751233 routingScope: mediaconnect .RoutingScope .GLOBAL ,
10761234 tier: mediaconnect .RouterOutputTier .OUTPUT_50 ,
10771235 configuration: mediaconnect .RouterOutputConfiguration .mediaLiveInputWithoutConnection ({
@@ -1084,7 +1242,7 @@ declare const flow: mediaconnect.IFlow;
10841242
10851243const flowOutput = new mediaconnect .RouterOutput (stack , ' FlowOutput' , {
10861244 routerOutputName: ' flow-output' ,
1087- maximumBitrate: mediaconnect .Bitrate .mbps (20 ),
1245+ maximumBitrate: cdk .Bitrate .mbps (20 ),
10881246 routingScope: mediaconnect .RoutingScope .REGIONAL ,
10891247 tier: mediaconnect .RouterOutputTier .OUTPUT_100 ,
10901248 configuration: mediaconnect .RouterOutputConfiguration .mediaConnectFlow ({
@@ -1095,7 +1253,7 @@ const flowOutput = new mediaconnect.RouterOutput(stack, 'FlowOutput', {
10951253// MediaConnect Flow output without specific connection (requires explicit AZ)
10961254const flowOutputNoConnection = new mediaconnect .RouterOutput (stack , ' FlowOutputNoConnection' , {
10971255 routerOutputName: ' flow-output-no-connection' ,
1098- maximumBitrate: mediaconnect .Bitrate .mbps (20 ),
1256+ maximumBitrate: cdk .Bitrate .mbps (20 ),
10991257 routingScope: mediaconnect .RoutingScope .REGIONAL ,
11001258 tier: mediaconnect .RouterOutputTier .OUTPUT_100 ,
11011259 configuration: mediaconnect .RouterOutputConfiguration .mediaConnectFlowWithoutConnection ({
0 commit comments