문제를 해결할 수 있도록 비정상적인 Amazon EC2 인스턴스의 종료를 연기하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 비정상적이어서 문제의 원인을 파악하기도 전에 종료되었습니다.

간략한 설명

종료하기 전에 비정상적인 EC2 인스턴스의 문제를 해결하려면 Amazon EC2 Auto Scaling 수명 주기 후크를 추가하여 인스턴스의 상태를 Terminating에서 Terminating:Wait로 전환하세요.

기본적으로 인스턴스는 3,600초 또는 1시간 동안 Terminating:Wait 상태로 유지됩니다. 이 시간을 늘리려면 put-lifecycle-hook API 직접 호출에서 heartbeat-timeout 매개 변수를 사용하세요. 인스턴스를 Terminating:Wait 상태로 유지할 수 있는 최대 시간은 48시간 또는 하트비트 타임아웃의 100배 중 더 작은 값입니다.

해결 방법

AWS Command Line Interface(AWS CLI)를 사용하여 수명 주기 후크를 구성합니다.

**참고:**AWS CLI 명령을 실행할 때 오류가 발생하면, AWS CLI 오류 문제 해결을 참조하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

Amazon SNS 주제를 생성합니다.

Amazon Simple Notification Service(SNS) 주제를 만들려면 다음 단계를 완료하세요.

  1. EC2 Auto Scaling 그룹이 수명 주기 알림을 전송하는 SNS 주제를 만듭니다. 다음 예에서는 create-topic 명령을 실행하여 ASNotifications 토픽을 만듭니다.

    $ aws sns create-topic --name ASNotifications

    출력은 다음과 비슷한 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 권한 구성

EC2 Auto Scaling 그룹 서비스에 SNS 항목으로 보낼 수 있는 권한을 부여하는 AWS Identity and Access Management(IAM) 역할을 구성합니다. 이 작업을 완료하려면 적절한 정책이 포함된 텍스트 파일을 만듭니다. 그런 다음 create-role 명령에서 파일을 참조합니다.

  1. 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 명령을 실행하여 AS-Lifecycle-Hook-Role을 만듭니다. 정책에서 assume-role.txt에 저장된 IAM 역할을 만듭니다.

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

    출력에는 역할의 ARN이 포함됩니다. IAM 역할과 SNS 주제 모두의 ARN에 유의하세요.

  4. 수명 주기 후크 이벤트가 발생할 때 EC2 Auto Scaling이 SNS 알림을 전송할 수 있도록 역할에 권한을 추가합니다. 다음 예시에서는 attach-role-policy 명령을 실행하여 AutoScalingNotificationAccessRole AWS 관리형 정책을 AS-Lifecycle-Hook-Role에 연결합니다. IAM 역할에 연결합니다.

    $ 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"
          ]
        }
      ]
    }

    중요: AutoScalingNotificationAccessRole AWS 관리형 정책에 따라 EC2 Auto Scaling은 모든 SNS 주제 및 큐에 대한 호출을 허용합니다. 특정 SNS 주제 또는 큐에 대한 EC2 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 AStroubleshoot
    --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

참고: 예제 값을 EC2 Auto Scaling 그룹 이름, SNS 대상 ARN 및 IAM 역할 ARN으로 바꿉니다.

put-lifecycle-hook 명령은 다음 기능을 완료합니다.

  • 수명 주기 후크의 이름을 지정합니다(AStroubleshoot).
  • 수명 주기 후크와 연결된 EC2 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 명령을 실행하여 인스턴스를 강제로 종료합니다. 인스턴스가 Terminating:Wait 상태로 이동한 후, record-lifecycle-action-heartbeat 명령을 실행하여 인스턴스를 이 상태로 유지합니다. 또는 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

관련 정보

Amazon EC2 Auto Scaling 수명 주기 후크

AWS 서비스에 대한 권한을 위임하는 역할 생성

Amazon SNS 주제 생성

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