docker
를 AWS
사용하여 컨테이너 이미지 를 배포하려고 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
.
답변
기타 제안 된 검사
-
주어진 지역에 대해 지정된 제안 AMI를 선택하면 문제가 해결되었습니다.
AMI를 찾으려면 Launching an Amazon ECS Container Instance를 확인하십시오 .
-
기본적으로 모든 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 역할을 생성하고 할당하면 문제가 사라집니다.
