# ScheduledEc2Task

A scheduled EC2 task that will be initiated off of CloudWatch Events.

Extends: Construct › ScheduledTaskBase › ScheduledEc2Task
Implements: IConstruct, IDependable

- Source: [`aws-ecs-patterns/lib/ecs/scheduled-ecs-task.ts`](https://github.com/aws/aws-cdk/blob/v2.274.0/packages/aws-cdk-lib/aws-ecs-patterns/lib/ecs/scheduled-ecs-task.ts#L85)

## Example

```ts
// Instantiate an Amazon EC2 Task to run at a scheduled interval
declare const cluster: ecs.Cluster;
const ecsScheduledTask = new ecsPatterns.ScheduledEc2Task(this, 'ScheduledTask', {
  cluster,
  scheduledEc2TaskImageOptions: {
    image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
    memoryLimitMiB: 256,
    environment: { name: 'TRIGGER', value: 'CloudWatch Events' },
  },
  schedule: appscaling.Schedule.expression('rate(1 minute)'),
  enabled: true,
  ruleName: 'sample-scheduled-task-rule',
});
```

## Initializer

```ts
new ScheduledEc2Task(scope: Construct, id: string, props: ScheduledEc2TaskProps)
```

## Construct Props

- `cluster`: [ICluster](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ICluster.html) — The name of the cluster that hosts the service.

  **Default:** create a new cluster; if both cluster and vpc are omitted, a new VPC will be created for you.

  If a cluster is specified, the vpc construct should be omitted. Alternatively, you can omit both cluster and vpc.

- `desiredTaskCount`: number = 1 — The desired number of instantiations of the task definition to keep running on the service.

- `enabled`: boolean = true — Indicates whether the rule is enabled.

- `propagateTags`: [PropagatedTagSource](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.PropagatedTagSource.html) — Specifies whether to propagate the tags from the task definition to the task.

  **Default:** Tags will not be propagated

  If no value is specified, the tags are not propagated.

- `ruleName`: string — A name for the rule.

  **Default:** AWS CloudFormation generates a unique physical ID and uses that ID for the rule name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html).

- `schedule`: [Schedule](/cdk/api/v2/docs/aws-cdk-lib.aws_applicationautoscaling.Schedule.html) (required) — The schedule or rate (frequency) that determines when CloudWatch Events runs the rule.

  For more information, see
  [Schedule Expression Syntax for Rules](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)
  in the Amazon CloudWatch User Guide.

- `scheduledEc2TaskDefinitionOptions`: [ScheduledEc2TaskDefinitionOptions](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs_patterns.ScheduledEc2TaskDefinitionOptions.html) = none — The properties to define if using an existing TaskDefinition in this construct.

  ScheduledEc2TaskDefinitionOptions or ScheduledEc2TaskImageOptions must be defined, but not both.

- `scheduledEc2TaskImageOptions`: [ScheduledEc2TaskImageOptions](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs_patterns.ScheduledEc2TaskImageOptions.html) = none — The properties to define if the construct is to create a TaskDefinition.

  ScheduledEc2TaskDefinitionOptions or ScheduledEc2TaskImageOptions must be defined, but not both.

- `securityGroups`: [ISecurityGroup](/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.ISecurityGroup.html)[] — Existing security groups to use for your service.

  **Default:** a new security group will be created.

- `subnetSelection`: [SubnetSelection](/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.SubnetSelection.html) — In what subnets to place the task's ENIs.

  **Default:** Private subnets

  (Only applicable in case the TaskDefinition is configured for AwsVpc networking)

- `tags`: [Tag](/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets.Tag.html)[] — The metadata that you apply to the task to help you categorize and organize them.

  **Default:** No tags are applied to the task

  Each tag consists of a key and an optional value, both of which you define.

- `vpc`: [IVpc](/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.IVpc.html) — The VPC where the container instances will be launched or the elastic network interfaces (ENIs) will be deployed.

  **Default:** uses the VPC defined in the cluster or creates a new VPC.

  If a vpc is specified, the cluster construct should be omitted. Alternatively, you can omit both vpc and cluster.

## Properties

- `cluster`: [ICluster](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ICluster.html) (required) — The name of the cluster that hosts the service.

- `desiredTaskCount`: number (required) — The desired number of instantiations of the task definition to keep running on the service.

  The minimum value is 1

- `eventRule`: [Rule](/cdk/api/v2/docs/aws-cdk-lib.aws_events.Rule.html) (required) — The CloudWatch Events rule for the service.

- `node`: [Node](/cdk/api/v2/docs/constructs.Node.html) (required) — The tree node.

- `propagateTags`: [PropagatedTagSource](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.PropagatedTagSource.html) — Specifies whether to propagate the tags from the task definition to the task.

  **Default:** Tags will not be propagated

  If no value is specified, the tags are not propagated.

- `subnetSelection`: [SubnetSelection](/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.SubnetSelection.html) (required) — In what subnets to place the task's ENIs.

  **Default:** Private subnets

  (Only applicable in case the TaskDefinition is configured for AwsVpc networking)

- `tags`: [Tag](/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets.Tag.html)[] — The metadata that you apply to the task to help you categorize and organize them.

  **Default:** No tags are applied to the task

  Each tag consists of a key and an optional value, both of which you define.

- `task`: [EcsTask](/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets.EcsTask.html) (required) — The ECS task in this construct.

- `taskDefinition`: [Ec2TaskDefinition](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.Ec2TaskDefinition.html) (required) — The EC2 task definition in this construct.

## Methods

- `isConstruct(x: any): boolean` (static) — Checks if `x` is a construct.

  Use this method instead of `instanceof` to properly detect `Construct`
  instances, even when the construct library is symlinked.

  Explanation: in JavaScript, multiple copies of the `constructs` library on
  disk are seen as independent, completely different libraries. As a
  consequence, the class `Construct` in each copy of the `constructs` library
  is seen as a different class, and an instance of one class will not test as
  `instanceof` the other class. `npm install` will not create installations
  like this, but users may manually symlink construct libraries together or
  use a monorepo tool: in those cases, multiple copies of the `constructs`
  library can be accidentally installed, and `instanceof` will behave
  unpredictably. It is safest to avoid using `instanceof`, and using
  this type-testing method instead.

  **Parameters**

  - `x` — Any object.

  **Returns:** true if `x` is an object created from a class which extends `Construct`.

- `toString(): string` — Returns a string representation of this construct.

- `with(...mixins: IMixin[]): IConstruct` — Applies one or more mixins to this construct.

  Mixins are applied in order. The list of constructs is captured at the
  start of the call, so constructs added by a mixin will not be visited.
  Use multiple `with()` calls if subsequent mixins should apply to added
  constructs.

  **Parameters**

  - `mixins` — The mixins to apply.

  **Returns:** This construct for chaining
