Scale AMS with AWS ECS Fargate
In this document, we’re going to explain how to setup a Scalable Ant Media Server Cluster in Amazon Web Services (AWS) ECS Fargate with Ant Media Server Container. If you are not familiar with Ant Media Server Cluster, you may check the introduction part of this to be familiar with the definitions and the components.
Please consider there will be two different "Cluster" word usage in this document. First one is Ant Media Server Scalable Cluster and we will use Ant Media Server Cluster to refer it. The other is the AWS ECS Cluster which is a logical grouping of tasks or services and we will use ECS Cluster to refer it.
Step 0. Register to Ant Media Server Container product
Step 1. Create AWS ECS Cluster
-
Open AWS ECS Service
-
Navigate Clusters
-
Click Create Cluster
-
Select Networking Only Type then click next
-
Write ams-cluster as cluster name then click create
Step 2: Create mongo task definition for MongoDB Container
-
Open AWS ECS Service
-
Navigate Task Definitions
-
Click Create New Task Definition
-
Select Fargate then click next
-
Write mongo-task-definiton as Task Definition Name
-
Create a role with name of ecsTaskExecutionRole and attach AmazonECSTaskExecutionRolePolicy, AWSMarketplaceMeteringRegisterUsage policies
-
Select ecsTaskExecutionRole as Task Role
-
In Task size Part set Task Memory 2 GB and Task CPU 1 vCPU
-
Click Add Container
-
Write mongo-container into Container Name, Write mongo into Image then click Add
-
In Task Definition Page click Create
Step 3. Run mongo task definition
-
Open AWS ECS Service
-
Navigate Clusters
-
Selec ams-cluster
-
Navigate Tasks tab
-
Click Run New Task
-
Select Fargate as Launch type
-
Select mongo-task-definition as Task Definition
-
In VPC and security groups Part
-
Select public VPC as Cluster VPC
-
Select at least one subnet from VPC
-
Edit Security Group as enabling 27017 TCP port
-
It should be like
-
Click Run Task
-
When task starts to work, copy the Private IP of Mongo Container
Step 4. Create AMS node task definition
-
Open AWS ECS Service
-
Navigate Task Definitions
-
Click Create New Task Definition
-
Select Fargate then click next
-
Write ams-node-task-definiton as Task Definition Name
-
Select ecsTaskExecutionRole as Task Role
-
In Task size Part set Task Memory 8 GB and Task CPU 4 vCPU
-
Click Add Container
-
Write
- ams-container into Container Name,
- 709825985650.dkr.ecr.us-east-1.amazonaws.com/ant-media/ant-media-server-ee:2.4.0.2 into Image
- add 5080 TCP into Port Mapping
/usr/local/antmedia/start.sh,-m,cluster,-h, {Mongo Container IP}
into Entry point then click Add
-
In Task Definition Page click Create
Step 5. Create Load Balancer
-
Create an origin-target-group from EC2 Load Balancing
-
Set Target Type IP, Port 5080, VPC the public VPC
-
Create an edge-target-group from EC2 Load Balancing
-
Set Target Type IP, Port 5080, VPC the public VPC
-
Create an Application Load Balancer
-
Add listeners for HTTP(S) 80, 5080, 443, 5443
-
Add Sertificate to ALB
-
Add Security group that allows the ports 80, 5080, 443, 5443
-
Configure routing using the previously created origin-target-group. Note that we will edit the routing after creation.
-
When it is created edit Listeners as forwarding 80, 443 to origin-target-group, 5080, 5443 to edge-target-group
Step 6. Create ECS Service for origin nodes
-
Open AWS ECS Service
-
Navigate Clusters
-
Selec ams-cluster
-
Navigate Services tab
-
Click Create
-
Select Fargate as Launch type
-
Select ams-node-task-definition as Task Definition
-
Write origin-service as Service Name
-
Click Next
-
In Configure network Page
- Select public VPC as Cluster VPC
- Select at least one subnet from VPC
- Edit Security Group for Ant MediaServer
- Select Application LoadBalancer
- Add 80/443 Listener Ports and select origin-target-group
-
In Auto Scaling Page
-
Define min, max, desired number of containers
-
Add a CPU policy for scale in
Step 7. Create ECS Service for edge nodes
- Follow Step 6 by changing all origin to edge and 80/443 to 5080/5443
Step 8. Test the structure
- Access the login page http://Load-Balancer-URL:5080
- Login to access to the dashboard