Amazon Web Services 한국 블로그

Amazon RDS 활용 시, 데이터베이스 관리자 (DBA)의 역할 변화 (2) – 업무 자동화

지난 1부 글에서는 Amazon Relational Database Service(Amazon RDS)를 통해 DBA(데이터베이스 관리자) 역할의 초점을 일상적이고 시간 소모적인 작업에서 신속한 비즈니스 발전에 도움이 되는 프로젝트 작업으로 바꾸는 방법에 대해 설명했습니다. 데이터베이스에 대한 액세스를 제어하는 데 더 많은 시간을 할애하고, 변경 초안을 작성한 후 데이터베이스 구조에 적용하는 애플리케이션 팀의 작업을 지원하고, 사후 및 사전 성능 튜닝을 수행하는 것은 비즈니스 수익률에 직접적으로 기여하는 중요한 일입니다.

이 게시물에서는 이러한 장점을 다음 단계로 확대하고 AWS 도구를 사용한 자동화를 통해 더 많은 작업을 수행하는 방법에 대해 설명합니다. 비즈니스가 최고 속도로 운영되고 있을 때 DBA의 능률을 높이려면 가능한 경우 코드 및 자동화를 사용하는 것이 중요합니다. AWS는 이를 쉽게 하는 도구를 제공합니다.

이 게시물에 포함된 다수의 예제에서는 Amazon RDS에서 AWS CLI(명령줄 인터페이스)를 사용하여 작업을 수행합니다. AWS CLI는 AWS 서비스를 관리하는 통합 도구입니다. 단일 도구를 다운로드하고 구성하면 여러 AWS 서비스를 명령줄에서 제어하고 스크립트를 통해 자동화할 수 있습니다. 이 게시물에 사용된 모든 코드 예제는 이 GitHub 리포지토리에서 다운로드할 수 있습니다.

지금 바로 코드의 작동 방식을 보려면 사례 연구: Amazon RDS를 통한 단위 테스트 가속화로 이동하십시오.

데이터베이스 생성 자동화

Amazon RDS의 기본적인 구성 요소는 DB 인스턴스입니다. Amazon RDS DB 인스턴스는 온프레미스 Microsoft SQL Server와 유사합니다. SQL Server DB 인스턴스를 생성하면 하나 이상의 사용자 지정 데이터베이스를 인스턴스에 추가할 수 있습니다. SQL Server 데이터베이스 생성 및 연결에 대한 단계별 지침은 Amazon RDS 설명서의 예제에서 확인할 수 있습니다.

다음 예제 명령에서는 sqltest라는 이름의 SQL Server 데이터베이스 엔진 SE를 실행하는 DB 인스턴스를 생성합니다. 이 인스턴스의 클래스는 db.m4.large이고 스토리지 크기는 500GB이며 다른 가용 영역에 대기 데이터베이스가 있고 보존 기간이 7일인 자동 백업이 활성화되어 있습니다.

aws rds create-db-instance --db-instance-identifier "<인스턴스 식별자>" \
  --allocated-storage 500 --db-instance-class db.m4.large \
  --engine sqlserver-se --engine-version "12.00.4422.0.v1" \
  --master-username "<사용자 이름>" --master-user-password "<암호>" \
  --backup-retention-period 7 --license-model license-included 

데이터베이스 중지 및 시작 자동화

DB 인스턴스를 간헐적으로 사용하고 이전에 데이터를 사용한 위치에서 다시 시작하려는 경우 Amazon RDS 인스턴스를 일시적으로 중지하여 비용을 절약할 수 있습니다. 업무 시간에만 사용하는 개발 또는 테스트 인스턴스가 있는 경우 야간에는 인스턴스를 종료하고 사무실에 돌아온 후 다시 시작할 수 있습니다. 약간의 오케스트레이션과 몇 번의 API 호출을 수행하면 이 프로세스를 자동화할 수 있습니다. 자세한 내용은 인스턴스 중지 설명서를 참조하십시오.

파라미터 그룹

DB 엔진 구성은 DB 파라미터 그룹의 파라미터를 사용하여 관리됩니다. DB 파라미터 그룹은 하나 이상의 DB 인스턴스에 적용되는 엔진 구성 값의 컨테이너 역할을 합니다. 사용자 지정 파라미터 그룹이 있는 경우 인스턴스를 생성할 때 그룹을 지정하면 이 그룹을 인스턴스에 손쉽게 연결할 수 있습니다. 고객이 생성한 DB 파라미터 그룹을 지정하지 않고 DB 인스턴스를 생성하면 기본 DB 파라미터 그룹이 생성됩니다.

