Lambda를 사용하여 사용자 지정 해지 정책 생성 - Amazon EC2 Auto Scaling

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

Lambda를 사용하여 사용자 지정 해지 정책 생성

Amazon EC2 Auto Scaling은 종료 정책을 사용하여 Auto Scaling 그룹의 크기를 줄일 때 먼저 종료할 인스턴스의 우선순위를 지정합니다(스케일링). Auto Scaling 그룹은 기본 해지 정책을 사용하지만, 사용자는 자체 해지 정책을 선택하거나 생성할 수 있습니다. 미리 정의된 해지 정책을 선택하는 방법에 대한 자세한 설명은 Amazon EC2 Auto Scaling에 대한 종료 정책 구성 섹션을 참조하세요.

이 주제에서는 Amazon EC2 Auto Scaling이 특정 이벤트에 대한 응답으로 호출하는 AWS Lambda 함수를 사용하여 사용자 지정 종료 정책을 생성하는 방법을 알아봅니다. 생성하는 Lambda 함수는 Amazon EC2 Auto Scaling에서 전송한 입력 데이터의 정보를 처리하고 종료할 준비가 된 인스턴스 목록을 반환합니다.

사용자 지정 해지 정책은 해지되는 인스턴스와 해지 시점을 보다 효과적으로 제어할 수 있습니다. 예를 들어 Auto Scaling 그룹이 스케일 인될 때 Amazon EC2 Auto Scaling은 중단되어서는 안 되는 실행 중인 워크로드가 있는지 확인할 수 없습니다. Lambda 함수를 사용하면 종료 요청을 검증하고 워크로드가 완료될 때까지 기다렸다가 인스턴스 ID를 Amazon EC2 Auto Scaling에 반환하여 종료할 수 있습니다.

입력 데이터

Amazon EC2 Auto Scaling은 이벤트의 규모 조정을 위한 JSON 페이로드를 생성하며, 최대 인스턴스 수명 또는 인스턴스 새로 고침 기능의 결과로 인스턴스가 종료될 때도 마찬가지입니다. 또한 가용 영역 간에 그룹 리밸런싱 시 시작할 수 있는 이벤트의 규모에 대한 JSON 페이로드를 생성합니다.

이 페이로드에는 Amazon EC2 Auto Scaling이 종료해야 하는 용량, 종료를 제안하는 인스턴스 목록, 종료를 시작한 이벤트에 대한 정보가 포함되어 있습니다.

다음은 페이로드 예입니다.

{ "AutoScalingGroupARN": "arn:aws:autoscaling:us-east-1:<account-id>:autoScalingGroup:d4738357-2d40-4038-ae7e-b00ae0227003:autoScalingGroupName/my-asg", "AutoScalingGroupName": "my-asg", "CapacityToTerminate": [ { "AvailabilityZone": "us-east-1b", "Capacity": 2, "InstanceMarketOption": "on-demand" }, { "AvailabilityZone": "us-east-1b", "Capacity": 1, "InstanceMarketOption": "spot" }, { "AvailabilityZone": "us-east-1c", "Capacity": 3, "InstanceMarketOption": "on-demand" } ], "Instances": [ { "AvailabilityZone": "us-east-1b", "InstanceId": "i-0056faf8da3e1f75d", "InstanceType": "t2.nano", "InstanceMarketOption": "on-demand" }, { "AvailabilityZone": "us-east-1c", "InstanceId": "i-02e1c69383a3ed501", "InstanceType": "t2.nano", "InstanceMarketOption": "on-demand" }, { "AvailabilityZone": "us-east-1c", "InstanceId": "i-036bc44b6092c01c7", "InstanceType": "t2.nano", "InstanceMarketOption": "on-demand" }, ... ], "Cause": "SCALE_IN" }

페이로드에는 Auto Scaling 그룹의 이름, Amazon 리소스 이름(ARN) 및 다음 요소가 포함됩니다.

  • CapacityToTerminate는 지정된 가용 영역에서 해지되도록 설정된 스팟 또는 온디맨드 용량의 양을 지정합니다.

  • Instances는의 정보를 기반으로 Amazon EC2 Auto Scaling이 종료를 제안하는 인스턴스를 나타냅니다CapacityToTerminate.

  • Cause는 해지를 야기한 이벤트를 지정합니다(SCALE_IN, INSTANCE_REFRESH, MAX_INSTANCE_LIFETIME 또는 REBALANCE).

