자습서: CloudWatch 경보를 사용한 컨테이너 인스턴스 조정 - Amazon Elastic Container Service

자습서: CloudWatch 경보를 사용한 컨테이너 인스턴스 조정

참고

2019년 12월에 컨테이너 인스턴스를 확장하기 위한 대체 방법으로 Amazon ECS는 클러스터 Auto Scaling을 시작했습니다. 자세한 정보는 Amazon ECS 클러스터 자동 크기 조정 섹션을 참조하세요.

다음 절차에서는 Amazon ECS 클러스터용 Auto Scaling 그룹을 생성할 수 있도록 안내합니다. Auto Scaling 그룹에는 CloudWatch 경보를 사용하여 확장(및 축소)할 수 있는 컨테이너 인스턴스가 포함되어 있습니다.

클러스터에서 사용하는 Amazon EC2 인스턴스 유형과 한 클러스터에 포함되는 컨테이너 인스턴스 수에 따라 작업이 실행되는 동안 사용할 수 있는 리소스 양이 제한됩니다. Amazon ECS는 클러스터에서 사용 가능한 리소스를 모니터링하며 스케줄러와 연동하여 태스크를 배치합니다. 클러스터에서 이러한 리소스(예: 메모리)가 하나라도 부족해질 경우, 더 많은 컨테이너 인스턴스를 추가하거나 서비스에서 원하는 작업 수를 줄이거나 클러스터에서 실행되는 태스크를 일부 중지하여 제약된 리소스를 해제할 때까지는 더 많은 태스크를 시작할 수 없습니다.

이 자습서에서는 클러스터에 대한 MemoryReservation 지표를 사용하여 CloudWatch 경보 및 단계 조정 정책을 생성합니다. 클러스터의 메모리 예약이 75%를 상회할 경우(새 태스크를 위해 클러스터 메모리의 25%만 예약할 수 있음을 의미) 다른 인스턴스를 추가하여 작업 및 서비스에 더 많은 리소스를 추가하도록 경보가 Auto Scaling 그룹을 트리거합니다.

사전 조건

이 자습서는 클러스터 및 서비스에 대해 CloudWatch 지표가 켜진 것으로 가정합니다. 클러스터 및 서비스가 CloudWatch로 지표를 전송할 때까지는 지표를 사용할 수 없으며, 아직 존재하지 않는 지표에 대해 CloudWatch 경보를 생성할 수 없습니다. 자세한 정보는 CloudWatch 지표 사용 섹션을 참조하세요.

1단계: 지표에 대한 CloudWatch 경보 생성

클러스터 및 서비스에 대해 CloudWatch 지표를 켜서 클러스터에 대한 지표가 CloudWatch 콘솔에 표시되면 해당 지표에 경보를 설정할 수 있습니다. 자세한 정보는 Amazon CloudWatch 사용 설명서Amazon CloudWatch 경보 생성을 참조하세요.

이 자습서에서는 클러스터의 메모리 예약이 75%를 상회하면 경보하는 클러스터 MemoryReservation 지표에 대한 경보를 생성합니다.

지표에 대한 CloudWatch 경보를 생성하려면

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

  2. 왼쪽 탐색에서 경보(Alarms), 경보 생성(Create Alarm)을 선택합니다.

  3. 범주별 CloudWatch 지표(CloudWatch Metrics by Category) 섹션에서 ECS 지표(ECS Metrics) > ClusterName을 선택합니다.

  4. 경보 수정 페이지에서 기본 클러스터에 대해 MemoryReservation 지표를 선택하고 다음(Next)을 선택합니다.

  5. 경보 임계값(Alarm Threshold) 섹션에 경보의 이름 및 설명을 입력합니다.

    • 이름: memory-above-75-pct

    • 설명: Cluster memory reservation above 75%

  6. 임계값 및 기간 요구 사항을 1기간 동안 75%를 상회하는 MemoryReservation으로 설정합니다.

    
                                CloudWatch 경보 임계값
  7. (선택 사항) 경보가 트리거될 때 전송할 알림을 구성합니다. 지금 알림을 구성하지 않으려면 알림을 삭제할 수도 있습니다.

  8. 경보 생성(Create Alarm)을 선택합니다. 이제 이 경보를 사용하여 메모리 예약이 75%를 상회할 경우 컨테이너 인스턴스 1개를 추가하도록 Auto Scaling 그룹을 트리거할 수 있습니다.

  9. (선택 사항) 메모리 예약이 25%를 하회할 경우 트리거되어 Auto Scaling 그룹에서 컨테이너 인스턴스 1개를 제거하는 다른 경보를 생성할 수도 있습니다.

