The Lexicon
is an open source project available on GitHub, the steps below setup the infrastructure in AWS using the AWS Console for launch type EC2
. There is a stack overview here that shows how the infrastructure works together. Alternatively this can also be done from the CLI where I used the launch type fargate
.
Cluster
Login to the Console and search for ECS
and select create new cluster.
Instance configuration
AWS Fargate
type is a compute engine that allows you to run containers without having to manage servers or clusters. For the steps below I used EC2 Linux + Networking
. (for reasons :D)
1 | Type: EC2 Linux + Networking |
This will also create the following resources:
- Cluster
- VPC
- Subnets
- Auto Scaling group with Linux AMI
1 | Cluster name: lexicon-cluster |
With On-Demand Instances, you pay for compute capacity by the hour, with no long-term commitments or upfront payments.
1 | EC2 instance type: m5.large |
ami-0e18747114eff8bce
is the Amazon Linux AMI 2.0.20190913 x86_64 ECS HVM GP2 Linux Image used for the virtual machine. AMI stands for Amazon Machine Image.
Networking
Configure the VPC for your container instances to use. A VPC is an isolated portion of the AWS cloud populated by AWS objects, such as Amazon EC2 instances. You can choose an existing VPC, or create a new one with this wizard.
1 | VPC: *create new |
Container instance IAM role
The Amazon ECS container agent makes calls to the Amazon ECS API actions on your behalf, so container instances that run the agent require the ecsInstanceRole IAM policy and role for the service to know that the agent belongs to you. If you do not have the ecsInstanceRole already, we can create one for you.
1 | Container instance IAM role: ecsInstanceRole |
Tags
These are key value
1 | Description:lexicon |
CloudWatch Container Insights
CloudWatch Container Insights is a monitoring and troubleshooting solution for containerized applications and microservices. It collects, aggregates, and summarizes compute utilization such as CPU, memory, disk, and network; and diagnostic information such as container restart failures to help you isolate issues with your clusters and resolve them quickly.
1 | CloudWatch Container Insights: [X] Enable Container Insights |
Clicking create will then create all of the following resources
- ECS cluster as
lexicon-cluster
- ECS Instance IAM Policy - IAM Policy for the role ecsInstanceRole is attached
- CloudFormation Stack -
EC2ContainerService-lexicon-cluster
Cluster resources
1 | ECS AMI ID ami-0e18747114eff8bce |
Task Definitions
From Task Definitions
select Create new Task Definition
1 | Launch type: EC2 |
If you choose
- For bridge (FARGATE will only have awsvpc)
Task execution IAM role
This role is required by tasks to pull container images and publish container logs to Amazon CloudWatch on your behalf. If you do not have the ecsTaskExecutionRole already, we can create one for you.
1 | Task execution role: ecsTaskExecutionRole |
Task size
The task size allows you to specify a fixed size for your task. Task size is required for tasks using the Fargate launch type and is optional for the EC2 launch type. Container level memory settings are optional when task size is set. Task size is not supported for Windows containers.
1 | Task memory (GB): 4096 |
The amount of memory (in MiB) used by the task. It can be expressed as an integer using MiB, for example 1024, or as a string using GB, for example ‘1GB’ or ‘1 gb’.
1 | Task CPU (vCPU): 2048 (512 = 0.5 vCPU, 1024 = 1 vCPU, 2048 = 2 vCPU) |
The number of CPU units used by the task. It can be expressed as an integer using CPU units, for example 1024, or as a string using vCPUs, for example ‘1 vCPU’ or ‘1 vcpu’.
Add Container (WEB)
This is the ASP.NET MVC web application.
Standard
1 | Container name: lexicon-web |
Port mappings: 0 -> 80
means any from the host
to the container on 80. This will however then assign a random port like 32722 which would probably not be open in the security group.
1 | Environment variables: |
Advanced container configuration
1 | Essential: un-check |
Essential, if you check this and your process exits, then the entire task is shut down as well. At least one of your containers HAS to have this checked.
Add Container (SQL)
1 | Container name: lexicon-sql |
1 | Environment variables: |
You may also designate AWS Systems Manager Parameter Store keys or ARNs using the ‘valueFrom’ field. ECS will inject the value into containers at run-time.
1 | Essential: check |
Task (run once off)
Clusters
->lexicon-cluster
->tasks
->run new task
1 | Launch type: EC2 |
Then hit Run Task
and wait for the status to change to RUNNING
Clusters
->select task
->expand container
-> Click external link
Service
You can start from task definition and keep it running as apposed to running the task as once off
.