다음 정보는 Amazon EC2 Auto Scaling이 입력 데이터에서를 생성하는 방법Instances에서 가장 중요한 요소를 간략하게 설명합니다.

  • 스케일 인 이벤트 및 인스턴스 새로 고침 기반 종료로 인해 인스턴스가 종료되는 경우에는 가용 영역 간 균형 유지가 우선합니다. 가용 영역 하나의 인스턴스 수가 그룹에서 사용하는 그 외 가용 영역보다 많으면 입력 데이터에는 균형이 맞지 않는 가용 영역의 해지 대상 인스턴스만 포함됩니다. 그룹에서 사용하는 가용 영역이 균형 잡힌 경우, 입력 데이터에는 해당 그룹에 대한 모든 가용 영역의 인스턴스가 포함됩니다.

  • 혼합 인스턴스 정책을 사용하는 경우, 각 구매 옵션에 대해 원하는 백분율을 기준으로 스팟 및 온디맨드 용량을 균형 있게 유지하는 것이 우선합니다. 먼저 둘(스팟 또는 온디맨드) 중 어떤 유형이 해지되어야 하는지 확인합니다. 그런 다음 가용 영역의 균형을 가장 잘 유지하기 위해 어떤 가용 영역 내에서 (식별된 구매 옵션 내) 어떤 인스턴스를 해지할지 파악합니다.

응답 데이터

입력 데이터와 응답 데이터는 함께 작동하여 해지할 인스턴스 목록의 범위를 좁힙니다.

주어진 입력을 사용하면 Lambda 함수의 응답은 다음 예와 같아야 합니다.

{ "InstanceIDs": [ "i-02e1c69383a3ed501", "i-036bc44b6092c01c7", ... ] }

이 응답에서 InstanceIDs는 해지할 준비가 된 인스턴스를 나타냅니다.

또는 해지 준비가 된 다른 인스턴스 세트를 반환하여 입력 데이터의 인스턴스를 재정의할 수 있습니다. Lambda 함수가 호출될 때 해지할 준비가 된 인스턴스가 없으면 인스턴스를 반환하지 않도록 선택할 수도 있습니다.

해지할 준비가 된 인스턴스가 없는 경우, Lambda 함수의 응답은 다음 예와 같아야 합니다.

{ "InstanceIDs": [ ] }

고려 사항

사용자 지정 해지 정책을 사용하는 경우, 다음 고려 사항에 유의하세요.

  • 응답 데이터에서 인스턴스를 먼저 반환한다고 해서 해당 인스턴스가 해지되는 것은 아닙니다. Lambda 함수를 호출할 때 필요한 수보다 많은 인스턴스가 반환되면 Amazon EC2 Auto Scaling은 Auto Scaling 그룹에 지정한 다른 종료 정책과 비교하여 각 인스턴스를 평가합니다. 여러 해지 정책이 있는 경우에는 목록에 있는 그다음 해지 정책을 적용하려고 하고 해지해야 하는 것보다 인스턴스 수가 더 많으면 다음 해지 정책으로 이동합니다. 지정된 다른 해지 정책이 없는 경우, 기본 해지 정책을 사용하여 해지할 인스턴스를 결정합니다.

  • 인스턴스가 반환되지 않거나 Lambda 함수 시간이 초과되면 Amazon EC2 Auto Scaling은 함수를 다시 호출하기 전에 잠시 기다립니다. 스케일 인 이벤트의 경우, 그룹의 원하는 용량이 현재 용량보다 작으면 계속 시도합니다. 인스턴스 새로 고침 기반 해지의 경우, 한 시간 동안 계속 시도합니다. 이후 계속해서 인스턴스를 해지하지 못하면 인스턴스 새로 고침 작업에 실패합니다. 인스턴스 수명이 최대인 Amazon EC2 Auto Scaling은 최대 수명을 초과하는 것으로 식별된 인스턴스를 계속 종료하려고 시도합니다.

  • 함수가 반복적으로 다시 시도되므로 Lambda 함수를 사용자 지정 해지 정책으로 사용하기 전에 코드에서 영구적인 오류가 있는지 테스트하고 수정해야 합니다.

  • 자체 인스턴스 목록으로 입력 데이터를 재정의하여 종료하고 이러한 인스턴스를 종료하면 가용 영역이 균형을 잃게 되면 Amazon EC2 Auto Scaling은 가용 영역 간 용량 분포의 균형을 점진적으로 재조정합니다. 먼저 Lambda 함수를 호출하여 해지 준비가 된 인스턴스가 있는지 확인해 재조정 여부를 결정할 수 있습니다. 해지할 준비가 된 인스턴스가 있으면 먼저 새 인스턴스를 시작합니다. 인스턴스 시작이 완료되면 그룹의 현재 용량이 원하는 용량보다 크다는 사실을 감지하고 스케일 인 이벤트를 시작합니다.

  • 사용자 지정 종료 정책은 스케일 인 보호를 사용하여 특정 인스턴스가 종료되지 않도록 보호하는 기능에도 영향을 미치지 않습니다. 자세한 내용은 인스턴스 스케일 인 보호를 사용하여 인스턴스 종료 제어 단원을 참조하십시오.

Lambda 함수 생성

먼저 Lambda 함수를 생성하여 Auto Scaling 그룹의 종료 정책에 해당 Amazon 리소스 이름(ARN)을 지정할 수 있습니다.

