Auto Scaling 그룹에 대한 수명 주기 후크 추가 준비 - Amazon EC2 Auto Scaling

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Auto Scaling 그룹에 대한 수명 주기 후크 추가 준비

Auto Scaling 그룹에 수명 주기 후크를 추가하기 전에 사용자 데이터 스크립트 또는 알림 대상이 올바르게 설정되어 있는지 확인하세요.

  • 인스턴스가 시작될 때 사용자 데이터 스크립트를 사용하여 사용자 지정 작업을 수행하려는 경우, 알림 대상을 구성할 필요가 없습니다. 그러나 사용자 데이터 스크립트를 지정하는 시작 템플릿 또는 시작 구성을 사전에 생성하고 이를 Auto Scaling 그룹과 연결해야 합니다. 사용자 데이터 스크립트에 대한 자세한 내용은 Amazon EC2 사용 설명서의 시작 시 Linux 인스턴스에서 명령 실행을 참조하십시오.

  • 수명 주기 작업이 완료될 때 Amazon EC2 Auto Scaling에 신호를 보내려면 스크립트에 CompleteLifecycleActionAPI 호출을 추가하고, Auto Scaling 인스턴스가 이 API를 호출하도록 허용하는 정책을 사용하여 IAM 역할을 수동으로 생성해야 합니다. 시작 템플릿 또는 시작 구성은 시작 시 Amazon EC2 인스턴스에 연결되는 IAM 인스턴스 프로필을 사용하여 이 역할을 지정해야 합니다. 자세한 내용은 Auto Scaling 그룹에서 라이프사이클 작업 완료Amazon EC2 인스턴스에서 실행되는 애플리케이션에 대한 IAM 역할 섹션을 참조하세요.

  • Lambda와 같은 서비스를 사용하여 사용자 지정 작업을 수행하려면 이미 규칙을 생성하고 EventBridge Lambda 함수를 대상으로 지정해야 합니다. 자세한 정보는 수명 주기 알림에 대한 알림 대상 구성을 참조하세요.

  • 라이프사이클 작업이 완료될 때 Lambda가 Amazon EC2 Auto Scaling에 신호를 보낼 수 있도록 하려면 함수 코드에 API 호출을 CompleteLifecycleAction추가해야 합니다. 또한 Lambda에 수명 주기 작업을 완료할 수 있는 권한을 부여하는 함수의 집행 역할에 IAM 정책을 연결해야 합니다. 자세한 설명은 자습서: Lambda 함수를 호출하는 수명 주기 후크 구성 섹션을 참조하세요.

  • Amazon SNS 또는 Amazon SQS와 같은 서비스를 사용하여 사용자 지정 작업을 수행하려면 사전에 SNS 주제 또는 SQS 대기열을 생성하고 Amazon 리소스 이름(ARN)을 준비해야 합니다. 또한 사전에 Amazon EC2 Auto Scaling에 SNS 주제 또는 SQS 대상에 대한 액세스 권한을 부여하는 IAM 역할을 생성하고 ARN을 준비해야 합니다. 자세한 정보는 수명 주기 알림에 대한 알림 대상 구성을 참조하세요.

    참고

    기본적으로 콘솔에서 수명 주기 후크를 추가하면 Amazon EC2 Auto Scaling에서 Amazon에 수명 주기 이벤트 알림을 보냅니다. EventBridge EventBridge 또는 사용자 데이터 스크립트를 사용하는 것이 가장 좋습니다. Amazon SNS 또는 Amazon SQS로 알림을 직접 보내는 수명 주기 후크를 생성하려면 AWS CLI AWS CloudFormation, 또는 SDK를 사용하여 수명 주기 후크를 추가하십시오.

수명 주기 알림에 대한 알림 대상 구성

Auto Scaling 그룹에 수명 주기 후크를 추가하여 인스턴스가 대기 상태로 전환될 때 사용자 정의 작업을 수행할 수 있습니다. 선호하는 개발 방식에 따라 다양한 Amazon Web Services를 사용하여 이러한 작업을 수행하도록 알림 대상을 구성할 수 있습니다.

첫 번째 접근 방식은 EventBridge Amazon을 사용하여 원하는 작업을 수행하는 Lambda 함수를 호출하는 것입니다. 두 번째 방법은 알림을 게시할 Amazon Simple Notification Service(Amazon SNS) 주제를 생성하는 것입니다. 클라이언트는 SNS 주제를 구독하고 지원되는 프로토콜을 사용하여 게시된 메시지를 수신할 수 있습니다. 마지막 접근 방식은 분산 애플리케이션에서 폴링 모델을 통해 메시지를 교환하는 데 사용되는 메시징 시스템인 Amazon Simple Queue Service(Amazon SQS)를 사용하는 것입니다.

