[ 고지 사항 (Disclaimer) ]
본 컨텐츠는 고객의 편의를 위하여 AWS 서비스 설명을 위해 제작, 제공된 것입니다. 만약 AWS 사이트와 컨텐츠 상에서 차이나 불일치가 있을 경우 AWS 사이트 (AWS.amazon.com)가 우선합니다. 또한 AWS 사이트 상에서 한글 번역문과 영어 원문에 차이나 불일치가 있을 경우(번역의 지체로 인한 경우 등 포함), 영어 원문이 우선합니다.
본 문서는 Infrastructure as Code(2017, 영문) 내용에 기반하여 작성 되었습니다.
이 문서는 정보 제공의 목적으로만 제공됩니다. 본 문서의 발행일 당시 AWS의 현재 제품 오퍼링 및 실행방법 등을 설명하며, 예고 없이 변경될 수 있습니다. 고객은 본 문서에 포함된 정보나 AWS 제품 또는 서비스의 사용을 독립적으로 평가할 책임이 있으며, 각 정보 및 제품은 명시적이든 묵시적이든 어떠한 종류의 보증 없이 “있는 그대로” 제공됩니다. 본 문서는 AWS, 그 자회사, 공급업체 또는 라이선스 제공자로부터 어떠한 보증, 표현, 계약 약속, 조건 또는 보장을 구성하지 않습니다. 고객에 대한 AWS의 책임 및 의무는 AWS 계약에 의해 관리되며 본 문서는 AWS와 고객 사이의 어떠한 계약에도 속하지 않으며 계약을 변경하지도 않습니다.
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
구성 관리
인프라 리소스를 프로비저닝하고 해당 인프라가 가동되고 실행되면 환경의 지속적인 구성 관리 요구 사항을 충족해야 합니다. 다음 상황을 고려합니다.
· 릴리스 관리자는 서버 그룹에 애플리케이션 버전을 배포하고 문제가 있는 경우 롤백을 수행하려고 합니다.
· 시스템 관리자는 개발자 환경에 새 운영 체제 패키지를 설치하라는 요청을 수신하지만 다른 환경은 그대로 둡니다.
· 애플리케이션 관리자는 애플리케이션을 포함하는 모든 서버에서 구성 파일을 주기적으로 업데이트해야 합니다.
이러한 상황을 해결하는 한 가지 방법은 프로비저닝 단계로 돌아가서 필요한 변경 사항을 포함한 새 리소스를 프로비저닝하고 이전 리소스를 폐기하는 것입니다. 인프라 불변성이라고도 하는 이 접근 방식은 변경될 때마다 코드 기준선에 따라 프로비저닝된 리소스를 새로 구축합니다. 따라서 구성 드리프트가 제거됩니다.
그러나 다른 접근 방식을 취하고 싶을 때가 있습니다. 내구성이 높은 환경에서는 재프로비저닝 대신 현재 리소스를 점진적으로 변경하는 것이 좋습니다. 이러한 요구를 해결하기 위해 AWS는 Amazon EC2 Systems Manager와 AWS OpsWorks for Chef Automate를 제공합니다.
Amazon EC2 Systems Manager
Amazon EC2 Systems Manager는 사내 환경에서 EC2 인스턴스와 서버 또는 VM(가상 시스템)에서 일반적인 유지보수, 관리, 배포 및 운영 작업의 실행을 단순화하는 기능 모음입니다. 시스템 매니저를 사용하면 EC2 인스턴스 및 OS 구성의 현재 상태를 쉽게 이해하고 제어할 수 있습니다. 시스템 구성, OS 패치 수준, 애플리케이션 구성 및 배포에 대한 기타 세부 정보를 시간에 따라 추적하고 원격으로 관리할 수 있습니다.
이러한 기능은 복잡하고 반복적인 작업을 자동화하고, 시스템 구성을 정의하고, 드리프트를 방지하고, Amazon EC2 및 사내 구성의 소프트웨어 컴플라이언스를 유지하는 데 도움이 됩니다.
표 1에는 시스템 관리자가 간소화하는 작업이 나열되어 있습니다.
문서 구조
시스템 관리자 문서는 시스템 관리자가 관리되는 인스턴스에서 수행하는 작업을 정의합니다. 시스템 매니저에는 표 1에 나열된 기능을 지원하기 위해 12개 이상의 사전 구성된 문서가 포함되어 있습니다. 또한 사용자 정의 버전 제어 문서를 생성하여 시스템 관리자의 기능을 강화할 수도 있습니다. 기본 버전을 설정하고 AWS 계정 간에 공유할 수 있습니다. 문서의 단계는 실행 순서를 지정합니다. 모든 문서는 JSON으로 작성되며 매개 변수와 작업을 모두 포함합니다. AWS OpsWorks for Chef Automate와 마찬가지로 시스템 관리자용 문서는 인프라 코드 기반의 일부가 되어 구성 관리에 사용됩니다.
다음은 윈도우즈 기반 호스트에 대한 사용자 지정 문서의 예입니다. 이 문서는 ipconfig 명령을 사용하여 노드의 네트워크 구성을 수집한 다음 MySQL을 설치합니다.
모범 사례
Run Command
· SSH/RDP 대신 실행 명령을 사용하여 EC2 인스턴스에 액세스하여 보안 상태를 개선합니다.
· AWS CloudTrail을 사용하여 실행 명령을 대신하거나 실행하는 모든 API 호출을 감사합니다.
· 실행 명령의 속도 제어 기능을 사용하여 단계별 명령 실행을 수행합니다.
· AWS IAM(Identity and Access Management) 정책을 사용하여 실행 명령(및 모든 시스템 관리자 기능)에 대해 세부적인 액세스 권한을 사용합니다.
Inventory
· AWS Config와 함께 인벤토리를 사용하여 애플리케이션 구성을 초과 감사합니다.
State Manager
· 미리 구성된 AWS-UpdateSSMAgent 문서를 사용하여 SSM 에이전트를 정기적으로 업데이트합니다.
· Windows용 EC2Config를 사용하여 시작할 때 부팅 EC2 인스턴스입니다.
· (Windows에 특정) PowerShell 또는 DSC(원하는 상태 구성) 모듈을 Amazon S3에 업로드하고 AWS- InstallPowerShellModule을 사용합니다.
· 태그를 사용하여 애플리케이션 그룹을 생성합니다. 그런 다음 개별 인스턴스 ID를 지정하는 대신 대상 매개 변수를 사용하여 인스턴스를 대상으로 지정합니다.
· Systems Manager를 사용하여 Amazon Inspector에서 생성한 결과를 자동으로 적용합니다.
· 모든 시스템 관리자 문서에 중앙 집중식 구성 저장소를 사용하고 조직 전체에서 문서를 공유할 수 있습니다.
Maintenance Windows
· OS 패치, 드라이버 업데이트 또는 소프트웨어 설치와 같은 인스턴스에서 중단 작업을 수행하기 위한 스케줄을 정의합니다.
Patch Manager
· Patch Manager를 사용하면 EC2 인스턴스에서 패치를 확장하고 규정 준수 가시성을 높일 수 있습니다.
Automation
· 자동화 문서로 인프라를 위한 자체 서비스 가능한 런북을 작성합니다.
· 자동화를 사용하여 AWS Marketplace 또는 사용자 지정 AMI에서 AMI 생성, 공용 문서 사용 또는 사용자 고유의 워크플로우 작성 작업을 단순화할 수 있습니다.
· AWS-UpdateLinuxAmi 또는 AWS- UpdateWindowsAmi 문서를 사용하거나 사용자 정의 자동화 문서를 작성하여 이미지를 구축하고 유지합니다.
Parameter Store
· 매개 변수 저장소를 사용하여 글로벌 구성 설정을 중앙 집중식으로 관리합니다.
· AWS KMS를 통해 암호화 된 비밀 관리에 Parameter Store를 사용하십시오.
· Parameter Store with Amazon EC2 Container Service(ECS) 작업 정의를 사용하여 암호를 저장합니다.
AWS OpsWorks for Chef Automate
AWS OpsWorks for Chef Automate는 구성 관리 플랫폼인 Chef의 기능을 AWS에 제공합니다. OpsWorks for Chef Automate는 규모에 맞게 DevOps 기능을 지원하는 추가 기능을 제공하여 Chef의 기능을 더욱 강화합니다. Chef는 서비스 설치와 같은 작업을 수행하는 Ruby 언어로 작성된 구성 스크립트인 레시피 개념을 기반으로 합니다. AWS CloudFormation 템플릿과 같은 요리법은 버전을 제어할 수 있는 소스 코드의 한 형태이므로 코드로서의 인프라 원칙을 리소스 라이프사이클의 구성 관리 단계로 확장합니다.
OpsWorks for Chef Automate는 Chef의 기능을 확장하여 조직이 규모에 맞게 DevOps를 구현할 수 있도록 지원합니다. OpsWorks for Chef Automate는 DevOps 작업 방식을 지원하도록 구성할 수 있는 세 가지 핵심 기능인 워크플로우, 컴플라이언스 및 가시성을 제공합니다.
워크플로우
OpsWorks for Chef Automate의 워크플로우를 사용하여 개발, 테스트 및 배포를 조정할 수 있습니다. 워크플로우에는 적절한 권한을 가진 사용자가 릴리스 관리 프로세스의 단계 간에 코드를 승격할 수 있도록 하는 품질 게이트가 포함되어 있습니다. 이 기능은 팀 간의 협업을 지원하는 데 매우 유용할 수 있습니다. 각 팀은 자체 게이트를 구현하여 각 팀의 프로젝트 간 호환성을 보장할 수 있습니다.
컴플라이언스
OpsWorks for Chef Automate는 구성 관리의 일부로 조직의 규정 준수를 지원할 수 있는 기능을 제공합니다. Chef Automate는 규정 준수 및 위험과 관련된 문제를 강조하는 보고서를 제공할 수 있습니다. 또한 CIS(인터넷 보안 센터)와 같이 잘 알려진 그룹의 프로필을 활용할 수도 있습니다.
가시성
OpsWorks for Chef Automate는 프로젝트 내의 워크플로우 및 규정 준수 상태를 파악할 수 있도록 지원합니다. 주방장 사용자는 관련 이벤트에 대한 정보를 제공하는 대시보드를 생성하고 보고 사용자 인터페이스를 통해 이벤트를 쿼리할 수 있습니다.
레시피 분석
Chef 레시피은 일련의 리소스 정의로 구성됩니다. 이 정의는 리소스의 원하는 상태와 Chef 가 리소스의 상태를 어떻게 해당 상태로 가져올 수 있는지를 설명합니다. Chef는 60개 이상의 리소스 유형을 지원합니다. 아래에 일반적인 리소스 유형 목록이 나타납니다.
다음은 Chef 레시피의 예이다. 이 예에서는 Apache 웹 서버의 설치를 기반으로 하는 리소스를 정의합니다. 리소스 정의에는 기본 운영 체제에 대한 검사가 포함됩니다. 사례 연산자를 사용하여 노드[:platform]의 값을 검사하여 기본 운영 체제를 확인합니다. 작업: 설치 지침은 리소스를 원하는 상태(즉, 패키지를 설치합니다)로 가져옵니다.
레시피 Linting 및 테스트
Linting (구문 검사)와 단위 및 통합 테스트를 지원하는 Chef 및 Chef 사용자 커뮤니티에서 다양한 도구를 사용할 수 있습니다. 다음 섹션에서 가장 일반적인 플랫폼 중 일부를 강조합니다.
Rubocop 및 Foodcritic으로 Linting
Linting는 Rubocop 및 Foodcritic과 같은 도구를 사용하여 Chef 레시피와 같은 인프라 코드에서 수행 할 수 있습니다. Rubocop는 Ruby 스타일 가이드를 기반으로 Chef 레시피에 대한 정적 분석을 수행합니다. Ruby는 Chef 레시피를 작성하는 데 사용되는 언어입니다. 이 도구는 Chef Development Kit의 일부이며 소프트웨어 개발 워크 플로우에 통합 될 수 있습니다. Foodcritic은 커뮤니티 기여에 의해 확장 될 수 있는 일련의 내장 규칙을 기반으로 일반적인 구문 오류에 대해 Chef 레시피를 확인합니다.
ChefSpec을 사용한 단위 테스트
ChefSpec은 Chef cookbooks에 대한 단위 테스트를 제공 할 수 있습니다. 이 테스트는 원하는 목표를 달성하기 위해 요리사가 적절한 작업을 수행하도록 요청 받았는지 여부를 판별 할 수 있습니다. ChefSpec에는 구성 테스트 스펙이 필요하며, 이는 레시피에 대해 평가됩니다.
예를 들어 ChefSpec은 Chef가 Apache 패키지를 설치했는지 실제로 확인하지 않고 Chef 레시피가 Apache 설치를 요청했는지 여부를 확인합니다. 테스트의 목표는 레시피가 프로그래머의 의도를 반영하는지 여부를 검증하는 것입니다.
테스트 Kitchen 과의 통합 테스트
Test Kitchen은 테스트 환경을 만든 다음 테스트 프레임 워크 인 버스를 사용하여 Chef 레시피에 지정된 리소스 생성을 확인하는 테스트 플랫폼입니다.
OpsWorks for Chef Automate 워크 플로 기능과 함께 이전 테스트 도구를 활용함으로써 개발자는 개발 수명주기 동안 인프라 테스트를 자동화 할 수 있습니다. 이러한 테스트는 코드 자체의 형태이며 배포에 대한 코드 접근 방식의 인프라의 또 다른 주요 부분입니다.
모범 사례
여기에 제시된 전략, 기술 및 제안은 AWS OpsWorks for Chef Automate의 최대 이점과 최적 결과를 얻는 데 도움이 됩니다.
· Chef 레시피를 Amazon S3 아카이브에 저장해보십시오. Amazon S3는 안정성과 내구성이 뛰어납니다. 명명 규칙을 사용하여 각 아카이브 파일의 버전을 명시 적으로 지정하십시오. 또는 감사 내역을 제공하고 이전 버전으로 쉽게 되돌릴 수있는 Amazon S3 버전 관리를 사용하십시오.
· 조직의 거버넌스 요구 사항에 맞는 백업 일정을 설정하십시오.
· IAM을 사용하여 OpsWorks for Chef Automate API 호출에 대한 액세스를 제한하십시오.
정리
Amazon EC2 Systems Manager를 사용하면 온 프레미스 환경의 EC2 인스턴스 및 서버 또는 VM에 예상 상태 구성을 배포, 사용자 지정, 적용 및 감사 할 수 있습니다. AWS OpsWorks for Chef Automate를 사용하면 Chef 레시피를 사용하여 환경 구성을 지원할 수 있습니다. OpsWorks for Chef Automate를 독립적으로 또는 AWS CloudFormation에서 프로비저닝한 환경에서 사용할 수 있습니다. Systems Manager와 관련된 실행 문서 및 정책과 OpsWorks for Chef Automate와 관련된 레시피는 인프라 코드베이스의 일부가 되어 응용 프로그램 소스 코드와 같이 제어 될 수 있습니다.
모니터링 및 성능
인프라 리소스 프로비저닝 및 구성 관리에서 인프라(Code)의 역할을 검토한 후 이제 인프라 상태를 살펴봅니다. 수요가 가장 많은 기간 동안 다음 이벤트가 웹 사이트 운영에 어떤 영향을 미칠 수 있는지 고려합니다.
· 웹 애플리케이션 사용자는 로드 밸런서의 지연 시간으로 인해 시간 초과가 발생하여 제품 카탈로그를 찾아보기가 어렵습니다.
· 애플리케이션 서버는 CPU 용량이 부족하여 성능 저하가 발생하고 더 이상 새 명령을 처리할 수 없습니다.
· 세션 상태를 추적하는 데이터베이스에는 처리량이 충분하지 않습니다. 이로 인해 사용자가 애플리케이션의 다양한 단계를 거치면서 지연이 발생합니다.
이러한 상황은 성능 기대치를 충족하지 못하는 인프라 리소스에서 발생하는 운영 문제를 설명합니다. 환경의 상태를 평가하고 문제가 발생했을 때 시정 조치를 취하기 위해 주요 메트릭스를 수집하는 것이 중요합니다. 메트릭은 가시성을 제공합니다. 메트릭을 사용하면 이벤트에 자동으로 대응할 수 있습니다. 메트릭이 없으면 조직에서 인프라에서 발생하는 상황에 대해 잘 모르기 때문에 모든 문제를 해결하기 위해 직원의 개입이 필요합니다. 확장 가능하고 느슨하게 결합된 시스템을 여러 언어 및 프레임워크로 작성하면 관련 메트릭과 로그를 캡처하고 그에 따라 대응하기가 어려울 수 있습니다. 이러한 요구를 해결하기 위해 AWS는 Amazon CloudWatch 서비스를 제공합니다.
Amazon CloudWatch
Amazon CloudWatch는 런타임 메트릭스, 로그 및 이벤트를 수집, 해석 및 대응하는 서비스 세트입니다. CloudWatch는 Amazon EC2, ELB(Elastic Load Balancing) 및 Amazon DynamoDB와 같은 여러 AWS 서비스에서 메트릭을 자동으로 수집합니다. 응답에는 서버 없는 이벤트 기반 컴퓨팅 플랫폼인 AWS Lambda에서 처리되는 알림 보내기 또는 사용자 지정 작업과 같은 기본 작업이 포함될 수 있습니다. Lambda 기능에 대한 코드는 인프라 코드 베이스의 일부가 되며, 따라서 코드로서의 인프라가 운영 레벨로 확장됩니다. CloudWatch는 메인 CloudWatch 서비스, Amazon CloudWatch Logs 및 Amazon CloudWatch 이벤트의 세 가지 서비스로 구성됩니다. 우리는 이제 이것들을 좀 더 자세히 고려합니다.
Amazon CloudWatch
메인 Amazon CloudWatch 서비스는 Amazon EC2, ELB, DynamoDB 및 Amazon RDS(Relational Database Service)와 같은 많은 AWS 서비스에 대한 메트릭을 수집하고 추적합니다. 애플리케이션과 같은 개발 서비스에 대한 사용자 정의 메트릭을 생성할 수도 있습니다. CloudWatch는 메트릭이 일정 기간 동안 지정된 임계값에 도달하면 경보를 생성합니다.
다음은 이 섹션의 시작 부분에 언급된 상황에 적용할 수 있는 메트릭과 잠재적인 응답의 몇 가지 예입니다.
· ELB의 지연 시간이 2분 동안 5초를 초과하면 시스템 관리자에게 이메일 알림을 보냅니다.
· 평균 EC2 인스턴스 CPU 사용량이 3분 동안 60%를 초과하면 다른 EC2 인스턴스를 시작합니다.
· 과도한 조절이 발생할 경우 DynamoDB 테이블의 용량 단위를 늘립니다.
기본 제공 알림을 사용하거나 Python, Node.js, Java 또는 C#에서 사용자 정의 Lambda 함수를 작성하여 메트릭 기반 경보에 대한 응답을 구현할 수 있습니다. 그림 6은 CloudWatch 경보가 Amazon Simple Notification Service(Amazon SNS)를 사용하여 DynamoDB 용량 업데이트를 트리거하는 방법을 보여 주는 예입니다.
Amazon CloudWatch Logs
Amazon CloudWatch 로그는 Amazon EC2, AWS CloudTrail 및 기타 소스의 로그를 모니터링하고 저장합니다. EC2 인스턴스는 CloudWatch Logs Agent 및 Logstash, Graylog 및 Fluentd와 같은 로깅 도구를 사용하여 로깅 정보를 전송할 수 있습니다. Amazon S3에 저장된 로그는 Amazon S3 이벤트를 구성하여 Lambda 기능을 트리거하여 CloudWatch Logs로 전송할 수 있습니다.
수집 된 로그 데이터는 CloudWatch 경보를 트리거 할 수있는 새로운 CloudWatch 지표의 기초가 될 수 있습니다. 이 기능을 사용하면 코드를 작성하지 않고도 로그를 생성하는 모든 리소스를 모니터링 할 수 있습니다. 보다 고급 응답 절차가 필요한 경우 Lambda 함수를 생성하여 적절한 조치를 취할 수 있습니다. 예를 들어 Lambda 함수는 SES.SendEmail 또는 SNS.Publish API를 사용하여 NullPointerException 오류가 프로덕션 로그에 나타날 때 Slack 채널에 정보를 게시 할 수 있습니다.
로그 처리 및 상관 관계를 통해 애플리케이션 동작을 보다 심층적으로 분석할 수 있으며 메트릭에서 파악하기 어려운 내부 세부 정보를 노출할 수 있습니다. CloudWatch Logs는 로그의 저장 및 분석, 그리고 운영 문제에 대한 데이터 중심적인 응답을 가능하게 하는 처리 기능을 제공합니다.
Amazon CloudWatch Events
Amazon CloudWatch 이벤트는 AWS 환경의 변경 사항에서 일련의 이벤트를 생성하고 규칙 엔진을 적용하며 지정된 대상에 일치하는 이벤트를 제공합니다. 스트리밍할 수 있는 이벤트의 예로는 EC2 인스턴스 상태 변경, 자동 확장 작업, CloudTrail에서 게시된 API 호출, AWS 콘솔 로그인, AWS Trusted Advisor 최적화 알림, 사용자 지정 애플리케이션 수준 이벤트 및 시간 예약 작업이 있습니다. 대상에는 SNS 알림이나 Lambda 기능을 사용한 사용자 지정 응답과 같은 기본 제공 작업이 포함될 수 있습니다.
선택한 이벤트에 대응할 수 있는 인프라 기능은 운영과 보안 모두에서 이점을 제공합니다. 운영 측면에서 이벤트는 별도의 예약 시스템을 관리할 필요 없이 유지 관리 작업을 자동화할 수 있습니다. 정보 보안과 관련하여 이벤트는 콘솔 로그인에 대한 알림, 인증 실패 및 CloudTrail에 의해 기록된 위험한 API 호출을 제공할 수 있습니다. 두 영역 모두에서, 이벤트 응답을 인프라 코드에 통합하면 자가 복구 수준이 높아지고 운영 성숙도가 높아집니다.
모범 사례
다음은 모니터링과 관련된 모범 사례에 대한 몇 가지 권장 사항입니다.
· 모든 AWS 리소스가 메트릭을 내보내고 있는지 확인합니다.
· 메트릭 관련 이벤트가 발생할 때 적절한 응답을 제공하는 메트릭에 대해 CloudWatch 경보를 생성합니다.
· Amazon S3 및 Amazon EC2를 비롯한 AWS 리소스에서 CloudWatch Logs로 로그를 전송하여 로그 스트림 트리거 및 Lambda 기능을 사용하여 분석합니다.
· CloudWatch 및 Lambda를 통해 지속적인 유지 보수 작업을 예약할 수 있습니다.
· CloudWatch 사용자 지정 이벤트를 사용하여 애플리케이션 레벨 문제에 대응합니다.
정리
모니터링은 시스템 동작을 이해하고 데이터 기반 반응을 자동화하기 위해 필수적입니다. CloudWatch는 런타임 환경에서 메트릭과 로그 형식으로 관찰 결과를 수집하고 이를 경보, 스트림 및 이벤트를 통해 실행할 수 있도록 합니다. Python, Node.js, Java 또는 C#로 작성된 Lambda 기능은 이벤트에 대응할 수 있으므로 Code로서의 인프라 역할을 운영 영역으로 확장하고 운영 환경의 복원력을 향상시킬 수 있습니다.
AWS는 IT 인프라 비용을 절감하고 기업의 핵심가치에 더욱 집중할 수 있도록 합니다.
AWS에 대한 자세한 문의사항은 여기를 눌러 주세요.
빌드업웍스는 AWS 컨설팅 파트너로 고객 비즈니스를 최우선으로 하며 고객의 클라우드의 성공적인 시작과 운영을 지원합니다.