2단계: Auto Scaling 그룹 시작 구성 생성

이제 CloudWatch 지표를 켜고 이러한 지표 중 하나를 기반으로 경보를 생성했으므로 클러스터에 대해 시작 구성 및 Auto Scaling 그룹을 생성할 수 있습니다. 자세한 정보 및 기타 구성 옵션은 Amazon EC2 Auto Scaling 사용 설명서시작 구성을 참조하세요.

Auto Scaling 시작 구성을 생성하려면

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

  2. 탐색 창에서 Auto Scaling 그룹(Auto Scaling Groups)을 선택합니다.

  3. Auto Scaling 시작 페이지에서 Auto Scaling 그룹 생성(Create Auto Scaling Group)을 선택합니다.

  4. Auto Scaling 그룹 생성 페이지에서 새 시작 구성 생성(Create a new launch configuration)을 선택합니다.

  5. Auto Scaling 그룹 생성 마법사의 AMI 선택(Choose AMI) 단계에서 커뮤니티 AMI(Community AMIs)를 선택합니다.

  6. Auto Scaling 그룹에 최신 Amazon ECS 최적화 Amazon Linux 2 AMI를 선택합니다. 최신 Amazon ECS 최적화 Amazon Linux 2 AMI를 검색하는 방법에 대한 자세한 정보는 Amazon ECS 최적화 AMI 메타데이터 검색 섹션을 참조하세요.

  7. Auto Scaling 그룹 생성 마법사의 인스턴스 유형 선택(Choose Instance Type)단계에서 Auto Scaling 그룹의 인스턴스 유형을 선택하고 다음: 세부 정보 구성(Next: Configure details)을 선택합니다.

  8. Auto Scaling 그룹 생성 마법사의 세부 정보 구성(Configure details) 단계에서 다음 정보를 입력합니다. 다른 필드는 선택 사항입니다. 자세한 정보는 Amazon EC2 Auto Scaling 사용 설명서시작 구성 생성을 참조하세요.

    • 이름(Name): 시작 구성의 이름을 입력합니다.

    • IAM 역할(IAM role): 컨테이너 인스턴스의 ecsInstanceRole을 선택합니다. 이 역할이 구성되지 않은 경우 Amazon ECS 컨테이너 인스턴스 IAM 역할 섹션을 참조하세요.

    • IP 주소 유형(IP Address Type): 컨테이너 인스턴스의 IP 주소 유형 옵션을 선택합니다. 외부 트래픽이 컨테이너에 도달할 수 있게 하려면 모든 인스턴스에 퍼블릭 IP 주소 할당(Assign a public IP address to every instance)을 선택합니다.

  9. 고급 세부 정보(Advanced Details) 섹션을 확장하여 Amazon ECS 컨테이너 인스턴스에 대한 사용자 데이터를 지정합니다. 자세한 정보는 Amazon ECS 컨테이너 에이전트 구성 섹션을 참조하세요.

    사용자 데이터(User data) 필드에 다음 스크립트를 붙여넣습니다. 작업 중인 클러스터 이름을 참조합니다.

    #!/bin/bash echo ECS_CLUSTER=my-cluster >> /etc/ecs/ecs.config
  10. 다음: 스토리지 추가(Next: Add Storage)를 선택합니다.

  11. Auto Scaling 그룹 생성 마법사의 스토리지 추가(Add Storage) 단계에서 인스턴스에 필요한 스토리지 구성을 변경하고 다음: 보안 그룹 구성(Next: Configure Security Group)을 선택합니다.

  12. Auto Scaling 그룹 생성 마법사의 보안 그룹 구성 단계에서 컨테이너의 요구 사항을 충족하는 기존 보안 그룹을 선택하거나 새 보안 그룹을 생성하고 검토(Review)를 선택합니다.

  13. 시작 구성을 검토한 다음 시작 구성 생성(Create launch configuration)을 선택합니다.

  14. SSH를 사용하여 인스턴스에 연결하기 위해 사용할 프라이빗 키를 선택하고 시작 구성 생성(Create launch configuration)을 선택합니다. 계속해서 새 시작 구성을 사용하여 Auto Scaling 그룹을 생성합니다.