모범 사례로 사용하는 것이 좋습니다. EventBridge Amazon SNS와 Amazon SQS로 전송된 알림에는 Amazon EC2 Auto Scaling에서 보내는 알림과 동일한 정보가 포함되어 있습니다. EventBridge 이전에는 EventBridge SNS나 SQS에 알림을 보내고 다른 서비스를 SNS 또는 SQS와 통합하여 프로그래밍 작업을 수행하는 것이 표준 관행이었습니다. 이제 타겟팅할 수 있는 더 많은 옵션이 EventBridge 제공되고 서버리스 아키텍처를 사용하여 이벤트를 더 쉽게 처리할 수 있습니다.

다음 절차에서는 알림 대상을 설정하는 방법에 대해 설명합니다.

시작 템플릿 또는 시작 구성에 인스턴스가 시작될 때 인스턴스를 구성하는 사용자 지정 스크립트가 있는 경우, 인스턴스에 사용자 지정 작업을 수행하기 위해 알림을 받을 필요가 없습니다.

중요

라이프사이클 후크와 함께 사용하는 EventBridge 규칙, Lambda 함수, Amazon SNS 주제 및 Amazon SQS 대기열은 항상 Auto Scaling 그룹을 생성한 지역과 동일한 지역에 있어야 합니다.

를 사용하여 Lambda로 알림을 라우팅합니다. EventBridge

인스턴스가 대기 상태에 들어갈 때 Lambda 함수를 호출하도록 EventBridge 규칙을 구성할 수 있습니다. Amazon EC2 Auto Scaling은 시작 또는 종료 중인 인스턴스와 수명 주기 작업을 제어하는 데 사용할 수 있는 EventBridge 토큰에 대한 수명 주기 이벤트 알림을 내보냅니다. 이러한 이벤트의 예는 Amazon EC2 Auto Scaling 이벤트 참조 섹션을 참조하세요.

참고

를 사용하여 이벤트 규칙을 생성하면 콘솔은 Lambda 함수를 호출할 권한을 부여하는 EventBridge 데 필요한 IAM 권한을 자동으로 추가합니다. AWS Management Console AWS CLI를 사용하여 이벤트 규칙을 만드는 경우, 이 권한을 명시적으로 부여해야 합니다.

EventBridge 콘솔에서 이벤트 규칙을 생성하는 방법에 대한 자세한 내용은 Amazon EventBridge 사용 설명서의 이벤트에 반응하는 Amazon EventBridge 규칙 생성을 참조하십시오.

또는

콘솔 사용자를 대상으로 하는 입문자용 자습서는 자습서: Lambda 함수를 호출하는 수명 주기 후크 구성 섹션을 참조하세요. 이 자습서에서는 시작 이벤트를 수신하고 로그 로그에 기록하는 간단한 Lambda 함수를 생성하는 방법을 보여줍니다. CloudWatch

