# Elastic Container Service

1. EC2
2. Fargate : Serverless
   1. copilot CLI



## Security

* AWS WAF
* AWS Shield

## Setup

1. Create `ECR` to store docker image
   * `903306222264.dkr.ecr.ap-southeast-1.amazonaws.com/gold-web-api:develop_v5`
   * ![](./images/ecr-images.PNG)
2. Create Jenkins
   * To build container image and push to `ECR`
   * To generate `taskdefinition.json` from `config/taskdef-develop.json`
   * ![](./images/jenkins-ecr-script.PNG)
   * ![](./images/jenkins-build.PNG)
   * ![](./images/jenkins-deploy.PNG)
   * *Note* : After delete the ecs instance, seems like script still execute the `aws ecs update-service ...` instead of `aws ecs create-service ...`
3. Create `Target Group`
   * `zgd-tg-ecs-gold-web-api`
   * To map host port to container port (443)
   * Health Check interval `30s`
   * Host port is auto assigned when ECS instance started. Eg. `44212`
   * ![](./images/target-group.PNG)
4. Create `CloudWatch` log group
   * log group `ZGD-gold-web-api` for ECS instance to log
   * *Note* : If log group not created, container will not be able to start. Fail code `500`
5. Create ECS
   * Cluster : `zdg-ecs-cluster`
   * Spin-Up instance : `gold-web-api`
   * Goto `Services` -> `gold-web-api` ->` Tasks`, and select the task to view below
   * ![](./images/ECS-running.PNG)
6. Setup ALB (Application Load Balancer)
   * `zgd-alb-wan-ecs`
   * Add Listener Rules for `HTTPS:443`
   * ![](./images/alb-rule.PNG)
7. Setup Route 53
   * Add `webapi.zgold-dev.com` domain name
   * ONLY `Daryl Chew` have rights to do this for QA & Dev
   * Production need SRE team

## Troubleshoot

1. Route 53 : Hostname Creation `webapi.zgold-dev.com`

2. ALB (Load Balancer) : `zgd-alb-wan-ecs`

3. Target Group : `zgd-tg-ecs-gold-web-api`

4. ECS : `gold-web-api` 

5. Cloudwatch : `ZGD-gold-web-api`. 