옵션 그룹

일부 DB 엔진은 데이터 관리를 용이하게 하고 데이터베이스의 보안을 강화하는 추가 기능을 제공합니다. Amazon RDS에서는 옵션 그룹을 사용하여 이러한 기능을 활성화하고 구성합니다. 옵션 그룹을 사용하면 특정 Amazon RDS DB 인스턴스에 사용할 수 있는 옵션이라는 기능을 지정할 수 있습니다. 옵션에는 옵션의 작동 방식을 지정하는 설정이 있을 수 있습니다. DB 인스턴스를 옵션 그룹과 연결하면 지정된 옵션 및 옵션 설정이 해당 DB 인스턴스에 대해 활성화됩니다.

다음 명령 예제에서는 AWS CLI를 사용하여 기존 데이터베이스인 sqltest를 새 옵션 그룹 sqlserver-se-12-native-backup을 사용하도록 수정하고 이 변경을 즉시 적용합니다. 예제에 사용된 옵션 그룹은 기본 백업을 사용하고 Amazon RDS for SQL Server 내의 Amazon S3로 복원합니다. 기본 백업/Amazon S3로 복원에 대한 Amazon RDS for SQL Server 지원 블로그 게시물에서 옵션에 대한 자세한 내용을 확인할 수 있습니다.

aws rds modify-db-instance --db-instance-identifier “<인스턴스 식별자>“ \
  --option-group-name “sqlserver-se-12-native-backup” \
  --apply-immediately

모니터링

모니터링은 Amazon RDS 및 AWS 솔루션의 안정성, 가용성 및 성능을 유지하는 데 있어서 중요한 부분입니다. Amazon RDS는 Amazon CloudWatch에 실시간 지표를 제공합니다. Amazon CloudWatch는 AWS에서 실행되는 AWS 클라우드 리소스 및 애플리케이션에 대한 모니터링 서비스입니다. 표준 CloudWatch 모니터링에는 DB 인스턴스에 대한 기본 제공 지표가 포함되며 콘솔, AWS CLI 또는 API를 사용하여 추가 요금 없이 이러한 지표를 확인할 수 있습니다.

AWS는 Amazon RDS 인스턴스에 대한 확장 모니터링을 활성화하는 옵션도 제공합니다. 확장 모니터링은 추가 지표, 개선된 세부 수준 및 프로세스별 정보를 제공합니다. 이 옵션은 인스턴스를 생성하거나 수정할 때 인스턴스를 다시 시작하지 않고 사용할 수 있습니다. 인스턴스에 대해 확장 모니터링을 활성화하는 경우 세부 수준을 선택하고 정보를 수집할 권한이 있는 IAM 역할을 지정할 수 있습니다. 확장 지표는 CloudWatch Logs의 RDSOSMetrics 로그 그룹 아래에 게시되며 AWS Management Console의 Amazon RDS 모니터링 섹션에서도 사용할 수 있습니다. 확장 모니터링 데이터에는 성능 모니터링에 유용한 데이터를 검토할 때 사용할 수 있는 수많은 지표가 포함됩니다.

이 게시물에 나오는 지표 및 알림은 주로 Amazon CloudWatch의 표준 모니터링과 관련된 것입니다.

데이터베이스 모니터링 자동화

Amazon RDS는 수백 가지 지표에 대한 CloudWatch 데이터를 전송합니다. 이 블로그에서는 블로그 목적에 맞게 몇 가지만 언급합니다(WriteThroughput, WriteLatencyReadLatency). 모니터링에 사용할 수 있는 지표의 전체 목록을 보려면 CloudWatch 콘솔을 열고 [Metrics], [RDS]를 선택합니다.

CloudWatch 콘솔에서 데이터베이스의 시간대별 성능을 확인할 수도 있습니다. 이렇게 하면 추세를 파악하고 데이터베이스의 성능 기준을 이해하는 데 도움이 될 수 있습니다.

알람: 준비

