AWS OpsWorks Stacks가 정상 인스턴스를 예기치 않게 시작하거나 다시 시작하지 않도록 하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 4월 23일

AWS OpsWorks Stacks는 Amazon Elastic Compute Cloud(Amazon EC2) 상태 확인을 통과했어도 비정상이라고 확인된 인스턴스를 다시 시작합니다. 이를 방지하려면 어떻게 해야 합니까?

간략한 설명

자동 복구는 인스턴스가 Amazon EC2 상태 확인을 통과했어도 스택에서 비정상이거나 실패한 인스턴스를 다시 시작합니다. 자동 복구는 스택의 계층 설정에서 기본적으로 활성화되어 있습니다. 자동 복구 중에 다음 이벤트가 수행됩니다.

  • OpsWorks Stacks 에이전트는 약 30초 간격으로 keepalive를 전송합니다. 서비스에서 5분 후에 keepalive를 수신하지 못하면 서비스는 인스턴스를 비정상으로 표시합니다. AWS OpsWorks Stacks API에서 시작된 인스턴스의 계층에서 자동 복구가 활성화된 경우 API는 인스턴스를 중지하고 시작합니다.
  • 인스턴스가 Amazon Elastic Block Store(Amazon EBS)에서 지원되는 경우 AWS OpsWorks API는 기본 Amazon EC2 인스턴스를 중지하고 시작합니다. 인스턴스가 인스턴스 스토어에서 지원되는 경우 인스턴스가 중지되면 기본 Amazon EC2 인스턴스가 종료됩니다. 그런 다음, OpsWorks Stacks에서 인스턴스를 다시 시작하면 인스턴스가 다시 생성됩니다. 자세한 내용은 자동 복구를 사용하여 실패한 인스턴스 대체를 참조하십시오.
  • 인스턴스가 Amazon EC2에서 시작되고 OpsWorks 스택에 등록된 경우 AWS OpsWorks API는 인스턴스를 중지한 후 다시 시작합니다. 등록된 온프레미스 인스턴스가 AWS OpsWorks 상태 확인을 통과하지 못하면 인스턴스가 connection-lost로 표시되지만 다시 시작되지는 않습니다. 자세한 내용은 등록된 인스턴스 관리를 참조하십시오.

​해결 방법

자동 복구 신호를 위해 Amazon EC2 StopInstances API 호출 출력 확인

1.    AWS CloudTrail 콘솔을 엽니다.

2.    [이벤트 기록]을 선택합니다.

3.    [필터]에서 [이벤트 이름]을 선택합니다. 자세한 내용은 CloudTrail 이벤트 필터링을 참조하십시오.

4.    검색 상자에서 [StopInstances]를 선택합니다.

5.    [필터]에서 [리소스 이름]을 선택합니다.

6.    검색 상자에 EC2 인스턴스 ID를 입력하고 타임스탬프를 기록합니다.

OpsWorks Stacks가 인스턴스를 중지하면 Amazon EC2 StopInstances API에서 다음 출력을 표시합니다.

"invokedBy": "opsworks.amazonaws.com"

자동 복구 신호를 위해 AWS OpsWorks StopInstances API 호출 출력 확인

1.    CloudTrail 콘솔을 엽니다.

2.    [이벤트 기록]을 선택합니다.

3.    [필터]에서 [이벤트 이름]을 선택합니다.

4.    검색 상자에서 [StopInstances]를 선택합니다.

5.    [필터]에서 [리소스 이름]을 선택합니다.

6.    검색 상자에 OpsWorks 인스턴스 ID를 입력하고 타임스탬프를 기록합니다.

7.    Amazon EC2에서 인스턴스가 중지된 경우 StopInstance API 호출을 검색하고 타임스탬프를 기록합니다.

참고: API 호출을 찾을 수 없는 경우 자동 복구가 인스턴스에 적용됩니다.

다음 사항에 유의하십시오.

  • Amazon EC2가 아니라, AWS OpsWorks API만 사용하여 OpsWorks Stacks 관리형 인스턴스를 구성합니다.
  • 관리형 인스턴스가 OpsWorks Stacks 서비스에서 일관된 상태인지 확인합니다.
    참고: 예를 들어, Amazon EC2에서 인스턴스가 중지된 경우 인스턴스는 비정상으로 표시됩니다. OpsWorks Stacks는 해당 인스턴스의 에이전트가 보내는 신호를 예상하기 때문입니다. OpsWorks Stacks는 인스턴스를 자동 복구합니다(활성화된 경우). 그러면 OpsWorks Stacks에서 상태가 Amazon EC2에서 상태와 일치하지 않으므로 인스턴스가 동결됩니다. 이 경우 --force 플래그를 사용하여 stop-instance 명령으로 인스턴스를 중지합니다.

