TaskDefinition ​
The TaskDefinition resource lets you manage AWS ECS TaskDefinitions which define how your containers should run, including specifying the CPU, memory, and networking configurations.
Minimal Example ​
Create a basic ECS TaskDefinition with required properties and a couple of common optional ones.
ts
import AWS from "alchemy/aws/control";
const basicTaskDefinition = await AWS.ECS.TaskDefinition("basicTask", {
family: "web-app",
containerDefinitions: [{
name: "web",
image: "nginx:latest",
memory: "512",
cpu: "256",
portMappings: [{
containerPort: 80,
hostPort: 80,
protocol: "tcp"
}]
}],
executionRoleArn: "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
taskRoleArn: "arn:aws:iam::123456789012:role/ecsTaskRole"
});
Advanced Configuration ​
Configure an ECS TaskDefinition with additional options including networking and fault injection.
ts
const advancedTaskDefinition = await AWS.ECS.TaskDefinition("advancedTask", {
family: "advanced-web-app",
containerDefinitions: [{
name: "web",
image: "nginx:latest",
memory: "1024",
cpu: "512",
portMappings: [{
containerPort: 80,
hostPort: 80,
protocol: "tcp"
}]
}],
networkMode: "awsvpc",
placementConstraints: [{
type: "memberOf",
expression: "attribute:ecs.availability-zone in [us-west-2a, us-west-2b]"
}],
enableFaultInjection: true,
requiresCompatibilities: ["FARGATE"],
memory: "2048",
cpu: "1024"
});
Resource with Multiple Containers ​
Define a TaskDefinition that runs multiple containers for a microservices architecture.
ts
const multiContainerTaskDefinition = await AWS.ECS.TaskDefinition("multiContainerTask", {
family: "microservices-app",
containerDefinitions: [
{
name: "api",
image: "myorg/api:latest",
memory: "512",
cpu: "256",
portMappings: [{
containerPort: 8080,
hostPort: 8080,
protocol: "tcp"
}]
},
{
name: "worker",
image: "myorg/worker:latest",
memory: "256",
cpu: "128"
}
],
executionRoleArn: "arn:aws:iam::123456789012:role/ecsExecutionRole",
taskRoleArn: "arn:aws:iam::123456789012:role/ecsWorkerRole"
});
Using Inference Accelerators ​
Create a TaskDefinition that utilizes inference accelerators for machine learning workloads.
ts
const mlTaskDefinition = await AWS.ECS.TaskDefinition("mlTask", {
family: "ml-app",
containerDefinitions: [{
name: "ml-model",
image: "myorg/ml-model:latest",
memory: "2048",
cpu: "1024"
}],
inferenceAccelerators: [{
deviceName: "device1",
deviceType: "ml.g4dn.xlarge"
}],
executionRoleArn: "arn:aws:iam::123456789012:role/ecsExecutionRole"
});