programing

작업을 실행할 때 AWS ECS 오류:클러스터에서 컨테이너 인스턴스를 찾을 수 없습니다.

newstyles 2023. 8. 27. 08:58

작업을 실행할 때 AWS ECS 오류:클러스터에서 컨테이너 인스턴스를 찾을 수 없습니다.

하려고 합니다.docker to 테이이지AWS용사를 ECS그러나 EC2 인스턴스가 생성되지 않습니다.는 제가 왜 과 같은 위해 을 뒤졌습니다.

"클라이언트 오류(잘못된 매개 변수)작업 실행 작업을 호출할 때 예외)가 발생했습니다.클러스터에서 컨테이너 인스턴스를 찾을 수 없습니다."

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

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

등록된 ECS 작업 정의:

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

작업 실행:

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 파일"을 생성해야 ecs-optimized이 IAM 역을인스턴스가가다(instance)인 인스턴스.AmazonEC2ContainerServiceforEC2Role정책 " 정책부"

여기 리그마롤이 있습니다.

EC2 대시보드로 이동하여Launch Instance단추를 채우다

Community AMIs을 합니다.ecs-optimized프로젝트 요구사항에 가장 적합한 항목을 선택합니다.아무거나 좋습니다.다음을 클릭합니다.

Details(인스턴스 세부 정보 구성)을 합니다.create new IAM role link 새운역생성다니합할을라는 새로운 역할을 만듭니다.ecsInstanceRole.

을 합니다.AmazonEC2ContainerServiceforEC2Role해당 역할에 대한 정책.

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

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

Fargate를 사용하다가 이 문제에 부딪혔습니다.가 분명히 정의했을 때 수정했습니다.launchType="FARGATE"을 부를 때.run_task.

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

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

픽스

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

0.0.0.0/0 igw-24b16740  

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

기타 제안된 검사

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

    AMI를 확인하려면 Amazon ECS 컨테이너 인스턴스 시작을 선택합니다.

  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 설명서에는 이 부품이 선택 사항이라고 나와 있지만, 제 경우에는 이 "선택 사항" 구성 없이는 작동하지 않았습니다.

이 경우 다음 사항을 고려해야 합니다.

  1. 에는 EC2와 관련된 .AmazonEC2ContainerServiceforEC2Role 정 에 된 되 는 리
  2. 는 EC2 중이어야 합니다. 는 AMI 이미지입니다.ecs-optimized 대시보드에서 할 수 (EC2 대시보드에서 확인할 수 있습니다.)
  3. VPC의 개인 서브넷에 공용 IP가 할당되어 있지 않거나, 인터페이스 VPC 끝점이 구성되어 있지 않거나, NAT 게이트웨이가 설정되어 있지 않습니다.

대부분의 경우 이 문제는 잘못 구성된 VPC 때문에 발생합니다.설명서에 따름:

견적: 인터페이스 VPC 끝점이 구성되어 있지 않고 컨테이너 인스턴스에 공용 IP 주소가 없는 경우 NAT(네트워크 주소 변환)을 사용하여 이 액세스를 제공해야 합니다.

  • VPC 끝점을 생성하는 방법여기에 있는 설명서를 따릅니다.
  • NAT 게이트웨이를 만드는 방법여기에 있는 설명서를 따릅니다.

이러한 이유로 ECS 대시보드에 나열된 EC2 인스턴스가 표시되지 않습니다.

진짜 문제는 허가의 부족입니다.Amazon EC2 Container Service를 사용하여 IAM 역할을 생성하고 할당하는 경우EC2 역할 권한이 있으면 문제가 해결됩니다.

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

EC2 인스턴스 목록에서 ECS 인스턴스로 이동하여 인스턴스에 할당한 IAM 역할을 확인합니다.이 인턴스이다음로시작인면하스쉽를다로 할 수 .ECS Instance

enter image description here

그런 다음 IAM 역할을 클릭하면 IAM 콘솔로 이동합니다.다음을 선택합니다.AmazonEC2ContainerServiceforEC2Role권한 정책 목록에서 정책을 선택하고 역할을 저장합니다.

인스턴스를 저장하면 클러스터에서 바로 사용할 수 있습니다.

저는 이것이 오래된 스레드라는 것을 알고 있지만, 튜토리얼을 따르다가 OP가 언급한 오류를 보고 우연히 발견했습니다.

으로 ecs-optimizedAMI 이미지가 도움이 되지 않습니다.VPC에 서브넷을 가리키는 0.0.0.0/0 경로가 이미 있습니다.인스턴스가 올바른 클러스터에 추가되었으며 적절한 사용 권한이 있습니다.

스레드에 대한 @sanath_p의 링크 덕분에 솔루션을 찾고 다음 단계를 수행했습니다.

  1. 자동 스케일링 그룹의 구성을 복사했습니다.
  2. IP address type고급 설정에서 "모든 인스턴스에 공용 IP 주소 할당"
  3. 이 새 구성을 사용하도록 자동 스케일링 그룹을 업데이트했습니다.
  4. 인스턴스 새로 고침 탭에서 인스턴스를 새로 고쳤습니다.

또 다른 가능한 원인은 ECS 클러스터 AMI를 "Amazon Linux AMI" 대신 "Amazon Linux 2" AMI로 업데이트하여 EC2 user_data 시작 스크립트가 작동하지 않게 된 것입니다.

ecs에 최적화된 인스턴스 이미지 이외의 경우.아래 단계를 수행하십시오.

ECS_Cluster=REPLACE_YER_Cluster_NAME

  • 위의 내용을 /etc/ecs/ecs.config에 추가합니다.

VPC는 ECR과 통신해야 합니다.

이렇게 하려면 VPC에 연결된 Security Group의 아웃바운드 규칙 0.0.0/0이 필요합니다.

다른 답변들 중 일부는 모호합니다.한 가지 문제는 ASG를 자동으로 생성하지 않은 경우 사용자 데이터가 올바르게 설정되지 않은 것일 수 있습니다.

클러스터 이름을 클러스터로 바꾸려면 다음과 같이 표시해야 합니다.

#!/bin/bash 
echo ECS_CLUSTER=ClusterName >> /etc/ecs/ecs.config;

실행 템플릿을 수정(새 버전 만들기)하고 "고급 세부 정보"로 스크롤한 다음 하단의 사용자 데이터 텍스트 상자에 입력하여 입력할 수 있습니다.

언급URL : https://stackoverflow.com/questions/36523282/aws-ecs-error-when-running-task-no-container-instances-were-found-in-your-clust