스택에서 자동 복구 이벤트를 수신 대기하는 CloudWatch 규칙 생성

1.    (선택 사항) 인스턴스에 자동 복구가 적용된 경우 알림을 수신하려면 알림을 설정합니다.

2.    OpsWorksAutoHealingNotifier라고 하는 SNS 주제를 생성하고 해당 주제에 엔드포인트를 구독합니다(예: 이메일 주소 또는 전화번호).

3.    CloudWatch 이벤트 규칙을 생성하고 SNS 주제를 대상으로 설정합니다.

4.    규칙 구성 내에서 다음 패턴을 사용하여 자동 복구 이벤트를 수신 대기하는 CloudWatch 규칙을 설정합니다.

{
  "source": [
    "aws.opsworks"
  ],
  "detail": {
    "initiated_by": [
      "auto-healing"
    ]
  }
}

5.    구성을 저장하려면 [규칙 생성]을 선택합니다.

인스턴스 로그 파일 사용 문제 해결

1.    Linux의 경우 /var/log/aws/opsworks에서 로그 파일을 보려면 SSH를 사용하여 인스턴스에 연결합니다. Windows의 경우 C:\ProgramDataOpsWorksAgent\var\logs에서 로그 파일을 보려면 RDP를 사용하여 인스턴스에 연결합니다.

2.    다음 로그 파일에서 문제를 해결합니다.
에이전트의 성공한 시도 및 실패한 시도에 대해 opsworks-agent.keep_alive.log를 확인하여 OpsWorks로 keepalive 신호를 다시 전송합니다. 자세한 내용은 VPC에서 스택 실행을 참조하십시오.
opsworks-agent.statistics.log를 확인하여 시스템이 CPU 로드 및 메모리를 처리하는 방법을 확인합니다. 사용된 메모리 크기를 검토하고 CPU 및 로드 지표가 높은지 확인할 수 있습니다.
에이전트가 중지되었거나 시작된 경우를 포함하여 인스턴스에서 실행 중인 에이전트의 전반적인 상태에 대한 보고는 opsworks-agent.log를 확인합니다.
인스턴스의 에이전트가 수행한 성공한 명령과 실패한 명령에 대한 보고는 opsworks-agent.process_command.log를 확인합니다.

참고: 이러한 로그 파일은 인스턴스의 루트 디바이스를 Amazon EBS에서 지원하는 경우에만 보관됩니다. 인스턴스 스토어에서 지원하는 인스턴스는 OpsWorks의 StopInstance API 호출에서 종료되며, 이로 인해 로그가 손실됩니다.

3.    시스템 수준 로그를 보고 자동 복구가 적용된 경우 인스턴스의 전반적인 상태를 확인합니다.

참고: 자동 복구 이벤트로 인해 에이전트에서 문제가 발생한 경우 로그에서 시스템 수준의 정보를 남길 수 있습니다(예: "Out of Memory" 오류).

OpsWorks Stacks에서 관리하는 인스턴스의 자동 복구 방지

  • VPC 라우팅 테이블의 NAT 또는 인터넷 게이트웨이를 통해 인스턴스에서 인터넷에 연결할 수 있는지 확인합니다.
  • 인스턴스, 보안 그룹 및 VPC ACL 수준에서 포트 443을 잠금 해제합니다.
    참고: VPC 또는 잘못 생성된 VPC를 변경하면 인스턴스가 인터넷을 통해 OpsWorks Stacks와 통신하지 못할 수 있습니다.
  • 인스턴스에 추가 로드가 적용된 경우 인스턴스 수준에서 작동하도록 애플리케이션에 충분한 리소스(예: 메모리 및 CPU)가 있는지 확인합니다.
    참고: 추가 로드를 준비하는 모범 사례입니다. 예를 들어, 수명 주기 이벤트로 인해 인스턴스에 예기치 않은 로드가 적용될 수 있습니다.
  • CloudWatch 지표 및 경보를 사용하여 인스턴스에서 CPU, 메모리 또는 네트워크 트래픽이 높으면 사용자에게 경고합니다.
    애플리케이션에 대해 자동 복구가 작동하지 않으면 계층 구성에서 자동 복구를 비활성화합니다.

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?