알람 상태가 변경될 때 Amazon Simple Notification Service(SNS) 메시지를 전송하는 CloudWatch 경보를 생성할 수 있습니다. 경보는 단일 지표를 사용자가 지정한 기간에 관찰합니다. 일정 기간의 지정된 임계값과 지표의 값을 비교하여 하나 이상의 작업을 수행합니다. 여기서 작업은 Amazon SNS 주제 또는 Auto Scaling 정책으로 전송되는 알림입니다.

따라서 경보를 생성하기 전에 주제를 생성하고 이메일 주소를 사용하여 해당 주제를 구독해야 합니다. 다음은 SNS 주제를 생성하는 명령 예제입니다.

aws sns create-topic --name “app-dba-notification”

명령의 출력으로 ARN(Amazon 리소스 이름) 주제가 반환됩니다.

출력 ARN 및 유효한 이메일 주소를 사용하여 새 SNS 주제를 구독할 수 있습니다.

aws sns subscribe 
  --topic-arn <여기에 ARN 입력> \
  --protocol email --notification-endpoint <사용자의 이메일>

메시지가 이메일 주소로 전송되려면 구독을 확인해야 합니다. 이메일 애플리케이션에서 AWS Notifications의 메시지를 열고 구독을 확인합니다. 웹 브라우저에 Amazon Simple Notification Service의 확인 응답이 표시됩니다.

알람: 생성

알람은 상태 변경이 지속되는 경우에만 작업을 호출합니다. CloudWatch 경보는 특정 상태에 있는 경우 작업을 호출하지 않습니다. 상태가 변경되고 지정된 기간에 유지되어야 합니다. AWS CLI를 사용하여 5분(300초)간 값이 48,000을 충족하거나 초과하는 기간을 두 번 측정하는 WriteThroughput 지표에 대한 경보를 생성할 수 있습니다.

aws cloudwatch put-metric-alarm --alarm-name "Write throughput" \
  --alarm-description "write-throughput" --actions-enabled \
  --alarm-actions "<사용자의 ARN>"\
  --metric-name "WriteThroughput" --namespace "AWS/RDS" --statistic "Maximum" \
  --dimensions "Name=DBInstanceIdentifier,Value=<인스턴스 식별자>" \
  --period 300 --evaluation-periods 2 --threshold 48000 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --treat-missing-data notBreaching

이제 데이터베이스 쓰기 처리량이 10분의 기간에 임계값을 초과하면 CloudWatch가 SNS 주제로 메시지를 전송하고 사용자는 이메일을 받게 됩니다. 이메일의 링크를 통해 콘솔로 이동하면 주의가 필요한 경보를 분명하게 확인할 수 있습니다.

경보는 Amazon RDS 콘솔의 인스턴스에도 표시됩니다.

모니터링 옵션 및 Amazon RDS 모니터링 모범 사례에 대한 자세한 내용은 Amazon RDS 모니터링을 참조하십시오.

백업 및 복원 자동화

Amazon RDS에서 자동 또는 수동 스냅샷을 사용하여 DB 인스턴스를 백업하고 복원할 수 있습니다. 백업 보존 기간의 원하는 시점으로 복원하거나 다른 AWS 리전 또는 다른 계정과 데이터베이스의 복사본을 공유할 수 있습니다.

데이터베이스 백업
Amazon RDS는 DB 인스턴스 백업 기간에 DB 인스턴스의 자동 백업을 생성합니다. Amazon RDS는 DB 인스턴스의 자동 백업을 사용자가 지정한 백업 보존 기간에 따라 저장합니다. 필요한 경우 데이터베이스를 백업 보존 기간의 원하는 시점으로 복구할 수 있습니다.

또한 DB 스냅샷을 생성하여 DB 인스턴스를 수동으로 백업할 수 있습니다. 이 예에서는 스냅샷을 사용하여 동일한 AWS 리전 및 계정으로 데이터베이스를 복원합니다. Amazon RDS에서는 스냅샷을 다른 리전으로 복사하고 다른 계정과 공유할 수도 있습니다. AWS 리전 간에 스냅샷을 유연하게 복사하고 공유할 수 있으므로 새 데이터베이스 복사본을 배포하기가 쉽습니다.

DB 스냅샷을 생성하는 경우 백업할 DB 인스턴스를 식별해야 합니다. 그런 다음 DB 스냅샷 이름을 지정하여 나중에 복원할 때 사용합니다.

aws rds create-db-snapshot --db-snapshot-identifier "<스냅샷 이름>" \
  --db-instance-identifier “<인스턴스 식별자>”

