Manju 씨가 문제해결을 위한
EC2 인스턴스 종료를 지연하는
방법을 설명합니다.

Manju_DUB_0518

내 Amazon EC2 인스턴스에 이상이 있다고 표시되고, Auto Scaling Terminating state(자동 조정 종료 상태)로 옮겨졌다가, 결국 종료되어 문제의 원인도 알 수 없습니다.

Auto Scaling 그룹에 수명 주기 후크를 추가하여, 인스턴스를 Terminating(종료) 상태에서 Terminating:Wait(종료: 대기) 상태로 옮길 수 있습니다. 이 상태에서는 이러한 인스턴스가 종료되기 전에 인스턴스에 액세스할 수 있어 이상이 있는 상태로 표시된 이유를 알 수 있습니다.

기본값으로 인스턴스는 3600초(1시간) 동안 Terminating:Wait 상태로 유지됩니다. 이 시간을 늘리려면 put-lifecycle-hook API 호출에서 heartbeat-timeout 파라미터를 사용하면 됩니다. 인스턴스를 Terminating:Wait 상태로 유지할 수 있는 최대 시간은 48시간 혹은 하트비트 제한 시간 100회 중 적은 쪽입니다.

수명 주기 후크는 AWS CLI와 API만 사용하여 구성할 수 있습니다. 다음 단계에서는 AWS CLI를 사용하여 필요한 SNS 주제와 IAM 권한을 생성하는 것을 포함해 수명 주기 후크를 구성하는 절차를 설명합니다. 콘솔을 사용하여 IAM과 SNS를 관리하고 싶을 때는 Create Role for IAM(IAM용 역할 만들기)과 Create a Topic for SNS(SNS용 주제 만들기) 단원을 참조하십시오.

1.    수명 주기 알림을 보낼 Auto Scaling용 SNS 주제를 만듭니다. 다음 CLI 예제에서는 SNS create-topic 명령을 사용하여 SNS 주제 ASNotifications:를 만듭니다.

$ aws sns create-topic --name ASNotifications

2.    반환되는 Amazon 리소스 이름(ARN)을 저장합니다. 반환되는 ARN은 다음과 같을 것입니다.

"TopicArn": "arn:aws:sns:us-west-2:123456789012:ASNotifications"

3.    SNS 주제 구독을 만듭니다. 이 경우 대기 중 상태인 하트비트 제한 시간을 연장하거나 수명 주기 작업을 완료해야 하는 LifecycleActionToken을 수신해야 합니다. 다음 예제에서는 aws sns subscribe 명령을 사용하여 엔드포이늩 이메일 주소가 user@amazon.com인 이메일 프로토콜(SMTP)을 사용하는 구독을 만듭니다.

$ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --protocol email --notification-endpoint user@amazon.com

SNS 주제로 전송할 Auto Scaling 서비스 권한을 부여하는 IAM 역할을 생성하여 IAM 권한을 구성합니다. 해당 정책이 들어간 텍스트 파일을 생성한 다음 aws iam create-role 명령에서 파일을 참조하여 구성할 수 있습니다. 다음 단계에서는 그 방법을 설명합니다.

1.    as vi 같은 텍스트 편집기를 사용하여 텍스트 파일을 생성합니다.

$ sudo vi assume-role.txt

2.    다음 콘텐츠를 텍스트 파일에 붙여 넣은 후, 파일을 저장합니다.

{
  "Version": "2012-10-17",
  "Statement": [{
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "autoscaling.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.    다음 예제에서는 aws iam create-role 명령을 사용하여 assume-role.txt에 저장된 정책으로 IAM 역할 AS-Lifecycle-Hook-Role을 생성합니다.

$ aws iam create-role --role-name AS-Lifecycle-Hook-Role --assume-role-policy-document file://assume-role.txt

출력에 역할의 ARN이 들어 있습니다. IAM 역할SNS 주제ARN을 모두 저장해야 합니다.

4.    수명 주기 후크 이벤트가 발생할 때 Auto Scaling 기능으로 SNS 알림을 전송할 수 있는 역할에 권한을 추가합니다. 다음 예제에서는 aws iam attach-role-policy 명령을 사용하여 관리형 정책 AutoScalingNotificationAccessRole을 IAM 역할 AS-Lifecycle-Hook-Role에 첨부합니다.

$ aws iam attach-role-policy --role-name AS-Lifecycle-Hook-Role --policy-arn arn:aws:iam::aws:policy/service-role/AutoScalingNotificationAccessRole

이 관리형 정책은 다음과 같은 권한을 부여합니다.

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Resource": "*",
      "Action": [
        "sqs:SendMessage",
        "sqs:GetQueueUrl",
        "sns:Publish"
      ]
    }
  ]
}

수명 주기 후크는 알림과 권한이 정확하게 구성된 후에 구성할 수 있습니다. 다음 예제에서는 aws autoscaling put-lifecycle-hook 명령을 사용하여 수명 주기 후크를 구성합니다.

aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroublshoot --auto-scaling-group-name MyASGroup
         --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
         --notification-target-arn arn:aws:sns:us-west-2:123456789012:ASNotifications
         --role-arn arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role

이 명령은 다음 작업을 수행합니다.

  • 수명 주기 후크의 이름을 지정합니다(AStroubleshoot).
  • 수명 주기 후크가 연결된 Auto Scaling 그룹을 확인합니다(MyASGroup).
  • 인스턴스 종료 수명 주기 단계용 후크를 구성합니다(EC2_INSTANCE_TERMINATING).
  • SNS 주제 ARN을 지정합니다(arn:aws:sns:us-west-2:123456789012:ASNotifications).
  • IAM 역할 ARN을 지정합니다(arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role).

사용자의 Auto Scaling 그룹 이름, SNS 대상 ARN 및 IAM 역할 ARN을 적절한 위치에서 대체한 후에 이 명령을 사용자 환경에서 실행해야 합니다.

수명 주기 후크를 테스트하려면 인스턴스를 선택하고 terminate-instance-in-auto-scaling group를 사용하여 인스턴스를 종료합니다. 그러면 인스턴스가 이상 상태가 되는 시점과 유사한 방식으로 Auto Scaling에 의해 인스턴스가 종료됩니다. 인스턴스가 Terminating:Wait 상태로 옮겨진 후에 record-lifecycle-action-heartbeat를 사용하여 인스턴스를 Terminating:Wait 상태로 유지할 수 있고, complete-lifecycle-action을 사용하여 종료를 완료할 수 있습니다. 다음 예제에 이를 실행할 구문이 나옵니다.

aws autoscaling complete-lifecycle-action --lifecycle-hook-name my-lifecycle-hook
         --auto-scaling-group-name MyASGroup --lifecycle-action-result CONTINUE
         --instance-id i-0e7380909ffaab747

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2015-08-04

업데이트됨: 2017-08-25