3단계: 단계 조정 정책이 있는 Auto Scaling 그룹 생성

시작 구성이 완료된 후 계속해서 다음 절차를 사용해 시작 구성을 사용하는 Auto Scaling 그룹을 생성합니다.

단계 조정 정책이 적용되는 Auto Scaling 그룹을 생성하려면

  1. Auto Scaling 그룹 생성 마법사의 Auto Scaling 그룹 세부 정보 구성(Configure Auto Scaling group details) 단계에서 다음 정보를 입력한 후 다음: 조정 정책 구성(Next: Configure scaling policies)을 선택합니다.

    • 그룹 이름(Group name): Auto Scaling 그룹의 이름을 입력합니다.

    • 그룹 크기(Group size): Auto Scaling 그룹이 시작할 컨테이너 인스턴스 수를 지정합니다.

    • 네트워크(Network): 컨테이너 인스턴스를 시작할 VPC를 선택합니다.

    • 서브넷(Subnet): 컨테이너 인스턴스를 시작할 서브넷을 선택합니다. 고가용성 클러스터의 경우, 리전에서 모든 서브넷을 사용하여 가용 영역 전체에 인스턴스를 분산하는 것이 좋습니다.

  2. Auto Scaling 그룹 생성 마법사의 조정 정책 구성(Configure scaling policies) 단계에서 조정 정책을 사용하여 이 그룹의 용량 조정(Use scaling policies to adjust the capacity of this group)을 선택합니다.

  3. Auto Scaling 그룹의 최소 및 최대 컨테이너 인스턴스 수를 입력합니다.

  4. 단계 또는 단순 조정 정책을 사용하여 Auto Scaling 그룹 크기 조정(Scale the Auto Scaling group using step or simple scaling policies)을 선택합니다.

  5. 그룹 크기 늘리기(Increase Group Size) 섹션에 다음 정보를 입력합니다.

    • 정책 실행 시기(Execute policy when): 앞에서 구성한 memory-above-75-pct CloudWatch 경보를 선택합니다.

    • 작업 수행(Take the action): 경보가 트리거될 때 클러스터에 추가할 용량 유닛(인스턴스) 수를 입력합니다.

  6. 그룹 크기 축소를 트리거하도록 경보를 구성한 경우 그룹 크기 줄이기(Decrease Group Size) 섹션에서 해당 경보를 설정하고 경보가 트리거될 경우 제거할 인스턴스 수를 지정합니다. 그렇지 않으면 섹션의 오른쪽 위 모서리에 있는 X를 선택하여 그룹 크기 줄이기(Decrease Group Size) 섹션을 축소합니다.

    참고

    컨테이너 인스턴스를 제거하도록 Auto Scaling 그룹을 구성할 경우, 제거된 컨테이너 인스턴스에서 실행 중인 모든 작업이 중지됩니다. 작업이 서비스의 일부로 실행되는 경우, 필요한 리소스(CPU, 메모리, 포트)가 사용 가능하면 Amazon ECS가 다른 인스턴스에서 해당 태스크를 다시 시작합니다. 하지만 수동으로 시작한 태스크는 자동으로 다시 시작되지 않습니다.

  7. 검토(Review), Auto Scaling 그룹 생성(Create Auto Scaling Group)을 선택합니다.