데이터베이스 복원
Amazon RDS는 DB 인스턴스의 스토리지 볼륨 스냅샷을 생성하여 개별 데이터베이스가 아닌 전체 DB 인스턴스를 백업합니다. 이 DB 스냅샷에서 복원을 수행하여 DB 인스턴스를 생성할 수 있습니다. DB 인스턴스를 복원하는 경우 복원에 사용할 DB 스냅샷 이름을 제공해야 합니다. 그런 다음 복원에서 생성된 새 DB 인스턴스의 이름을 제공합니다. 자동 스냅샷 중 하나를 사용하여 데이터베이스를 복원하거나 이전에 생성한 수동 스냅샷을 사용할 수 있습니다.

데이터베이스를 특정 시점으로 복원
자동 스냅샷을 사용하면 백업 보존 기간의 원하는 시점으로 복원할 수 있습니다. DB 인스턴스의 복원 가능한 최근 시간을 확인하려면 AWS CLI describe-db-instances 명령을 사용하고 DB 인스턴스의 LatestRestorableTime 필드에서 반환된 값을 확인합니다.

aws rds describe-db-instances --db-instance-identifier “<인스턴스 식별자>”

DB 인스턴스의 복원 가능한 최근 시간은 일반적으로 현재 시간을 기준으로 5분 이내입니다.

aws rds restore-db-instance-to-point-in-time \
  --source-db-instance-identifier “<인스턴스 식별자>” \
  --target-db-instance-identifier “<대상 식별자>” \
  --restore-time 2017-10-04T00:00:00.000Z

예제 명령은 sqltest 데이터베이스를 2017년 10월 4일 자정(UTC)의 복원 시간에 새 데이터베이스인 sqltest-copy로 복원합니다. 이제 애플리케이션의 대상을 새 데이터베이스로 지정할 수 있습니다. RDS 데이터베이스의 특정 시점 복구에 대한 자세한 내용은 DB 인스턴스를 지정된 시간으로 복원을 참조하십시오.

Amazon RDS 설명서에서 Amazon RDS DB 인스턴스 백업 및 복원에 대한 내용도 읽어볼 수 있습니다.

오케스트레이션 자동화

AWS CLI는 리소스 프로비저닝, 변경 또는 제거 작업을 빠르게 수행할 수 있는 도구입니다. CLI를 사용하여 리소스 컬렉션을 생성할 수 있지만 리소스 간의 종속성을 직접 관리해야 합니다. AWS CloudFormation은 관련 AWS 리소스의 컬렉션을 손쉽게 생성하고, 체계적이고 예측 가능한 방식으로 프로비저닝할 수 있는 개발자 및 비즈니스용 서비스입니다.

AWS CloudFormation은 애플리케이션을 구동하는 관련 리소스의 그룹을 반복적이고 예측 가능한 방식으로 생성하는 작업을 자동화하고 간소화합니다. AWS CloudFormation의 주요 장점 중 하나는 서비스 프로비저닝 단계를 간단한 방법으로 자동화할 수 있다는 것입니다. AWS CloudFormation에는 추가 요금이 없으며 시작하는 AWS 리소스에 대한 요금만 지불하면 됩니다.

다음 이미지는 다음 섹션의 사용 사례에 사용된 AWS CloudFormation 템플릿에서 발췌한 것입니다. 이 템플릿은 스냅샷에서 Amazon RDS 데이터베이스를 복원하고 이 새로운 인스턴스에 대한 경보 5개를 생성합니다. 이 템플릿의 예상 결과는 모든 리소스가 성공적으로 생성되거나 모두 롤백되는 것입니다. 이 블로그 게시물에 대한 코드 리포지토리에서 전체 템플릿을 확인할 수 있습니다.

사례 연구: Amazon RDS를 통한 단위 테스트 가속화
지금까지 관리 작업에 자동화를 추가할 수 있는 모든 방법을 검토했습니다. 이제 이러한 개념을 사용하여 복잡한 테스트 문제를 해결하는 방법을 알아보겠습니다.

