UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

2 lines (1 loc) 17.8 kB
"use strict";var __decorate=exports&&exports.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r},_a,_b,_c;Object.defineProperty(exports,"__esModule",{value:!0}),exports.FargateComputeEnvironment=exports.ManagedEc2EksComputeEnvironment=exports.ManagedEc2EcsComputeEnvironment=exports.AllocationStrategy=exports.EksMachineImageType=exports.EcsMachineImageType=exports.ManagedComputeEnvironmentBase=void 0;var jsiiDeprecationWarnings=()=>{var tmp=require("../../.warnings.jsii.js");return jsiiDeprecationWarnings=()=>tmp,tmp};const JSII_RTTI_SYMBOL_1=Symbol.for("jsii.rtti");var batch_generated_1=()=>{var tmp=require("./batch.generated");return batch_generated_1=()=>tmp,tmp},compute_environment_base_1=()=>{var tmp=require("./compute-environment-base");return compute_environment_base_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};class ManagedComputeEnvironmentBase extends compute_environment_base_1().ComputeEnvironmentBase{constructor(scope,id,props){super(scope,id,props),this.tags=new(core_1()).TagManager(core_1().TagType.MAP,"AWS::Batch::ComputeEnvironment"),this.maxvCpus=props.maxvCpus??DEFAULT_MAX_VCPUS,this.replaceComputeEnvironment=props.replaceComputeEnvironment??!1,this.spot=props.spot,this.updateTimeout=props.updateTimeout,this.terminateOnUpdate=props.terminateOnUpdate,this.updateToLatestImageVersion=props.updateToLatestImageVersion,this.securityGroups=props.securityGroups??[new(ec2()).SecurityGroup(this,"SecurityGroup",{vpc:props.vpc})],this.connections=new(ec2()).Connections({securityGroups:this.securityGroups})}}exports.ManagedComputeEnvironmentBase=ManagedComputeEnvironmentBase;var EcsMachineImageType;(function(EcsMachineImageType2){EcsMachineImageType2.ECS_AL2="ECS_AL2",EcsMachineImageType2.ECS_AL2023="ECS_AL2023",EcsMachineImageType2.ECS_AL2_NVIDIA="ECS_AL2_NVIDIA"})(EcsMachineImageType||(exports.EcsMachineImageType=EcsMachineImageType={}));var EksMachineImageType;(function(EksMachineImageType2){EksMachineImageType2.EKS_AL2="EKS_AL2",EksMachineImageType2.EKS_AL2_NVIDIA="EKS_AL2_NVIDIA"})(EksMachineImageType||(exports.EksMachineImageType=EksMachineImageType={}));var AllocationStrategy;(function(AllocationStrategy2){AllocationStrategy2.BEST_FIT="BEST_FIT",AllocationStrategy2.BEST_FIT_PROGRESSIVE="BEST_FIT_PROGRESSIVE",AllocationStrategy2.SPOT_CAPACITY_OPTIMIZED="SPOT_CAPACITY_OPTIMIZED",AllocationStrategy2.SPOT_PRICE_CAPACITY_OPTIMIZED="SPOT_PRICE_CAPACITY_OPTIMIZED"})(AllocationStrategy||(exports.AllocationStrategy=AllocationStrategy={}));class ManagedEc2EcsComputeEnvironment extends ManagedComputeEnvironmentBase{static fromManagedEc2EcsComputeEnvironmentArn(scope,id,managedEc2EcsComputeEnvironmentArn){const computeEnvironmentName=core_1().Stack.of(scope).splitArn(managedEc2EcsComputeEnvironmentArn,core_1().ArnFormat.SLASH_RESOURCE_NAME).resourceName;class Import extends core_1().Resource{constructor(){super(...arguments),this.computeEnvironmentArn=managedEc2EcsComputeEnvironmentArn,this.computeEnvironmentName=computeEnvironmentName,this.enabled=!0,this.instanceClasses=[],this.instanceTypes=[],this.maxvCpus=1,this.connections={},this.securityGroups=[],this.tags=new(core_1()).TagManager(core_1().TagType.MAP,"AWS::Batch::ComputeEnvironment")}addInstanceClass(_instanceClass){throw new(core_1()).ValidationError(`cannot add instance class to imported ComputeEnvironment '${id}'`,this)}addInstanceType(_instanceType){throw new(core_1()).ValidationError(`cannot add instance type to imported ComputeEnvironment '${id}'`,this)}}return new Import(scope,id)}constructor(scope,id,props){super(scope,id,props);try{jsiiDeprecationWarnings().aws_cdk_lib_aws_batch_ManagedEc2EcsComputeEnvironmentProps(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,ManagedEc2EcsComputeEnvironment),error}if((0,metadata_resource_1().addConstructMetadata)(this,props),this.images=props.images,this.allocationStrategy=determineAllocationStrategy(this,props.allocationStrategy,this.spot),this.spotBidPercentage=props.spotBidPercentage,this.spotFleetRole=props.spotFleetRole??(this.spot&&this.allocationStrategy===AllocationStrategy.BEST_FIT?createSpotFleetRole(this):void 0),this.instanceTypes=props.instanceTypes??[],this.instanceClasses=props.instanceClasses??[],this.images?.find(image=>image.imageType===EcsMachineImageType.ECS_AL2023)&&(this.instanceClasses.includes(ec2().InstanceClass.A1)||this.instanceTypes.find(instanceType=>instanceType.sameInstanceClassAs(ec2().InstanceType.of(ec2().InstanceClass.A1,ec2().InstanceSize.LARGE)))))throw new(core_1()).ValidationError("Amazon Linux 2023 does not support A1 instances.",this);const{instanceRole,instanceProfile}=createInstanceRoleAndProfile(this,props.instanceRole);this.instanceRole=instanceRole,this.instanceProfile=instanceProfile,this.launchTemplate=props.launchTemplate,this.minvCpus=props.minvCpus??DEFAULT_MIN_VCPUS,this.placementGroup=props.placementGroup,validateVCpus(this,this.minvCpus,this.maxvCpus),validateSpotConfig(this,this.spot,this.spotBidPercentage,this.spotFleetRole);const{subnetIds}=props.vpc.selectSubnets(props.vpcSubnets),resource=new(batch_generated_1()).CfnComputeEnvironment(this,"Resource",{...baseManagedResourceProperties(this,subnetIds),computeEnvironmentName:props.computeEnvironmentName,computeResources:{...baseManagedResourceProperties(this,subnetIds).computeResources,minvCpus:this.minvCpus,instanceRole:this.instanceProfile.attrArn,instanceTypes:core_1().Lazy.list({produce:()=>renderInstances(this.instanceTypes,this.instanceClasses,props.useOptimalInstanceClasses)}),type:this.spot?"SPOT":"EC2",spotIamFleetRole:this.spotFleetRole?.roleArn,allocationStrategy:this.allocationStrategy,bidPercentage:this.spotBidPercentage,launchTemplate:this.launchTemplate?{launchTemplateId:this.launchTemplate?.launchTemplateId}:void 0,ec2Configuration:this.images?.map(image=>({imageIdOverride:image.image?.getImage(this).imageId,imageType:image.imageType??EcsMachineImageType.ECS_AL2})),placementGroup:this.placementGroup?.placementGroupName,tags:this.tags.renderedTags}});this.computeEnvironmentName=this.getResourceNameAttribute(resource.ref),this.computeEnvironmentArn=this.getResourceArnAttribute(resource.attrComputeEnvironmentArn,{service:"batch",resource:"compute-environment",resourceName:this.physicalName}),this.node.addValidation({validate:()=>validateInstances(this.instanceTypes,this.instanceClasses,props.useOptimalInstanceClasses)})}addInstanceType(instanceType){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ec2_InstanceType(instanceType)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addInstanceType),error}this.instanceTypes.push(instanceType)}addInstanceClass(instanceClass){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ec2_InstanceClass(instanceClass)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addInstanceClass),error}this.instanceClasses.push(instanceClass)}}exports.ManagedEc2EcsComputeEnvironment=ManagedEc2EcsComputeEnvironment,_a=JSII_RTTI_SYMBOL_1,ManagedEc2EcsComputeEnvironment[_a]={fqn:"aws-cdk-lib.aws_batch.ManagedEc2EcsComputeEnvironment",version:"2.185.0"},__decorate([(0,metadata_resource_1().MethodMetadata)()],ManagedEc2EcsComputeEnvironment.prototype,"addInstanceType",null),__decorate([(0,metadata_resource_1().MethodMetadata)()],ManagedEc2EcsComputeEnvironment.prototype,"addInstanceClass",null);class ManagedEc2EksComputeEnvironment extends ManagedComputeEnvironmentBase{constructor(scope,id,props){super(scope,id,props);try{jsiiDeprecationWarnings().aws_cdk_lib_aws_batch_ManagedEc2EksComputeEnvironmentProps(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,ManagedEc2EksComputeEnvironment),error}if((0,metadata_resource_1().addConstructMetadata)(this,props),this.kubernetesNamespace=props.kubernetesNamespace,this.eksCluster=props.eksCluster,this.images=props.images,this.allocationStrategy=determineAllocationStrategy(this,props.allocationStrategy,this.spot),this.allocationStrategy===AllocationStrategy.BEST_FIT)throw new(core_1()).ValidationError(`ManagedEc2EksComputeEnvironment '${id}' uses invalid allocation strategy 'AllocationStrategy.BEST_FIT'`,this);this.spotBidPercentage=props.spotBidPercentage,this.instanceTypes=props.instanceTypes??[],this.instanceClasses=props.instanceClasses??[];const{instanceRole,instanceProfile}=createInstanceRoleAndProfile(this,props.instanceRole);this.instanceRole=instanceRole,this.instanceProfile=instanceProfile,this.launchTemplate=props.launchTemplate,this.minvCpus=props.minvCpus??DEFAULT_MIN_VCPUS,this.placementGroup=props.placementGroup,validateVCpus(this,this.minvCpus,this.maxvCpus),validateSpotConfig(this,this.spot,this.spotBidPercentage);const{subnetIds}=props.vpc.selectSubnets(props.vpcSubnets),resource=new(batch_generated_1()).CfnComputeEnvironment(this,"Resource",{...baseManagedResourceProperties(this,subnetIds),computeEnvironmentName:props.computeEnvironmentName,eksConfiguration:{eksClusterArn:this.eksCluster.clusterArn,kubernetesNamespace:this.kubernetesNamespace},computeResources:{...baseManagedResourceProperties(this,subnetIds).computeResources,minvCpus:this.minvCpus,instanceRole:this.instanceProfile.attrArn,instanceTypes:core_1().Lazy.list({produce:()=>renderInstances(this.instanceTypes,this.instanceClasses,props.useOptimalInstanceClasses)}),type:this.spot?"SPOT":"EC2",allocationStrategy:this.allocationStrategy,bidPercentage:this.spotBidPercentage,launchTemplate:this.launchTemplate?{launchTemplateId:this.launchTemplate?.launchTemplateId}:void 0,ec2Configuration:this.images?.map(image=>({imageIdOverride:image.image?.getImage(this).imageId,imageType:image.imageType??EksMachineImageType.EKS_AL2})),placementGroup:this.placementGroup?.placementGroupName,tags:this.tags.renderedTags}});this.computeEnvironmentName=this.getResourceNameAttribute(resource.ref),this.computeEnvironmentArn=this.getResourceArnAttribute(resource.attrComputeEnvironmentArn,{service:"batch",resource:"compute-environment",resourceName:this.physicalName}),this.node.addValidation({validate:()=>validateInstances(this.instanceTypes,this.instanceClasses,props.useOptimalInstanceClasses)})}addInstanceType(instanceType){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ec2_InstanceType(instanceType)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addInstanceType),error}this.instanceTypes.push(instanceType)}addInstanceClass(instanceClass){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ec2_InstanceClass(instanceClass)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addInstanceClass),error}this.instanceClasses.push(instanceClass)}}exports.ManagedEc2EksComputeEnvironment=ManagedEc2EksComputeEnvironment,_b=JSII_RTTI_SYMBOL_1,ManagedEc2EksComputeEnvironment[_b]={fqn:"aws-cdk-lib.aws_batch.ManagedEc2EksComputeEnvironment",version:"2.185.0"},__decorate([(0,metadata_resource_1().MethodMetadata)()],ManagedEc2EksComputeEnvironment.prototype,"addInstanceType",null),__decorate([(0,metadata_resource_1().MethodMetadata)()],ManagedEc2EksComputeEnvironment.prototype,"addInstanceClass",null);class FargateComputeEnvironment extends ManagedComputeEnvironmentBase{static fromFargateComputeEnvironmentArn(scope,id,fargateComputeEnvironmentArn){const computeEnvironmentName=core_1().Stack.of(scope).splitArn(fargateComputeEnvironmentArn,core_1().ArnFormat.SLASH_RESOURCE_NAME).resourceName;class Import extends core_1().Resource{constructor(){super(...arguments),this.computeEnvironmentArn=fargateComputeEnvironmentArn,this.computeEnvironmentName=computeEnvironmentName,this.enabled=!0,this.maxvCpus=1,this.connections={},this.securityGroups=[],this.tags=new(core_1()).TagManager(core_1().TagType.MAP,"AWS::Batch::ComputeEnvironment")}}return new Import(scope,id)}constructor(scope,id,props){super(scope,id,props);try{jsiiDeprecationWarnings().aws_cdk_lib_aws_batch_FargateComputeEnvironmentProps(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,FargateComputeEnvironment),error}(0,metadata_resource_1().addConstructMetadata)(this,props);const{subnetIds}=props.vpc.selectSubnets(props.vpcSubnets),resource=new(batch_generated_1()).CfnComputeEnvironment(this,"Resource",{...baseManagedResourceProperties(this,subnetIds),computeEnvironmentName:props.computeEnvironmentName,computeResources:{...baseManagedResourceProperties(this,subnetIds).computeResources,type:this.spot?"FARGATE_SPOT":"FARGATE"}});this.computeEnvironmentName=this.getResourceNameAttribute(resource.ref),this.computeEnvironmentArn=this.getResourceArnAttribute(resource.attrComputeEnvironmentArn,{service:"batch",resource:"compute-environment",resourceName:this.physicalName})}}exports.FargateComputeEnvironment=FargateComputeEnvironment,_c=JSII_RTTI_SYMBOL_1,FargateComputeEnvironment[_c]={fqn:"aws-cdk-lib.aws_batch.FargateComputeEnvironment",version:"2.185.0"};function renderInstances(types,classes,useOptimalInstanceClasses){const instances=[];for(const instanceType of types??[])instances.push(instanceType.toString());for(const instanceClass of classes??[])instances.push(instanceClass);return(useOptimalInstanceClasses||useOptimalInstanceClasses===void 0)&&instances.push("optimal"),instances}function createInstanceRoleAndProfile(scope,instanceRole){const result={};return result.instanceRole=instanceRole??new(iam()).Role(scope,"InstanceProfileRole",{assumedBy:new(iam()).ServicePrincipal("ec2.amazonaws.com"),managedPolicies:[iam().ManagedPolicy.fromAwsManagedPolicyName("service-role/AmazonEC2ContainerServiceforEC2Role")]}),result.instanceProfile=new(iam()).CfnInstanceProfile(scope,"InstanceProfile",{roles:[result.instanceRole.roleName]}),result}function createSpotFleetRole(scope){return new(iam()).Role(scope,"SpotFleetRole",{assumedBy:new(iam()).ServicePrincipal("spotfleet.amazonaws.com")})}function determineAllocationStrategy(scope,allocationStrategy,spot){let result=allocationStrategy;if(!allocationStrategy)result=spot?AllocationStrategy.SPOT_PRICE_CAPACITY_OPTIMIZED:AllocationStrategy.BEST_FIT_PROGRESSIVE;else{if(allocationStrategy===AllocationStrategy.SPOT_PRICE_CAPACITY_OPTIMIZED&&!spot)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' specifies 'AllocationStrategy.SPOT_PRICE_CAPACITY_OPTIMIZED' without using spot instances`,scope);if(allocationStrategy===AllocationStrategy.SPOT_CAPACITY_OPTIMIZED&&!spot)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' specifies 'AllocationStrategy.SPOT_CAPACITY_OPTIMIZED' without using spot instances`,scope)}return result}function validateInstances(types,classes,useOptimalInstanceClasses){return renderInstances(types,classes,useOptimalInstanceClasses).length===0?["Specifies 'useOptimalInstanceClasses: false' without specifying any instance types or classes"]:[]}function validateSpotConfig(scope,spot,spotBidPercentage,spotFleetRole){if(spotBidPercentage){if(!spot)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' specifies 'spotBidPercentage' without specifying 'spot'`,scope);if(!core_1().Token.isUnresolved(spotBidPercentage)){if(spotBidPercentage>100)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' specifies 'spotBidPercentage' > 100`,scope);if(spotBidPercentage<0)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' specifies 'spotBidPercentage' < 0`,scope)}}if(spotFleetRole&&!spot)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' specifies 'spotFleetRole' without specifying 'spot'`,scope)}function validateVCpus(scope,minvCpus,maxvCpus){if(!core_1().Token.isUnresolved(minvCpus)&&minvCpus<0)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' has 'minvCpus' = ${minvCpus} < 0; 'minvCpus' cannot be less than zero`,scope);if(!core_1().Token.isUnresolved(minvCpus)&&!core_1().Token.isUnresolved(maxvCpus)&&minvCpus>maxvCpus)throw new(core_1()).ValidationError(`Managed ComputeEnvironment '${scope.node.id}' has 'minvCpus' = ${minvCpus} > 'maxvCpus' = ${maxvCpus}; 'minvCpus' cannot be greater than 'maxvCpus'`,scope)}function baseManagedResourceProperties(baseComputeEnvironment,subnetIds){return{serviceRole:baseComputeEnvironment.serviceRole?.roleArn,state:baseComputeEnvironment.enabled?"ENABLED":"DISABLED",computeResources:{maxvCpus:baseComputeEnvironment.maxvCpus,type:"managed",updateToLatestImageVersion:baseComputeEnvironment.updateToLatestImageVersion,securityGroupIds:baseComputeEnvironment.securityGroups.map(securityGroup=>securityGroup.securityGroupId),subnets:subnetIds},updatePolicy:{terminateJobsOnUpdate:baseComputeEnvironment.terminateOnUpdate,jobExecutionTimeoutMinutes:baseComputeEnvironment.updateTimeout?.toMinutes()},replaceComputeEnvironment:baseComputeEnvironment.replaceComputeEnvironment,type:"managed"}}const DEFAULT_MIN_VCPUS=0,DEFAULT_MAX_VCPUS=256;