4단계: Auto Scaling 그룹 확인 및 테스트

이제 Auto Scaling 그룹을 생성하였으므로 Amazon EC2 콘솔 인스턴스 페이지에서 인스턴스가 시작되는 것이 보여야 합니다. 이 인스턴스는 시작 후 ECS 클러스터에 등록해야 합니다.

EC2 인스턴스가 클러스터에 등록되어 있는지 확인합니다. ECS 콘솔에서 인스턴스를 등록한 클러스터를 선택합니다. 클러스터 페이지에서 ECS 인스턴스(ECS Instances)를 선택합니다. 표시된 인스턴스에 대해 에이전트가 연결됨(Agent Connected) 값이 True인지 확인합니다.

Auto Scaling 그룹이 올바르게 구성되었는지 테스트하려면 상당한 양의 메모리를 소비하는 몇몇 태스크를 생성하여 클러스터에서 시작합니다. 클러스터가 지정된 기간 동안 CloudWatch 경보에 설정된 75% 메모리 예약을 초과한 후 Amazon EC2 콘솔에서 새 인스턴스 시작이 보여야 합니다.

5단계: 정리

더 이상 필요 없는 단계 조정 정책은 삭제할 수 있습니다. CloudWatch 경보도 삭제해야 합니다. 단계 조정 정책을 삭제하면 기본 경보 작업이 삭제되지만 연결된 작업이 더 이상 없는 경우에도 조정 정책과 연결된 CloudWatch 경보는 삭제되지 않습니다.

단계 조정 정책 및 이에 연결된 CloudWatch 경보를 삭제하려면

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

  2. 탐색 창의 Auto Scaling에서 Auto Scaling 그룹(Auto Scaling Groups)을 선택합니다.

  3. Auto Scaling 그룹을 선택합니다.

  4. 조정 정책(Scaling Policies) 탭에서 작업(Actions), 삭제(Delete)를 선택합니다.

  5. 확인 메시지가 나타나면 예, 삭제합니다(Yes, Delete)를 선택합니다.

  6. 정책과 연결된 CloudWatch 경보를 삭제하려면 다음을 수행합니다.

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

    2. 탐색 창에서 경보(Alarms)를 선택합니다.

    3. 경보를 선택하고 작업(Action), 삭제(Delete)를 선택합니다.

    4. 확인 메시지가 나타나면 삭제(Delete)를 선택합니다.

이 자습서를 마친 후에 클러스터에서 사용하는 Auto Scaling 그룹 및 Amazon EC2 인스턴스를 그대로 둘 수 있습니다. 하지만 이 리소스를 적극적으로 활용하지 않는 경우에는 계정에 불필요한 요금이 발생하지 않도록 이 리소스를 삭제하는 것을 고려해야 합니다. Auto Scaling 그룹을 삭제하여 그룹 안의 Amazon EC2 인스턴스를 종료할 수 있습니다. 이 경우, 시작 구성은 그대로 유지됩니다. 원할 경우, 나중에 이 시작 구성을 사용하여 새 Auto Scaling 그룹을 생성할 수 있습니다.

Auto Scaling 그룹을 삭제하려면

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

  2. 탐색 창에서 Auto Scaling 그룹(Auto Scaling Groups)을 선택합니다.

  3. 앞서 생성한 Auto Scaling 그룹을 선택합니다.

  4. 작업(Actions), 삭제(Delete)를 선택합니다.

  5. 예, 삭제합니다(Yes, Delete)를 선택합니다.