Lỗi AWS ECS khi chạy tác vụ: Không tìm thấy Phiên bản vùng chứa nào trong cụm của bạn


115

Tôi đang cố gắng triển khai dockerhình ảnh vùng chứa để AWSsử dụng ECS, nhưng phiên bản EC2 không được tạo. Tôi đã tìm kiếm trên internet để tìm lời giải thích tại sao tôi lại nhận được lỗi sau:

"Đã xảy ra lỗi máy khách (InvalidParameterException) khi gọi thao tác RunTask: Không tìm thấy Phiên bản vùng chứa nào trong cụm của bạn."

Đây là các bước của tôi:

1. Đã đẩy một hình ảnh docker TỪ Ubuntu sang kho lưu trữ Amazon ECS của tôi.

2. Đã đăng ký Định nghĩa Nhiệm vụ ECS:

aws ecs register-task-definition --cli-input-json file://path/to/my-task.json 

3. Thực hiện nhiệm vụ:

aws ecs run-task --task-definition my-task

Tuy nhiên, nó không thành công.

Đây là nhiệm vụ của tôi:

{
  "family": "my-task",
  "containerDefinitions": [
    {
        "environment": [],
        "name": "my-container",
        "image": "my-namespace/my-image",
        "cpu": 10,
        "memory": 500,
        "portMappings": [
            {
                "containerPort": 8080,
                "hostPort": 80
            }
        ],
        "entryPoint": [
            "java",
            "-jar",
            "my-jar.jar"
        ],
        "essential": true
    }
  ]
}

Tôi cũng đã thử sử dụng bảng điều khiển quản lý để định cấu hình một cụm và dịch vụ, nhưng tôi gặp phải lỗi tương tự. Làm cách nào để định cấu hình cụm để có các phiên bản ec2 và tôi cần sử dụng loại phiên bản vùng chứa nào? Tôi nghĩ rằng toàn bộ quá trình này là để tạo ra các phiên bản EC2 để bắt đầu !!


Tôi cảm thấy như tôi đã thấy điều này khi tôi đi nhanh giữa các bước tạo một cụm và chạy một tác vụ.
Ben Creasy,

Câu trả lời:


157

Tôi đã tìm ra điều này sau vài giờ điều tra nữa. Amazon, nếu bạn đang lắng nghe, bạn nên nêu điều này ở đâu đó trong bảng điều khiển quản lý của mình khi tạo một cụm hoặc thêm các phiên bản vào cụm:

"Trước khi bạn có thể thêm các phiên bản ECS vào một cụm, trước tiên bạn phải đi tới Bảng điều khiển quản lý EC2 và tạo các ecs-optimizedphiên bản có vai trò IAM có AmazonEC2ContainerServiceforEC2Rolechính sách đính kèm"

Đây là quy tắc nghiêm ngặt:

1. Đi tới Bảng điều khiển EC2 của bạn và nhấp vào Launch Instancenút.

2. Trong Community AMIs, Tìm kiếm ecs-optimizedvà chọn cái phù hợp nhất với nhu cầu dự án của bạn. Bất kỳ sẽ làm việc. Nhấn tiếp.

3. Khi bạn đến Cấu hình Chi tiết Phiên bản, hãy nhấp vào create new IAM role linkvà tạo một vai trò mới được gọi là ecsInstanceRole.

4. Gắn AmazonEC2ContainerServiceforEC2Rolechính sách với vai trò đó.

5. Sau đó, kết thúc cấu hình Phiên bản ECS của bạn.
LƯU Ý: Nếu bạn đang tạo một máy chủ web, bạn sẽ muốn tạo một Nhóm bảo mật để cho phép truy cập vào cổng 80.

Sau một vài phút, khi phiên bản được khởi tạo và chạy, bạn có thể làm mới tab Phiên bản ECS mà bạn cũng đang cố gắng thêm phiên bản.


10
Việc chọn ami được đề xuất được chỉ định cho khu vực nhất định đã giải quyết được vấn đề của tôi. Để tìm ra ami, bạn nên chọn kiểm tra url này docs.aws.amazon.com/AmazonECS/latest/developerguide/…
sanath_p

1
không nhìn thấy AmazonEC2ContainerServiceforEC2Role, có thay đổi nào kể từ bài viết cuối cùng của bạn không?
BlueDolphin