Lambda 함수를 호출하는 EventBridge 규칙을 생성하려면
  1. Lambda 콘솔을 사용하여 Lambda 함수를 생성하고 Amazon 리소스 이름(ARN)을 적어둡니다. 예를 들어 arn:aws:lambda:region:123456789012:function:my-function입니다. 대상을 만들려면 ARN이 필요합니다. EventBridge 자세한 설명은 AWS Lambda 개발자 가이드에서 Lambda 시작하기를 참조하세요.

  2. 인스턴스 시작에 대한 이벤트와 일치하는 규칙을 생성하려면 다음 put-rule 명령을 사용합니다.

    aws events put-rule --name my-rule --event-pattern file://pattern.json --state ENABLED

    다음 예에서는 인스턴스 시작 수명 주기 작업을 위한 pattern.json을 보여 줍니다. 기울임꼴 텍스트를 Auto Scaling 그룹의 이름으로 바꿉니다.

    { "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance-launch Lifecycle Action" ], "detail": { "AutoScalingGroupName": [ "my-asg" ] } }

    명령이 성공적으로 실행되면 규칙의 ARN으로 EventBridge 응답합니다. ARN을 적어 두세요. 4단계에서 이 정보가 필요합니다.

    다른 이벤트와 일치하는 규칙을 생성하려면 이벤트 패턴을 수정합니다. 자세한 설명은 Auto Scaling 이벤트를 처리하는 EventBridge 데 사용합니다. 섹션을 참조하세요.

  3. 규칙의 대상으로 사용할 Lambda 함수를 지정하려면 다음 put-targets 명령을 사용합니다.

    aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws:lambda:region:123456789012:function:my-function

    앞의 명령에서 my-rule은 2단계에서 규칙에 지정한 이름이고, Arn 파라미터 값은 1단계에서 생성한 함수의 ARN입니다.

  4. 규칙이 Lambda 함수를 호출하도록 허용하는 권한을 추가하려면 다음 Lambda add-permission 명령을 사용합니다. 이 명령은 EventBridge 서비스 주체 (events.amazonaws.com) 를 신뢰하고 권한 범위를 지정된 규칙으로 지정합니다.

    aws lambda add-permission --function-name my-function --statement-id my-unique-id \ --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:region:123456789012:rule/my-rule

    앞의 명령에서:

    • my-function은 규칙에서 대상으로 사용하도록 할 Lambda 함수의 이름입니다.

    • my-unique-idLambda 함수 정책에서 명령문을 설명하기 위해 정의하는 고유 식별자입니다.

    • source-arn규칙의 ARN입니다. EventBridge

    이 명령이 성공적으로 실행되면 다음과 비슷한 출력이 표시됩니다.

    { "Statement": "{\"Sid\":\"my-unique-id\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:events:us-west-2:123456789012:rule/my-rule\"}}}" }

    Statement 값은 Lambda 함수 정책에 추가된 문의 JSON 문자열 버전입니다.

  5. 이 지침을 따른 후에는 다음 단계 Auto Scaling 그룹에 라이프사이클 후크 추가로 계속 진행합니다.

Amazon SNS를 사용하여 알림 수신

Amazon SNS를 사용하여 수명 주기 작업 발생 시 알림을 수신하도록 Amazon SNS 알림 대상(SNS 주제)을 설정할 수 있습니다. 그러면 Amazon SNS에서는 구독한 수신자에게 알림을 보냅니다. 구독이 확인되기 전에는 주제에 게시된 알림이 수신자에게 전송되지 않습니다.

Amazon SNS를 사용하여 알림 설정
  1. Amazon SNS 콘솔 또는 다음 create-topic 명령을 사용하여 Amazon SNS 주제를 생성합니다. 사용 중인 Auto Scaling 그룹과 동일한 지역에 주제가 있는지 확인합니다. 자세한 설명은 Amazon Simple Notification Service 개발자 안내서Amazon SNS 시작하기를 참조하세요.

    aws sns create-topic --name my-sns-topic
  2. 주제 Amazon 리소스 이름(ARN)을 기록합니다(예: arn:aws:sns:region:123456789012:my-sns-topic). 이 이름은 수명 주기 후크를 생성하는데 필요합니다.

  3. Amazon SNS 알림 대상에게 Amazon EC2 Auto Scaling 액세스 권한을 부여할 IAM 서비스 역할을 생성합니다.

    Amazon EC2 Auto Scaling에 SNS 주제에 대한 액세스 권한 부여

    1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

    2. 왼쪽의 탐색 창에서 역할을 선택합니다.

    3. 역할 생성을 선택합니다.

    4. 신뢰할 수 있는 엔터티 선택(Select trusted entity)에서 AWS 서비스( service)를 선택합니다.

    5. 사용 사례를 보려면 다른 AWS 서비스의 사용 사례(Use cases for other services)에서 EC2 Auto Scaling을 선택한 다음 EC2 Auto Scaling 알림 액세스(EC2 Auto Scaling Notification Access)를 선택합니다.

    6. 다음(Next)을 두 번 선택하여 이름 지정, 검토 및 생성(Name, review, and create) 페이지로 이동합니다.

    7. 역할 이름(Role name)에 역할의 이름(예: my-notification-role)을 입력하고 역할 생성(Create role)을 선택합니다.

    8. 역할 페이지에서 방금 만든 역할을 선택하여 요약 페이지를 엽니다. 역할 ARN을 기록해 둡니다. 예를 들어 arn:aws:iam::123456789012:role/my-notification-role입니다. 이 이름은 수명 주기 후크를 생성하는데 필요합니다.

  4. 이 지침을 따른 후에는 다음 단계 수명 주기 후크 추가(AWS CLI)로 계속 진행합니다.