고객 데이터베이스를 기반으로 실행되는 제품이 있는 경우 적절한 시기에 다양한 데이터베이스 구성을 기준으로 새 애플리케이션 코드 변경을 테스트하기가 어려울 수 있습니다. 다음 매트릭스는 6개 머신 유형에 대한 SQL Server의 두 가지 구성을 보여줍니다. 이러한 유형의 테스트를 여러 데이터베이스 엔진과 다수의 파라미터 구성에 대해 수행하는 한 고객이 있습니다.

Amazon RDS로 마이그레이션하기 전에 이 고객은 물리적 서버를 사용하고 각 테스트에서 수동으로 구성을 변경했습니다. 고객은 엔진의 기본 백업 및 복원 기능을 사용해 추가로 데이터 일관성을 관리했습니다.

테스트 데이터의 크기가 커져 400GB에 근접하자 복원 프로세스가 점점 더 길어졌고 관리 시간이 증가했습니다. 주 1회 테스트에서 DBA는 소프트웨어 설치, 파라미터 구성 및 SQL Server 테스트 플릿에 대한 복원 관리에 소요되는 시간이 평균적으로 주당 3~5시간이 소요되는 것으로 예측했습니다.

고객이 Amazon RDS로 이동한 후 테스트 프로세스의 관리 작업은 크게 간소화되었습니다. DBA가 자동 테스트를 위해 준비한 것은 세 가지입니다.

  1. 주로 테스트하는 다양한 SQL Server 파라미터 구성에 대한 다수의 파라미터 그룹을 Amazon RDS에서 생성했습니다.
  2. 구성에 관계없이 매번 일관적인 데이터에서 테스트를 실행할 수 있도록 다량의 새 테스트 데이터 세트를 사용하여 기본 Amazon RDS 스냅샷을 생성했습니다.
  3. 세 가지 주요 CloudWatch 경보와 함께 새 데이터베이스로 스냅샷을 복원하는 AWS CloudFormation 템플릿의 초안을 작성했습니다.

이러한 몇 가지 주요 구성 요소를 지금 설정하면 새 코드가 테스트 시스템에 들어올 때마다 모든 테스트를 시작할 수 있습니다.

테스트 매트릭스의 각 구성에서는 다음 단계가 수행됩니다.

  • 스택이 시작됩니다.
  • 애플리케이션 테스트가 실행됩니다.
  • 결과가 기록되고 데이터 변경이 캡처되며 모든 가능한 경보가 트리거됩니다.
  • 스택이 삭제됩니다.

정의된 SQL Server 테스트 매트릭스의 경우 각 테스트 주기에서 12개의 스택이 생성되고 폐기되며 모두 자동화된 코드 파이프라인을 통해 관리됩니다.

이제 프로세스가 완벽하게 자동화되었으므로 DBA는 한 달에 5분 미만의 시간으로 새 파라미터 그룹을 추가하거나 변경할 수 있습니다. 따라서 SQL 코드의 효율성을 개선하는 애플리케이션 팀을 지원하는 데 주당 3~5시간을 사용할 수 있습니다. 이 고객은 코드 효율성을 개선함으로써 고객에게 CPU 및 메모리 사용량 감소를 증명할 수 있게 되었습니다.

참고: SQL Server Audit 또는 c2 audit mode Server Configuration에 대한 자세한 내용은 SQL Server 설명서를 참조하십시오. 자동화 주제에 대한 자세한 내용은 AWS DevOps 블로그에서 확인할 수 있습니다.

요약

DBA는 Amazon RDS를 사용하여 일상적이고 시간 소모적인 작업에 소비하는 시간을 줄이고 비즈니스 수익률에 직접적으로 기여하는 작업에 집중할 수 있습니다. 또한 코드를 사용해 나머지 정기적인 작업을 자동화하면 이러한 이점을 추가로 확대할 수 있습니다. AWS CLI 같은 AWS 도구를 사용하면 서비스 관리 및 일상적인 작업의 자동화가 더 쉬워지므로 비즈니스 발전을 지원하는 데 더 많은 시간을 할애할 수 있습니다.

Wendy Neu 는 2015년 1월부터 Amazon에서 데이터 아키텍트로 근무하고 있습니다. Amazon에 입사하기 전에는 오하이오주 신시내티에서 컨설턴트로 일하면서 관련 없는 다양한 데이터 원본의 데이터를 통합 및 관리할 수 ​​있도록 고객을 지원했습니다.

이 글은 AWS Database 블로그의 Part 2 – Role of the DBA When Moving to Amazon RDS: Automation의 한국어 번역입니다.