1
@BlueDolphin Tôi có thể tìm thấy chính sách đó khi tạo Vai trò mới trong IAM.
cyrf

6
Cần lưu ý ngay bây giờ (tháng 4 năm 2018) nếu bạn đang sử dụng Fargate Beta hiện tại ( aws.amazon.com/fargate ) để tránh toàn bộ loại rắc rối này, bạn có thể giống như tôi đã chọn EC2làm loại khởi chạy khi bạn gặp lỗi này ...
declension

10
Và, khi tạo EC2, đừng quên thêm #!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.configvào Advanced Details -> User datanếu bạn có cụm riêng, không phải cụm Mặc định. Điều khôn ngoan khác là cá thể EC2 mới được tạo sẽ tạo cụm Mặc định.
Jakub Czaplicki

40

Hiện tại, giao diện web Amazon AWS có thể tự động tạo các phiên bản với AMI chính xác và tên chính xác để nó sẽ đăng ký vào đúng cụm.

Mặc dù tất cả các phiên bản được tạo bởi Amazon với các cài đặt chính xác, các phiên bản của tôi sẽ không đăng ký. Trên các diễn đàn Amazon AWS, tôi đã tìm thấy một manh mối. Hóa ra là các cụm của bạn cần truy cập internet và nếu VPC riêng của bạn không có cổng internet, các cụm sẽ không thể kết nối.

Sự sửa chữa

Trong bảng điều khiển VPC, bạn nên tạo một Cổng Internet mới và kết nối nó với VPC được sử dụng bởi cụm. Sau khi đính kèm, bạn phải cập nhật (hoặc tạo) bảng lộ trình cho VPC và thêm vào dòng cuối cùng

0.0.0.0/0 igw-24b16740  

Trong đó igw-24b16740 là tên cổng internet mới tạo của bạn.


Điều này được đề cập tại docs.aws.amazon.com/AWSEC2/latest/UserGuide/… [EC2-VPC] Kiểm tra bảng định tuyến cho mạng con. Bạn cần một lộ trình gửi tất cả lưu lượng được định sẵn bên ngoài VPC đến cổng Internet cho VPC.
Justin M. Keyes

2
Cảm ơn bạn cho manh mối! Tôi đã chỉ định một nhóm bảo mật cho các phiên bản của mình, nhóm này đã chặn tất cả lưu lượng đi ngoại trừ lưu lượng truy cập vào bộ cân bằng tải của tôi. Tôi đã chuyển điều này để cho phép tất cả lưu lượng đi nhưng chỉ hạn chế lưu lượng đến từ bộ cân bằng tải và các phiên bản sau đó xuất hiện trong cụm EC2 của tôi.
Mikepote

1
Tôi ước tôi có thể bỏ phiếu cho câu trả lời của bạn nhiều hơn một lần. Điều này đã khắc phục sự cố chính xác của tôi "Không tìm thấy Phiên bản vùng chứa nào trong cụm của bạn." và câu trả lời ban đầu được bình chọn nhiều hơn không liên quan gì đến giải pháp thực tế của bạn. Cám ơn bạn một lần nữa.
alexkb

Cũng như liên kết cổng với VPC của bạn, bạn có thể cần định tuyến lưu lượng truy cập internet qua nó cho mạng con cụ thể chứa các phiên bản ECS của bạn. - ví dụ aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID- tôi có thể đề nghị thêm điều này vào câu trả lời không?
Greg

Tôi nghĩ điều đáng nói là thời điểm bạn thêm một tuyến đường cho 0.0.0..0 / 0 trỏ đến IGW thì mạng con không còn là mạng con riêng tư nữa. Từ góc độ an ninh mạng, tốt hơn là tạo một tuyến trỏ đến NAT-Gateway.
Henrik Pingel

18

Tôi gặp phải vấn đề này khi sử dụng Fargate. Tôi đã sửa nó khi tôi xác định rõ rànglaunchType="FARGATE" khi gọi run_task.


1
Với CLI tôi thêm--launch-type FARGATE
shlomiLan

11

