Deploy code và Auto Scaling với AWS

Chúng ta có thể tiến hành deploy application cũng như auto scaling với AWS. Trong quá trình sử dụng thực tiễn, việc lựa chọn đúng service giữa nhiều services gần giống nhau khá quan trọng, vì vậy lần này tôi sẽ so sánh một số services với nhau, xem service nào có thể làm được gì và không làm được gì.

Quy ước

Tiến hành đánh giá theo quy ước sau:

  • Bản thân service có cung cấp chức năng đó, để ○
  • Bản thân service có cung cấp chức năng đó, tuy nhiên khó sử dụng, để △ (ví dụ: chỉ sử dụng được khi dùng AWS CLI)
  • Bản thân service không cung cấp, tuy nhiên kết hợp với các service khác thì dùng được, để △
  • Dù kết hợp với các service khác cũng khó dùng, hoặc không thể dùng được, để ×

Auto Deploy

Đầu tiên chúng ta sẽ tiến hành so sánh các services tự động deploy application.

Dưới đây là 4 services được sử dụng để so sánh:

  • EC2 + User Data
  • Elastic Beanstalk
  • OpsWorks
  • CodeDeploy

EC2 + User Data thì không phải là service, tuy nhiên nếu sử dụng AMI thì cũng có thể lấy được code khi thiết lập môi trường lúc khởi động, nên tôi vẫn ghi vào.

Lấy code

EC2 + User Data Elastic Beanstalk OpsWorks CodeDeploy
Up code = tay × △ (*1) △ (*1)
Tự động lấy code từ Git ○ (cần CLI)

(*1): Nếu up file lên S3 thì có thể sử dụng được

Để lấy code từ Git với Elastic Beanstalk, bắt buộc phải sử dụng đến AWS Elastic Beanstalk Command Line Tool, tuy nhiên sử dụng rất đơn giản nên tôi để là ○.

Về Elastic Beanstalk Command Line Tool, tham khảo ở đây.

Thiết lập môi trường

EC2 + User Data Elastic Beanstalk OpsWorks CodeDeploy
Chạy script khi deploy
Hỗ trợ thiết lập môi trường × ×
Không đưa Agent vào EC2 cũng được × × ×

Chỉ có Elastic Beanstalk và OpsWorks hỗ trợ chức năng thiết lập môi trường, chi tiết như sau:

Elastic Beanstalk OpsWorks
Deploy sử dụng custom AMI
Thiết lập môi trường từ template
Thiết lập môi trường bằng Chef ×
Thiết lập môi trường Docker ×
Sử dụng Microsoft Windows ×

Với Elastic Beanstalk, sau khi lựa chọn ngôn ngữ có thể thiết lập môi trường theo AMI mà AWS đã chuẩn bị sẵn. Chi tiết tham khảo tại đây.

Bên cạnh đó, OpsWorks không chỉ sử dụng AMI mà còn có thể thiết lập từ Chef. Tuy nhiên, OS mà OpsWorks hỗ trợ chỉ có Amazon Linux và Ubuntu 12.04 LTS, Ubuntu 14.04 LTS.

Template thiết lập môi trường

Service hỗ trợ thiết lập môi trường từ template chỉ có Elastic Beanstalk và OpsWorks, chúng ta sẽ so sánh từng default template với nhau:

Elastic Beanstalk OpsWorks
Node.js 0.8.6 ~ 0.10.26 0.8.19 ~ 0.10.33
PHP PHP 5.3 ~ 5.5 5.3 (*1)
Ruby Ruby 2.1 + Puma 2.8.1 + Ngĩn 1.4.7 (*2) Ruby 2.0.0 + Passenger 4.0.46 (*2)
Tomcat Java 8 + Tomcat 8 Java OpenJDK 7 + Tomcat 7
IIS IIS 8.5 ×
Python Python 3.4 (Preconfigured – Docker) ×
HAProxy ×
MySQL ×
Memcached ×

(*1): Nếu để OS là Ubuntu 14.04 thì có thể sử dụng PHP 5.5 (tham khảo)

(*2): Số liệu trong bảng là lựa chọn default, ngoài ra có thể lựa chọn được Ruby version, các loại midware khác nhau, chi tiết xem ở đây:

Elastic Beanstalk:http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_Ruby_rails.html

OpsWorks: http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/workinglayers-rails.html

OpsWorks có thể sử dụng HAProxy, MySQL hay Memcached kể cả ko phải là Web server.

Nếu muốn sử dụng Microsoft Windows thì phải bắt bắt buộc dùng Elastic Beanstalk.

Deploy nhiều instances

EC2 + User Data Elastic Beanstalk OpsWorks CodeDeploy
Deploy nhiều instances
Chỉ định cụ thể trình tự deploy × × ×

Deploy nhiều instances EC2 + User Data có thể phối hợp với Auto Scaling.

CodeDeploy có thể chỉ định cụ thể các bước deploy, default có 3 loại Deploy Configuration như sau:

  • Deploy từng instance
  • Deploy 1 phần
  • Deploy tất cả instances

Monitoring

EC2 + User Data Elastic Beanstalk OpsWorks CodeDeploy
Monitoring trạng thái deploy ×

Auto Scaling

Tiếp theo, chúng ta sẽ so sánh các services có thể thực hiện auto scaling, bao gồm:

  • Auto Scaling
  • Elastic Beanstalk
  • OpsWorks

Auto Scaling không phải là service, nhưng có thể tiến hành scaling cho từng cá thể, nên cũng tính vào đây.

Hành động khi scaling

Auto Scaling Elastic Beanstalk OpsWorks
Tự động attach ELB
Sử dụng Chef khi scale × ×
Sử dụng Docker khi scale × ×

Các xử lý có thể thực hiện khi deploy thì có vẻ cũng thực hiện được khi scaling.

Trigger scaling

Auto Scaling Elastic Beanstalk OpsWorks
Scaling dựa vào Cloud Watch ×
Scaling dựa vào thời gian × ×
Scaling dựa vào Load Average × ×

OpsWorks tiến hành scaling theo các metric riêng, như lượng memory sử dụng hay Load Average – những chỉ số mà Cloud Watch không thể cung cấp.

Summary

Trong bài viết, tôi đã tiến hành so sánh các services theo deploy code và tự động scaling.

Trong đó Elastic Beanstalk và OpsWorks là 2 services vừa có thể deploy code, vừa có thể tự động scaling. Điểm khác nhau giữa 2 services này là:

  • Elastic Beanstalk tiến hành thiết lập môi trường theo AMI
  • OpsWorks thiết lập môi trường theo AMI + Chef
  • Elastic Beanstalk có thể scaling theo các metrics của CloudWatch
  • OpsWorks có thể scaling theo lượng CPU sử dụng, Load Average, thời gian v.vv..

Theo những bài viết tôi đã tìm hiểu, Elastic Beanstalk đơn giản hơn, nhưng nếu muốn setting chi tiết hơn thì nên sử dụng OpsWorks. Có sự khác nhau giữa 2 services này, có thể là vì OpsWorks vốn là sản phẩm của công ty Peritor, trước khi được mua lại.