Amazon EC2 Auto Scaling 사용 - Amazon EC2 Auto Scaling

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

Amazon EC2 Auto Scaling 사용

이전에는 CloudWatch 이벤트라고 불리던 Amazon EventBridge는 리소스를 모니터링하는 이벤트 기반 규칙을 설정하거나 다른AWS서비스.

Amazon EC2 Auto Scaling 의 이벤트는 거의 실시간으로 EventBridge 에 전송됩니다. 이러한 다양한 이벤트에 대한 응답으로 프로그래밍 방식 동작 및 알림을 트리거하는 EventBridge 규칙을 설정할 수 있습니다. 예를 들어 인스턴스가 시작 또는 종료되는 중일 때AWS Lambda함수를 사용하여 미리 구성된 작업을 수행할 수 있습니다. 또는 Amazon SNS 주제에 대한 알림을 트리거하여 인스턴스 새로 고침의 진행 상황을 모니터링하고 특정 체크포인트에서 유효성 검사를 수행할 수 있습니다.

EventBridge 는 Lambda 함수를 호출하고 Amazon SNS 주제를 알리는 것 외에도 Amazon Kinesis 스트림에 이벤트를 릴레이,AWS Step Functions상태 시스템을 호출하고AWSSystems Manager 명령을 실행합니다. 지원되는 대상에 대한 내용은 단원을 참조하십시오.Amazon EventBridge 대상Amazon EventBridge 사용 설명서.

EventBridge 에 대한 자세한 내용은 단원을 참조하십시오.Amazon EventBridge 시작하기Amazon EventBridge 사용 설명서. Amazon EC2 Auto Scaling API 호출에서 트리거하는 규칙을 생성할 수도 있습니다. 자세한 내용은 단원을 참조하십시오.에서 트리거되는 EventBridge 규칙을 생성하려면AWS를 사용하는 API 호출AWS CloudTrailAmazon EventBridge 사용 설명서.

Auto Scaling

다음은 Amazon EC2 Auto Scaling 의 이벤트 예제입니다. 이벤트는 최선의 작업을 기반으로 발생됩니다.

웜 풀을 사용할 때 Amazon EC2 Auto Scaling 에서 EventBridge 로 전송되는 이벤트의 예는웜 풀.

스팟 인스턴스 중단에 대한 이벤트 예는 단원을 참조하십시오.스팟 인스턴스 중단 공지Linux 인스턴스용 Amazon EC2 사용 설명서.

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

EC2 Auto Scaling 인스턴스 새로 고침 체크포인트 도달

인스턴스를 새로 고치는 동안 Amazon EC2 Auto Scaling 은 교체된 인스턴스 수가 체크포인트에 정의된 백분율 임계값에 도달하면 이벤트를 발생시킵니다.

이벤트 데이터

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

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Checkpoint Reached", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "ab00cf8f-9126-4f3c-8010-dbb8cad6fb86", "AutoScalingGroupName": "my-auto-scaling-group", "CheckpointPercentage": "50", "CheckpointDelay": "300" } }

사용AWS Lambda이벤트를 처리할 수 있는 권한

AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고 코드를 실행하는 데 사용할 수 있는 컴퓨팅 서비스입니다. 코드를 패키징해서AWS Lambda로Lambda 함수.AWS Lambda함수가 호출될 때 함수를 실행합니다. 함수는 이벤트에 대한 응답으로 또는 애플리케이션 또는 서비스 (예:) 의 요청에 대한 응답으로 사용자가 수동으로 또는 자동으로 호출할 수 있습니다.

Lambda 를 시작하는 데 도움이 되도록 아래 절차를 따릅니다. 이 섹션에서는 Lambda 함수와 EventBridge 규칙을 생성하여 모든 인스턴스 시작 및 종료 이벤트를 Amazon CloudWatch Logs 기록하는 방법을 보여 줍니다.

