2013-09-27 141 views
6

Tôi muốn tạo một cá thể mới dựa trên AMI đã lưu trữ của tôi.EC2: Chờ cho đến khi một cá thể mới đang ở trạng thái hoạt động

tôi đạt được điều này bằng đoạn mã sau:

RunInstancesRequest rir = new RunInstancesRequest(imageId,1, 1); 
// Code for configuring the settings of the new instance 
... 
RunInstancesResult runResult = ec2.runInstances(rir); 

Tuy nhiên, tôi không thể tìm thấy một chờ đợi để "khối"/chờ đợi cho đến khi dụ khởi động và chạy ngoài Thread.currentThread() sleep (xxxx.) chỉ huy.

Mặt khác, StartInstancesResult và TerminateInstancesResult cung cấp cho bạn một cách để có quyền truy cập vào trạng thái của các phiên bản và có thể theo dõi bất kỳ thay đổi nào. Nhưng, về trạng thái của một thể hiện hoàn toàn mới thì sao?

Trả lời

3

Việc chờ phiên bản EC2 sẵn sàng là một mẫu chung. Trong thư viện boto Python bạn cũng giải quyết việc này với sleep cuộc gọi:

reservation = conn.run_instances([Instance configuration here]) 
    instance = reservation.instances[0] 

    while instance.state != 'running': 
     print '...instance is %s' % instance.state 
     time.sleep(10) 
     instance.update() 

Với cơ chế này, bạn sẽ có thể thăm dò ý kiến ​​khi dụ mới của bạn sẽ đi lên.

+0

Tôi đã không nhận ra là có một phương pháp cập nhật. Điều đó rất tốt để biết. Cảm ơn bạn. ** Tuy nhiên **, giải pháp tốt nhất hiện tại là @Zags 'instance.wait_until_running()' –

+0

@BrunoBronosky nó phụ thuộc vào mục tiêu của bạn. Tôi cần đợi cho đến khi cá thể đang chạy và kiểm tra trạng thái đã trôi qua. Dựa trên đó, bạn không thể sử dụng giải pháp Zags, vì điều này sẽ gần như ngay lập tức giải quyết. – tyron

1

Tùy thuộc vào những gì bạn đang cố gắng (và số lượng máy chủ bạn dự định bắt đầu), thay vì bỏ phiếu cho các sự kiện bắt đầu, bạn có thể cài đặt AMI một chương trình/tập lệnh đơn giản chạy một lần khi bắt đầu phiên bản và gửi thông báo đến hiệu ứng đó, tức là đến Chủ đề SNS của SNS.

Quá trình cần biết về máy chủ mới bắt đầu sau đó có thể đăng ký chủ đề SNS này và sẽ nhận được thông báo đẩy mỗi lần máy chủ bắt đầu.

Giải quyết cùng một vấn đề từ một góc khác; số dặm của bạn có thể thay đổi.

8

Từ AWS CLI changelog for v1.6.0:

Thêm một subcommand chờ đợi cho phép một lệnh để chặn cho đến khi một AWS tài nguyên đạt đến một trạng thái nhất định (issue 992, issue 985)

Tôi không thấy điều này được đề cập trong tài liệu, nhưng sau đây đã làm việc cho tôi:

aws ec2 start-instances --instance-ids "i-XXXXXXXX" 
aws ec2 wait instance-running --instance-ids "i-XXXXXXXX" 

Dòng wait instance-running không kết thúc cho đến khi phiên bản EC2 đang chạy.

Tôi không sử dụng Python/boto/botocore nhưng giả sử nó có cái gì đó tương tự. Hãy xem waiter.py on Github.

11

boto3 có:

instance.wait_until_running()