David Martin Calalang
07/28/2025, 3:00 PMMarvin
07/28/2025, 3:00 PMMarvin
07/28/2025, 3:01 PMaws configure)
- Prefect 3.x installed
- Docker installed (for building and pushing images)
### 2. Required IAM Permissions
You'll need the following IAM permissions:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:CreateCluster",
"ecs:RegisterTaskDefinition",
"ecs:RunTask",
"ecs:StopTask",
"ecs:DescribeTasks",
"ecs:ListTasks",
"iam:CreateRole",
"iam:PutRolePolicy",
"iam:PassRole",
"ecr:CreateRepository",
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:PutImage",
"ec2:CreateSecurityGroup",
"ec2:DescribeSecurityGroups",
"ec2:CreateSubnet",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs"
],
"Resource": "*"
}
]
}
The simplest approach is to use the AWS-managed policy AmazonECS_FullAccess, but for production environments, you should create a more restrictive custom policy.
### 3. Deploying the Prefect Server
1. Create an ECS task definition for the Prefect server:
json
{
"family": "prefect-server",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "prefect-server",
"image": "prefecthq/prefect:3-latest",
"essential": true,
"command": ["prefect", "server", "start"],
"portMappings": [
{
"containerPort": 4200,
"protocol": "tcp"
}
],
"environment": [
{
"name": "PREFECT_SERVER_API_HOST",
"value": "0.0.0.0"
}
]
}
]
}
2. Create an ECS service for the Prefect server using this task definition
### 4. Setting up the Worker
1. Create a work pool for ECS:
bash
prefect work-pool create --type ecs:push --provision-infra my-ecs-pool
2. Start a worker:
bash
prefect worker start --pool my-ecs-pool
### 5. Configuration Notes
1. Networking:
- Ensure your ECS tasks are in a VPC with appropriate security groups
- The Prefect server needs to be accessible to both workers and your development environment
- Consider using Application Load Balancer for the server
2. Storage:
- Configure appropriate storage for flow code and results
- Consider using S3 for flow storage
- Ensure proper IAM permissions for S3 access if needed
3. Security:
- Use AWS Secrets Manager or Parameter Store for sensitive values
- Implement proper network security groups
- Consider using AWS Private Link for enhanced security
### 6. Best Practices
1. Use separate task definitions for server and workers
2. Implement proper logging to CloudWatch
3. Set up monitoring and alerts
4. Use resource tagging for cost tracking
5. Consider using AWS App Runner as an alternative to ECS for simpler deployments
For more detailed information, you can refer to:
- Prefect AWS ECS Guide
- Serverless Deployment Guide
Would you like me to elaborate on any particular aspect of this setup? For example, I can provide more details about the networking configuration or security best practices.