# PlacementStrategy

The placement strategies to use for tasks in the service. For more information, see [Amazon ECS Task Placement Strategies](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-strategies.html).

Tasks will preferentially be placed on instances that match these rules.

- Source: [`aws-ecs/lib/placement.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/aws-ecs/lib/placement.ts#L27)

## Example

```ts
const vpc = ec2.Vpc.fromLookup(this, 'Vpc', {
  isDefault: true,
});

const cluster = new ecs.Cluster(this, 'Ec2Cluster', { vpc });
cluster.addCapacity('DefaultAutoScalingGroup', {
  instanceType: new ec2.InstanceType('t2.micro'),
  vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC },
});

const taskDefinition = new ecs.TaskDefinition(this, 'TD', {
  compatibility: ecs.Compatibility.EC2,
});

taskDefinition.addContainer('TheContainer', {
  image: ecs.ContainerImage.fromRegistry('foo/bar'),
  memoryLimitMiB: 256,
});

const runTask = new tasks.EcsRunTask(this, 'Run', {
  integrationPattern: sfn.IntegrationPattern.RUN_JOB,
  cluster,
  taskDefinition,
  launchTarget: new tasks.EcsEc2LaunchTarget({
    placementStrategies: [
      ecs.PlacementStrategy.spreadAcrossInstances(),
      ecs.PlacementStrategy.packedByCpu(),
      ecs.PlacementStrategy.randomly(),
    ],
    placementConstraints: [
      ecs.PlacementConstraint.memberOf('blieptuut'),
    ],
  }),
  propagatedTagSource: ecs.PropagatedTagSource.TASK_DEFINITION,
});
```

## Methods

- `packedBy(resource: BinPackResource): PlacementStrategy // chainable` (static) — Places tasks on the container instances with the least available capacity of the specified resource.

- `packedByCpu(): PlacementStrategy // chainable` (static) — Places tasks on container instances with the least available amount of CPU capacity.

  This minimizes the number of instances in use.

- `packedByMemory(): PlacementStrategy // chainable` (static) — Places tasks on container instances with the least available amount of memory capacity.

  This minimizes the number of instances in use.

- `randomly(): PlacementStrategy // chainable` (static) — Places tasks randomly.

- `spreadAcross(...fields: string[]): PlacementStrategy // chainable` (static) — Places tasks evenly based on the specified value.

  You can use one of the built-in attributes found on `BuiltInAttributes`
  or supply your own custom instance attributes. If more than one attribute
  is supplied, spreading is done in order.

- `spreadAcrossInstances(): PlacementStrategy // chainable` (static) — Places tasks evenly across all container instances in the cluster.

- `toJson(): CfnService.PlacementStrategyProperty[]` — Return the placement JSON.
