UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

2 lines (1 loc) 29.6 kB
"use strict";var __runInitializers=exports&&exports.__runInitializers||function(thisArg,initializers,value){for(var useValue=arguments.length>2,i=0;i<initializers.length;i++)value=useValue?initializers[i].call(thisArg,value):initializers[i].call(thisArg);return useValue?value:void 0},__esDecorate=exports&&exports.__esDecorate||function(ctor,descriptorIn,decorators,contextIn,initializers,extraInitializers){function accept(f){if(f!==void 0&&typeof f!="function")throw new TypeError("Function expected");return f}for(var kind=contextIn.kind,key=kind==="getter"?"get":kind==="setter"?"set":"value",target=!descriptorIn&&ctor?contextIn.static?ctor:ctor.prototype:null,descriptor=descriptorIn||(target?Object.getOwnPropertyDescriptor(target,contextIn.name):{}),_,done=!1,i=decorators.length-1;i>=0;i--){var context={};for(var p in contextIn)context[p]=p==="access"?{}:contextIn[p];for(var p in contextIn.access)context.access[p]=contextIn.access[p];context.addInitializer=function(f){if(done)throw new TypeError("Cannot add initializers after decoration has completed");extraInitializers.push(accept(f||null))};var result=(0,decorators[i])(kind==="accessor"?{get:descriptor.get,set:descriptor.set}:descriptor[key],context);if(kind==="accessor"){if(result===void 0)continue;if(result===null||typeof result!="object")throw new TypeError("Object expected");(_=accept(result.get))&&(descriptor.get=_),(_=accept(result.set))&&(descriptor.set=_),(_=accept(result.init))&&initializers.unshift(_)}else(_=accept(result))&&(kind==="field"?initializers.unshift(_):descriptor[key]=_)}target&&Object.defineProperty(target,contextIn.name,descriptor),done=!0};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TaskDefinitionRevision=exports.Compatibility=exports.Scope=exports.PidMode=exports.IpcMode=exports.NetworkMode=exports.TaskDefinition=void 0,exports.isEc2Compatible=isEc2Compatible,exports.isFargateCompatible=isFargateCompatible,exports.isExternalCompatible=isExternalCompatible,exports.isManagedInstancesCompatible=isManagedInstancesCompatible;var jsiiDeprecationWarnings=()=>{var tmp=require("../../../.warnings.jsii.js");return jsiiDeprecationWarnings=()=>tmp,tmp};const JSII_RTTI_SYMBOL_1=Symbol.for("jsii.rtti");var _imported_task_definition_1=()=>{var tmp=require("./_imported-task-definition");return _imported_task_definition_1=()=>tmp,tmp},ec2=()=>{var tmp=require("../../../aws-ec2");return ec2=()=>tmp,tmp},iam=()=>{var tmp=require("../../../aws-iam");return iam=()=>tmp,tmp},core_1=()=>{var tmp=require("../../../core");return core_1=()=>tmp,tmp},metadata_resource_1=()=>{var tmp=require("../../../core/lib/metadata-resource");return metadata_resource_1=()=>tmp,tmp},prop_injectable_1=()=>{var tmp=require("../../../core/lib/prop-injectable");return prop_injectable_1=()=>tmp,tmp},container_definition_1=()=>{var tmp=require("../container-definition");return container_definition_1=()=>tmp,tmp},ecs_generated_1=()=>{var tmp=require("../ecs.generated");return ecs_generated_1=()=>tmp,tmp},firelens_log_router_1=()=>{var tmp=require("../firelens-log-router");return firelens_log_router_1=()=>tmp,tmp},aws_log_driver_1=()=>{var tmp=require("../log-drivers/aws-log-driver");return aws_log_driver_1=()=>tmp,tmp};class TaskDefinitionBase extends core_1().Resource{get isEc2Compatible(){return isEc2Compatible(this.compatibility)}get isFargateCompatible(){return isFargateCompatible(this.compatibility)}get isExternalCompatible(){return isExternalCompatible(this.compatibility)}get isManagedInstancesCompatible(){return isManagedInstancesCompatible(this.compatibility)}}let TaskDefinition=(()=>{let _classDecorators=[prop_injectable_1().propertyInjectable],_classDescriptor,_classExtraInitializers=[],_classThis,_classSuper=TaskDefinitionBase,_instanceExtraInitializers=[],_addToTaskRolePolicy_decorators,_addToExecutionRolePolicy_decorators,_addContainer_decorators,_addFirelensLogRouter_decorators,_addVolume_decorators,_addPlacementConstraint_decorators,_addExtension_decorators,_addInferenceAccelerator_decorators,_grantRun_decorators,_obtainExecutionRole_decorators,_findPortMappingByName_decorators,_findContainer_decorators;var TaskDefinition2=class extends _classSuper{static{_classThis=this}static{const _metadata=typeof Symbol=="function"&&Symbol.metadata?Object.create(_classSuper[Symbol.metadata]??null):void 0;_addToTaskRolePolicy_decorators=[(0,metadata_resource_1().MethodMetadata)()],_addToExecutionRolePolicy_decorators=[(0,metadata_resource_1().MethodMetadata)()],_addContainer_decorators=[(0,metadata_resource_1().MethodMetadata)()],_addFirelensLogRouter_decorators=[(0,metadata_resource_1().MethodMetadata)()],_addVolume_decorators=[(0,metadata_resource_1().MethodMetadata)()],_addPlacementConstraint_decorators=[(0,metadata_resource_1().MethodMetadata)()],_addExtension_decorators=[(0,metadata_resource_1().MethodMetadata)()],_addInferenceAccelerator_decorators=[(0,metadata_resource_1().MethodMetadata)()],_grantRun_decorators=[(0,metadata_resource_1().MethodMetadata)()],_obtainExecutionRole_decorators=[(0,metadata_resource_1().MethodMetadata)()],_findPortMappingByName_decorators=[(0,metadata_resource_1().MethodMetadata)()],_findContainer_decorators=[(0,metadata_resource_1().MethodMetadata)()],__esDecorate(this,null,_addToTaskRolePolicy_decorators,{kind:"method",name:"addToTaskRolePolicy",static:!1,private:!1,access:{has:obj=>"addToTaskRolePolicy"in obj,get:obj=>obj.addToTaskRolePolicy},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_addToExecutionRolePolicy_decorators,{kind:"method",name:"addToExecutionRolePolicy",static:!1,private:!1,access:{has:obj=>"addToExecutionRolePolicy"in obj,get:obj=>obj.addToExecutionRolePolicy},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_addContainer_decorators,{kind:"method",name:"addContainer",static:!1,private:!1,access:{has:obj=>"addContainer"in obj,get:obj=>obj.addContainer},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_addFirelensLogRouter_decorators,{kind:"method",name:"addFirelensLogRouter",static:!1,private:!1,access:{has:obj=>"addFirelensLogRouter"in obj,get:obj=>obj.addFirelensLogRouter},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_addVolume_decorators,{kind:"method",name:"addVolume",static:!1,private:!1,access:{has:obj=>"addVolume"in obj,get:obj=>obj.addVolume},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_addPlacementConstraint_decorators,{kind:"method",name:"addPlacementConstraint",static:!1,private:!1,access:{has:obj=>"addPlacementConstraint"in obj,get:obj=>obj.addPlacementConstraint},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_addExtension_decorators,{kind:"method",name:"addExtension",static:!1,private:!1,access:{has:obj=>"addExtension"in obj,get:obj=>obj.addExtension},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_addInferenceAccelerator_decorators,{kind:"method",name:"addInferenceAccelerator",static:!1,private:!1,access:{has:obj=>"addInferenceAccelerator"in obj,get:obj=>obj.addInferenceAccelerator},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_grantRun_decorators,{kind:"method",name:"grantRun",static:!1,private:!1,access:{has:obj=>"grantRun"in obj,get:obj=>obj.grantRun},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_obtainExecutionRole_decorators,{kind:"method",name:"obtainExecutionRole",static:!1,private:!1,access:{has:obj=>"obtainExecutionRole"in obj,get:obj=>obj.obtainExecutionRole},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_findPortMappingByName_decorators,{kind:"method",name:"findPortMappingByName",static:!1,private:!1,access:{has:obj=>"findPortMappingByName"in obj,get:obj=>obj.findPortMappingByName},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,_findContainer_decorators,{kind:"method",name:"findContainer",static:!1,private:!1,access:{has:obj=>"findContainer"in obj,get:obj=>obj.findContainer},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(null,_classDescriptor={value:_classThis},_classDecorators,{kind:"class",name:_classThis.name,metadata:_metadata},null,_classExtraInitializers),TaskDefinition2=_classThis=_classDescriptor.value,_metadata&&Object.defineProperty(_classThis,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:_metadata})}static[JSII_RTTI_SYMBOL_1]={fqn:"aws-cdk-lib.aws_ecs.TaskDefinition",version:"2.233.0"};static PROPERTY_INJECTION_ID="aws-cdk-lib.aws-ecs.TaskDefinition";static fromTaskDefinitionArn(scope,id,taskDefinitionArn){return new(_imported_task_definition_1()).ImportedTaskDefinition(scope,id,{taskDefinitionArn})}static fromTaskDefinitionAttributes(scope,id,attrs){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_TaskDefinitionAttributes(attrs)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.fromTaskDefinitionAttributes),error}return new(_imported_task_definition_1()).ImportedTaskDefinition(scope,id,{taskDefinitionArn:attrs.taskDefinitionArn,compatibility:attrs.compatibility,networkMode:attrs.networkMode,taskRole:attrs.taskRole,executionRole:attrs.executionRole})}family=__runInitializers(this,_instanceExtraInitializers);taskDefinitionArn;taskRole;networkMode;defaultContainer;compatibility;ephemeralStorageGiB;pidMode;containers=new Array;volumes=[];placementConstraints=new Array;_inferenceAccelerators=[];_executionRole;_passRoleStatement;runtimePlatform;_cpu;_memory;constructor(scope,id,props){super(scope,id);try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_TaskDefinitionProps(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,TaskDefinition2),error}if((0,metadata_resource_1().addConstructMetadata)(this,props),this.family=props.family||core_1().Names.uniqueId(this),this.compatibility=props.compatibility,props.volumes&&props.volumes.forEach(v=>this.addVolume(v)),this.networkMode=props.networkMode??(this.isFargateCompatible||this.isManagedInstancesCompatible?NetworkMode.AWS_VPC:NetworkMode.BRIDGE),this.isFargateCompatible&&this.networkMode!==NetworkMode.AWS_VPC)throw new(core_1()).ValidationError(`Fargate tasks can only have AwsVpc network mode, got: ${this.networkMode}`,this);if(props.proxyConfiguration&&this.networkMode!==NetworkMode.AWS_VPC)throw new(core_1()).ValidationError(`ProxyConfiguration can only be used with AwsVpc network mode, got: ${this.networkMode}`,this);if(props.placementConstraints&&props.placementConstraints.length>0&&this.isFargateCompatible)throw new(core_1()).ValidationError("Cannot set placement constraints on tasks that run on Fargate",this);if(this.isFargateCompatible&&(!props.cpu||!props.memoryMiB))throw new(core_1()).ValidationError(`Fargate-compatible tasks require both CPU (${props.cpu}) and memory (${props.memoryMiB}) specifications`,this);if(props.inferenceAccelerators&&props.inferenceAccelerators.length>0&&this.isFargateCompatible)throw new(core_1()).ValidationError("Cannot use inference accelerators on tasks that run on Fargate",this);if(this.isExternalCompatible&&![NetworkMode.BRIDGE,NetworkMode.HOST,NetworkMode.NONE].includes(this.networkMode))throw new(core_1()).ValidationError(`External tasks can only have Bridge, Host or None network mode, got: ${this.networkMode}`,this);if(this.isManagedInstancesCompatible){if(![NetworkMode.AWS_VPC,NetworkMode.HOST].includes(this.networkMode))throw new(core_1()).ValidationError(`Managed Instances tasks can only have AwsVpc or Host network mode, got: ${this.networkMode}`,this);if(props.inferenceAccelerators&&props.inferenceAccelerators.length>0)throw new(core_1()).ValidationError("Cannot use inference accelerators on tasks that run on Managed Instances",this);if(props.ephemeralStorageGiB)throw new(core_1()).ValidationError("Ephemeral storage is not supported for tasks running on Managed Instances",this);if(props.ipcMode)throw new(core_1()).ValidationError("IPC mode is not supported for tasks running on Managed Instances",this);if(props.proxyConfiguration)throw new(core_1()).ValidationError("Proxy configuration is not supported for tasks running on Managed Instances",this);if(props.runtimePlatform?.operatingSystemFamily&&!props.runtimePlatform.operatingSystemFamily.isLinux())throw new(core_1()).ValidationError(`Managed Instances tasks only support LINUX operating system family, got: ${props.runtimePlatform.operatingSystemFamily._operatingSystemFamily}`,this)}if(!this.isFargateCompatible&&!this.isManagedInstancesCompatible&&props.runtimePlatform)throw new(core_1()).ValidationError("Cannot specify runtimePlatform in non-Fargate and non-Managed Instances compatible tasks",this);if(props.enableFaultInjection&&![NetworkMode.AWS_VPC,NetworkMode.HOST].includes(this.networkMode))throw new(core_1()).ValidationError(`Only AWS_VPC and HOST Network Modes are supported for enabling Fault Injection, got ${this.networkMode} mode.`,this);this._executionRole=props.executionRole,this.taskRole=props.taskRole||new(iam()).Role(this,"TaskRole",{assumedBy:new(iam()).ServicePrincipal("ecs-tasks.amazonaws.com")}),props.inferenceAccelerators&&props.inferenceAccelerators.forEach(ia=>this.addInferenceAccelerator(ia)),this.ephemeralStorageGiB=props.ephemeralStorageGiB,this.pidMode=props.pidMode,props.runtimePlatform?.operatingSystemFamily?.isWindows()&&this.checkFargateWindowsBasedTasksSize(props.cpu,props.memoryMiB,props.runtimePlatform),this.runtimePlatform=props.runtimePlatform,this._cpu=props.cpu,this._memory=props.memoryMiB;let taskDefProps={containerDefinitions:core_1().Lazy.any({produce:()=>this.renderContainers()},{omitEmptyArray:!0}),volumes:core_1().Lazy.any({produce:()=>this.renderVolumes()},{omitEmptyArray:!0}),executionRoleArn:core_1().Lazy.string({produce:()=>this.executionRole&&this.executionRole.roleArn}),family:this.family,taskRoleArn:this.taskRole.roleArn,requiresCompatibilities:[...isEc2Compatible(props.compatibility)?["EC2"]:[],...isFargateCompatible(props.compatibility)?["FARGATE"]:[],...isExternalCompatible(props.compatibility)?["EXTERNAL"]:[],...isManagedInstancesCompatible(props.compatibility)?["MANAGED_INSTANCES"]:[]],networkMode:this.renderNetworkMode(this.networkMode),placementConstraints:core_1().Lazy.any({produce:()=>!isFargateCompatible(this.compatibility)&&!isManagedInstancesCompatible(this.compatibility)?this.placementConstraints:void 0},{omitEmptyArray:!0}),proxyConfiguration:props.proxyConfiguration?props.proxyConfiguration.bind(this.stack,this):void 0,cpu:props.cpu,memory:props.memoryMiB,ipcMode:props.ipcMode,pidMode:this.pidMode,ephemeralStorage:this.ephemeralStorageGiB?{sizeInGiB:this.ephemeralStorageGiB}:void 0,runtimePlatform:(this.isFargateCompatible||this.isManagedInstancesCompatible)&&this.runtimePlatform?{cpuArchitecture:this.runtimePlatform?.cpuArchitecture?._cpuArchitecture,operatingSystemFamily:this.runtimePlatform?.operatingSystemFamily?._operatingSystemFamily}:void 0,enableFaultInjection:props.enableFaultInjection};props.inferenceAccelerators&&(taskDefProps={...taskDefProps,inferenceAccelerators:core_1().Lazy.any({produce:()=>this.renderInferenceAccelerators()})});const taskDef=new(ecs_generated_1()).CfnTaskDefinition(this,"Resource",taskDefProps);props.placementConstraints&&props.placementConstraints.forEach(pc=>this.addPlacementConstraint(pc)),this.taskDefinitionArn=taskDef.ref,this.node.addValidation({validate:()=>this.validateTaskDefinition()})}get executionRole(){return this._executionRole}get inferenceAccelerators(){return this._inferenceAccelerators}renderVolumes(){return this.volumes.map(renderVolume);function renderVolume(spec){return{host:spec.host,name:spec.name,configuredAtLaunch:spec.configuredAtLaunch,dockerVolumeConfiguration:spec.dockerVolumeConfiguration&&{autoprovision:spec.dockerVolumeConfiguration.autoprovision,driver:spec.dockerVolumeConfiguration.driver,driverOpts:spec.dockerVolumeConfiguration.driverOpts,labels:spec.dockerVolumeConfiguration.labels,scope:spec.dockerVolumeConfiguration.scope},efsVolumeConfiguration:spec.efsVolumeConfiguration&&{filesystemId:spec.efsVolumeConfiguration.fileSystemId,authorizationConfig:spec.efsVolumeConfiguration.authorizationConfig,rootDirectory:spec.efsVolumeConfiguration.rootDirectory,transitEncryption:spec.efsVolumeConfiguration.transitEncryption,transitEncryptionPort:spec.efsVolumeConfiguration.transitEncryptionPort}}}}renderInferenceAccelerators(){return this._inferenceAccelerators.map(renderInferenceAccelerator);function renderInferenceAccelerator(inferenceAccelerator){return{deviceName:inferenceAccelerator.deviceName,deviceType:inferenceAccelerator.deviceType}}}_validateTarget(options){const targetContainer=this.findContainer(options.containerName);if(targetContainer===void 0)throw new(core_1()).ValidationError(`No container named '${options.containerName}'. Did you call "addContainer()"?`,this);const targetProtocol=options.protocol||container_definition_1().Protocol.TCP,targetContainerPort=options.containerPort||targetContainer.containerPort,portMapping=targetContainer.findPortMapping(targetContainerPort,targetProtocol);if(portMapping===void 0)throw new(core_1()).ValidationError(`Container '${targetContainer}' has no mapping for port ${options.containerPort} and protocol ${targetProtocol}. Did you call "container.addPortMappings()"?`,this);return{containerName:options.containerName,portMapping}}_portRangeFromPortMapping(portMapping){if(portMapping.hostPort!==void 0&&portMapping.hostPort!==0)return portMapping.protocol===container_definition_1().Protocol.UDP?ec2().Port.udp(portMapping.hostPort):ec2().Port.tcp(portMapping.hostPort);if(this.networkMode===NetworkMode.BRIDGE||this.networkMode===NetworkMode.NAT)return EPHEMERAL_PORT_RANGE;if(portMapping.containerPort!==container_definition_1().ContainerDefinition.CONTAINER_PORT_USE_RANGE)return portMapping.protocol===container_definition_1().Protocol.UDP?ec2().Port.udp(portMapping.containerPort):ec2().Port.tcp(portMapping.containerPort);const[startPort,endPort]=portMapping.containerPortRange.split("-",2).map(v=>Number(v));return portMapping.protocol===container_definition_1().Protocol.UDP?ec2().Port.udpRange(startPort,endPort):ec2().Port.tcpRange(startPort,endPort)}addToTaskRolePolicy(statement){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_iam_PolicyStatement(statement)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addToTaskRolePolicy),error}this.taskRole.addToPrincipalPolicy(statement)}addToExecutionRolePolicy(statement){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_iam_PolicyStatement(statement)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addToExecutionRolePolicy),error}this.obtainExecutionRole().addToPrincipalPolicy(statement)}addContainer(id,props){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_ContainerDefinitionOptions(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addContainer),error}return new(container_definition_1()).ContainerDefinition(this,id,{taskDefinition:this,...props})}addFirelensLogRouter(id,props){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_FirelensLogRouterDefinitionOptions(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addFirelensLogRouter),error}if(this.containers.find(x=>x instanceof firelens_log_router_1().FirelensLogRouter))throw new(core_1()).ValidationError("Firelens log router is already added in this task.",this);return new(firelens_log_router_1()).FirelensLogRouter(this,id,{taskDefinition:this,...props})}_linkContainer(container){if(this._cpu){const taskCpu=Number(this._cpu),sumOfContainerCpu=[...this.containers,container].map(c=>c.cpu).filter(cpu=>typeof cpu=="number").reduce((a,c)=>a+c,0);if(taskCpu<sumOfContainerCpu)throw new(core_1()).ValidationError("The sum of all container cpu values cannot be greater than the value of the task cpu",this)}this.containers.push(container),this.defaultContainer===void 0&&container.essential&&(this.defaultContainer=container)}addVolume(volume){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_Volume(volume)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addVolume),error}this.validateVolume(volume),this.volumes.push(volume)}validateVolume(volume){if(volume.configuredAtLaunch!==!0){if(this.isManagedInstancesCompatible&&volume.dockerVolumeConfiguration)throw new(core_1()).ValidationError(`DockerVolumeConfiguration is not supported for tasks running on Managed Instances. Volume '${volume.name}' cannot use dockerVolumeConfiguration`,this);return}if(volume.host||volume.dockerVolumeConfiguration||volume.efsVolumeConfiguration)throw new(core_1()).ValidationError(`Volume Configurations must not be specified for '${volume.name}' when 'configuredAtLaunch' is set to true`,this)}addPlacementConstraint(constraint){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_PlacementConstraint(constraint)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addPlacementConstraint),error}if(isFargateCompatible(this.compatibility))throw new(core_1()).ValidationError("Cannot set placement constraints on tasks that run on Fargate",this);this.placementConstraints.push(...constraint.toJson())}addExtension(extension){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_ITaskDefinitionExtension(extension)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addExtension),error}extension.extend(this)}addInferenceAccelerator(inferenceAccelerator){try{jsiiDeprecationWarnings().print("aws-cdk-lib.aws_ecs.TaskDefinition#addInferenceAccelerator","ECS TaskDefinition's inferenceAccelerator is EOL since April 2024"),jsiiDeprecationWarnings().aws_cdk_lib_aws_ecs_InferenceAccelerator(inferenceAccelerator)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addInferenceAccelerator),error}if(isFargateCompatible(this.compatibility))throw new(core_1()).ValidationError("Cannot use inference accelerators on tasks that run on Fargate",this);this._inferenceAccelerators.push(inferenceAccelerator)}grantRun(grantee){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_iam_IGrantable(grantee)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.grantRun),error}return grantee.grantPrincipal.addToPrincipalPolicy(this.passRoleStatement),iam().Grant.addToPrincipal({grantee,actions:["ecs:RunTask"],resourceArns:[this.taskDefinitionArn]})}obtainExecutionRole(){return this._executionRole||(this._executionRole=new(iam()).Role(this,"ExecutionRole",{assumedBy:new(iam()).ServicePrincipal("ecs-tasks.amazonaws.com"),roleName:core_1().PhysicalName.GENERATE_IF_NEEDED}),this.passRoleStatement.addResources(this._executionRole.roleArn)),this._executionRole}get referencesSecretJsonField(){for(const container of this.containers)if(container.referencesSecretJsonField)return!0;return!1}validateTaskDefinition(){const ret=new Array;if(isEc2Compatible(this.compatibility)&&!this._memory)for(const container of this.containers)container.memoryLimitSpecified||ret.push(`ECS Container ${container.containerName} must have at least one of 'memoryLimitMiB' or 'memoryReservationMiB' specified`);const portMappingNames=new Map;this.containers.forEach(container=>{for(const pm of container.portMappings)pm.name&&(portMappingNames.has(pm.name)&&ret.push(`Port mapping name '${pm.name}' cannot appear in both '${container.containerName}' and '${portMappingNames.get(pm.name)}'`),portMappingNames.set(pm.name,container.containerName))});const runtimeVolumes=this.volumes.filter(vol=>vol.configuredAtLaunch);if(runtimeVolumes.length>1){const volumeNames=runtimeVolumes.map(vol=>vol.name).join(",");ret.push(`More than one volume is configured at launch: [${volumeNames}]`)}for(const volume of this.volumes)volume.configuredAtLaunch&&(this.containers.some(container=>container.mountPoints.some(mp=>mp.sourceVolume===volume.name))||ret.push(`Volume '${volume.name}' should be mounted by at least one container when 'configuredAtLaunch' is true`));return ret}findPortMappingByName(name){let portMapping;return this.containers.forEach(container=>{const pm=container.findPortMappingByName(name);pm&&(portMapping=pm)}),portMapping}findContainer(containerName){return this.containers.find(c=>c.containerName===containerName)}get passRoleStatement(){return this._passRoleStatement||(this._passRoleStatement=new(iam()).PolicyStatement({effect:iam().Effect.ALLOW,actions:["iam:PassRole"],resources:this.executionRole?[this.taskRole.roleArn,this.executionRole.roleArn]:[this.taskRole.roleArn],conditions:{StringLike:{"iam:PassedToService":"ecs-tasks.amazonaws.com"}}})),this._passRoleStatement}renderNetworkMode(networkMode){return networkMode===NetworkMode.NAT?void 0:networkMode}renderContainers(){for(const container of this.containers)if(container.logDriverConfig&&container.logDriverConfig.logDriver==="awsfirelens"&&!this.containers.find(x=>x instanceof firelens_log_router_1().FirelensLogRouter)){this.addFirelensLogRouter("log-router",{image:(0,firelens_log_router_1().obtainDefaultFluentBitECRImage)(this,container.logDriverConfig),firelensConfig:{type:firelens_log_router_1().FirelensLogRouterType.FLUENTBIT},logging:new(aws_log_driver_1()).AwsLogDriver({streamPrefix:"firelens"}),memoryReservationMiB:50});break}return this.containers.map(x=>x.renderContainerDefinition())}checkFargateWindowsBasedTasksSize(cpu,memory,runtimePlatform){if(Number(cpu)===1024){if(Number(memory)<1024||Number(memory)>8192||Number(memory)%1024!==0)throw new(core_1()).ValidationError(`If provided cpu is ${cpu}, then memoryMiB must have a min of 1024 and a max of 8192, in 1024 increments. Provided memoryMiB was ${Number(memory)}.`,this)}else if(Number(cpu)===2048){if(Number(memory)<4096||Number(memory)>16384||Number(memory)%1024!==0)throw new(core_1()).ValidationError(`If provided cpu is ${cpu}, then memoryMiB must have a min of 4096 and max of 16384, in 1024 increments. Provided memoryMiB ${Number(memory)}.`,this)}else if(Number(cpu)===4096){if(Number(memory)<8192||Number(memory)>30720||Number(memory)%1024!==0)throw new(core_1()).ValidationError(`If provided cpu is ${cpu}, then memoryMiB must have a min of 8192 and a max of 30720, in 1024 increments.Provided memoryMiB was ${Number(memory)}.`,this)}else throw new(core_1()).ValidationError(`If operatingSystemFamily is ${runtimePlatform.operatingSystemFamily._operatingSystemFamily}, then cpu must be in 1024 (1 vCPU), 2048 (2 vCPU), or 4096 (4 vCPU). Provided value was: ${cpu}`,this)}static{__runInitializers(_classThis,_classExtraInitializers)}};return TaskDefinition2=_classThis})();exports.TaskDefinition=TaskDefinition;const EPHEMERAL_PORT_RANGE=ec2().Port.tcpRange(32768,65535);var NetworkMode;(function(NetworkMode2){NetworkMode2.NONE="none",NetworkMode2.BRIDGE="bridge",NetworkMode2.AWS_VPC="awsvpc",NetworkMode2.HOST="host",NetworkMode2.NAT="nat"})(NetworkMode||(exports.NetworkMode=NetworkMode={}));var IpcMode;(function(IpcMode2){IpcMode2.NONE="none",IpcMode2.HOST="host",IpcMode2.TASK="task"})(IpcMode||(exports.IpcMode=IpcMode={}));var PidMode;(function(PidMode2){PidMode2.HOST="host",PidMode2.TASK="task"})(PidMode||(exports.PidMode=PidMode={}));var Scope;(function(Scope2){Scope2.TASK="task",Scope2.SHARED="shared"})(Scope||(exports.Scope=Scope={}));var Compatibility;(function(Compatibility2){Compatibility2[Compatibility2.EC2=0]="EC2",Compatibility2[Compatibility2.FARGATE=1]="FARGATE",Compatibility2[Compatibility2.EC2_AND_FARGATE=2]="EC2_AND_FARGATE",Compatibility2[Compatibility2.EXTERNAL=3]="EXTERNAL",Compatibility2[Compatibility2.MANAGED_INSTANCES=4]="MANAGED_INSTANCES",Compatibility2[Compatibility2.EC2_AND_MANAGED_INSTANCES=5]="EC2_AND_MANAGED_INSTANCES",Compatibility2[Compatibility2.FARGATE_AND_MANAGED_INSTANCES=6]="FARGATE_AND_MANAGED_INSTANCES",Compatibility2[Compatibility2.FARGATE_AND_EC2_AND_MANAGED_INSTANCES=7]="FARGATE_AND_EC2_AND_MANAGED_INSTANCES"})(Compatibility||(exports.Compatibility=Compatibility={}));function isEc2Compatible(compatibility){return[Compatibility.EC2,Compatibility.EC2_AND_FARGATE,Compatibility.EC2_AND_MANAGED_INSTANCES].includes(compatibility)}function isFargateCompatible(compatibility){return[Compatibility.FARGATE,Compatibility.EC2_AND_FARGATE,Compatibility.FARGATE_AND_MANAGED_INSTANCES].includes(compatibility)}function isExternalCompatible(compatibility){return[Compatibility.EXTERNAL].includes(compatibility)}function isManagedInstancesCompatible(compatibility){return[Compatibility.MANAGED_INSTANCES,Compatibility.EC2_AND_MANAGED_INSTANCES,Compatibility.FARGATE_AND_MANAGED_INSTANCES].includes(compatibility)}class TaskDefinitionRevision{static[JSII_RTTI_SYMBOL_1]={fqn:"aws-cdk-lib.aws_ecs.TaskDefinitionRevision",version:"2.233.0"};static LATEST=new TaskDefinitionRevision("latest");static of(revision){if(revision<1)throw new(core_1()).UnscopedValidationError(`A task definition revision must be 'latest' or a positive number, got ${revision}`);return new TaskDefinitionRevision(revision.toString())}revision;constructor(revision){this.revision=revision}}exports.TaskDefinitionRevision=TaskDefinitionRevision;