2014-04-14 19 views
18

Trang web của tổ chức của tôi là ứng dụng Django chạy trên máy chủ web kết thúc + một số máy chủ xử lý nền trong AWS.Triển khai liên tục & tự động tính toán AWS bằng Ansible (+ Docker?)

Chúng tôi hiện đang sử dụng Ansible cho cả hai:

  • cấu hình hệ thống (từ một hình ảnh hệ điều hành trần)
  • thường xuyên bằng tay-kích hoạt triển khai mã.

Cùng một Playbook Ansible có thể cung cấp một máy ảo Dev Vagrant cục bộ hoặc một bản sao EC2 sản xuất từ ​​đầu.

Bây giờ chúng tôi muốn triển khai tính năng tự động tính tỷ lệ trong EC2 và điều đó đòi hỏi một số thay đổi đối với triết lý "treat servers as cattle, not pets".

Điều kiện tiên quyết đầu tiên là chuyển từ khoảng không quảng cáo Ansible được quản lý tĩnh sang một API dựa trên EC2 động, được thực hiện.

Câu hỏi lớn tiếp theo là làm thế nào để triển khai trong thế giới mới này, nơi các trường hợp ném ra & ở giữa đêm. Các tùy chọn tôi có thể nghĩ đến là:

  1. Nướng mới đầy đủ triển khai AMI cho từng triển khai, tạo ra một mới AS Launch cấu hình và cập nhật các nhóm AS với điều đó. Âm thanh rất, rất cồng kềnh, nhưng cũng rất đáng tin cậy vì cách tiếp cận đá phiến sạch sẽ, và sẽ đảm bảo rằng bất kỳ thay đổi hệ thống mã yêu cầu sẽ ở đây. Ngoài ra, không cần các bước bổ sung khi khởi động, ví dụ: & chạy nhanh hơn.
  2. Sử dụng cơ sở AMI không thay đổi thường xuyên, tự động nhận mã ứng dụng mới nhất từ ​​git khi khởi động, khởi động máy chủ web. Một khi nó lên chỉ cần triển khai thủ công khi cần thiết, như trước đây. Nhưng điều gì sẽ xảy ra nếu mã mới phụ thuộc vào sự thay đổi trong cấu hình hệ thống (gói mới, quyền, vv)? Có vẻ như bạn phải bắt đầu chăm sóc các phụ thuộc giữa các phiên bản mã và các phiên bản hệ thống/AMI, trong khi cách tiếp cận "chỉ thực hiện một cách an toàn đầy đủ" được tích hợp và đáng tin cậy hơn. Có nhiều hơn là chỉ là một nhức đầu tiềm năng trong thực tế?
  3. Sử dụng Docker? Tôi có một linh cảm mạnh mẽ, nó có thể hữu ích, nhưng tôi không chắc chắn làm thế nào nó sẽ phù hợp với hình ảnh của chúng tôi. Chúng tôi là một ứng dụng Django front-end tương đối khép kín chỉ với RabbitMQ + memcache là dịch vụ, mà chúng tôi sẽ không bao giờ chạy trên cùng một máy chủ. Vì vậy, những lợi ích có trong việc xây dựng một hình ảnh Docker bằng cách sử dụng Ansible có chứa các gói hệ thống + mã mới nhất, thay vì có Ansible chỉ làm điều đó trực tiếp trên một cá thể EC2?

Bạn làm như thế nào? Bất kỳ thông tin chi tiết/thực tiễn tốt nhất nào? Cảm ơn!

Trả lời

9

Câu hỏi này rất dựa trên ý kiến. Nhưng chỉ để cung cấp cho bạn nhận của tôi, tôi sẽ chỉ đi với prebaking AMIs với Ansible và sau đó sử dụng CloudFormation để triển khai ngăn xếp của bạn với Autoscaling, Giám sát và AMI trước nướng của bạn. Ưu điểm của điều này là nếu bạn có hầu hết các ứng dụng ngăn xếp trước khi nướng vào AMI autoscaling UP sẽ xảy ra nhanh hơn.

Docker là một cách tiếp cận khác nhưng theo ý kiến ​​của tôi, nó bổ sung thêm một lớp trong ứng dụng của bạn mà bạn có thể không cần nếu bạn đang sử dụng EC2. Docker có thể thực sự hữu ích nếu bạn nói muốn container trong một máy chủ duy nhất.Có thể bạn có thêm một số dung lượng trong một máy chủ và Docker sẽ cho phép bạn chạy ứng dụng bổ sung đó trên cùng một máy chủ mà không can thiệp vào các ứng dụng hiện có.

Có nói rằng một số người tìm thấy Docker hữu ích không theo cách để tối ưu hóa tài nguyên trong một máy chủ duy nhất mà đúng hơn là nó cho phép bạn nướng trước các ứng dụng của mình trong các thùng chứa. Vì vậy, khi bạn triển khai phiên bản mới hoặc mã mới, tất cả những gì bạn phải làm là sao chép/sao chép các vùng chứa docker này trên máy chủ của bạn, sau đó dừng phiên bản vùng chứa cũ và bắt đầu phiên bản vùng chứa mới.

Hai xu của tôi.

1

Một giải pháp lai có thể cung cấp cho bạn kết quả mong muốn. Lưu trữ hình ảnh docker đầu trong S3, preBake AMI với một đơn giản lấy và chạy kịch bản trên bắt đầu (hoặc vượt qua nó vào một cổ phiếu AMI với dữ liệu người dùng). Kiểm soát phiên bản bằng cách di chuyển hình ảnh đầu sang phiên bản ổn định mới nhất, bạn có thể cũng triển khai các ngăn xếp thử nghiệm của các phiên bản mới bằng cách làm cho tập lệnh tìm nạp đủ thông minh để xác định phiên bản trình tải nào dựa trên các thẻ mẫu được cấu hình lúc khởi chạy mẫu.

0

Bạn cũng có thể sử dụng AWS CodeDeploy với AutoScaling và máy chủ xây dựng của bạn. Chúng tôi sử dụng plugin CodeDeploy cho Jenkins.

Thiết lập này cho phép bạn:

  1. thực hiện xây dựng của bạn trong Jenkins
  2. tải lên S3 xô
  3. triển khai đến tất cả các EC2s từng người một mà là một phần của AWS nhóm Auto-Scaling giao .

Tất cả chỉ bằng một cú nhấn!

Dưới đây là hướng dẫn AWS: Deploy an Application to an Auto Scaling Group Using AWS CodeDeploy

Các vấn đề liên quan