Amazon Web Services 한국 블로그
AWS Well-Architected 플레이북 및 런북 자동화를 통한 운영 우수성 확보 방법
IT 분야에서 서비스 운영을 준비하는 과정 중에 중요한 부분 중에 하나는 다양한 시나리오에 대해서 신속하게 대응하고 정확하게 작업을 실행하기 위해 미리 정의된 프로세스를 갖추는 것입니다. 운영 중에 발생하는 문제를 관리하고 대응하기 위해 AWS Well-architected 플레이북(Playbook)과 런북(Runbook)을 활용 할 수 있습니다. 플레이북은 장애에 영향을 미친 원인을 조사하고 식별하기 위해 수행되는 프로세스를 문서화한 것이고, 런북은 문제 해결하기 위해 필요한 조치들을 정의한 것입니다.
이들 플레이북과 런북은 간단하게 수동으로 수행할 수도 있습니다. 예를 들어, 장애가 발생하면 엔지니어가 알림을 받고 문제 해결을 위해 애플리케이션의 로그와 여러 지표들을 분석합니다. 시간이 지남에 따라 엔지니어는 문제에 대해 더 잘 이해하게 되고 문제 해결을 위해 보다 효율적인 조사 경로를 만들어낼 수 있습니다. 하지만, 관리해야할 환경의 규모가 커진다면 수동으로 플레이북과 런북을 지속적으로 수행하는 것은 쉽지 않습니다.
다음은 플레이북 및 런북을 수동으로 수행할 때의 몇 가지 단점들입니다.
- 단일 장애점 (SPoF, Single Point of Failure) – 엔지니어가 바로 단일 장애점이 될 수 있는 위험한 요소를 지니고 있습니다. 만약, 엔지니어가 일을 할 수 없는 상황이 발생한다면 적시에 사고 대응을 할 수 없는 심각한 위험에 처할 수 있습니다.
- 유효성 보장의 애로점 – 플레이북 및 런북에 문서화된 절차는 별도의 스트림으로 수행되기 때문에 각 작업의 단계의 유효성을 유지하기 어렵습니다. 플레이북과 런북을 수동으로 단계별 테스트를 진행하려면 엔지니어도 시간을 할애해야 하며 이는 비용이 많이 들 수 있습니다.
- 추적 애로점 – 변경 사항을 추적하는 것이 어렵습니다. 변경 사항은 아키텍처의 여러 다른 영역에 걸쳐 있을 수 있고 수행한 정확한 활동을 참조할 단일 진리점(SPOT, Single Point of Truth)이 가지기 어렵습니다.
- 확장 지원 애로점 – 인간은 제한된 인지 능력을 가지고 있습니다. 규모가 큰 환경에서는 여러 도메인, 종속성 및 조건 등을 고려해야합니다. 따라서, 일반적으로 플레이북 및 런북을 수동으로 수행하면 오류가 발생하기 쉽고 확장하기도 어렵습니다.
이 글에서는 이러한 플레이북과 런북 모범 사례 활동을 어떻게 수행해야 규모에 맞게 운영 효율을 높일 수 있을지 자동화 관점에서 살펴보도록 하겠습니다.
AWS Well-Architected 운영 우수성 개요
AWS는 워크로드를 설계하고 구축할 때 AWS 모범 사례에 얼마나 잘 부합하는지를 이해할 수 있는 여러 가지 질문을 제공하는 AWS Well-Architected 프레임워크를 정의했습니다. Well-Architected 프레임워크는 운영 우수성, 보안, 안정성, 성능 효율성 및 비용 최적화 라는 5가지를 기반으로 구성되어 있습니다. 각 기반에는 설계 원칙, 정의, 모범 사례, 평가 질문 등을 포함하고 있습니다. 이 글에서는 5가지의 기반 중에 워크로드를 운영할 준비가 되었는지 확인하는 모범 사례에 중점을 둔 운영 우수성(Operational Excellence)을 중점적으로 설명하려고 합니다.
운영 우수성의 여러 설계 원칙들 중 하나는 코드를 통한 운영이 있으며, 이는 코드형 인프라(Infrastructure as a code) 와 플레이북과 런북을 사용하여 운영 절차를 코드로 구현하고 이벤트에 대응하여 이를 트리거하면 실행을 자동화하는 것입니다. 이 코드화 된 프로세스를 자동화함으로써 단일 장애점의 위험요소를 제거하고 더 나은 확장성도 제공합니다.
또한, 애플리케이션 코드를 테스트하는 것처럼 테스트할 수 있으므로 단계별 유효성을 더 쉽게 검증할 수 있습니다. 무엇보다 가장 중요한 것은 실제 행해진 행동들을 더 쉽게 추적할 수 있으며, 워크로드가 개선되면 절차도 적절하게 개선하기도 용이합니다. 그리고 모든 운영상의 실패로부터 학습한 내용을 통해 지속적인 운영 프로세스를 개선을 해나갈 수 있습니다.
그럼, 이제 AWS 서비스를 사용하여 플레이북과 런북을 구축하는 방법을 살펴보겠습니다.
AWS에서 자동화된 플레이북 및 런북을 생성하는 방법
자동화된 플레이북 및 런북은 다양한 방법으로 생성할 수 있습니다. AWS에서는 AWS Systems Manager 런북을 활용할 수 있습니다. 이 기능을 사용하면 JSON 또는 YAML 형식의 단일 문서에 수행하고자하는 작업들을 정의할 수 있습니다. 문서 리소스는 AWS Systems Manager 서비스에서 생성 및 호스팅 되며, AWS 리소스에 대한 수행하는 작업과 워크플로우를 오케스트레이션할 수 있습니다.
AWS Systems Manager Runbook 문서는 몇 가지 기본 작업 참조 기능을 지원합니다. 여러 작업 참조 중 하나인 ‘aws:executeScript
‘를 사용하여 Python 또는 Powershell 스크립트를 문서에 직접 포함하는 것입니다. 이를 통해 플레이북과 런북에 사용자만의 로직으로 커스터마이징이 가능하며, 이는 복잡한 로직을 수행해야하는 경우 매우 유용하게 사용될 수 있습니다.
예를 들어, 특정 인시던트와 관련이 있는 모든 AWS 리소스를 찾아내고 싶다면 Amazon CloudWatch 경보에서 해당 ARN을 참조할 수 있습니다. 그 후, ‘aws:executeScript
‘를 사용하여 ARN의 태그를 찾은 다른 AWS API를 사용하여 참조와 동일한 태그가 있는 모든 관련 AWS 리소스를 찾아낼 수 있습니다.
애플리케이션을 만들 때와 마찬가지로 동일한 코드를 여러 번 반복해서 작성하는 것은 효율적이지 않으며 큰 규모에서는 테스트하기도 더 어렵습니다. 따라서 플레이북 및 런북 문서를 작성할 때 별도의 재사용 가능하도록 프로세스를 모듈화함으로써 장기적으로 더 나은 확장성을 제공할 수 있습니다. 이 모듈화된 문서들을 오케스트레이션하기 위해서는 ‘aws:executeAutomation
‘을 사용하여 실행할 플레이북 및 런북의 단계를 정의할 수 있습니다.
즉, 이전 플레이북이 인시던트와 관련된 AWS리소스 목록을 생성하는 것이었다면 ‘aws: executeAutomation
‘ 을 사용하여 생성된 목록의 결과를 다른 플레이북으로 전달하여 실제 리소스에 대한 추가적인 조사를 진행할 수 있습니다. 예를 들면, 로드 밸런서 로그 확인, ECS 구성 확인, RDS 로그 확인 등 다양한 목적에 맞게 조사를 진행할 수 있습니다. 모듈화를 통해 동일한 플레이북을 재사용하고 다른 플레이북과 연동하여 확장성을 가져갈 수 있습니다.
만약, 다른 AWS 서비스와 연동하고 싶다면 ‘aws:executeAwsApi
‘ 를 사용하여 플레이북 또는 런북 문서에서 직접 AWS API를 호출할 수도 있습니다. 예를 들어, 이전 플레이북에서 진행한 조사 결과 보고서를 Amazon SNS 를 사용하여 엔지니어에게 보고서를 이메일로 보낼 수 있습니다. 추가적인 코드를 작성하지 않고 Inputs 파라미터를 사용하여 AWS API 작업 호출을 정의하고 실행할 수 있습니다.
마지막으로 중요한 부분은 플레이북과 런북을 구축할 때 기존 비즈니스 프로세스와의 통합도 고려해야합니다. 상황에 따라 단순히 자동화를 실행하기 전에 비즈니스 관리자의 승인을 구하는 게이트 메커니즘이 필요할 수 있습니다. 이 경우 ‘aws:approve
‘ 를 사용해 Amazon SNS 주제를 통해서 작업 실행여부를 승인하거나 거부할 수 있는 URL을 비즈니스 관리자에게 보낼 수 있습니다.
혹은 운영 중인 비즈니즈에 영향을 주지 않기 위해 특정 시간에는 자동화 실행을 차단해야하는 메커니즘을 구축해야 할 수도 있습니다. 이 경우 ‘awsexecuteScript’ 사용하여 자동으로 승인하기 전 일정 기간 동안 기다리며 비동기식으로 실행할 수 있습니다. 동시에 동일한 ‘aws:approve’ 를 활용하여 자동 승인 트리거가 시작되기 전에 비즈니스 관리자가 실행을 거부할 수도 있도록 구축할 수도 있습니다.
이 글에서 공유한 시나리오를 구축하기 위한 단계별 핸즈온 랩을 직접 실습해 보시려면, AWS Well-Architected Labs에서 제공하고 있는 플레이북 및 런북의 자동화 실습을 참조하세요.
마무리
운영 우수성을 달성하기 위해서는 잘 정의된 프로세스가 필요하며 이를 통해 플레이북 및 런북으로 문서화 할 수 있어야합니다. 그러나 이러한 문서들을 수동으로 수행할 경우 장기적으로 확장이 어렵다는 단점이 있습니다. 이것이 AWS Well-Architected 운영 우수성의 설계 원칙 중 하나인 작업을 코드를 통한 운영을 정의한 이유입니다.
즉, 아키텍처를 정의하고 배포하기 위한 코드형 인프라(Infrastructure as a code) 와 별개로 플레이북 및 런북과 같은 운영 프로세스도 동일하게 코드화하고 관리해야 합니다. AWS에서는 AWS Systems Manager 런북을 사용하여 플레이북 및 런북 문서를 코드화 할 수 있습니다.
또한, ‘aws:executeScript
‘, ‘aws:executeAutomation
‘, ‘aws:executeAwsApi
‘,’aws:approve
‘와 같은 작업 참조기능 활용해 모듈화된 문서를 재사용하고 오케스트레이션하여 확장성을 높이고 기존 비즈니스 프로세스와 통합함으로서 운영 우수성을 향상 시킬 수 있습니다.
– Stephen Salim, AWS Well-Architected 솔루션즈 아키텍트
– 한장환, AWS Well-Architected 솔루션즈 아키텍트
– 강세용, AWS 솔루션즈 아키텍트