Amazon EC2 Auto Scaling
사용 설명서

Auto Scaling 그룹 조정 시 CloudWatch 이벤트 수신

Amazon EC2 Auto Scaling을 사용하여 애플리케이션을 자동으로 조정하는 경우, Amazon EC2 Auto Scaling이 Auto Scaling 그룹에서 EC2 인스턴스를 시작하거나 종료하는 시기를 알면 유용합니다. Auto Scaling 그룹이 조정될 때마다 Amazon CloudWatch Events에 이벤트를 보내도록 Amazon EC2 Auto Scaling을 구성할 수 있습니다.

자세한 내용은 Amazon CloudWatch Events 사용 설명서 단원을 참조하십시오.

Auto Scaling 이벤트

Amazon EC2 Auto Scaling은 다음과 같은 이벤트가 발생하는 경우 CloudWatch 이벤트에 이벤트를 보낼 수 있도록 지원합니다.

EC2 인스턴스-시작 수명 주기 작업

Amazon EC2 Auto Scaling이 수명 주기 후크로 인해 인스턴스를 Pending:Wait 상태로 이동시켰습니다.

이벤트 데이터

다음은 이 이벤트의 예제 데이터입니다.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance-launch Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "LifecycleActionToken": "87654321-4321-4321-4321-210987654321", "AutoScalingGroupName": "my-asg", "LifecycleHookName": "my-lifecycle-hook", "EC2InstanceId": "i-1234567890abcdef0", "LifecycleTransition": "autoscaling:EC2_INSTANCE_LAUNCHING", "NotificationMetadata": "additional-info" } }

EC2 인스턴스 시작 성공

Amazon EC2 Auto Scaling이 성공적으로 인스턴스를 시작했습니다.

이벤트 데이터

다음은 이 이벤트의 예제 데이터입니다.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "InProgress", "Description": "Launching a new EC2 instance: i-12345678", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text", } }

EC2 인스턴스 시작 실패

Amazon EC2 Auto Scaling이 인스턴스를 시작하지 못했습니다.

이벤트 데이터

다음은 이 이벤트의 예제 데이터입니다.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Launch Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "Failed", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "message-text", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text", } }

EC2 인스턴스-종료 수명 주기 작업

Amazon EC2 Auto Scaling이 수명 주기 후크로 인해 인스턴스를 Terminating:Wait 상태로 이동시켰습니다.

이벤트 데이터

다음은 이 이벤트의 예제 데이터입니다.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance-terminate Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "LifecycleActionToken":"87654321-4321-4321-4321-210987654321", "AutoScalingGroupName":"my-asg", "LifecycleHookName":"my-lifecycle-hook", "EC2InstanceId":"i-1234567890abcdef0", "LifecycleTransition":"autoscaling:EC2_INSTANCE_TERMINATING", "NotificationMetadata":"additional-info" } }

EC2 인스턴스 종료 성공

Amazon EC2 Auto Scaling이 인스턴스를 종료했습니다.

이벤트 데이터

다음은 이 이벤트의 예제 데이터입니다.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Terminate Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "InProgress", "Description": "Terminating EC2 instance: i-12345678", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text", } }

EC2 인스턴스 종료 실패

Amazon EC2 Auto Scaling이 인스턴스를 종료하지 못했습니다.

이벤트 데이터

다음은 이 이벤트의 예제 데이터입니다.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Terminate Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "Failed", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "message-text", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text", } }

Lambda 함수 만들기

다음 절차를 사용하여 Auto Scaling 이벤트를 처리하는 Lambda 함수를 만듭니다.

Lambda 함수를 만들려면

  1. https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  2. Lambda를 처음 사용하는 경우 시작 페이지가 표시되면 [Get Started Now]를 선택합니다. 그렇지 않은 경우 [Create a Lambda function]을 선택합니다.

  3. [Select blueprint] 페이지에서 [Filter]에 hello-world를 입력한 다음 [hello-world] 블루프린트를 선택합니다.

  4. [Configure triggers] 페이지에서 [Next]를 선택합니다.

  5. [Configure function] 페이지에서 다음을 수행합니다.

    1. Lambda 함수의 이름과 설명을 입력합니다.

    2. Lambda 함수의 코드를 편집합니다. 예를 들어, 다음 코드는 단순히 이벤트를 기록합니다.

      console.log('Loading function'); exports.handler = function(event, context) { console.log("AutoScalingEvent()"); console.log("Event data:\n" + JSON.stringify(event, null, 4)); context.succeed("..."); };
    3. 사용할 기존 역할이 있는 경우 [Role]에서 [Choose an existing role]을 선택한 다음 [Existing role]에서 역할을 선택합니다. 또는 새 역할을 만들려면 [Role]에서 여러 옵션 중 하나를 선택한 다음 지시를 따릅니다.

    4. (선택 사항) [Advanced settings]에서 필요한 사항을 수정합니다.

    5. [Next]를 선택합니다.

  6. [Review] 페이지에서 [Create function]을 선택합니다.

Lambda 함수로 이벤트 라우팅

다음 절차를 사용하여 Lambda 함수로 Auto Scaling 이벤트를 라우팅합니다.

Lambda 함수로 이벤트를 라우팅하려면

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

  2. 탐색 창에서 [Events]를 선택합니다.

  3. [Create rule]을 선택합니다.

  4. [Event selector]에서 [Auto Scaling]을 이벤트 소스로 선택합니다. 기본적으로 규칙이 모든 Auto Scaling 그룹의 모든 Auto Scaling 이벤트에 적용됩니다. 또는 특정 이벤트 또는 특정 Auto Scaling 그룹을 선택할 수 있습니다.

  5. [Targets]에서 [Add target]을 선택합니다. [Lambda function]을 대상 유형으로 선택한 다음 Lambda 함수를 선택합니다.

  6. [Configure details]를 선택합니다.

  7. [Rule definition]에 규칙 이름과 설명을 입력합니다.

  8. [Create rule]을 선택합니다.

규칙을 테스트하려면 Auto Scaling 그룹의 크기를 변경합니다. Lambda 함수의 예제 코드를 사용한 경우, CloudWatch Logs에 이벤트가 기록됩니다.

규칙을 테스트하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 [Auto Scaling Groups]를 선택한 다음 Auto Scaling 그룹을 선택합니다.

  3. [Details] 탭에서 [Edit]를 선택합니다.

  4. [Desired] 값을 변경한 다음 [Save]를 선택합니다.

  5. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  6. 탐색 창에서 [Logs]를 선택합니다.

  7. Lambda 함수의 로그 그룹을 선택합니다(예: /aws/lambda/my-function).

  8. 이벤트 데이터를 보려면 로그 스트림을 선택합니다. 다음과 유사한 데이터가 표시됩니다.

     CloudWatch Logs에서 Amazon EC2 Auto Scaling의 이벤트 데이터 보기.