[amazon-web-services] 작업 실행시 AWS ECS 오류 : 클러스터에 컨테이너 인스턴스가 없습니다.

dockerAWS사용하여 컨테이너 이미지 를 배포하려고 ECS하지만 EC2 인스턴스가 생성되지 않습니다. 다음 오류가 발생하는 이유에 대한 설명을 찾기 위해 인터넷을 검색했습니다.

“RunTask 작업을 호출 할 때 클라이언트 오류 (InvalidParameterException)가 발생했습니다. 클러스터에서 컨테이너 인스턴스를 찾을 수 없습니다.”

내 단계는 다음과 같습니다.

1. Ubuntu에서 Amazon ECS repo로 Docker 이미지를 푸시했습니다.

2. ECS 작업 정의 등록 :

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

3. 작업을 실행했습니다.

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

그러나 그것은 실패합니다.

내 임무는 다음과 같습니다.

{
  "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
    }
  ]
}

또한 관리 콘솔을 사용하여 클러스터 및 서비스를 구성하려고 시도했지만 동일한 오류가 발생합니다. ec2 인스턴스를 갖도록 클러스터를 구성하려면 어떻게해야하며 어떤 종류의 컨테이너 인스턴스를 사용해야합니까? 이 모든 과정이 EC2 인스턴스를 생성하는 것이라고 생각했습니다 !!



답변

나는 몇 시간 더 조사한 후에 이것을 알아 냈다. Amazon에서 수신하는 경우 클러스터를 생성하거나 클러스터에 인스턴스를 추가 할 때 관리 콘솔의 어딘가에이를 명시해야합니다.

“클러스터에 ECS 인스턴스를 추가하려면 먼저 EC2 관리 콘솔로 이동 ecs-optimized하여 AmazonEC2ContainerServiceforEC2Role정책이 연결된 IAM 역할로 인스턴스를 생성해야합니다. “

다음은 rigmarole입니다.

1. EC2 대시 보드로 이동 하여 Launch Instance버튼을 클릭 합니다.

2.에서 Community AMIs를 검색하고 ecs-optimized프로젝트 요구 사항에 가장 적합한 것을 선택합니다. 모두 작동합니다. 다음을 클릭하십시오.

3. Configure Instance Details에 도달하면을 클릭하고 create new IAM role link라는 새 역할을 만듭니다 ecsInstanceRole.

4. AmazonEC2ContainerServiceforEC2Role해당 역할에 정책을 연결합니다 .

5. 그런 다음 ECS 인스턴스 구성을 완료합니다.
참고 : 웹 서버를 생성하는 경우 포트 80에 대한 액세스를 허용하는 securityGroup을 생성 할 수 있습니다.

몇 분 후 인스턴스가 초기화되고 실행되면 인스턴스를 추가하려는 ECS 인스턴스 탭을 새로 고칠 수 있습니다.


답변

현재 Amazon AWS 웹 인터페이스는 올바른 AMI와 올바른 이름으로 인스턴스를 자동으로 생성 할 수 있으므로 올바른 클러스터에 등록됩니다.

모든 인스턴스가 Amazon에서 올바른 설정으로 생성되었지만 내 인스턴스가 등록되지 않았습니다. 온 아마존 AWS 포럼 나는 단서를 발견했다. 클러스터에 인터넷 액세스가 필요하며 프라이빗 VPC에 인터넷 게이트웨이가없는 경우 클러스터를 연결할 수 없습니다.

수정

VPC 대시 보드에서 새 인터넷 게이트웨이를 생성하고 클러스터에서 사용하는 VPC에 연결해야합니다. 연결되면 VPC에 대한 라우팅 테이블을 업데이트 (또는 생성)하고 마지막 줄로 추가해야합니다.

0.0.0.0/0 igw-24b16740

여기서 igw-24b16740은 새로 생성 된 인터넷 게이트웨이의 이름입니다.


답변

Fargate를 사용할 때이 문제가 발생했습니다. 을 호출 할 때 명시 적으로 정의 launchType="FARGATE"했을 때 수정했습니다 run_task.


답변

기타 제안 된 검사

  1. 주어진 지역에 대해 지정된 제안 AMI를 선택하면 문제가 해결되었습니다.

    AMI를 찾으려면 Launching an Amazon ECS Container Instance를 확인하십시오 .

  2. 기본적으로 모든 ec2 인스턴스는 기본 클러스터에 추가됩니다. 따라서 클러스터의 이름도 중요합니다.

Amazon ECS 컨테이너 인스턴스 시작의 10 번 항목을 참조하십시오 .

이 스레드 에서 더 많은 정보를 얻을 수 있습니다 .


답변

다른 사람이이 문제로 막힐 경우를 대비해서 … 나는 여기에서 모든 것을 시도했지만 나를 위해 일하지 않았습니다.

여기에 언급 된 내용 외에도 EC2 인스턴스 역할과 관련하여 여기 에 설명 된대로 제 경우에는 간단한 정보로 EC2 인스턴스를 구성한 경우에만 작동했습니다. 사용자 데이터를 다음과 같은 초기 스크립트 사용 :

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

이 ecs 구성 파일에서 생성 된 관련 ECS 클러스터 이름을 알려주고 문제가 해결되었습니다. 이 구성이 없으면 EC2 인스턴스의 ECS 에이전트 로그에 ECS에 연결할 수없는 오류가 표시되어 ECS 클러스터에 EC2 인스턴스가 표시됩니다.

이렇게 한 후 EC2 클러스터에서 사용할 수있는 EC2 인스턴스를 얻을 수 있습니다.
여기에 이미지 설명 입력

AWS 설명서에는이 부분이 선택 사항이라고 나와 있지만 제 경우에는이 “선택 사항”구성 없이는 작동하지 않았습니다.


답변

클러스터를 만든 후이 문제가 발생한 경우

EC2 인스턴스 목록에서 ECS 인스턴스로 이동하여 인스턴스에 할당 한 IAM 역할을 확인합니다. 인스턴스 이름이 다음으로 시작하는 인스턴스를 쉽게 식별 할 수 있습니다.ECS Instance

여기에 이미지 설명 입력

그 후 IAM 역할을 클릭하면 IAM 콘솔로 연결됩니다. 선택AmazonEC2ContainerServiceforEC2Role권한 정책 목록에서 정책을 역할을 저장합니다.

인스턴스는 저장 한 직후 클러스터에서 사용할 수 있습니다.


답변

진짜 문제는 권한 부족입니다. AmazonEC2ContainerServiceforEC2Role 권한으로 IAM 역할을 생성하고 할당하면 문제가 사라집니다.