수명 주기 작업을 수행하기 위해 Lambda 함수를 생성하는 방법을 보여 주는 단계별 자습서는자습서: Lambda 함수를 호출하는 수명 주기 후크 구성. 이 자습서에서는 수명 주기 후크를 시작하는 방법을 다룹니다. 수명 주기 후크를 사용하면 Lambda 를 사용하여 인스턴스가 서비스되기 전이나 종료되기 전에 인스턴스에서 작업을 수행할 수 있습니다.

Lambda 함수 생성

를 사용하여 Lambda 함수를 생성하려면 다음 절차에 따르십시오.hello-worldBlueprint가 이벤트의 대상 역할을 하도록 설정되어 있습니다.

Lambda 함수를 만들려면

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

  2. Lambda 를 처음 사용하는 경우 시작 페이지가 표시됩니다.지금 시작하기를 선택합니다.Lambda 함수 생성.

  3. [] 블루프린트 선택페이지에서hello-worldFilter을 선택한 다음hello-world블루프린트를 선택합니다.

  4. 트리거 구성 페이지에서 다음을 선택합니다.

  5. 함수 구성 페이지에서 다음을 수행합니다.

    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. 역할에서 기존 역할 선택을 선택합니다. 기존 역할의 경우 기본 실행 역할을 선택합니다. 그렇지 않다면 기본 실행 역할을 만듭니다.

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

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

  6. 검토 페이지에서 함수 생성을 선택합니다.

Lambda 함수로 이벤트 라우팅

선택한 이벤트와 일치하며 작업을 수행할 수 있도록 해당 이벤트를 Lambda 함수로 라우팅하는 규칙을 생성합니다.

이벤트를 Lambda 함수로 라우팅하는 규칙을 만들려면

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

  2. 탐색 창에는 다음 사항이 표시됩니다.이벤트를 선택하고Rules.

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

  4. 규칙에 대해 이름과 설명을 입력하십시오.

  5. Define pattern(패턴 정의)에 대해 다음을 수행하십시오.

    1. 이벤트 패턴을 선택합니다.

    2. 이벤트 패턴를 선택하고서비스에 의해 사전 정의됨.

      작은 정보

      또한 사용자 지정 이벤트 패턴을 사용하여 Amazon EC2 Auto Scaling 이벤트의 하위 집합만 감지하고 이에 따라 동작하는 규칙을 생성할 수 있습니다. 이 하위 집합은 Amazon EC2 Auto Scaling 이 해당 이벤트에 포함하는 특정 필드를 기반으로 할 수 있습니다. 자세한 내용은 단원을 참조하십시오.이벤트 패턴Amazon EventBridge 사용 설명서. 예제 이벤트 패턴에 대한 자세한 내용은3단계: EventBridge 규칙 생성은 수명 주기 후크에 대한 자습서입니다.

    3. 서비스 제공업체를 선택하고Amazon Web Services.

    4. 서비스 이름에서 Auto Scaling을 선택합니다.

    5. 이벤트 유형에서 인스턴스 시작 및 종료를 선택합니다.

    6. 성공 및 실패한 모든 인스턴스 시작 및 종료 이벤트를 포착하려면 모든 인스턴스 이벤트를 선택합니다.

    7. 기본적으로 규칙은 리전의 Auto Scaling 그룹과 일치합니다. 규칙이 특정 Auto Scaling 그룹과 일치하도록 하려면특정 그룹 이름를 선택하고 하나 이상의 Auto Scaling 그룹을 선택합니다.

  6. Select event bus(이벤트 버스 선택)에 대해 AWS default event bus(AWS 기본 이벤트 버스)를 선택하세요. 계정의 AWS 서비스가 이벤트를 출력하면 항상 계정의 기본 이벤트 버스로 이동합니다.

  7. 대상에 대해 Lambda 함수를 선택하십시오.

  8. 함수에서 생성한 Lambda 함수를 선택합니다.

  9. Create를 선택합니다.

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

규칙을 테스트하려면

  1. Amazon EC2 Auto Scaling 콘솔을 열려면https://console.aws.amazon.com/ec2autoscaling/.

  2. 세부 정보탭에서Edit페이지의 오른쪽에서.

  3. 의 값을 변경합니다.원하는 용량를 선택한 다음업데이트.

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

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

  6. Lambda 함수의 로그 그룹을 선택합니다 (예:/aws/lambbda/내 함수).

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

    
                            CloudWatch Logs 에서 Amazon EC2 Auto Scaling 에 대한 이벤트 데이터 보기

