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 ...
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, để ×
Đầ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 | × | ○ | ○ | ○ |
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.
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.
Source: AWSでデプロイとスケーリングを自動化する方法まとめ