diff --git a/packages/@aws-cdk/aws-batch/README.md b/packages/@aws-cdk/aws-batch/README.md
index 272c66d723092..0ef420a0422a5 100644
--- a/packages/@aws-cdk/aws-batch/README.md
+++ b/packages/@aws-cdk/aws-batch/README.md
@@ -119,8 +119,7 @@ The alternative would be to use the `BEST_FIT_PROGRESSIVE` strategy in order for
 
 Simply define your Launch Template:
 
-```text
-// This example is only available in TypeScript
+```ts
 const myLaunchTemplate = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', {
   launchTemplateName: 'extra-storage-template',
   launchTemplateData: {
@@ -138,7 +137,7 @@ const myLaunchTemplate = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', {
 });
 ```
 
-and use it:
+And provide `launchTemplateName`:
 
 ```ts
 declare const vpc: ec2.Vpc;
@@ -155,6 +154,23 @@ const myComputeEnv = new batch.ComputeEnvironment(this, 'ComputeEnv', {
 });
 ```
 
+Or provide `launchTemplateId` instead:
+
+```ts
+declare const vpc: ec2.Vpc;
+declare const myLaunchTemplate: ec2.CfnLaunchTemplate;
+
+const myComputeEnv = new batch.ComputeEnvironment(this, 'ComputeEnv', {
+  computeResources: {
+    launchTemplate: {
+      launchTemplateId: myLaunchTemplate.ref as string,
+    },
+    vpc,
+  },
+  computeEnvironmentName: 'MyStorageCapableComputeEnvironment',
+});
+```
+
 ### Importing an existing Compute Environment
 
 To import an existing batch compute environment, call `ComputeEnvironment.fromComputeEnvironmentArn()`.
diff --git a/packages/@aws-cdk/aws-batch/lib/compute-environment.ts b/packages/@aws-cdk/aws-batch/lib/compute-environment.ts
index d73643a1d6320..7038923c0eae9 100644
--- a/packages/@aws-cdk/aws-batch/lib/compute-environment.ts
+++ b/packages/@aws-cdk/aws-batch/lib/compute-environment.ts
@@ -66,9 +66,17 @@ export enum AllocationStrategy {
  */
 export interface LaunchTemplateSpecification {
   /**
-   * The Launch template name
+   * The Launch template ID. Mutually exclusive with `launchTemplateName`.
+   *
+   * @default - no launch template id provided
    */
-  readonly launchTemplateName: string;
+  readonly launchTemplateId?: string;
+  /**
+   * The Launch template name. Mutually exclusive with `launchTemplateId`
+   *
+   * @default - no launch template name provided
+   */
+  readonly launchTemplateName?: string;
   /**
    * The launch template version to be used (optional).
    *
@@ -518,6 +526,19 @@ export class ComputeEnvironment extends Resource implements IComputeEnvironment
             throw new Error('Minimum vCpus cannot be greater than the maximum vCpus');
           }
         }
+
+        // Check if both launchTemplateId and launchTemplateName are provided
+        if (props.computeResources.launchTemplate &&
+          (props.computeResources.launchTemplate.launchTemplateId && props.computeResources.launchTemplate.launchTemplateName)) {
+          throw new Error('You must specify either the launch template ID or launch template name in the request, but not both.');
+        }
+
+        // Check if both launchTemplateId and launchTemplateName are missing
+        if (props.computeResources.launchTemplate &&
+          (!props.computeResources.launchTemplate.launchTemplateId && !props.computeResources.launchTemplate.launchTemplateName)) {
+          throw new Error('You must specify either the launch template ID or launch template name in the request.');
+        }
+
         // Setting a bid percentage is only allowed on SPOT resources +
         // Cannot use SPOT_CAPACITY_OPTIMIZED when using ON_DEMAND
         if (props.computeResources.type === ComputeResourceType.ON_DEMAND) {
diff --git a/packages/@aws-cdk/aws-batch/test/batch.integ.snapshot/batch-stack.template.json b/packages/@aws-cdk/aws-batch/test/batch.integ.snapshot/batch-stack.template.json
index 6ee6d41362455..363a7d93cb0ec 100644
--- a/packages/@aws-cdk/aws-batch/test/batch.integ.snapshot/batch-stack.template.json
+++ b/packages/@aws-cdk/aws-batch/test/batch.integ.snapshot/batch-stack.template.json
@@ -1002,6 +1002,281 @@
     "vpcVPCGW7984C166"
    ]
   },
+  "batchdemandcomputeenvlaunchtemplate2ResourceSecurityGroupBEA8DDD5": {
+   "Type": "AWS::EC2::SecurityGroup",
+   "Properties": {
+    "GroupDescription": "batch-stack/batch-demand-compute-env-launch-template-2/Resource-Security-Group",
+    "SecurityGroupEgress": [
+     {
+      "CidrIp": "0.0.0.0/0",
+      "Description": "Allow all outbound traffic by default",
+      "IpProtocol": "-1"
+     }
+    ],
+    "VpcId": {
+     "Ref": "vpcA2121C38"
+    }
+   },
+   "DependsOn": [
+    "vpcIGWE57CBDCA",
+    "vpcPrivateSubnet1DefaultRoute1AA8E2E5",
+    "vpcPrivateSubnet1RouteTableB41A48CC",
+    "vpcPrivateSubnet1RouteTableAssociation67945127",
+    "vpcPrivateSubnet1Subnet934893E8",
+    "vpcPrivateSubnet2DefaultRouteB0E07F99",
+    "vpcPrivateSubnet2RouteTable7280F23E",
+    "vpcPrivateSubnet2RouteTableAssociation007E94D3",
+    "vpcPrivateSubnet2Subnet7031C2BA",
+    "vpcPublicSubnet1DefaultRoute10708846",
+    "vpcPublicSubnet1EIPDA49DCBE",
+    "vpcPublicSubnet1NATGateway9C16659E",
+    "vpcPublicSubnet1RouteTable48A2DF9B",
+    "vpcPublicSubnet1RouteTableAssociation5D3F4579",
+    "vpcPublicSubnet1Subnet2E65531E",
+    "vpcPublicSubnet2DefaultRouteA1EC0F60",
+    "vpcPublicSubnet2EIP9B3743B1",
+    "vpcPublicSubnet2NATGateway9B8AE11A",
+    "vpcPublicSubnet2RouteTableEB40D4CB",
+    "vpcPublicSubnet2RouteTableAssociation21F81B59",
+    "vpcPublicSubnet2Subnet009B674F",
+    "vpcA2121C38",
+    "vpcVPCGW7984C166"
+   ]
+  },
+  "batchdemandcomputeenvlaunchtemplate2EcsInstanceRoleEE146754": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": {
+         "Fn::Join": [
+          "",
+          [
+           "ec2.",
+           {
+            "Ref": "AWS::URLSuffix"
+           }
+          ]
+         ]
+        }
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    },
+    "ManagedPolicyArns": [
+     {
+      "Fn::Join": [
+       "",
+       [
+        "arn:",
+        {
+         "Ref": "AWS::Partition"
+        },
+        ":iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
+       ]
+      ]
+     }
+    ]
+   },
+   "DependsOn": [
+    "vpcIGWE57CBDCA",
+    "vpcPrivateSubnet1DefaultRoute1AA8E2E5",
+    "vpcPrivateSubnet1RouteTableB41A48CC",
+    "vpcPrivateSubnet1RouteTableAssociation67945127",
+    "vpcPrivateSubnet1Subnet934893E8",
+    "vpcPrivateSubnet2DefaultRouteB0E07F99",
+    "vpcPrivateSubnet2RouteTable7280F23E",
+    "vpcPrivateSubnet2RouteTableAssociation007E94D3",
+    "vpcPrivateSubnet2Subnet7031C2BA",
+    "vpcPublicSubnet1DefaultRoute10708846",
+    "vpcPublicSubnet1EIPDA49DCBE",
+    "vpcPublicSubnet1NATGateway9C16659E",
+    "vpcPublicSubnet1RouteTable48A2DF9B",
+    "vpcPublicSubnet1RouteTableAssociation5D3F4579",
+    "vpcPublicSubnet1Subnet2E65531E",
+    "vpcPublicSubnet2DefaultRouteA1EC0F60",
+    "vpcPublicSubnet2EIP9B3743B1",
+    "vpcPublicSubnet2NATGateway9B8AE11A",
+    "vpcPublicSubnet2RouteTableEB40D4CB",
+    "vpcPublicSubnet2RouteTableAssociation21F81B59",
+    "vpcPublicSubnet2Subnet009B674F",
+    "vpcA2121C38",
+    "vpcVPCGW7984C166"
+   ]
+  },
+  "batchdemandcomputeenvlaunchtemplate2InstanceProfileC5A36CBC": {
+   "Type": "AWS::IAM::InstanceProfile",
+   "Properties": {
+    "Roles": [
+     {
+      "Ref": "batchdemandcomputeenvlaunchtemplate2EcsInstanceRoleEE146754"
+     }
+    ]
+   },
+   "DependsOn": [
+    "vpcIGWE57CBDCA",
+    "vpcPrivateSubnet1DefaultRoute1AA8E2E5",
+    "vpcPrivateSubnet1RouteTableB41A48CC",
+    "vpcPrivateSubnet1RouteTableAssociation67945127",
+    "vpcPrivateSubnet1Subnet934893E8",
+    "vpcPrivateSubnet2DefaultRouteB0E07F99",
+    "vpcPrivateSubnet2RouteTable7280F23E",
+    "vpcPrivateSubnet2RouteTableAssociation007E94D3",
+    "vpcPrivateSubnet2Subnet7031C2BA",
+    "vpcPublicSubnet1DefaultRoute10708846",
+    "vpcPublicSubnet1EIPDA49DCBE",
+    "vpcPublicSubnet1NATGateway9C16659E",
+    "vpcPublicSubnet1RouteTable48A2DF9B",
+    "vpcPublicSubnet1RouteTableAssociation5D3F4579",
+    "vpcPublicSubnet1Subnet2E65531E",
+    "vpcPublicSubnet2DefaultRouteA1EC0F60",
+    "vpcPublicSubnet2EIP9B3743B1",
+    "vpcPublicSubnet2NATGateway9B8AE11A",
+    "vpcPublicSubnet2RouteTableEB40D4CB",
+    "vpcPublicSubnet2RouteTableAssociation21F81B59",
+    "vpcPublicSubnet2Subnet009B674F",
+    "vpcA2121C38",
+    "vpcVPCGW7984C166"
+   ]
+  },
+  "batchdemandcomputeenvlaunchtemplate2ResourceServiceInstanceRole41CADAC1": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "batch.amazonaws.com"
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    },
+    "ManagedPolicyArns": [
+     {
+      "Fn::Join": [
+       "",
+       [
+        "arn:",
+        {
+         "Ref": "AWS::Partition"
+        },
+        ":iam::aws:policy/service-role/AWSBatchServiceRole"
+       ]
+      ]
+     }
+    ]
+   },
+   "DependsOn": [
+    "vpcIGWE57CBDCA",
+    "vpcPrivateSubnet1DefaultRoute1AA8E2E5",
+    "vpcPrivateSubnet1RouteTableB41A48CC",
+    "vpcPrivateSubnet1RouteTableAssociation67945127",
+    "vpcPrivateSubnet1Subnet934893E8",
+    "vpcPrivateSubnet2DefaultRouteB0E07F99",
+    "vpcPrivateSubnet2RouteTable7280F23E",
+    "vpcPrivateSubnet2RouteTableAssociation007E94D3",
+    "vpcPrivateSubnet2Subnet7031C2BA",
+    "vpcPublicSubnet1DefaultRoute10708846",
+    "vpcPublicSubnet1EIPDA49DCBE",
+    "vpcPublicSubnet1NATGateway9C16659E",
+    "vpcPublicSubnet1RouteTable48A2DF9B",
+    "vpcPublicSubnet1RouteTableAssociation5D3F4579",
+    "vpcPublicSubnet1Subnet2E65531E",
+    "vpcPublicSubnet2DefaultRouteA1EC0F60",
+    "vpcPublicSubnet2EIP9B3743B1",
+    "vpcPublicSubnet2NATGateway9B8AE11A",
+    "vpcPublicSubnet2RouteTableEB40D4CB",
+    "vpcPublicSubnet2RouteTableAssociation21F81B59",
+    "vpcPublicSubnet2Subnet009B674F",
+    "vpcA2121C38",
+    "vpcVPCGW7984C166"
+   ]
+  },
+  "batchdemandcomputeenvlaunchtemplate2E12D5CBC": {
+   "Type": "AWS::Batch::ComputeEnvironment",
+   "Properties": {
+    "Type": "MANAGED",
+    "ComputeResources": {
+     "AllocationStrategy": "BEST_FIT",
+     "InstanceRole": {
+      "Fn::GetAtt": [
+       "batchdemandcomputeenvlaunchtemplate2InstanceProfileC5A36CBC",
+       "Arn"
+      ]
+     },
+     "InstanceTypes": [
+      "optimal"
+     ],
+     "LaunchTemplate": {
+      "LaunchTemplateId": {
+       "Ref": "ec2launchtemplate"
+      }
+     },
+     "MaxvCpus": 256,
+     "MinvCpus": 0,
+     "SecurityGroupIds": [
+      {
+       "Fn::GetAtt": [
+        "batchdemandcomputeenvlaunchtemplate2ResourceSecurityGroupBEA8DDD5",
+        "GroupId"
+       ]
+      }
+     ],
+     "Subnets": [
+      {
+       "Ref": "vpcPrivateSubnet1Subnet934893E8"
+      },
+      {
+       "Ref": "vpcPrivateSubnet2Subnet7031C2BA"
+      }
+     ],
+     "Tags": {
+      "compute-env-tag": "123XYZ"
+     },
+     "Type": "EC2"
+    },
+    "ServiceRole": {
+     "Fn::GetAtt": [
+      "batchdemandcomputeenvlaunchtemplate2ResourceServiceInstanceRole41CADAC1",
+      "Arn"
+     ]
+    },
+    "State": "ENABLED"
+   },
+   "DependsOn": [
+    "vpcIGWE57CBDCA",
+    "vpcPrivateSubnet1DefaultRoute1AA8E2E5",
+    "vpcPrivateSubnet1RouteTableB41A48CC",
+    "vpcPrivateSubnet1RouteTableAssociation67945127",
+    "vpcPrivateSubnet1Subnet934893E8",
+    "vpcPrivateSubnet2DefaultRouteB0E07F99",
+    "vpcPrivateSubnet2RouteTable7280F23E",
+    "vpcPrivateSubnet2RouteTableAssociation007E94D3",
+    "vpcPrivateSubnet2Subnet7031C2BA",
+    "vpcPublicSubnet1DefaultRoute10708846",
+    "vpcPublicSubnet1EIPDA49DCBE",
+    "vpcPublicSubnet1NATGateway9C16659E",
+    "vpcPublicSubnet1RouteTable48A2DF9B",
+    "vpcPublicSubnet1RouteTableAssociation5D3F4579",
+    "vpcPublicSubnet1Subnet2E65531E",
+    "vpcPublicSubnet2DefaultRouteA1EC0F60",
+    "vpcPublicSubnet2EIP9B3743B1",
+    "vpcPublicSubnet2NATGateway9B8AE11A",
+    "vpcPublicSubnet2RouteTableEB40D4CB",
+    "vpcPublicSubnet2RouteTableAssociation21F81B59",
+    "vpcPublicSubnet2Subnet009B674F",
+    "vpcA2121C38",
+    "vpcVPCGW7984C166"
+   ]
+  },
   "batchjobqueueE3C528F2": {
    "Type": "AWS::Batch::JobQueue",
    "Properties": {
@@ -1023,6 +1298,12 @@
        "Ref": "batchspotcomputeenv2CE4DFD9"
       },
       "Order": 3
+     },
+     {
+      "ComputeEnvironment": {
+       "Ref": "batchdemandcomputeenvlaunchtemplate2E12D5CBC"
+      },
+      "Order": 4
      }
     ],
     "Priority": 1,
diff --git a/packages/@aws-cdk/aws-batch/test/compute-environment.test.ts b/packages/@aws-cdk/aws-batch/test/compute-environment.test.ts
index e25f61bd06ded..82c4ca821e7d1 100644
--- a/packages/@aws-cdk/aws-batch/test/compute-environment.test.ts
+++ b/packages/@aws-cdk/aws-batch/test/compute-environment.test.ts
@@ -70,7 +70,6 @@ describe('Batch Compute Environment', () => {
         });
       });
     });
-
     test('should deny if creating a managed environment with no provided compute resource props', () => {
       // THEN
       throws(() => {
@@ -80,6 +79,35 @@ describe('Batch Compute Environment', () => {
         });
       });
     });
+    test('should fail setting launch template with name and id', () => {
+      // THEN
+      throws(() => {
+        // WHEN
+        new batch.ComputeEnvironment(stack, 'test-compute-env', {
+          managed: true,
+          computeResources: {
+            vpc,
+            launchTemplate: {
+              launchTemplateName: 'test-template-name',
+              launchTemplateId: 'test-template-id',
+            },
+          },
+        });
+      });
+    });
+    test('should fail setting launch template missing both template name or id', () => {
+      // THEN
+      throws(() => {
+        // WHEN
+        new batch.ComputeEnvironment(stack, 'test-compute-env', {
+          managed: true,
+          computeResources: {
+            vpc,
+            launchTemplate: {},
+          },
+        });
+      });
+    });
   });
   describe('using fargate resources', () => {
     test('should deny setting bid percentage', () => {
diff --git a/packages/@aws-cdk/aws-batch/test/integ.batch.ts b/packages/@aws-cdk/aws-batch/test/integ.batch.ts
index 6de9a121b9b6d..47e21cb14ca53 100644
--- a/packages/@aws-cdk/aws-batch/test/integ.batch.ts
+++ b/packages/@aws-cdk/aws-batch/test/integ.batch.ts
@@ -63,6 +63,22 @@ new batch.JobQueue(stack, 'batch-job-queue', {
       }),
       order: 3,
     },
+    {
+      computeEnvironment: new batch.ComputeEnvironment(stack, 'batch-demand-compute-env-launch-template-2', {
+        managed: true,
+        computeResources: {
+          type: batch.ComputeResourceType.ON_DEMAND,
+          vpc,
+          launchTemplate: {
+            launchTemplateId: launchTemplate.ref as string,
+          },
+          computeResourcesTags: {
+            'compute-env-tag': '123XYZ',
+          },
+        },
+      }),
+      order: 4,
+    },
   ],
 });