5

Chúng tôi có một tình huống mà chúng tôi muốn chạy một máy chủ Django theo cách thông thường Elastic Beanstalk trong khi hooking lên một container Docker tùy chỉnh được sử dụng bởi trang web Django. Cho đến nay, tôi về cơ bản có các tập tin .ebextensions cấu hình sau:Làm thế nào để chạy các lệnh Beanstalk Elastic trên cá thể EC2 trước khi kết nối Tài nguyên

packages: 
    yum: 
    ecs-init: [] 

files: 
    /etc/ecs/ecs.config: 
    mode: "000644" 
    owner/group: root 
    content: ECS_CLUSTER=${Ref: MyCluster} 

commands: 
    01_start_docker: sudo service docker start 
    02_start_ecs: sudo start ecs 

Resources: 
    MyCluster: 
    Type: AWS::ECS::Cluster 
    MyService: 
    Type: AWS::ECS::Service 
    Properties: 
     Cluster: ${Ref: MyCluster} 
     DesiredCount: 1 
     TaskDefinition: ${Ref: MyTask} 
    MyTask: 
    Type: AWS::ECS::TaskDefinition 
    Properties: 
     ContainerDefinitions: 
     - ... 

Vấn đề là các dịch vụ ECS đang cố gắng để khởi động trước khi các trường hợp EC2 đàn hồi Beanstalk-cung cấp được đăng ký với cluster. Kết quả là, triển khai đến cây đậu đàn hồi treo cứng. Nếu tôi đã tự SSH vào phiên bản EC2 và được cài đặt thủ công ecs-init, hãy tạo ecs.config và chạy các lệnh, dịch vụ sẽ tiếp tục được tạo và môi trường EB được tạo thành công.

Có cách nào để yêu cầu dịch vụ đợi cho đến khi phiên bản EC2 được tạo bởi nhóm tự động tính toán của EB được đăng ký với cụm không?

Nhiều bối cảnh:

  • Chúng tôi muốn các máy chủ Django để có thể truy cập vào các thùng chứa Docker với localhost, nhưng tôi sẽ không được trái ngược với bao gồm một thể EC2 trong Tài nguyên đặc biệt để lưu trữ các thùng chứa Docker, nếu dễ dàng tham khảo trong các trường hợp EC2 được chia tỷ lệ tự động
  • Chúng tôi đã thử phương pháp tiếp cận vùng chứa nhiều đế, nhưng cách này có vẻ gần hơn với việc sử dụng EB (có tệp máy chủ web trực tiếp trong môi trường thay vì tạo docker hình ảnh để môi trường chạy)

Trả lời

0

Tự khắc phục sau khi suy nghĩ kỹ hơn.

Không có ý nghĩa khi đăng ký mỗi phiên bản EC2 mà Cây đậu đàn hồi quay lên (thông qua Tự động chuyển đổi) cho cụm ECS. Chỉ nên có một ví dụ về nhiệm vụ ECS. Vì vậy, nó thực sự cần thiết để tạo ra một cá thể EC2 riêng biệt kết nối với cụm ECS (dịch vụ của họ bây giờ có thể phụ thuộc vào cá thể EC2).

1

Hãy thử một cái gì đó như dưới đây. Vì EB chỉ là ngăn xếp CloudFormation nhìn vào các ngăn xếp bắt đầu bằng việc tìm kiếm của bạn. Sau đó, xem Tài nguyên CF trong khi ứng dụng EB của bạn triển khai để xem tên được sử dụng bởi các tài nguyên EB được xác định trước mà bạn không chỉ định trong .ebextensions. Tôi thấy AWSEBInstanceLaunchWaitCondition trong mỏ, có vẻ như liên quan đến lần khởi chạy phiên bản đầu tiên.

Resources: 
    MyService: 
    Type: AWS::ECS::Service 
    Properties: 
     Cluster: ${Ref: MyCluster} 
     DesiredCount: 1 
     TaskDefinition: ${Ref: MyTask} 
    DependsOn: AWSEBInstanceLaunchWaitCondition 
+0

Thật không may, tôi nghĩ rằng điều kiện chờ là để khởi chạy phiên bản EC2. Tôi cần một điều kiện chờ đợi cho đến khi các móc 'lệnh' được chạy. –

+0

Có thể bạn sẽ cần phải thêm tài nguyên CreationPolicy của riêng bạn làm phụ thuộc (hoặc có thể là WaitCondition) và gọi tín hiệu cfn cho nó như lệnh 03. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide /aws-attribute-creationpolicy.html – NHol

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