문제를 해결할 수 있도록 비정상 Amazon EC2 인스턴스의 Auto Scaling 종료를 지연시키려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 11월 18일

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 비정상으로 표시되고 “Auto Scaling 종료 중” 상태로 전환되었습니다. 그런 다음 문제의 원인을 파악하기 전에 Amazon EC2 인스턴스가 종료되었습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Auto Scaling 그룹에 수명 주기 후크를 추가하여, 인스턴스를 종료 중(Terminating) 상태에서 종료 중: 대기(Terminating:Wait) 상태로 전환될 수 있습니다. 이 상태에서는 인스턴스가 종료되기 전에 인스턴스에 액세스한 다음 비정상으로 표시된 문제를 해결할 수 있습니다.

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

해결 방법

참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 가장 최신 버전을 사용하고 있는지 확인하십시오.

AWS CLI를 사용하여 수명 주기 후크를 구성하려면 다음 단계를 따르세요. 그런 다음 필요한 Amazon Simple Notification Service(Amazon SNS) 주제 및 AWS Identity and Access Management(IAM) 권한을 생성합니다.

또는 AWS Management Console을 사용하여 수명 주기 후크를 구성할 수 있습니다. 그런 다음 콘솔에서 Amazon SNS 주제 및 IAM 권한을 관리하려면 다음을 참조하세요.

Amazon SNS 주제 생성

1.    AWS Auto Scaling이 수명 주기 알림을 전송할 수 있는 주제를 생성합니다. 다음 예제에서는 create-topic 명령을 호출하여 ASNotifications 주제를 생성합니다.

$ aws sns create-topic --name ASNotifications

다음과 유사한 Amazon 리소스 이름(ARN)이 반환됩니다.

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

2.    주제에 대한 구독을 생성합니다. 대기 상태의 하트비트 제한 시간을 연장하거나 수명 주기 작업을 완료하는 데 필요한 LifecycleActionToken을 받으려면 구독이 있어야 합니다. 다음 예제에서는 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

IAM 권한 구성

SNS 주제로 전송할 AWS Auto Scaling 서비스 권한을 부여하는 IAM 역할을 생성하여 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.    수명 주기 후크 이벤트가 발생할 때 AWS Auto Scaling 기능으로 SNS 알림을 전송할 수 있는 역할에 권한을 추가합니다. 다음 예제에서는 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 관리형 정책 AutoScalingNotificationAccessRole을 사용하면 AWS Auto Scaling 서비스가 모든 SNS 주제 및 대기열을 호출할 수 있습니다. 특정 SNS 주제 또는 대기열에만 AWS Auto Scaling의 액세스를 제한하려면 다음 샘플 정책을 사용합니다.

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Resource": "arn:aws:sns:us-west-2:123456789012:ASNotifications",
       "Action": [
         "sqs:SendMessage",
         "sqs:GetQueueUrl",
         "sns:Publish"
       ]
     }
   ]
}

수명 주기 후크 구성

그런 다음 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 

이 명령을 실행하기 전에 자체 AWS Auto Scaling 그룹 이름, SNS 대상 ARN 및 IAM 역할 ARN을 대체해야 합니다.

다음 명령을 실행합니다.

  • 수명 주기 후크의 이름을 지정합니다(AStroubleshoot).
  • 수명 주기 후크가 연결된 AWS 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).

수명 주기 후크 테스트

수명 주기 후크를 테스트하려면 인스턴스를 선택하고 terminate-instance-in-auto-scaling group을 사용하여 인스턴스를 종료합니다. 이렇게 하면 AWS Auto Scaling이 인스턴스가 비정상 상태가 되는 경우와 마찬가지로 인스턴스를 종료하게 됩니다. 인스턴스가 종료 중: 대기 상태(Terminating:Wait state)로 전환된 후에는 레코드 수명 주기 작업 하트비트를 사용하여 인스턴스를 이 상태로 유지할 수 있습니다. 또는 수명 주기 완료 작업을 사용하여 종료를 완료할 수 있습니다.

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?