인스턴스 새로 고침 이벤트에 대한 EventBridge 규칙 생성

이 단원은 인스턴스 새로 고침 중 검사점에 도달할 때마다 이를 알리는 규칙을 생성하는 방법을 보여 줍니다. Amazon SNS 통해 이메일 알림을 설정하는 절차가 포함되어 있습니다. Amazon SNS 사용하여 이메일 알림을 전송하려면 먼저topic그런 다음 해당 주제에 이메일 주소를 구독합니다.

Amazon SNS 주제 생성

SNS 주제는 Auto Scaling 그룹에서 알림을 전송하는 데 사용하는 통신 채널인 논리적 액세스 지점입니다. 주제의 이름을 지정하여 주제를 생성합니다.

주제 이름을 생성할 때 이름은 다음 요구 사항을 충족해야 합니다.

  • 1~256자 이내로 생성합니다.

  • 대문자 및 소문자 ASCII 문자, 숫자, 밑줄 또는 하이픈을 사용합니다.

자세한 내용은 단원을 참조하십시오.Amazon SNS 주제 생성Amazon Simple Notification Service 개발자.

Amazon SNS 주제 구독

Auto Scaling 그룹에서 주제로 전송하는 알림을 받으려면 엔드포인트가 해당 주제를 구독해야 합니다. 이 절차에서엔드포인트에서 Amazon EC2 Auto Scaling 에서 알림을 받으려는 이메일 주소를 지정합니다.

자세한 내용은 단원을 참조하십시오.Amazon SNS 주제 구독Amazon Simple Notification Service 개발자.

Amazon SNS 구독 확인

Amazon SNS 이전 단계에서 지정한 이메일 주소로 확인 이메일을 보냅니다.

에서 이메일을 열어야 합니다.AWS다음 단계로 넘어가기 전에 알림을 주고받을 링크를 선택합니다.

다음에서 확인 메시지를 받게 됩니다.AWS. 이제 Amazon SNS 가 지정된 이메일 주소로 이메일 형식의 알림을 주고받을 수 있도록 구성됩니다.

Amazon SNS 주제로 이벤트 라우팅

선택한 이벤트와 일치하는 규칙을 생성하고 Amazon SNS 주제로 라우팅하여 가입한 이메일 주소를 알립니다.

이벤트를 Amazon SNS 주제로 라우팅하는 규칙을 생성하려면

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

  2. 탐색 창에는 다음 사항이 표시됩니다.이벤트를 선택하고Rules.

  3. 에서Rules섹션에서규칙 생성.

  4. 규칙에 대해 이름과 설명을 입력하십시오.

  5. Define pattern(패턴 정의)에 대해 다음을 수행하십시오.

    1. 이벤트 패턴을 선택합니다.

    2. 이벤트 패턴를 선택하고서비스에 의해 사전 정의됨.

    3. 서비스 제공업체를 선택하고Amazon Web Services.

    4. 서비스 이름에서 Auto Scaling을 선택합니다.

    5. 이벤트 유형를 선택하고인스턴스 새로 고침.

    6. 기본적으로 규칙은 리전의 Auto Scaling 그룹과 일치합니다. 규칙이 특정 Auto Scaling 그룹과 일치하도록 하려면특정 그룹 이름를 선택하고 하나 이상의 Auto Scaling 그룹을 선택합니다.

  6. Select event bus(이벤트 버스 선택)에 대해 AWS default event bus(AWS 기본 이벤트 버스)를 선택하세요. 계정의 AWS 서비스가 이벤트를 출력하면 항상 계정의 기본 이벤트 버스로 이동합니다.

  7. 대상에서 SNS 주제를 선택합니다.

  8. 주제에서 생성한 Amazon SNS 주제를 선택합니다.

  9. 입력 구성에서 이메일 알림에 대한 입력을 선택합니다.

  10. Create를 선택합니다.