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

4분 분량
0

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

관련 정보

Amazon EC2 Auto Scaling 수명 주기 후크

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