2012-04-12 31 views
52

Tôi muốn tự động hóa việc khởi chạy một tập hợp các phiên bản Linux EC2.Cách kích hoạt các phiên bản EC2 và tải lên/chạy tập lệnh khởi động trên mỗi phiên bản?

Về cơ bản, tôi muốn viết một kịch bản/chương trình sẽ:

  • nhanh chóng N lần xuất hiện của một AMI nhất định của tôi.
  • Đối với mỗi trường hợp bắt đầu, nó sẽ tải lên tập lệnh tùy chỉnh và để tập lệnh chạy vào phiên bản.

Sử dụng VMWare, tôi sẽ thường làm điều đó bằng vmrun hoặc Vix SDK.

Các tùy chọn trong Amazon AWS/EC2 là gì?

Trả lời

80

Câu trả lời phụ thuộc một chút vào AMI bạn đang chạy vì các tính năng được cung cấp hoàn toàn phụ thuộc vào AMI.

AMI Linux của Amazon và AMI Ubuntu chính thức có gói cloud-init được cài đặt. Điều này có một số cách bạn có thể kích hoạt các hành động khởi động, nhưng một cách phù hợp với yêu cầu của bạn chặt chẽ nhất (và yêu thích của tôi bởi vì tôi đã phát minh ra nó) là khái niệm về một user-data script.

Bạn chỉ cần chuyển bất kỳ tập lệnh nào (bắt đầu bằng hai ký tự #!) Làm dữ liệu người dùng khi bắt đầu phiên bản EC2. Nó sẽ được chạy dưới dạng root trên lần khởi động đầu tiên của cá thể.

Đối với một ví dụ cụ thể về cách làm việc này, tôi sử dụng kỹ thuật này chính xác trong bài viết gần đây của tôi: Uploading Known ssh Host Key in EC2 user-data Script

Bạn cũng muốn chạy nhiều hơn một ví dụ EC2 với kịch bản tương tự. Lệnh ec2-run-instances và các API liên quan và giao diện điều khiển web cho phép bạn chỉ định bất kỳ số lượng cá thể nào để bắt đầu với cùng một dữ liệu người dùng. Ví dụ:

ec2-run-instances   \ 
    --instance-count 10  \ 
    --user-data-file $MYSCRIPT \ 
    --key $USER    \ 
    $SOMEAMI 

Nếu bạn đang chạy một AMI mà không có đám mây-init được cài đặt, bạn có thể làm một trong số:

  • Đổi thành một AMI có đám mây-init cài đặt, hoặc

  • xây dựng một phiên bản tùy chỉnh của AMI của bạn mà có đám mây-init cài đặt, hoặc

  • Viết một kịch bản wrapper phức tạp hơn mà làm cho một reco thứ của tất cả các id cá thể sau khi chúng được khởi động, chờ cho tất cả các cá thể di chuyển đến trạng thái đang chạy, đợi sshd chấp nhận các kết nối, tải tập lệnh khởi động của bạn lên từng cá thể và chạy tập lệnh khởi động trên mỗi cá thể .

+20

Một trong những điều tốt đẹp với SO là vào thời điểm bạn bắt đầu tìm một số gợi ý, tên có tên bắt đầu xuất hiện trong tất cả truy vấn google của bạn đã trả lời câu hỏi của bạn một cách cá nhân. Tuyệt vời :-) –

+0

Tôi sẽ tránh tùy chọn 3 của câu trả lời ở trên. Tôi đã chạy vào hai cạm bẫy khác nhau với cách tiếp cận này. 1) Một cá thể có địa chỉ IP mà bạn đã thấy trước đây và mục nhập known_hosts không khớp. 2) Máy tải lên và kiểm soát tất cả các trường hợp và kịch bản khởi động bị quá tải, và các nội dung bị ngắt – Nate

+9

Trích dẫn tốt nhất của SO: "và yêu thích của tôi bởi vì tôi đã phát minh ra nó" –

1

Tôi có a tutorial to run the script in the "cloud-init" chạy mỗi khi AWS EC2 khởi động.

  • để thiết lập tập tin cấu hình (AWS CentOS6) và

  • chạy các kịch bản khi bạn khởi động các EC2

Để thiết lập tập tin cấu hình trên Linux bạn có thể tham khảo configure cloud-init on AWS Linux .

Cá nhân tôi sử dụng AWS VPC/EBS đã được thiết lập dựa trên Linux AMI, tôi không chạm vào bất cứ thứ gì trên tệp cấu hình /etc/cloud/cloud.cfg nhưng hoạt động của tôi boot script in the cloud-init hoạt động tốt.

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