시작하려고 할 때 중지되거나 종료되는 Amazon EC2 인스턴스 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작하려고 하면 인스턴스가 종료되거나 시작되지 않습니다.

간략한 설명

Amazon EC2 인스턴스 InternalError 메시지가 발생하는 가장 일반적인 원인은 다음과 같습니다.

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

인스턴스가 시작되지 않고 오류 코드가 나타나지 않는 경우 AWS Command Line Interface(AWS CLI)에서 describe-instance 명령을 실행합니다. 그런 다음, 인스턴스 ID를 지정합니다. 명령이 JSON 응답에서 반환하는 StateReason 메시지를 확인합니다.

참고: AWS CLI에 모든 명령을 입력합니다. AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

해결 방법

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

API에 정의된 항목에 따라 EBS 루트 볼륨을 /dev/sda1 또는 /dev/xvda와 같은 인스턴스에 연결해야 합니다. 디바이스 이름이 중복되거나 충돌하는 두 번째 EBS 볼륨을 사용할 수 없습니다. 그렇지 않으면 인스턴스를 중지하거나 시작할 수 없습니다. Xen 기반 인스턴스 유형(c4, m4, t2 등)만 블록 디바이스 이름 충돌의 영향을 받습니다. Nitro 기반 인스턴스(c5, m5, t3 등)는 블록 디바이스 이름 충돌의 영향을 받지 않습니다.

1.    describe-instances API를 실행하여 StateReason 오류 메시지 및 오류 코드를 확인합니다.

$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json

참고: us-east-1을 사용자의 AWS 리전으로 바꿉니다. i-xxxxxxxxxxxxxxx를 인스턴스 ID로 바꿉니다.

디바이스 이름이 충돌하는 경우 다음 메시지와 비슷한 출력이 표시됩니다.

[
    [{
        "StateReason": {
            "Code": "Server.InternalError",
            "Message": "Server.InternalError: Internal error on launch"
        }
    }]
]

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

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

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

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

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

1.    describe-instances API를 실행하여 StateReason 오류 메시지 및 오류 코드를 확인합니다.

$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json

참고: us-east-1을 사용자의 AWS 리전으로 바꿉니다. i-xxxxxxxxxxxxxxx를 인스턴스 ID로 바꿉니다.

연결된 EBS 볼륨이 오류 상태인 경우 다음 메시지와 비슷한 출력이 표시됩니다.

[
    [{
        "StateReason": {
            "Code": "Server.InternalError",
            "Message": "Server.InternalError: Internal error on launch"
        }
    }]
]

2.    Amazon EC2 콘솔을 열고 Volumes(볼륨)를 선택한 다음, status of the volume(볼륨 상태)이 error(오류) 상태인지 확인합니다. 오류 상태의 볼륨이 루트 볼륨인지, 보조 볼륨인지에 따라 옵션이 달라집니다.

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

오류 상태인 볼륨이 루트 볼륨이고 해당 볼륨의 스냅샷이 있는 경우 다음 단계를 완료합니다.

볼륨을 분리합니다.

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

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

참고: 오류 상태의 루트 볼륨에 대한 기존 스냅샷이 없는 경우 인스턴스를 다시 시작할 수 없습니다. 새 인스턴스를 시작하고 관련 애플리케이션을 설치한 다음, 이전 인스턴스를 바꾸도록 구성해야 합니다.

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

1.    describe-instances API를 실행하여 StateReason 오류 메시지 및 오류 코드를 확인합니다.

$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json

참고: us-east-1을 사용자의 AWS 리전으로 바꿉니다. i-xxxxxxxxxxxxxxx를 인스턴스 ID로 바꿉니다.

인스턴스에 연결된 암호화된 볼륨이 있고 권한 또는 정책 문제가 있는 경우 클라이언트 오류가 발생합니다. 다음 메시지와 비슷한 출력이 표시됩니다.

[
    [{
        "StateReason": {
            "Code": "Client.InternalError",
            "Message": "Client.InternalError: Client error on launch"
        }
    }]
]

2.    인스턴스를 시작하려는 사용자에게 올바른 IAM 권한이 있는지 확인합니다. EC2 Auto Scaling과 같은 다른 서비스를 통해 간접적으로 인스턴스를 시작한 경우 다음 구성도 확인합니다.

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


관련 정보

암호화된 볼륨이 연결된 상태로 인스턴스를 시작하면 'client error on launch'라는 오류가 발생하며 인스턴스가 즉시 중지됩니다.

EC2 인스턴스를 시작하거나 실행할 수 없는 이유는 무엇인가요?

AWS KMS 내 키 정책

인스턴스 시작 문제 해결 – 인스턴스 즉시 종료

AWS 공식
AWS 공식업데이트됨 일 년 전