# NetworkMode

The networking mode to use for the containers in the task.

- Source: [`aws-ecs/lib/base/task-definition.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/aws-ecs/lib/base/task-definition.ts#L1042)

## Example

```ts
declare const vpc: ec2.Vpc;

const cluster = new ecs.Cluster(this, 'Cluster', { vpc });

const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', {
  vpc,
  description: 'Security group for managed instances',
});

const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(this, 'MICapacityProvider', {
  capacityOptionType: ecs.CapacityOptionType.SPOT,
  subnets: vpc.privateSubnets,
  securityGroups: [securityGroup],
  instanceRequirements: {
    vCpuCountMin: 1,
    memoryMin: Size.gibibytes(2),
  },
});

// Optionally configure security group rules using IConnectable interface
miCapacityProvider.connections.allowFrom(ec2.Peer.ipv4(vpc.vpcCidrBlock), ec2.Port.tcp(80));

// Add the capacity provider to the cluster
cluster.addManagedInstancesCapacityProvider(miCapacityProvider);

const taskDefinition = new ecs.TaskDefinition(this, 'TaskDef', {
  memoryMiB: '512',
  cpu: '256',
  networkMode: ecs.NetworkMode.AWS_VPC,
  compatibility: ecs.Compatibility.MANAGED_INSTANCES,
});

taskDefinition.addContainer('web', {
  image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
  memoryReservationMiB: 256,
});

new ecs.FargateService(this, 'FargateService', {
  cluster,
  taskDefinition,
  minHealthyPercent: 100,
  capacityProviderStrategies: [
    {
      capacityProvider: miCapacityProvider.capacityProviderName,
      weight: 1,
    },
  ],
});
```

## Members

| Member | Description |
| --- | --- |
| `NONE` | The task's containers do not have external connectivity and port mappings can't be specified in the container definition. |
| `BRIDGE` | The task utilizes Docker's built-in virtual network which runs inside each container instance. |
| `AWS_VPC` | The task is allocated an elastic network interface. |
| `HOST` | The task bypasses Docker's built-in virtual network and maps container ports directly to the EC2 instance's network interface directly. |
| `NAT` | The task utilizes Docker's built-in virtual network which runs inside each Windows container instance. |

## Referenced by

- [`CommonTaskDefinitionAttributes`](/v2/docs/aws-cdk-lib.aws_ecs.CommonTaskDefinitionAttributes).networkMode
- [`Ec2TaskDefinitionProps`](/v2/docs/aws-cdk-lib.aws_ecs.Ec2TaskDefinitionProps).networkMode
- [`ExternalTaskDefinitionProps`](/v2/docs/aws-cdk-lib.aws_ecs.ExternalTaskDefinitionProps).networkMode
- [`FargateTaskDefinition`](/v2/docs/aws-cdk-lib.aws_ecs.FargateTaskDefinition).networkMode
- [`ITaskDefinition`](/v2/docs/aws-cdk-lib.aws_ecs.ITaskDefinition).networkMode
- [`PortMap`](/v2/docs/aws-cdk-lib.aws_ecs.PortMap).networkmode
- [`ServiceConnect`](/v2/docs/aws-cdk-lib.aws_ecs.ServiceConnect).networkmode
- [`TaskDefinition`](/v2/docs/aws-cdk-lib.aws_ecs.TaskDefinition).networkMode
- [`TaskDefinitionProps`](/v2/docs/aws-cdk-lib.aws_ecs.TaskDefinitionProps).networkMode