Các séc đề xuất khác

  1. Việc chọn AMI được đề xuất được chỉ định cho khu vực nhất định đã giải quyết được vấn đề của tôi.

    Để tìm hiểu AMI - hãy kiểm tra Khởi chạy Phiên bản vùng chứa Amazon ECS .

  2. Theo mặc định, tất cả các phiên bản ec2 được thêm vào cụm mặc định. Vì vậy, tên của cụm cũng quan trọng.

Xem điểm 10 tại Khởi chạy Phiên bản vùng chứa Amazon ECS .

Thêm thông tin có sẵn trong chủ đề này .


3

Đề phòng trường hợp người khác bị chặn với sự cố này như tôi ... Tôi đã thử mọi thứ ở đây và không hiệu quả với tôi.

Bên cạnh những gì đã nói ở đây liên quan đến Vai trò Phiên bản EC2, như đã nhận xét ở đây , trong trường hợp của tôi chỉ hoạt động nếu tôi vẫn định cấu hình Phiên bản EC2 với thông tin đơn giản. Sử dụng Dữ liệu người dùng một tập lệnh ban đầu như thế này:

#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=quarkus-ec2
EOF

Thông báo cho Tên cụm ECS liên quan được tạo tại tệp cấu hình ecs này, đã giải quyết được sự cố của tôi. Nếu không có cấu hình này, Nhật ký tác nhân ECS tại Phiên bản EC2 hiển thị lỗi không thể kết nối với ECS, thực hiện điều này, tôi đã hiển thị Phiên bản EC2 cho Cụm ECS.

Sau khi làm điều này, tôi có thể có được Phiên bản EC2 cho Cụm EC2 của mình: nhập mô tả hình ảnh ở đây

Tài liệu AWS nói rằng phần này là tùy chọn, nhưng trong trường hợp của tôi, nó không hoạt động nếu không có cấu hình "tùy chọn" này.


2

Nếu bạn gặp phải vấn đề này sau khi tạo cụm

Chuyển đến cá thể ECS trong danh sách cá thể EC2 và kiểm tra vai trò IAM mà bạn đã chỉ định cho cá thể đó. Bạn có thể dễ dàng xác định các phiên bản với tên phiên bản bắt đầu bằngECS Instance

nhập mô tả hình ảnh ở đây

Sau đó nhấp vào vai trò IAM và nó sẽ hướng bạn đến bảng điều khiển IAM. Chọn AmazonEC2ContainerServiceforEC2Rolechính sách từ danh sách chính sách quyền và lưu vai trò.

Các phiên bản của bạn sẽ có sẵn trong cụm ngay sau khi bạn lưu nó.


1

Vấn đề thực sự là thiếu sự cho phép. Miễn là bạn tạo và chỉ định Vai trò IAM với quyền AmazonEC2ContainerServiceforEC2Role, vấn đề sẽ biến mất.


0

Một nguyên nhân khác có thể xảy ra mà tôi gặp phải là cập nhật AMI cụm ECS của mình thành AMI "Amazon Linux 2" thay vì "Amazon Linux AMI", khiến tập lệnh khởi chạy EC2 user_data của tôi không hoạt động.


0

Khi điều này xảy ra, bạn cần xem xét những điều sau:

  1. Các phiên bản EC2 của bạn phải có vai trò với AmazonEC2ContainerServiceforEC2Role chính sách được quản lý kèm theo
  2. Phiên bản EC2 của bạn sẽ chạy hình ảnh AMI ecs-optimized (bạn có thể kiểm tra điều này trong bảng điều khiển EC2)
  3. Mạng con riêng tư của VPC của bạn không có IP công cộng được chỉ định, HOẶC bạn không có điểm cuối VPC giao diện được định cấu hình HOẶC bạn chưa thiết lập cổng NAT

Hầu hết thời gian, vấn đề này xuất hiện do VPC được định cấu hình sai. Theo Tài liệu :

LƯU Ý: Nếu bạn không định cấu hình điểm cuối VPC giao diện và các cá thể vùng chứa của bạn không có địa chỉ IP công cộng, thì chúng phải sử dụng bản dịch địa chỉ mạng (NAT) để cung cấp quyền truy cập này.

  • Để tạo điểm cuối VPC: Làm theo tài liệu tại đây
  • Để tạo cổng NAT: Làm theo tài liệu tại đây

Đây là những lý do tại sao bạn không thấy các phiên bản EC2 được liệt kê trong bảng điều khiển ECS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.