기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에서 Amazon RDS 인스턴스 복제 자동화 AWS 계정
작성자: Parag Nagwekar(AWS) 및 Arun Chandapillai(AWS)
환경: 프로덕션 | 기술: 데이터베이스, DevOps인프라, 서버리스 | 워크로드: 기타 모든 워크로드 |
AWS 서비스: AWS Lambda, Amazon RDS, PythonAWSSDK용(Boto3), Amazon SNS, AWS Step Functions |
요약
이 패턴은 AWS Step Functions 및 를 사용하여 서로 다른 에서 Amazon Relational Database Service(AmazonRDS) DB 인스턴스를 복제, 추적 및 롤백 AWS 계정 하는 프로세스를 자동화하는 방법을 보여줍니다 AWS Lambda. 이 자동화를 사용하면 조직의 크기에 관계없이 성능 영향이나 운영 오버헤드 없이 RDS DB 인스턴스를 대규모로 복제할 수 있습니다. 또한 이 패턴을 사용하여 조직이 서로 다른 AWS 계정 및 에서 데이터를 복제하고 중복하도록 요구하는 필수 데이터 거버넌스 전략 또는 규정 준수 요구 사항을 준수하도록 지원할 수 있습니다 AWS 리전. 대규모 Amazon RDS 데이터의 계정 간 복제는 비용이 많이 들고 시간이 많이 걸릴 수 있는 비효율적이고 오류가 발생하기 쉬운 수동 프로세스이지만, 이 패턴의 자동화는 계정 간 복제를 안전하고 효과적이며 효율적으로 달성하는 데 도움이 될 수 있습니다.
사전 조건 및 제한 사항
사전 조건
2개 AWS 계정
소스에서 실행 중인 RDS DB 인스턴스 AWS 계정
대상의 RDS DB 인스턴스에 대한 서브넷 그룹 AWS 계정
소스에서 생성 AWS 계정 되어 대상 계정과 공유되는 AWS Key Management Service (AWS KMS) 키(정책 세부 정보에 대한 자세한 내용은 이 패턴의 추가 정보 섹션을 참조하세요.)
대상 계정 AWS KMS key 의 데이터베이스를 암호화하는 대상의 AWS 계정
제한 사항
일부 AWS 서비스 는 일부 에서 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 서비스 리전별 섹션을
참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량 페이지를 참조하고 서비스의 링크를 선택합니다.
제품 버전
Python 3.9( 사용 AWS Lambda)
PostgreSQL 11.3, 13.x 및 14.x
아키텍처
기술 스택
Amazon Relational Database Service(AmazonRDS)
Amazon Simple Notification Service(AmazonSNS)
AWS Key Management Service (AWS KMS)
AWS Lambda
AWS Secrets Manager
AWS Step Functions
대상 아키텍처
다음 다이어그램은 Step Functions를 사용하여 소스 계정(계정 A)에서 대상 계정(계정 B)으로 RDS DB 인스턴스의 예약된 온디맨드 복제를 오케스트레이션하기 위한 아키텍처를 보여줍니다.
소스 계정(다이어그램의 계정 A)에서 Step Functions 상태 시스템은 다음을 수행합니다.
계정 A의 RDS DB 인스턴스에서 스냅샷을 생성합니다.
AWS KMS key 계정 A의 로 스냅샷을 복사하고 암호화합니다. 전송 중 암호화를 보장하기 위해 DB 인스턴스의 암호화 여부와 관계없이 스냅샷이 암호화됩니다.
계정 B에게 스냅샷에 대한 액세스 권한을 부여하여 계정 B와 DB 스냅샷을 공유합니다.
SNS 주제에 대한 알림을 푸시한 다음 SNS 주제는 계정 B에서 Lambda 함수를 호출합니다.
대상 계정(다이어그램의 계정 B)에서 Lambda 함수는 Step Functions 상태 시스템을 실행하여 다음을 오케스트레이션합니다.
계정 A의 공유 스냅샷을 계정 B로 복사하는 동시에 AWS KMS key 계정 A의 를 사용하여 먼저 데이터를 복호화한 다음 계정 B의 AWS KMS key 를 사용하여 데이터를 암호화합니다.
Secrets Manager에서 보안 암호를 읽어 현재 DB 인스턴스의 이름을 캡처합니다.
스냅샷에서 DB 인스턴스를 새 이름과 AWS KMS key Amazon 의 기본값으로 복원합니다RDS.
새 데이터베이스의 엔드포인트를 읽고 Secrets Manager에서 보안 암호를 새 데이터베이스 엔드포인트로 업데이트한 다음, 나중에 삭제할 수 있도록 이전 DB 인스턴스에 태그를 지정합니다.
데이터베이스의 최신 N 인스턴스를 유지하고 나머지 인스턴스는 모두 삭제합니다.
도구
AWS 서비스
Amazon Relational Database Service(Amazon RDS)는 에서 관계형 데이터베이스를 설정, 운영 및 확장하는 데 도움이 됩니다 AWS 클라우드.
Amazon Simple Notification Service(Amazon SNS)는 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리하는 데 도움이 됩니다.
AWS CloudFormation 는 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 의 수명 주기 동안 관리할 수 있도록 지원합니다 AWS 리전.
AWS Key Management Service (AWS KMS)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
AWS SDK for Python (Boto3)
는 Python 애플리케이션, 라이브러리 또는 스크립트를 와 통합하는 데 도움이 되는 소프트웨어 개발 키트입니다 AWS 서비스. AWS Secrets Manager 는 암호를 포함하여 코드의 하드코딩된 보안 인증 정보를 Secrets Manager에 프로그래밍 방식으로 검색하라는 API 호출로 대체하는 데 도움이 됩니다.
AWS Step Functions 는 Lambda 함수와 기타 함수를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.
코드 리포지토리
이 패턴의 코드는 GitHub 교차 계정 RDS 복제
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
소스 계정에 CloudFormation 스택을 배포합니다. |
| 클라우드 관리자, 클라우드 아키텍트 |
대상 계정에 CloudFormation 스택을 배포합니다. |
| 클라우드 아키텍트, DevOps 엔지니어, 클라우드 관리자 |
대상 계정에서 RDS DB 인스턴스가 생성되었는지 확인합니다. |
| 클라우드 관리자, 클라우드 아키텍트, DevOps 엔지니어 |
SNS 주제에 Lambda 함수를 구독합니다. | 대상 계정 AWS Command Line Interface (계정 B AWS CLI)의 Lambda 함수를 소스 계정(계정 A)의 SNS 주제에 구독하려면 다음 () 명령을 실행해야 합니다. 계정 A에서 다음 명령을 실행합니다.
계정 B에서 다음 명령을 실행합니다.
계정 B에서 다음 명령을 실행합니다.
| 클라우드 관리자, 클라우드 아키텍트, DBA |
소스 계정의 RDS DB 인스턴스를 대상 계정과 동기화합니다. | 소스 계정에서 Step Functions 상태 기계를 시작하여 온디맨드 데이터베이스 복제를 시작합니다.
참고: 일정에 따라 복제를 자동으로 실행할 수 있도록 스케줄러가 마련되어 있지만 스케줄러는 기본적으로 꺼져 있습니다. 대상 계정에서 CloudFormation 스택의 리소스 탭에서 스케줄러에 대한 Amazon CloudWatch 규칙의 이름을 찾을 수 있습니다. CloudWatch 이벤트 규칙을 수정하는 방법에 대한 지침은 CloudWatch 설명서의 CloudWatch 이벤트 규칙 삭제 또는 비활성화를 참조하세요. | 클라우드 아키텍트, DevOps 엔지니어, 클라우드 관리자 |
필요한 경우 데이터베이스를 이전 복사본 중 하나로 롤백합니다. |
| 클라우드 관리자, DBA, DevOps 엔지니어 |
관련 리소스
리전 간 읽기 전용 복제본(Amazon RDS 설명서)
블루/그린 배포(Amazon RDS 설명서)
추가 정보
다음 예제 정책을 사용하여 를 AWS KMS key 에서 공유할 수 있습니다 AWS 계정.
{ "Version": "2012-10-17", "Id": "cross-account-rds-kms-key", "Statement": [ { "Sid": "Enable user permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<SourceAccount>:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<DestinationAccount>:root" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<DestinationAccount>:root", "arn:aws:iam::<SourceAccount>:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*" } ] }