Các thành phần chính:
- AWS Elastic Container Service để chạy API
- Application Load Balancer
- CloudWatch để xem logs API
- S3 để lưu trữ tệp tin upload
Tải source code xuống. Thư mục terraform
là nơi chứa code TF để tạo hạ tầng của dự án. Thư mục code
là nơi chứa mã nguồn của API, ta tạo repository mới với mã nguồn trong thư mục code
để chạy CI/CD.
Sau khi tạo repository xong dùng câu lệnh sau để tạo kết nối từ AWS tới Github của ta.
aws codestar-connections create-connection --provider-type GitHub --connection-name coin98
Kết nối ta tạo sẽ ở trạng thái PENDING
.
Hiện tại thì AWS chưa có câu lệnh giúp ta auto ở bước này. Nên để chuyển trạng thái kết nối sang AVAILABLE
ta mở Console lên và làm theo hướng dẫn sau Update a pending connection. Ta làm theo hướng dẫn và chọn Github. Sau khi kết nối chuyển sang AVAILABLE
.
Ta copy ARN của nó và di chuyển tới thư mục terraform
, mở tệp tin terraform.tfvars
và cập nhật các giá trị sau:
repository = {
connection_arn = "arn:aws:codestar-connections:ap-southeast-1:10391374461:connection/21bcd37c-7d1e-4fdc-b17b-29fbcfe62864"
id = "hoalongnatsu/coin98-api-interview"
branch = "main"
}
Với id
là theo format là <account>/<repository-name>
và branch
là nhánh ta chọn chạy CI/CD.
Tiếp theo ta chạy câu lệnh TF:
terraform init && terraform apply
Gõ yes
và đợi hạ tầng được tạo. Nếu có lỗi xảy ra thường là do S3 Bucket Name đã tồn tại, ta có thể sửa tên khác trong tệp tin terraform.tfvars
và chạy apply
lại. Sau khi Terraform chạy xong sẽ in ra URL của Application Load Balancer.
Outputs:
alb = "ecs-alb-441303974.ap-southeast-1.elb.amazonaws.com"
Trước khi gọi tới ALB ta cần kiểm tra các resource của ta đã hoạt động hết chưa.
Truy cập CodePipeline Console ta sẽ thấy CI/CD của ta đang chạy để build và deploy code lên ECS.
Luồng CI/CD như hình minh họa sau:
Source Stage pull code từ Github. Build Stage lấy source code và thực thi build sau đó đẩy lên ECR. Deploy Stage sẽ lấy Image mới từ ECR và triển khai lên ECS, đợi Codepipeline chạy xong.
Ta chuyển sang ECS Console.
Nếu thấy ECS Task đã chuyển sang 2 Running
thành công thì ta có thể gọi vào ALB để kiểm tra API.
curl ecs-alb-441303974.ap-southeast-1.elb.amazonaws.com/healthz
GET /v1/files/:name
- API truy cập và tải tệp tin
:name
là tên tệp tin ta truy cập
POST /v1/files/upload
- API upload tệp tin
- Cú pháp upload với Linux
curl --location --request POST 'http://localhost:3000/v1/files/upload' --form 'file=@"path/to/file.png"'
. Thay đổilocalhost:3000
bằng URL của ALB - Với Windows ta có thể xài POSTMAN
Phần Body ta chọn form-data
. Mục KEY ta chọn loại là File. Mục VALUE khi bấm vào POSTMAN sẽ thiển thị popup cho ta chọn tệp tin.
DELETE /v1/files/:name
- API xóa tệp tin
:name
là tên tệp tin ta muốn xóa
Note: sau khi chạy xong ta nhớ chạy terraform destory
.