AWS 기술 블로그
Support Automation Workflows (SAW)를 사용하여 AWS 환경의 일반적인 이슈 진단하기
이 글은 AWS re:Post에 게시된 Using SAW to diagnose common issues in your AWS environment by Eason Cao을 한국어로 번역 및 편집하였습니다.
개요
AWS 환경의 시스템 이슈를 수동으로 트러블슈팅하고 해결하는 과정은 반복적이며 오류가 발생하기 쉬운 작업입니다. AWS Support는 AWS 고객이 자체적으로 이슈를 진단하고 조치할 수 있도록 강력한 기능인 Support Automation Workflows (SAW)를 도입했습니다. SAW는 AWS Systems Manager를 활용하여 문제 해결 프로세스를 간소화할 수 있도록 사용자 친화적인 자동화 런북 모음과 문제 해결 방법을 제공합니다. 런북을 사용하여 연결 문제를 빠르게 해결하고, 권한 오류를 진단하고, Amazon EC2 액세스를 재설정하는 등 다양한 작업을 수행할 수 있습니다. AWSSupport 또는 AWSPremiumSupport가 접두사로 설정된 자동화 런북은 Amazon Elastic Compute Cloud (Amazon EC2), Amazon Simple Storage Service (Amazon S3), Amazon Elastic Kubernetes Service (EKS), Amazon Elastic Container Service (ECS)와 이에 국한되지 않는 다양한 AWS 서비스에 사용할 수 있습니다.
본 가이드를 통해 AWS Support에 문의하기 전 SAW가 어떻게 문제 해결을 자동화하여 AWS 환경의 일반적인 문제를 진단할 수 있는지 알아보세요. SAW 런북을 통해 간소화된 문제 해결 프로세스로 시스템 문제의 근본 원인 분석과 해결이 더욱 빨라질 수 있습니다.
Support Automation Workflows (SAW)란 무엇인가요?
AWS Systems Manager
SAW에 대해 배우기 전 SAW의 기반 서비스인 AWS Systems Manager에 대한 이해가 필요합니다. AWS Systems Manager는 AWS 애플리케이션과 리소스의 운영 허브이자 안전한 end-to-end 관리 솔루션입니다. SAW는 AWS Systems Manager Automation 서비스를 기반으로 구축된 자동화 런북입니다. 이 런북은 AWS 리소스와 관련된 일반적인 문제를 해결하고 네트워크 문제에 대한 사전 모니터링 및 식별, 그리고 로그 수집 및 분석에 도움을 제공합니다.
AWS 환경의 문제 해결 및 진단 기법을 강화하세요.
SAW는 Amazon 철학의 핵심가치인 Customer obsession을 기반으로 시작되었습니다. AWS Support 팀은 여러 고객의 문의를 통해 반복되는 이슈의 트렌드와 고객 경험을 개선할 수 있는 가능성을 발견했으며 이러한 통찰력을 바탕으로 고객에게 보다 나은 서포트 경험을 제공하고자 셀프 서비스로 이용할 수 있는 툴을 직접 개발했습니다.
SAW는 반복적이고 시간 소요가 많은 수동 작업을 최소화하기 위해 수 년간 축적된 경험과 모범 사례를 활용하여 다양한 문제 해결을 위한 도구로 발전하고 있습니다. SAW가 유용하게 활용될 수 있는 사례로는 SSH 연결 문제 해결, EC2 디스크 사용량 분석, Amazon S3 이슈 진단, Amazon EKS 또는 Amazon ECS 환경의 필수 로그 수집 등이 있습니다. 해당 런북은 특히 EC2 인스턴스에 대한 SSH 접속이 불가능한 상황이나 인스턴스들이 AWS Systems Manager VPC 엔드포인트가 활성화된 프라이빗 서브넷에 있을 때 유용합니다. 다음과 같은 사용 사례 또한 확인할 수 있습니다.
- 진단, 트러블슈팅, 해결 방안 제공: AWSPremiumSupport-TroubleshootEC2DiskUsage를 사용하여 Amazon EC2 인스턴스 디스크 사용 문제를 조사하고 운영 체제 (OS) 수준에서 볼륨, 파티션, 파일 시스템의 확장을 자동화할 수 있습니다.
- 자동 관리 분석 및 설정 업데이트 활성화: AWSSupport-EnableVPCFlowLogs를 사용하여 AWS 계정의 여러 서브넷과 네트워크 인터페이스 및 VPC에 대해 Amazon VPC Flow Logs를 구성할 수 있습니다.
- 비용 최적화 및 운영 검토: AWSPremiumSupport-PostgreSQLWorkloadReview를 사용하여 Amazon Relational Database Service (Amazon RDS) PostgreSQL database의 사용 통계에 대한 스냅샷을 캡쳐할 수 있습니다.
- 진단 목적의 로그 수집: AWSSupport-CollectEKSInstanceLogs를 활용하여 Amazon Elastic Kubernetes Service (Amazon EKS)로부터 운영 체제 수준의 로그를 수집하고 클러스터 이슈를 해결할 수 있습니다.
AWS Support Automation Workflows (SAW)를 방문하여 다양한 사용 사례에 활용할 수 있는 런북 리스트를 확인할 수 있습니다.
SAW를 사용하여 어떻게 수동 프로세스를 간소화하고 시간과 노력을 절약할 수 있는지 알아보세요.
Support Automation Workflows 시작하기
필수 조건
SAW를 사용하기 위해 필요한 사항은 다음과 같습니다.
- AWS 계정
- 운영에 사용할 AWS Identity and Access Management (IAM) 사용자와 IAM 역할이 Systems Manager 콘솔 액세스에 필요한 최소 IAM 권한이 있는지 확인하십시오.
- 런북을 시작하기 위해 충분한 IAM 권한이 필요합니다. 요구되는 정책이 런북에 따라 다를 수 있지만 아래 정책이 필수적으로 허용되어야 합니다.
- ssm:StartAutomationExecution
- ssm:GetAutomationExecution
- ssm:SendCommand
- AWSPremiumSupport 접두사로 시작하는 런북을 이용하기 위해선 AWS Business 혹은 Enterprise support 플랜을 구독하고 있는지 확인해 보십시오.
- EC2 인스턴스에 대해 조치를 취하는 일부 런북을 이용할 경우 AWS Systems Manager Agent (SSM Agent)를 설치하고 AmazonSSMManagedInstanceCore AWS 관리형 정책을 EC2 인스턴스 프로파일에 해당하는 IAM 역할에 연결하여 권한을 부여해야 합니다.
Systems Manager 문서 확인하기
SAW 런북을 사용하기 위해선 AWS Systems Manager 콘솔로 이동하여 이용하려는 AWS 리전을 선택하십시오. Systems Manager 콘솔 왼쪽 공유 리소스 섹션에 있는 Documents 메뉴에서 Amazon이 제공한 모든 AWS Systems Manager 문서를 확인할 수 있습니다.
AWSSupport라는 접두사를 키워드로 검색하면 AWS Support에서 관리하는 SAW 런북을 찾을 수 있습니다.
자동화 실행하기
자동화를 실행하기 위해서는 Systems Manager 콘솔에 접속하십시오. 더 자세한 내용은 단순한 자동화 실행(콘솔)에서 확인할 수 있습니다.
예를 들어, AWS 계정의 인스턴스, Elastic IP, EBS 볼륨, AutoScaling Group과 같은 EC2 관련 리소스를 확인하기 위해 AWSSupport-ListEC2Resources 런북을 사용할 수 있습니다. 런북을 실행하려면 Execute automation을 선택하세요.
상태를 클릭한 후 세부 정보를 보거나 Automation 페이지로 이동하여 실행 결과가 출력된 내용을 확인할 수 있습니다.
AWS CLI를 사용하여 런북을 시작하려면 aws ssm start-automation-execution
명령을 사용할 수 있습니다. 다음은 모든 AWS 리전의 EC2 리소스를 나열하는 예시입니다.
실행 결과는 아래와 같습니다.
자동화 상태를 조회하려면 자동화 실행 ID를 사용하여 다음 명령을 실행하세요. 자동화 실행 ID는 위 실행 결과를 참고하여 설정할 수 있습니다.
실행 결과는 아래와 같습니다.
사용 사례
SSH 연결 문제 해결 (Automation 실행하기)
AWSSupport-TroubleshootSSH는 일반적인 Linux SSH 이슈를 해결합니다. 이 SAW 런북은 Linux용 Amazon EC2Rescue (ec2rl) 실행을 간소화하고 Linux 시스템에 SSH를 통한 원격 접속이 불가능한 문제를 해결합니다. 해당 런북은 AWS Systems Manager에 의해 관리되지 않는 EC2 인스턴스 또한 지원합니다. 오프라인 수정 모드를 지정하면 수정 프로세스 중에 인스턴스가 중지되고 자동으로 시작됩니다.
AWS Systems Manager Agent가 EC2 인스턴스에 설치되었는지 여부에 상관없이 해당 런북을 활용하여 SSH 오류를 진단하고 해결할 수 있습니다. 예를 들어, SSH 설정 오류로 인해 EC2 인스턴스에 연결할 수 없는 경우 이 런북을 실행하여 클릭 몇 번으로 오류를 복구할 수 있습니다.
SAW 런북 실행이 필요한 대상 EC2 인스턴스를 선택할 수 있습니다. EC2 인스턴스에 SSM Agent가 설치되어 있다면 인스턴스 프로파일에 충분한 IAM 권한이 설정되어 있는지, AWS Systems Manager에 의해 관리될 수 있는지 확인해 보십시오.
그렇지 않은 경우 런북은 오프라인 모드를 지원함으로써 문제가 있는 인스턴스의 EBS 볼륨을 분리하고 다시 연결하여 설정을 검토합니다. 이 자동화 런북 실행 시 인스턴스 중지 및 AMI 생성 과정이 수행되기 때문에 인스턴스 스토어 볼륨에 저장된 데이터가 손실되며 Elastic IP 주소를 사용하지 않는 경우 public IP 주소가 변경되는 점 유의하시기 바랍니다.
오프라인 모드를 사용하려면 문제가 있는 EC2 인스턴스를 선택하고 다음 파라미터로 런북을 실행하십시오.
- Action: FixAll (CheckAll 옵션은 오프라인 모드를 지원하지 않습니다.)
- AllowOffline: True
- SubnetId: <EC2 인스턴스가 위치한 서브넷 선택>
오프라인 모드에서 자동화를 실행하면 절차에 따라 복구 EC2 인스턴스를 생성하고 문제가 발생한 인스턴스의 EBS 볼륨을 연결하여 오류 수정을 시도합니다.
자동화가 완료되면 실행 출력 결과와 리소스를 검토할 수 있습니다. 아래 예시는 잘못 설정된 SSH 환경파일이 수정된 케이스입니다. 런북 수행 후 EC2 인스턴스에 성공적으로 접속했으며 오류를 해결하는 데 1-2분 밖에 소요되지 않았습니다.
Amazon EC2 액세스 및 암호 복구 (Automation 실행하기)
AWSSupport-ResetAccess 런북은 Windows나 Linux에서 EC2 관리 권한 유실로 인한 액세스 문제를 해결하는 데 유용한 런북입니다. 지정된 EC2 인스턴스에서 EC2Rescue 툴을 사용하여 EC2 콘솔 (Windows)을 통해 복호화를 다시 활성화하거나 새로운 SSH 키 쌍(Linux)을 생성하여 추가합니다.
EC2 Windows 인스턴스의 키 페어를 분실한 경우 이 자동화 런북은 새로운 키 페어로 EC2 인스턴스를 시작할 수 있도록 암호가 활성화된 AMI를 생성합니다. SSH 런북과 마찬가지로 자동화 수행 과정에서 인스턴스가 중지되므로 인스턴스 스토어 볼륨에 데이터가 남아 있지 않은지 확인해 보십시오. 또한, Elastic IP 주소를 사용하지 않는 경우 인스턴스 중지 시 public IP 주소가 변경되는 점 유의하십시오.
EC2 인스턴스 액세스를 복구하기 위해 인스턴스 선택 후 런북을 실행하기만 하면 됩니다. 문제가 있는 EC2 인스턴스와 동일한 서브넷 ID를 선택하거나 SubnetId란에 CreateNewVPC를 기본값으로 두십시오. EC2 인스턴스의 비밀번호와 SSH 키를 재설정하는 방법에 대한 설명서를 참조하십시오.
각 단계가 실행되면 Outputs 섹션에서 다음 단계에 대한 지침을 찾을 수 있습니다. 이 런북은 자동화 과정에서 백업 AMI와 비밀번호가 활성화된 AMI를 생성합니다. 분실한 키 페어로 인한 액세스를 복구하려면 비밀번호가 활성화된 AMI를 사용하여 새로운 키 페어로 EC2 Windows 인스턴스를 시작할 수 있습니다.
유사한 방법으로 동일한 런북을 이용하여 EC2 Linux 인스턴스의 SSH 액세스를 복구할 수 있습니다. AWS Systems Manger Parameter Store에서 /ec2rl/openssh/<instance ID>/key 이름으로 생성된 SecureString 타입의 새 SSH private 키를 확인할 수 있으며 private 키를 복호화하여 조회할 수 있습니다.
본 예시에서는 자동화를 통해 —–BEGIN OPENSSH PRIVATE KEY—– 로 시작하는 OpenSSH private 키가 생성되었습니다. 해당 파일을 저장하여 RSA 형식으로 변환할 수 있습니다. (RSA 형식으로 —–BEGIN RSA PRIVATE KEY—– private 키를 받은 경우 이 단계는 생략해도 됩니다.)
이제 키를 사용해서 EC2 Linux 인스턴스에 성공적으로 접속할 수 있습니다.
EC2 디스크 사용량 분석 및 여유 디스크 공간 확장 (Automation 실행하기)
AWS Business, Enterprise On-Ramp 혹은 Enterprise Support 플랜 고객이라면 AWSPremiumSupport-TroubleshootEC2DiskUsage 런북을 활용하여 EBS 볼륨 사용량을 분석하고 운영 체제 (OS) 수준에서 파티션과 파일 시스템 확장을 자동화할 수 있습니다. 해당 런북은 AWS 중국 및 AWS GovCloud (미국)를 포함한 AWS 리전에서 사용할 수 있으며 Windows와 Linux 인스턴스를 모두 지원합니다. 디스크 공간 확장 프로세스를 간소화하는 방법에 대한 자세한 내용은 AWS:rePost의 문서를 참조하십시오.
예를 들어, Linux 파일 시스템의 여유 디스크 공간이 부족하여 디스크와 파일 시스템을 확장하고자 하는 경우 먼저 EBS 볼륨 크기를 늘리고 여러 Linux 명령줄 도구를 실행하여 파일 시스템을 확장해야 합니다. 많은 수의 EC2 인스턴스에 대해 디스크 확장이 필요한 경우 상당한 시간과 노력이 필요한 작업이 될 수 있습니다.
aws ssm start-automation-execution
명령이나 StartAutomationExecution API를 활용하여 자동화를 일괄적으로 수행할 수 있습니다. 해당 런북을 통해 디스크 사용량을 진단하는 것 뿐만 아니라 볼륨과 파일 시스템을 한 번에 확장함으로써 문제를 해결할 수 있습니다.
EKS 또는 ECS 노드 필수 로그 수집 (EKS 노드 Automation 실행하기, ECS node 노드 Automation 실행하기)
Amazon Elastic Kubernetes Service (EKS)와 Amazon Elastic Container Service (ECS)는 AWS의 완전 관리형 컨테이너 오케스트레이션 서비스입니다. 두 서비스 모두 컨테이너화된 애플리케이션을 실행하기 위한 컴퓨팅 옵션을 제공합니다. 일반적인 컴퓨팅 리소스 유형 중 하나는 EC2 인스턴스입니다. Amazon EKS나 Amazon ECS를 통해 인스턴스를 관리하기 위해선 클러스터에 인스턴스를 추가해야 합니다.
인스턴스에 이슈가 생기면 EKS Log Collector나 ECS Log Collector 스크립트를 실행하여 로그와 세부정보 (예: kubelet, ECS Agent, 시스템 환경설정)를 수집하고 오류를 식별할 수 있는 시스템 수준의 정보를 모으는 작업이 필요합니다. 하지만 EC2 인스턴스가 SSH 액세스를 제공하지 않거나 사설망 네트워크에 위치하여 접근이 제한되는 경우 스크립트를 실행하고 로그를 수집하는 것이 어려울 수 있습니다.
AWSSupport-CollectEKSInstanceLogs와 AWSSupport-CollectECSInstanceLogs는 이러한 문제를 보완할 수 있는 런북입니다.
두 런북 모두 EKS나 ECS로부터 로그를 수집하는 프로세스를 자동화합니다. 해당 런북을 통해 로그 수집 단계를 간소화하고 SSM 관리형 EC2 인스턴스를 선택할 수 있습니다. 두 런북은 Log collector 스크립트를 실행하여 그 결과를 EC2 인스턴스에 저장합니다. 또한, Amazon S3 bucket에 번들 로그를 업로드하는 옵션이 있어 한 번에 여러 인스턴스를 점검할 필요가 있을 때 유용하게 활용할 수 있습니다.
EKS 클러스터 문제 해결 (Automation 실행하기)
AWSSupport-TroubleshootEKSWorkerNode 런북은 Kubernetes 워커 노드가 Amazon EKS 클러스터에 연결되지 않는 이슈에 대한 원인을 빠르게 식별하는 데 도움이 됩니다.
Amazon EKS 클러스터에는 노드라고 하는 워커 머신 세트가 있습니다. 대부분의 사용 사례에서 EKS 최적화 AMI로 EC2 인스턴스를 생성하고 클러스터의 컴퓨팅 리소스로 등록해야 합니다. 하지만 클러스터에 노드를 추가할 때 실패할 수 있는 몇 가지 요인이 있습니다. (예: 잘못된 VPC 설정, 잘못된 사용자 데이터, 필수 태그 누락, 연결 문제 등)
과거에는 각 환경설정을 직접 점검하여 이슈를 해결했으나 이 방식에는 명확하지 않은 특정 오류를 놓칠 수 있는 여지가 있었습니다. 이제 SAW 런북을 사용하여 시간을 절약하고 실수를 줄일 수 있습니다. 런북은 자동화 수행 후 결과 세부 정보에 오류를 출력하고 가능한 원인을 강조하여 표시합니다.
또한, AWS Business, Enterprise On-Ramp 및 Enterprise Support 플랜을 구독하는 고객의 경우 AWSPremiumSupport-TroubleshootEKSCluster 런북을 사용할 수 있습니다.
이 런북은 Kubernetes Cluster Autoscaler, 내부 로드 밸런서 생성 문제, 워커 AMI 점검, Amazon ECR에서 이미지 가져오기 실패, 혹은 관리형 노드가 안정화되지 않는 문제와 같이 Amazon EKS 환경에서 흔히 발생하는 에러를 해결하기 위해 또 다른 옵션을 제공합니다.
Knowledge center 게시글을 참고하여 어떤 검사가 수행되는지 확인해 보세요.
ECS 문제 해결 (Automation 실행하기)
Amazon ECS는 컨테이너화된 애플리케이션의 수명 주기를 관리하기 위해 개념적 객체로 ECS 태스크를 사용합니다. 하지만, ECS 태스크가 여러 가지 이유로 시작되지 않는 경우가 있어 근본 원인을 파악하기 어려울 수 있습니다.
AWSSupport-TroubleshootECSTaskFailedToStart는 이와 같은 상황에 도움이 될 수 있는 또 하나의 런북입니다.
환경설정을 자동으로 검토하고 연결을 테스트함으로써 태스크 시작 실패에 대한 분석 프로세스를 간소화하고 실행 가능한 지침을 제공합니다.
예를 들어, 퍼블릭 서브넷에서 다음과 같은 연결 오류로 ECS 태스크가 시작되지 않는 이슈가 발생했습니다. 라우팅 테이블과 네트워크 설정은 올바르게 구성되어 있지만 태스크가 시작되지 않는 이유를 이해하기에는 근본 원인이 불분명할 수 있습니다. VPC와 서브넷의 네트워크 구성을 다시 확인해 보지만 여전히 뚜렷한 원인을 파악하지 못했고 문제는 지속되고 있습니다.
이 경우, 실패한 태스크를 진단하기 위해 ClusterName과 TaskID를 파라미터로 입력하여 런북을 실행할 수 있습니다. 런북 실행 결과 ECS 태스크를 생성할 때 public IP 자동 할당 옵션이 활성화되지 않았다는 내용과 함께 문제 해결을 위한 단계가 구체적으로 설명된 것을 확인할 수 있습니다.
Support Automation Workflows (SAW)에 대해 자세히 알아보세요.
본 포스팅에서 Support Automation Workflows 사용 사례를 몇 가지 살펴보고 문제 해결 프로세스를 강화할 수 있는 방법에 대해 알아봤습니다. AWS Support는 문제 해결 기술을 지속적으로 혁신하고 더 나은 서포트 경험을 제공하기 위해 최선을 다하고 있습니다. SAW의 잠재력을 아직 탐구해 보지 못한 분들이 있다면 오늘 한 번 시도해 보는 것을 권장드립니다.
- What’s New with AWS에서 AWS의 새로운 기능에 대한 공지를 구독하세요.
- AWS Support 팀에서 만든 AWS Support 셀프 서비스 런북 사용법을 살펴보세요.
- AWS YouTube channel에서 AWS Supports You: Using Support Automation Workflows 데모를 시청해 보세요.
- Systems Manager Automation Runbook Reference를 참고해 보세요. AWS Systems Manager에서 사용할 수 있는 다양한 자동화 런북에 대한 세부 정보를 제공합니다.
- 미리 정의된 각 런북에는 자세한 설명, 단계별 지침, 예제 입력 값 및 출력 결과가 첨부되어 있습니다. 특정 AWS 서비스에 따라 분류된 다양한 범위의 런북을 찾을 수 있습니다.