Lambda 함수를 생성하려면(콘솔)
  1. Lambda 콘솔에서 함수 페이지를 엽니다.

  2. 화면 상단의 탐색 모음에서 Auto Scaling 그룹을 생성할 때 사용한 것과 동일한 지역을 선택합니다.

  3. Create function(함수 생성)Author from scratch(새로 작성)를 차례로 선택합니다.

  4. Basic information(기본 정보)에서 Function name(함수 이름)에 함수 이름을 입력합니다.

  5. Create function(함수 생성)을 선택합니다. 함수의 코드 및 구성으로 돌아갑니다.

  6. 함수가 콘솔에 여전히 열려 있으면 Function code(함수 코드)에서 코드를 편집기에 붙여 넣습니다.

  7. Deploy(배치)를 선택합니다.

  8. 경우에 따라 Versions(버전) 탭을 선택한 다음 Publish new version(새 버전 발행)을 선택하여 Lambda 함수의 게시 버전을 생성합니다. Lambda의 버전 관리에 대한 자세한 설명은 AWS Lambda 개발자 안내서Lambda 함수 버전을 참조하세요.

  9. 버전을 게시하도록 선택한 경우, Lambda 함수의 이 버전과 별칭을 연결하려면 Aliases(별칭) 탭을 선택합니다. Lambda의 별칭에 대한 자세한 설명은 AWS Lambda 개발자 안내서Lambda 함수 별칭을 참조하세요.

  10. 그런 다음 Configuration(구성) 탭을 선택한 다음 Permissions(권한)를 선택합니다.

  11. Resource-based policy(리소스 기반 정책)까지 스크롤한 다음 Add permissions(권한 추가)를 선택합니다. 리소스 기반 정책은 정책에 지정된 보안 주체에 함수를 호출하는 권한을 부여하는 데 사용됩니다. 이 경우 보안 주체는 Auto Scaling 그룹과 연결된 Amazon EC2 Auto Scaling 서비스 연결 역할이 됩니다. Auto Scaling

  12. Policy statement(정책 설명) 섹션에서 권한을 구성합니다.

    1. AWS 계정를 선택합니다.

    2. 보안 주체에 호출 서비스 연결 역할의 ARN를 입력합니다. 예를 들어 입니다arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling.

    3. 작업에서 lambda:InvokeFunction를 선택합니다.

    4. Statement ID(설명 ID)에 고유한 설명 ID를 입력합니다(예: AllowInvokeByAutoScaling).

    5. 저장(Save)을 선택합니다.

  13. 이 지침을 따른 후 다음 단계로 Auto Scaling 그룹의 종료 정책에 함수의 ARN를 계속 지정합니다. 자세한 내용은 Auto Scaling 그룹의 종료 정책 변경 단원을 참조하십시오.

참고

Lambda 함수를 개발하기 위한 참조로 사용할 수 있는 예제는 Amazon GitHub Auto Scaling용 Word 리포지토리를 참조하세요. EC2 Auto Scaling

제한 사항

  • Auto Scaling 그룹에 대한 해지 정책에는 Lambda 함수를 하나만 지정할 수 있습니다. 해지 정책이 여러 개 지정된 경우, Lambda 함수를 먼저 지정해야 합니다.

  • 정규화되지 않은 ARN(접미사 없음) 또는 버전 또는 별칭이 접미사인 정규화된 ARN를 사용하여 Lambda 함수를 참조할 수 있습니다. 정규화되지 않은 ARN를 사용하는 경우(예: function:my-function) 함수의 게시되지 않은 버전에서 리소스 기반 정책을 생성해야 합니다. 정규화된 ARN(예: function:my-function:1 또는 function:my-function:prod)를 사용하는 경우 해당 함수의 게시된 특정 버전에서 리소스 기반 정책을 생성해야 합니다.

  • $LATEST 접미사와 ARN 함께 적격 Word를 사용할 수 없습니다. $LATEST 접미사가 있는 정규화된 ARN를 참조하는 사용자 지정 종료 정책을 추가하려고 하면 오류가 발생합니다.

  • 입력 데이터에 제공되는 인스턴스 수는 30,000개로 제한됩니다. 해지할 수 있는 인스턴스가 30,000개 이상인 경우, 입력 데이터에는 최대 인스턴스 수가 반환됨을 나타내는 "HasMoreInstances": true가 포함됩니다.

  • Lambda 함수의 최대 실행 시간은 2초(2,000밀리초)입니다. 예상 실행 시간에 근거하여 Lambda 함수의 제한 시간 값을 설정하는 것이 가장 좋습니다. Lambda 함수의 기본 제한 시간은 3초이지만 이 시간은 줄일 수 있습니다.

  • 런타임이 2초 제한을 초과하는 경우 런타임이 이 임곗값 아래로 떨어질 때까지 모든 스케일 인 작업이 보류됩니다. 런타임이 지속적으로 더 긴 Lambda 함수의 경우, 후속 Lambda 호출 중에 결과를 검색할 수 있는 캐싱과 같이 런타임을 줄일 방법을 찾습니다.