인스턴스를 시작할 수 없으며 describe-instances 명령을 실행할 때 Client.InternalError가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 10월 7일

Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스를 시작하려고 하는데 인스턴스가 시작되지 않고 오류 메시지를 반환하지 않습니다. 또는 시작되지 않고 "Client.InternalError" 또는 "Server.InternalError" 오류 메시지를 반환합니다. 해결하려면 어떻게 해야 하나요?

간략한 설명

다음과 같은 이유로 “Server.InternalError” 메시지가 표시될 수 있습니다.

  • Amazon Elastic Block Store(Amazon EBS) 볼륨이 인스턴스에 올바르게 연결되지 않았습니다.
  • 인스턴스에 연결된 EBS 볼륨이 오류 상태입니다.

암호화된 EBS 볼륨이 인스턴스에 연결되어 있으면 “Client.InternalError” 메시지가 표시될 수 있습니다.

참고: 인스턴스가 시작되지 않고 오류 코드도 표시되지 않을 경우 describe-instances 명령을 실행하십시오. 그런 다음 인스턴스 ID를 지정하십시오. 다음 예제에서 MYINSTANCE를 시작하려는 인스턴스의 ID로 바꾸세요.

aws ec2 describe-instances --instance-id MYINSTANCE --output json

명령을 실행하여 반환된 JSON 응답에서 StateReason 메시지를 확인합니다.

해결 방법

EBS 볼륨이 인스턴스에 올바르게 연결되어 있지 않은 경우

EBS 루트 볼륨이 인스턴스에 /dev/sda1 또는 /dev/xvda로 연결되어 있지 않고 두 번째 EBS 볼륨에 중복되거나 충돌하는 디바이스 이름이 있는 경우 인스턴스를 중지하거나 시작할 수 없습니다. Xen기반 인스턴스 유형(c4, m4, t2 등)만 블록 디바이스 이름 충돌의 영향을 받습니다. Nitro기반 인스턴스(c5, m5, t3 등)는 블록 디바이스 이름 충돌의 영향을 받지 않습니다.

1.    설명-인스턴스 API를 실행하여 StateReason 오류 메시지와 오류 코드를 확인합니다. 다음은 장치 이름이 충돌하는 경우 명령 출력의 예제입니다.

awsec2describe-instances--instance-idi-xxxxxxxxxxxxxxx|egrep-A3-iStateReason
"StateReason": {
    "Code": "Server.InternalError",
    "Message": "Server.InternalError: Internal error on launch"
},

2.    Amazon EC2 콘솔을 열고 시작할 수 없는 인스턴스를 선택합니다.

3.    [설명] 탭에서 [블록] 디바이스에 나열된 디바이스 이름을 확인합니다. [블록] 디바이스 필드에는 연결된 볼륨의 모든 디바이스 이름이 표시됩니다.

4.    루트 디바이스가 올바르게 연결되어 있고 서로 이름이 같거나 이름이 충돌하는 디바이스가 없는지 확인합니다.

5.    디바이스 이름이 중복되거나 충돌하는 디바이스가 있는 경우 충돌하는 볼륨을 분리하고 이름을 바꿉니다. 그런 다음 업데이트된 디바이스 이름으로 볼륨을 다시 연결합니다.

연결된 EBS 볼륨이 오류 상태인 경우

1.    설명-인스턴스 API를 실행하여 StateReason 오류 메시지와 오류 코드를 확인합니다. 다음은 오류 상태의 첨부된 EBS 볼륨이 있는 경우 명령 출력의 예제입니다.

aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxx 
          "InstanceId": "i-xxxxxxxxxxxxxxxx",
          "InstanceType": "c4.8xlarge",
          "State": {
            "Name": "stopped"
          },
          "StateTransitionReason": "Server.InternalError",

2.    Amazon EC2 콘솔을 열고 [볼륨]을 선택한 다음 볼륨 상태가 [오류]인지 확인합니다. 오류 상태의 볼륨이 루트 볼륨인지 보조 볼륨인지에 따라 옵션이 달라집니다.

오류 상태의 볼륨이 보조 볼륨인 경우 볼륨을 분리합니다. 이제 인스턴스를 시작할 수 있습니다.

오류 상태의 볼륨이 루트 볼륨이고 해당 볼륨의 기존 스냅샷이 있는 경우 다음과 같이 합니다.

볼륨을 분리합니다.

스냅샷에서 새 볼륨을 생성합니다.

원본 인스턴스의 디바이스 이름을 사용하여 새 볼륨을 인스턴스에 연결합니다. 인스턴스를 시작합니다.

참고: 오류 상태의 볼륨이 루트 볼륨이고 볼륨의 기존 스냅샷이 없는 경우 인스턴스를 다시 시작할 수 없습니다. 인스턴스를 다시 구축해야 합니다.

연결된 볼륨이 암호화되고 잘못된 AWS Identity and Access Management(IAM) 권한 또는 정책이 있음

1.    설명-인스턴스 API를 실행하여 StateReason 오류 메시지와 오류 코드를 확인합니다. 다음은 인스턴스에 암호화된 볼륨이 연결되어 있고 권한 또는 정책 문제가 있는 경우 명령 출력의 예제입니다.

aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxxxxx
"StateReason": {
     "Message": "Client.InternalError: Client error on launch",
     "Code": "Client.InternalError"
   },

2.    다음을 확인합니다.

참고: 볼륨이 암호화되어 있는지 확인하려면 Amazon EC2 콘솔을 연 다음 [볼륨]을 선택하십시오. 암호화된 볼륨은 [암호화됨]으로 [암호화] 열에 표시됩니다.