Amazon SQS 사용하여 알림 수신

Amazon SQS를 사용하여 수명 주기 작업이 발생할 때 메시지를 수신할 알림 대상을 설정할 수 있습니다. 그런 다음 대기열 소비자는 이러한 알림에 따라 작업을 수행하기 위해 SQS 대기열을 폴링해야 합니다.

중요

FIFO 대기열은 수명 주기 후크와 호환되지 않습니다.

Amazon SQS를 사용하여 알림 설정
  1. Amazon SQS 콘솔을 사용하여 SQS 대기열을 생성합니다. 사용 중인 Auto Scaling 그룹과 동일한 지역에 대기열이 있는지 확인합니다. 자세한 설명은 Amazon Simple Queue Service 개발자 안내서Amazon SQS 시작하기를 참조하세요.

  2. 대기열 ARN을 적어 둡니다(예: arn:aws:sqs:us-west-2:123456789012:my-sqs-queue). 이 이름은 수명 주기 후크를 생성하는데 필요합니다.

  3. Amazon SQS 알림 대상에게 Amazon EC2 Auto Scaling 액세스 권한을 부여할 IAM 서비스 역할을 생성합니다.

    Amazon EC2 Auto Scaling에 SQS 대기열에 대한 액세스 권한 부여

    1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

    2. 왼쪽의 탐색 창에서 역할을 선택합니다.

    3. 역할 생성을 선택합니다.

    4. 신뢰할 수 있는 엔터티 선택(Select trusted entity)에서 AWS 서비스( service)를 선택합니다.

    5. 사용 사례를 보려면 다른 AWS 서비스의 사용 사례(Use cases for other services)에서 EC2 Auto Scaling을 선택한 다음 EC2 Auto Scaling 알림 액세스(EC2 Auto Scaling Notification Access)를 선택합니다.

    6. 다음(Next)을 두 번 선택하여 이름 지정, 검토 및 생성(Name, review, and create) 페이지로 이동합니다.

    7. 역할 이름(Role name)에 역할의 이름(예: my-notification-role)을 입력하고 역할 생성(Create role)을 선택합니다.

    8. 역할 페이지에서 방금 만든 역할을 선택하여 요약 페이지를 엽니다. 역할 ARN을 기록해 둡니다. 예를 들어 arn:aws:iam::123456789012:role/my-notification-role입니다. 이 이름은 수명 주기 후크를 생성하는데 필요합니다.

  4. 이 지침을 따른 후에는 다음 단계 수명 주기 후크 추가(AWS CLI)로 계속 진행합니다.

Amazon SNS 및 Amazon SQS에 대한 알림 메시지의 예

인스턴스가 대기 상태에 있는 동안 Amazon SNS 또는 Amazon SQS 알림 대상에게 메시지가 전송됩니다. 메시지에 포함되는 정보는 다음과 같습니다.

  • LifecycleActionToken - 수명 주기 작업 토큰

  • AccountId— AWS 계정 ID.

  • AutoScalingGroupName — Auto Scaling 그룹의 이름입니다.

  • LifecycleHookName - 수명 주기 후크 이름

  • EC2InstanceId — EC2 인스턴스의 ID입니다.

  • LifecycleTransition - 수명 주기 후크 유형

  • NotificationMetadata - 알림 메타데이터

다음은 알림 메시지의 예입니다.

Service: AWS Auto Scaling Time: 2021-01-19T00:36:26.533Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a LifecycleActionToken: 71514b9d-6a40-4b26-8523-05e7ee35fa40 AccountId: 123456789012 AutoScalingGroupName: my-asg LifecycleHookName: my-hook EC2InstanceId: i-0598c7d356eba48d7 LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING NotificationMetadata: hook message metadata

테스트 알림 메시지의 예

수명 주기 후크를 처음 추가하면 알림 대상에게 테스트 알림 메시지가 전송됩니다. 다음은 테스트 알림 메시지의 예입니다.

Service: AWS Auto Scaling Time: 2021-01-19T00:35:52.359Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a Event: autoscaling:TEST_NOTIFICATION AccountId: 123456789012 AutoScalingGroupName: my-asg AutoScalingGroupARN: arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:042cba90-ad2f-431c-9b4d-6d9055bcc9fb:autoScalingGroupName/my-asg
참고

Amazon EC2 Auto Scaling에서 전송된 이벤트의 예는 을 EventBridge 참조하십시오. Amazon EC2 Auto Scaling 이벤트 참조