

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 데이터베이스 수
<a name="databases-pattern-list"></a>

**Topics**
+ [연결된 서버를 사용하여 Amazon EC2의 Microsoft SQL Server에서 온프레미스 Microsoft SQL Server 테이블에 액세스](access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers.md)
+ [읽기 전용 복제본을 사용하여 Amazon RDS Custom의 Oracle PeopleSoft에 HA 추가](add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica.md)
+ [Oracle에서 PostgreSQL로의 부분 데이터베이스 마이그레이션에 대한 객체 종속성 분석](multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql.md)
+ [SQL Server 데이터베이스를 AWS의 MongoDB Atlas로 마이그레이션하기 위한 쿼리 성능 평가](assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws.md)
+ [IaC 원칙을 사용하여 Amazon Aurora 글로벌 데이터베이스의 블루/그린 배포 자동화](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [에서 Amazon RDS 인스턴스 복제 자동화 AWS 계정](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [AWS Lambda 및 Task Scheduler를 사용하여 Amazon EC2에서 실행되는 SQL Server Express 에디션에서 데이터베이스 작업 자동화](automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.md)
+ [DR Orchestrator Framework를 사용하여 리전 간 장애 조치 및 장애 복구 자동화](automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.md)
+ [Systems Manager와 EventBridge를 사용하여 SAP HANA 데이터베이스를 자동으로 백업](automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge.md)
+ [Python 애플리케이션을 사용하여 Amazon DynamoDB용 PynamoDB DynamoDB 모델 및 CRUD 함수 자동 생성](automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.md)
+ [Cloud Custodian을 사용하여 Amazon RDS에 대한 퍼블릭 액세스 차단](block-public-access-to-amazon-rds-by-using-cloud-custodian.md)
+ [를 사용하여 Amazon RDS for Microsoft SQL Server에 대한 Windows 인증 구성 AWS Managed Microsoft AD](configure-windows-authentication-for-amazon-rds-using-microsoft-ad.md)
+ [Amazon DynamoDB에 대한 크로스 계정 액세스 구성](configure-cross-account-access-to-amazon-dynamodb.md)
+ [AWS 기반 SQL Server의 Always On 가용성 그룹에서 읽기 전용 라우팅 구성](configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.md)
+ [pgAdmin에서 SSH 터널을 사용하여 연결](connect-by-using-an-ssh-tunnel-in-pgadmin.md)
+ [JSON Oracle 쿼리를 PostgreSQL 데이터베이스 SQL로 변환](convert-json-oracle-queries-into-postgresql-database-sql.md)
+ [를 사용하여 계정 간에 Amazon DynamoDB 테이블 복사 AWS Backup](copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.md)
+ [사용자 지정 구현을 사용하여 계정 전반적으로 Amazon DynamoDB 테이블 복사](copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation.md)
+ [Amazon RDS 및 Amazon Aurora에 대한 자세한 비용 및 사용 보고서 생성](create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora.md)
+ [Terraform을 사용하여 Amazon EC2 및 Amazon FSx에 SQL Server 장애 조치 클러스터 인스턴스 배포](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [Amazon Aurora PostgreSQL 및 Amazon RDS for PostgreSQLPostgreSQL 연결 배열 에뮬레이션](emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql.md)
+ [Amazon RDS에서 PostgreSQL DB 인스턴스에 대한 암호화된 연결 활성화하기](enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.md)
+ [기존 Amazon RDS for PostgreSQL DB 인스턴스 암호화하기](encrypt-an-existing-amazon-rds-for-postgresql-db-instance.md)
+ [시작 시 Amazon RDS 데이터베이스의 자동 태그 지정 적용](enforce-automatic-tagging-of-amazon-rds-databases-at-launch.md)
+ [온디맨드 용량에 대한 DynamoDB 테이블의 비용 추정](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Amazon DynamoDB 테이블의 스토리지 비용 추정](estimate-storage-costs-for-an-amazon-dynamodb-table.md)
+ [AWR 보고서를 사용하여 Oracle 데이터베이스의 Amazon RDS 엔진 크기 추정](estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.md)
+ [AWS DMS를 사용하여 Amazon RDS for SQL Server 테이블을 S3 버킷으로 내보내기](export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.md)
+ [Aurora PostgreSQL의 동적 SQL 명령문에서 익명 블록 처리](handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql.md)
+ [DynamoDB 태깅 적용 지원](help-enforce-dynamodb-tagging.md)
+ [AWS DMS와 Amazon Aurora를 사용하여 지역 간 재해 복구 구현](implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.md)
+ [100개 이상의 인수가 있는 Oracle 함수 및 프로시저를 PostgreSQL로 마이그레이션](migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql.md)
+ [Redis 워크로드를 AWS의 Redis Enterprise Cloud로 마이그레이션](migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.md)
+ [동일한 호스트 이름을 가진 SAP HSR을 사용하여 SAP HANA를 AWS로 마이그레이션](migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname.md)
+ [를 사용하여 Microsoft SQL Server Always On 가용성 그룹 마이그레이션 AWS Application Migration Service](migrate-microsoft-sql-server-always-on-group-using-mgn.md)
+ [분산된 가용성 그룹을 사용하여 SQL Server를 AWS로 마이그레이션](migrate-sql-server-to-aws-using-distributed-availability-groups.md)
+ [에서 관계형 데이터베이스를 MongoDB Atlas로 마이그레이션 AWS](migrate-relational-database-to-mongodb-atlas.md)
+ [에서 자체 호스팅된 MongoDB 환경을 MongoDB Atlas로 마이그레이션 AWS](migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud.md)
+ [AWS DMS를 사용하여 Amazon DynamoDB로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms.md)
+ [SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for Oracle로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.md)
+ [온프레미스 MySQL 데이터베이스를 Amazon EC2로 마이그레이션](migrate-an-on-premises-mysql-database-to-amazon-ec2.md)
+ [암호화를 사용하지 않는 인스턴스가 있는지 Amazon Aurora를 모니터링](monitor-amazon-aurora-for-instances-without-encryption.md)
+ [Amazon CloudWatch를 사용하여 Oracle GoldenGate 로그를 모니터링](monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.md)
+ [Amazon RDS for Oracle에서 Oracle Database Enterprise Edition을 Standard Edition 2로 리플랫포밍](replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle.md)
+ [Precisely Connect를 사용하여 메인프레임 데이터베이스를 AWS에 복제하기](replicate-mainframe-databases-to-aws-by-using-precisely-connect.md)
+ [Lambda와 Secrets Manager를 사용하여 Amazon RDS for PostgreSQL 및 Aurora PostgreSQL 작업 예약하기](schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager.md)
+ [온프레미스 SMTP 서버 및 Database Mail을 사용하여 Amazon RDS for SQL Server 데이터베이스 인스턴스에 대한 알림 전송하기](send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.md)
+ [AWS 기반 IBM Db2에서 SAP를 위한 재해 복구 설정](set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.md)
+ [Terraform을 사용하여 데이터베이스 마이그레이션을 위한 CI/CD 파이프라인 설정](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [FSx for Windows File Server를 사용하여 Amazon EC2에서 Microsoft SQL Server 장애 조치 클러스터 설정](microsoft-sql-failover-cluster-on-amazon-ec2.md)
+ [활성 대기 데이터베이스를 사용하여 Amazon RDS Custom에서 Oracle E-Business Suite를 위한 HA/DR 아키텍처를 설정합니다.](set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database.md)
+ [IBM Db2, SAP, Sybase 및 기타 데이터베이스에서의 MongoDB Atlas로 데이터 스트리밍 AWS](stream-data-from-ibm-db2-to-mongodb-atlas.md)
+ [Oracle용 Amazon RDS Custom의 Oracle PeopleSoft 애플리케이션에 대한 전환 역할](transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle.md)
+ [계정 간에 Amazon Redshift 클러스터에서 Amazon S3로 데이터 언로드](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)
+ [워크로드별 데이터베이스 마이그레이션 패턴](databases-database-migration-patterns-by-workload-pattern-list.md)
+ [패턴 더 보기](databases-more-patterns-pattern-list.md)

# 연결된 서버를 사용하여 Amazon EC2의 Microsoft SQL Server에서 온프레미스 Microsoft SQL Server 테이블에 액세스
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers"></a>

*Tirumala Dasari, Eduardo Valentim, Amazon Web Services*

## 요약
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-summary"></a>

이 패턴은 연결된 서버를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) Windows 또는 Linux 인스턴스에서 실행되거나 호스팅되는 Microsoft SQL Server 데이터베이스에서 Microsoft Windows에서 실행되는 온프레미스 Microsoft SQL Server 데이터베이스 테이블에 액세스하는 방법을 설명합니다.

## 사전 조건 및 제한 사항
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ Amazon Linux AMI(Amazon Machine Image)에서 실행되는 Microsoft SQL 서버가 탑재된 Amazon EC2
+ 온프레미스 Microsoft SQL Server(Windows) 서버와 Windows 또는 Linux EC2 인스턴스 간의 Direct Connect

**제품 버전**
+ SQL Server 2016 이상

## 아키텍처
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-architecture"></a>

**소스 기술 스택**
+ Windows에서 실행되는 온프레미스 Microsoft SQL Server 데이터베이스
+ Windows AMI 또는 Linux AMI에서 실행되는 Microsoft SQL 서버가 탑재된 Amazon EC2

**대상 기술 스택**
+ Amazon Linux AMI에서 실행되는 Microsoft SQL Server를 사용하는 Amazon EC2
+ Windows AMI에서 실행되는 Microsoft SQL Server를 사용하는 Amazon EC2

**소스 및 대상 데이터베이스 아키텍처**

![\[AWS 클라우드 architecture with VPC, availability zones, and hybrid environment connecting to on-premises database.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8e4a3222-0850-4980-8028-c710dcdb9186/images/fa157992-0ed9-46e1-8059-0cbbb74a98ec.png)


## 도구
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-tools"></a>
+ [Microsoft SQL Server Management Studio(SSMS)](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16)는 SQL Server 인프라를 관리하기 위한 통합 환경입니다. SQL Server와 상호 작용하는 다양한 스크립트 편집기와 함께 사용자 인터페이스와 도구 그룹을 제공합니다.

## 에픽
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-epics"></a>

### Windows SQL Server에서 인증 모드를 Windows for SQL Server로 변경
<a name="change-authentication-mode-to-windows-for-sql-server-in-windows-sql-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSMS를 통해 Windows SQL 서버에 연결합니다. |  | DBA | 
| Windows SQL Server 인스턴스의 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴에서 SQL Server의 인증 모드를 Windows로 변경합니다. |  | DBA | 

### Windows MSSQL 서비스 다시 시작
<a name="restart-the-windows-mssql-service"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SQL 서비스를 다시 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers.html) | DBA | 

### 새 로그인을 만들고 Windows SQL Server에서 액세스할 데이터베이스 선택
<a name="create-new-login-and-choose-databases-to-access-in-windows-sql-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 탭에서 로그인에 대한 컨텍스트 메뉴(마우스 오른쪽 클릭)를 열고 새 로그인을 선택합니다. |  | DBA | 
| 일반 탭에서 SQL Server 인증을 선택하고 사용자 이름을 입력하고 암호를 입력한 다음 암호를 확인하고 다음 로그인 시 암호 변경 옵션을 선택 취소합니다. |  | DBA | 
| 서버 역할 탭에서 퍼블릭을 선택합니다. |  | DBA | 
| 사용자 매핑 탭에서 액세스하려는 데이터베이스와 스키마를 선택한 다음 데이터베이스를 강조 표시하여 데이터베이스 역할을 선택합니다. | 퍼블릭 및 db\$1datareader를 선택하여 데이터베이스 테이블의 데이터에 액세스합니다. | DBA | 
| 확인을 선택하여 사용자를 생성합니다. |  | DBA | 

### Linux SQL 서버 호스트 파일에 Windows SQL 서버 IP 추가
<a name="add-windows-sql-server-ip-to-linux-sql-server-host-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 터미널 창을 통해 Linux SQL 서버 박스에 연결합니다. |  | DBA | 
| /etc/hosts 파일을 열고 SQL 서버가 설치된 Windows 시스템의 IP 주소를 추가합니다. |  | DBA | 
| 호스트 파일을 저장합니다. |  | DBA | 

### Linux SQL 서버에 연결된 서버 생성
<a name="create-linked-server-on-linux-sql-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 저장 프로시저 master.sys.sp\$1addlinkedserver 및 master.dbo.sp\$1addlinkedsrvlogin을 사용하여 연결된 서버를 만듭니다. | 이러한 저장 프로시저 사용에 대한 자세한 내용은 *추가 정보* 섹션을 참조하십시오. | DBA, 개발자 | 

### SSMS에서 생성된 연결 서버 및 데이터베이스 확인
<a name="verify-the-created-linked-server-and-databases-in-ssms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSMS의 Linux SQL Server에서 연결된 서버로 이동하여 새로 고칩니다. |  | DBA | 
| 왼쪽 창에서 생성된 연결 서버 및 카탈로그를 확장합니다. | 선택한 SQL Server 데이터베이스가 테이블 및 뷰와 함께 표시됩니다. | DBA | 

### Windows SQL Server 데이터베이스 테이블에 액세스할 수 있는지 확인합니다.
<a name="verify-that-you-can-access-windows-sql-server-database-tables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSMS 쿼리 창에서 "select top 3 \$1 from [sqllin].dms\$1sample\$1win.dbo.mlb\$1data" 쿼리를 실행합니다. | FROM 절은 네 부분으로 구성된 구문(computer.database.schema.table)(예: SELECT 이름 "SQL2 데이터베이스" FROM [sqllin].master.sys.databases)을 사용합니다. 이 예제에서는 호스트 파일에 SQL2의 별칭을 만들었으므로 대괄호 사이에 실제 NetBIOS 이름을 입력할 필요가 없습니다. 실제 NetBIOS 이름을 사용하는 경우 기본적으로 Win-xxxx와 같은 NetBIOS 이름을 사용하며 SQL Server에서는 대시가 포함된 이름에 대괄호를 사용해야 합니다. | DBA, 개발자 | 

## 관련 리소스
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-resources"></a>
+ [Linux 기반 SQL 서버의 릴리스 노트](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes?view=sql-server-2017) 

 

## 추가 정보
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-additional"></a>

**저장 프로시저를 사용하여 연결된 서버 만들기**

SSMS는 Linux SQL Server용 연결된 서버 생성을 지원하지 않으므로 다음 저장 프로시저를 사용하여 서버를 만들어야 합니다.

```
EXEC master.sys.sp_addlinkedserver @server= N'SQLLIN' , @srvproduct= N'SQL Server'    
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SQLLIN',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='Test123$'
```

참고 1: 이전에 Windows SQL Server에서 만든 로그인 보안 인증 정보를 저장 프로시저 `master.dbo.sp_addlinkedsrvlogin`에 입력합니다.

참고 2: `@server` 이름 `SQLLIN` 및 호스트 파일 항목 이름 `172.12.12.4 SQLLIN`은 같아야 합니다.

 이 프로세스를 사용하여 다음 시나리오에 대해 연결된 서버를 만들 수 있습니다.
+ 연결된 서버를 통해 Linux SQL Server에서 Windows SQL Server로(이 패턴에 지정된 대로)
+ 연결된 서버를 통해 Windows SQL Server에서 Linux SQL Server로
+ 연결된 서버를 통해 Linux SQL 서버를 다른 Linux SQL 서버로

# 읽기 전용 복제본을 사용하여 Amazon RDS Custom의 Oracle PeopleSoft에 HA 추가
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica"></a>

*sampath kathirvel, Amazon Web Services*

## 요약
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-summary"></a>

Amazon Web Services(AWS)에서 [Oracle PeopleSoft](https://www.oracle.com/applications/peoplesoft/) 엔터프라이즈 리소스 계획(ERP) 솔루션을 실행하려면 기본 운영 체제 및 데이터베이스 환경에 액세스해야 하는 레거시, 사용자 지정 및 패키지 애플리케이션을 지원하는 [Amazon Relational Database Service(RDS)](https://aws.amazon.com/rds/) 또는 [Amazon RDS Custom for Oracle](https://aws.amazon.com/rds/custom/)을 사용하시면 됩니다. 마이그레이션을 계획할 때 고려해야 할 주요 요소는 AWS 권장 가이드의 [Oracle 데이터베이스 마이그레이션 전략](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)을 참조하세요.

이 글을 쓰는 시점에서Amazon RDS for Oracle은 [다중 AZ](https://aws.amazon.com/blogs/aws/multi-az-option-for-amazon-rds-oracle/) 옵션을 지원하지 않습니다. 이 옵션은 [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/)에서 스토리지 복제를 사용하는 HA 솔루션으로 사용할 수 있습니다. 대신 이 패턴은 기본 데이터베이스의 물리적 사본을 생성하고 유지 관리하는 대기 데이터베이스를 사용하여 HA를 달성합니다. 이 패턴은 Oracle Data Guard를 사용하여 읽기 전용 복제본을 설정함으로써 HA를 사용하고 Amazon RDS Custom에서 PeopleSoft 애플리케이션 데이터베이스를 실행하는 단계에 중점을 둡니다.

또한 이 패턴은 읽기 전용 복제본을 읽기 전용 모드로 변경합니다. 읽기 전용 복제본을 읽기 전용 모드로 설정하면 다음과 같은 추가 이점이 있습니다.
+ 기본 데이터베이스에서 읽기 전용 워크로드를 오프로드합니다.
+ Oracle Active Data Guard 기능을 사용하여 대기 데이터베이스에서 정상 블록을 검색하여 손상된 블록을 자동으로 복구할 수 있도록 합니다.
+ 원거리 동기화 기능을 사용하면 장거리 다시 실행 로그 전송과 관련된 성능 오버헤드 없이 원격 대기 데이터베이스를 동기화된 상태로 유지할 수 있습니다.

읽기 전용 모드에서 복제본을 사용하려면 Oracle Active Data Guard 옵션이 필요합니다. [Oracle Active Data Guard](https://www.oracle.com/assets/technology-price-list-070617.pdf) 옵션은 Oracle Database Enterprise Edition의 별도 라이선스 기능이므로 추가 비용이 듭니다.

## 사전 조건 및 제한 사항
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-prereqs"></a>

**사전 조건 **
+ Amazon RDS Custom의 기존 PeopleSoft 애플리케이션. 애플리케이션이 없는 경우 [Oracle PeopleSoft를 Amazon RDS Custom으로 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html)하는 패턴을 참조하세요.
+ 단일 PeopleSoft 애플리케이션 계층. 그러나 이 패턴을 여러 애플리케이션 계층에서 작동하도록 조정할 수 있습니다.
+ Amazon RDS Custom은 최소 8GB의 스왑 공간으로 구성되었습니다.
+ 읽기 전용 모드로 전환하고 보고 작업을 예비 복제본으로 오프로드하는 데 사용하기 위한 Oracle Active Data Guard 데이터베이스 라이선스입니다. 자세한 내용은 [Oracle Technology 상용 가격 목록](https://www.oracle.com/corporate/pricing/#technology)을 참조하세요.

**제한 사항**** **
+ [RDS Custom for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits.html#custom-reqs-limits.limits)에 대한 일반 제한 및 지원되지 않는 구성
+ [Amazon RDS Custom for Oracle 읽기 전용 복제본](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-rr.html#custom-rr.limitations)에 대한 제한 사항

**제품 버전**
+ Amazon RDS Custom에서 지원하는 Oracle Database 버전에 대해서는 [Oracle용 RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.html#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.ora)을 참조하세요.
+ Amazon RDS Custom에서 지원하는 Oracle Database 인스턴스 클래스에 대해서는 [Oracle용 RDS Custom에 대한 DB 인스턴스 클래스 지원](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits.html#custom-reqs-limits.instances)을 참조하세요.

## 아키텍처
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-architecture"></a>

**대상 기술 스택**
+ Amazon RDS Custom for Oracle
+ AWS Secrets Manager
+ Oracle Active Data Guard
+ Oracle PeopleSoft 애플리케이션

**대상 아키텍처**

다음 다이어그램에서는 Amazon RDS Custom DB 인스턴스와 Amazon RDS 사용자 지정 읽기 전용 복제본을 보여줍니다. 읽기 전용 복제본은 Oracle Active Data Guard를 사용하여 다른 가용 영역으로 복제합니다. 또한 읽기 전용 복제본을 사용하여 기본 데이터베이스의 읽기 트래픽을 오프로드하고 보고 목적으로 사용할 수 있습니다.

![\[VPC에는 AWS Secrets Manager, Amazon EFS, 애플리케이션 티어, 데이터베이스 티어가 포함됩니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7df4b2d0-b833-4ba3-98e4-a178db395d9d/images/463aefbe-70ad-4cd3-9ddc-0d8347e848c6.png)


AWS에서 Oracle PeopleSoft를 사용하는 대표적인 아키텍처에 대해서는 AWS에서 [가용성이 높은 PeopleSoft 아키텍처 설정](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html)을 참조하세요.

## 도구
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-tools"></a>

**서비스**
+ [Amazon RDS Custom for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-custom-oracle.html)은 기본 운영 체제 및 데이터베이스 환경에 액세스해야 하는 레거시, 커스텀 및 패키지 애플리케이션을 위한 관리형 데이터베이스 서비스입니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 사용하면 코드에 하드코딩된 보안 인증 정보(암호 등)를 Secrets Manager에 대한 API 직접 호출을 통해 바꿔서 프로그래밍 방식으로 보안 암호를 검색할 수 있습니다. 이 패턴에서는 Secrets Manager에서 암호 이름 `do-not-delete-rds-custom-+<<RDS Resource ID>>+-dg`를 사용하여 `RDS_DATAGUARD`에 대한 데이터베이스 사용자 암호를 검색합니다.

**기타 도구**
+ [Oracle Data Guard](https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/preface.html#GUID-B6209E95-9DA8-4D37-9BAD-3F000C7E3590)를 사용하면 대기 데이터베이스를 생성, 유지, 관리 및 모니터링할 수 있습니다.

## 모범 사례
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-best-practices"></a>

데이터 손실 제로(RPO=0) 목표를 달성하려면 성능 향상을 위한 다시 실행 전송 `SYNC+NOAFFIRM` 설정과 함께 `MaxAvailability` Data Guard 보호 모드를 사용하세요. 데이터베이스 보호 모드 선택에 대한 자세한 내용은 *추가 정보* 섹션을 참조하세요.

## 에픽
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-epics"></a>

### 읽기 전용 복제본 생성
<a name="create-the-read-replica"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 읽기 전용 복제본을 생성합니다. | Amazon RDS 사용자 지정 DB 인스턴스의 읽기 전용 복제본을 생성하려면 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Create)의 지침에 따라 생성한 Amazon RDS Custom DB 인스턴 (*사전 조건* 섹션 참조)를 소스 데이터베이스로 사용합니다.기본적으로 Amazon RDS Custom 읽기 전용 복제본은 물리적 예비 복제본으로 생성되며 마운트된 상태입니다. 이는 Oracle Active Data Guard 라이선스 규정 준수를 보장하기 위한 것입니다.이 패턴에는 멀티테넌트 컨테이너 데이터베이스(CDB) 또는 비 CDB 인스턴스를 설정하기 위한 코드가 포함됩니다. | DBA | 

### Oracle Data Guard 보호 모드를 최대 가용성으로 변경합니다.
<a name="change-oracle-data-guard-protection-mode-to-maxavailability"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 데이터베이스의 Data Guard 브로커 구성에 액세스합니다. | 이 예제에서 Amazon RDS Custom 읽기 전용 복제본은 비 CDB 인스턴스용 `RDS_CUSTOM_ORCL_D` 및 CDB 인스턴스용 `RDS_CUSTOM_RDSCDB_B`입니다. 비 CDB용 데이터베이스는 `orcl_a`(기본) 및 `orcl_d`(대기)입니다. CDB의 데이터베이스 이름은 `rdscdb_a` 기본) 및 `rdscdb_b`(대기)입니다.RDS 사용자 지정 읽기 전용 복제본에 직접 또는 기본 데이터베이스를 통해 연결할 수 있습니다. `$ORACLE_HOME/network/admin` 디렉터리에 있는 `tnsnames.ora` 파일에서 데이터베이스의 넷 서비스 이름을 찾을 수 있습니다. RDS Custom for Oracle은 기본 데이터베이스 및 읽기 전용 복제본에 대해 이러한 항목을 자동으로 채웁니다.`RDS_DATAGUARD` 사용자의 암호는 보안 암호 이름인 `do-not-delete-rds-custom-+<<RDS Resource ID>>+-dg`와 함께 AWS Secrets Manager에 저장됩니다. Secrets Manager에서 검색한 SSH(보안 쉘) 키를 사용하여 RDS 사용자 지정 인스턴스에 연결하는 방법에 대한 자세한 내용은 [SSH를 사용하여 RDS 사용자 지정 DB 인스턴스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-creating.html#custom-creating.ssh)을 참조하세요.Data Guard 명령줄(`dgmgrl`)을 통해 Oracle Data Guard 브로커 구성에 액세스하려면 다음 코드를 사용하세요.**비 CDB**<pre>$ dgmgrl RDS_DATAGUARD@RDS_CUSTOM_ORCL_D<br />DGMGRL for Linux: Release 19.0.0.0.0 - Production on Fri Sep 30 22:44:49 2022<br />Version 19.10.0.0.0<br />Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.<br />Welcome to DGMGRL, type "help" for information.<br />Password:<br />Connected to "ORCL_D"<br />Connected as SYSDG.<br />DGMGRL> <br />DGMGRL> show database orcl_d<br />Database - orcl_d<br />Role: PHYSICAL STANDBY<br />Intended State: APPLY-ON<br />Transport Lag: 0 seconds (computed 0 seconds ago)<br />Apply Lag: 0 seconds (computed 0 seconds ago)<br />Average Apply Rate: 11.00 KByte/s<br />Instance(s):<br />ORCL<br />SUCCESS<br />DGMGRL></pre>**CDB**<pre>-bash-4.2$ dgmgrl C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_B<br />DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Jan 11 20:24:11 2023<br />Version 19.16.0.0.0<br />Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.<br />Welcome to DGMGRL, type "help" for information.<br />Password:<br />Connected to "RDSCDB_B"<br />Connected as SYSDG.<br />DGMGRL><br />DGMGRL> show database rdscdb_b<br />Database - rdscdb_b<br />  Role:               PHYSICAL STANDBY<br />  Intended State:     APPLY-ON<br />  Transport Lag:      0 seconds (computed 1 second ago)<br />  Apply Lag:          0 seconds (computed 1 second ago)<br />  Average Apply Rate: 2.00 KByte/s<br />  Real Time Query:    OFF<br />  Instance(s):<br />    RDSCDB<br />Database Status:<br />SUCCESS<br />DGMGRL></pre> | DBA | 
| 프라이머리 노드에서 DGMGRL에 연결하여 로그 전송 설정을 변경합니다. | 다시 실행 전송 설정 `SYNC+NOAFFIRM`에 해당하는 로그 전송 모드를 `FastSync`로 변경합니다. 역할 전환 후 설정이 유효한지 확인하려면 기본 데이터베이스와 대기 데이터베이스 모두에 대해 설정을 변경하세요.**비 CDB**<pre>DGMGRL><br />DGMGRL> edit database orcl_d set property logxptmode=fastsync;<br />Property "logxptmode" updated<br />DGMGRL> show database orcl_d LogXptMode;<br />LogXptMode = 'fastsync'<br />DGMGRL> edit database orcl_a set property logxptmode=fastsync;<br />Property "logxptmode" updated<br />DGMGRL> show database orcl_a logxptmode;<br />LogXptMode = 'fastsync'<br />DGMGRL>   </pre>**CDB**<pre>DGMGRL> edit database rdscdb_b set property logxptmode=fastsync;DGMGRL> edit database rdscdb_b set property logxptmode=fastsync;<br />Property "logxptmode" updated<br />DGMGRL> show database rdscdb_b LogXptMode;<br />  LogXptMode = 'fastsync'<br />DGMGRL> edit database rdscdb_a set property logxptmode=fastsync;<br />Property "logxptmode" updated<br />DGMGRL> show database rdscdb_a logxptmode;<br />  LogXptMode = 'fastsync'<br />DGMGRL></pre> | DBA | 
| 보호 모드를 최대 가용성으로 변경합니다. | 프라이머리 노드에서 `DGMGRL`로 연결하여 `MaxAvailability`에 대한 보호 모드를 변경합니다.**비 CDB**<pre>DGMGRL> edit configuration set protection mode as maxavailability;<br />Succeeded.<br />DGMGRL> show configuration;<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_a - Primary database<br />orcl_d - Physical standby database <br />Fast-Start Failover: Disabled<br />Configuration Status:<br />SUCCESS (status updated 38 seconds ago)<br />DGMGRL> </pre>**CDB**<pre>DGMGRL> show configuration<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_a - Primary database<br />    rdscdb_b - Physical standby database <br />Fast-Start Failover:  Disabled<br />Configuration Status:<br />SUCCESS   (status updated 57 seconds ago)<br />DGMGRL></pre> | DBA | 

### 복제본 상태를 마운트에서 읽기 전용으로 변경하고 재실행 적용 활성화
<a name="change-the-replica-status-from-mount-to-read-only-and-enable-redo-apply"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대기 데이터베이스에 대한 재실행 중지를 적용합니다. | 읽기 전용 복제본은 기본적으로 `MOUNT` 모드에서 생성됩니다. 읽기 전용 모드로 열려면 먼저 기본 또는 대기 노드에서 `DGMGRL`에 연결하여 재실행 적용을 해제해야 합니다.**비 CDB**<pre>DGMGRL> show database orcl_dDGMGRL> show database orcl_d<br />Database - orcl_d<br />Role: PHYSICAL STANDBY<br />Intended State: APPLY-ON<br />Transport Lag: 0 seconds (computed 1 second ago)<br />Apply Lag: 0 seconds (computed 1 second ago)<br />Average Apply Rate: 11.00 KByte/s<br />Real Time Query: OFF<br />Instance(s):<br />ORCL<br />Database Status:<br />SUCCESS<br />DGMGRL> edit database orcl_d set state=apply-off;<br />Succeeded.<br />DGMGRL> show database orcl_d<br />Database - orcl_d<br />Role: PHYSICAL STANDBY<br />Intended State: APPLY-OFF<br />Transport Lag: 0 seconds (computed 1 second ago)<br />Apply Lag: 42 seconds (computed 1 second ago)<br />Average Apply Rate: (unknown)<br />Real Time Query: OFF<br />Instance(s):<br />ORCL<br />Database Status:<br />SUCCESS<br />DGMGRL></pre>**CDB**<pre>DGMGRL> show configurationDGMGRL> show configuration<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_a - Primary database<br />    rdscdb_b - Physical standby database <br />Fast-Start Failover:  Disabled<br />Configuration Status:<br />SUCCESS   (status updated 57 seconds ago)<br />DGMGRL> show database rdscdb_b;<br />Database - rdscdb_b<br />  Role:               PHYSICAL STANDBY<br />  Intended State:     APPLY-ON<br />  Transport Lag:      0 seconds (computed 1 second ago)<br />  Apply Lag:          0 seconds (computed 1 second ago)<br />  Average Apply Rate: 2.00 KByte/s<br />  Real Time Query:    OFF<br />  Instance(s):<br />    RDSCDB<br />Database Status:<br />SUCCESS<br />DGMGRL> edit database rdscdb_b set state=apply-off;<br />Succeeded.<br />DGMGRL> show database rdscdb_b;<br />Database - rdscdb_b<br />  Role:               PHYSICAL STANDBY<br />  Intended State:     APPLY-OFF<br />  Transport Lag:      0 seconds (computed 1 second ago)<br />  Apply Lag:          0 seconds (computed 1 second ago)<br />  Average Apply Rate: (unknown)<br />  Real Time Query:    OFF<br />  Instance(s):<br />    RDSCDB<br />Database Status:<br />SUCCESS</pre> | DBA | 
| 읽기 전용 복제본 인스턴스를 읽기 전용 모드로 엽니다. | TNS 항목을 사용하여 대기 데이터베이스에 접속하고 기본 또는 대기 노드에서 접속하여 대기 데이터베이스를 읽기 전용 모드로 엽니다.**비 CDB**<pre>$ sqlplus RDS_DATAGUARD@RDS_CUSTOM_ORCL_D as sysdg<br />-bash-4.2$ sqlplus RDS_DATAGUARD@RDS_CUSTOM_ORCL_D as sysdg<br />SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 23:00:14 2022<br />Version 19.10.0.0.0<br />Copyright (c) 1982, 2020, Oracle. All rights reserved.<br />Enter password: <br />Last Successful login time: Fri Sep 30 2022 22:48:27 +00:00<br />Connected to:<br />Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production<br />Version 19.10.0.0.0<br />SQL> select open_mode from v$database;<br />OPEN_MODE<br />--------------------<br />MOUNTED<br />SQL> alter database open read only;<br />Database altered.<br />SQL> select open_mode from v$database;<br />OPEN_MODE<br />--------------------<br />READ ONLY<br />SQL> </pre>**CDB**<pre>-bash-4.2$ sqlplus C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_B as sysdg<br />SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 11 21:14:07 2023<br />Version 19.16.0.0.0<br />Copyright (c) 1982, 2022, Oracle.  All rights reserved.<br />Enter password: <br />Last Successful login time: Wed Jan 11 2023 21:12:05 +00:00<br />Connected to:<br />Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production<br />Version 19.16.0.0.0<br />SQL> select name,open_mode from v$database;<br />NAME   OPEN_MODE<br />--------- --------------------<br />RDSCDB   MOUNTED<br />SQL> alter database open read only;<br />Database altered.<br />SQL> select name,open_mode from v$database;<br />NAME   OPEN_MODE<br />--------- --------------------<br />RDSCDB   READ ONLY<br />SQL></pre> | DBA | 
| 읽기 전용 복제본 인스턴스에서 다시 실행 적용을 활성화합니다. | 기본 또는 대기 노드의 `DGMGR`L을 사용하여 읽기 전용 복제본 인스턴스에서 다시 실행 적용을 활성화합니다.**비 CDB**<pre>$ dgmgrl RDS_DATAGUARD@RDS_CUSTOM_ORCL_D<br />DGMGRL for Linux: Release 19.0.0.0.0 - Production on Fri Sep 30 23:02:16 2022<br />Version 19.10.0.0.0<br />Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.<br />Welcome to DGMGRL, type "help" for information.<br />Password:<br />Connected to "ORCL_D"<br />Connected as SYSDG.<br />DGMGRL> <br />edit database orcl_d set state=apply-on;<br />DGMGRL> edit database orcl_d set state=apply-on;<br />Succeeded.<br />DGMGRL> show database orcl_d<br />Database - orcl_d<br />Role: PHYSICAL STANDBY<br />Intended State: APPLY-ON<br />Transport Lag: 0 seconds (computed 0 seconds ago)<br />Apply Lag: 0 seconds (computed 0 seconds ago)<br />Average Apply Rate: 496.00 KByte/s<br />Real Time Query: ON<br />Instance(s):<br />ORCL<br />Database Status:<br />SUCCESS<br />DGMGRL></pre>**CDB**<pre>-bash-4.2$ dgmgrl C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_B-bash-4.2$ dgmgrl C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_B<br />DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Jan 11 21:21:11 2023<br />Version 19.16.0.0.0<br />Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.<br />Welcome to DGMGRL, type "help" for information.<br />Password:<br />Connected to "RDSCDB_B"<br />Connected as SYSDG.<br />DGMGRL> edit database rdscdb_b set state=apply-on;<br />Succeeded.<br />DGMGRL> show database rdscdb_b           <br />Database - rdscdb_b<br />  Role:               PHYSICAL STANDBY<br />  Intended State:     APPLY-ON<br />  Transport Lag:      0 seconds (computed 0 seconds ago)<br />  Apply Lag:          0 seconds (computed 0 seconds ago)<br />  Average Apply Rate: 35.00 KByte/s<br />  Real Time Query:    ON<br />  Instance(s):<br />    RDSCDB<br />Database Status:<br />SUCCESS<br />DGMGRL> show database rdscdb_b   <br />Database - rdscdb_b<br />  Role:               PHYSICAL STANDBY<br />  Intended State:     APPLY-ON<br />  Transport Lag:      0 seconds (computed 1 second ago)<br />  Apply Lag:          0 seconds (computed 1 second ago)<br />  Average Apply Rate: 16.00 KByte/s<br />  Real Time Query:    ON<br />  Instance(s):<br />    RDSCDB<br />Database Status:<br />SUCCESS<br />DGMGRL></pre> | DBA | 

## 관련 리소스
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-resources"></a>
+ [Amazon RDS를 Oracle PeopleSoft 데이터베이스로 구성](https://d1.awsstatic.com/whitepapers/configuring-amazon-rds-as-peoplesoft-database.pdf)(AWS 백서)
+ [Oracle Data Guard Broker](https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/index.html) 가이드(Oracle 참조 문서)
+ [Oracle Data Guard Concepts 및 Administration](https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/index.html)(Oracle 참조 문서)

## 추가 정보
<a name="add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica-additional"></a>

**데이터베이스 보호 모드 선택**

Oracle Data Guard는 가용성, 보호 및 성능 요구 사항에 따라 Data Guard 환경을 구성할 수 있는 세 가지 보호 모드를 제공합니다. 다음 표에는 이러한 세 가지 모드가 요약되어 있습니다.


| 
| 
| 보호 모드 | 전송 설정 다시 실행 | 설명 | 
| --- |--- |--- |
| ***최대 성능*** | `ASYNC` | 기본 데이터베이스에서 발생하는 트랜잭션의 경우 다시 실행 데이터가 비동기적으로 전송되어 대기 데이터베이스 다시 실행 로그에 기록됩니다. 따라서 성능에 미치는 영향은 최소화됩니다.`MaxPerformance`은 비동기 로그 전달로 인해 RPO=0을 제공할 수 없습니다. | 
| ***최대한의 보호*** | `SYNC+AFFIRM` | 기본 데이터베이스의 트랜잭션의 경우 트랜잭션이 승인되기 전에 다시 실행 데이터가 디스크의 대기 데이터베이스 다시 실행 로그에 동기적으로 전송되고 기록됩니다. 대기 데이터베이스를 사용할 수 없게 되면 기본 데이터베이스가 스스로 종료되어 트랜잭션이 보호됩니다. | 
| ***최대 가용성*** | `SYNC+AFFIRM` | 대기 데이터베이스로부터 승인을 받지 못하는 경우를 제외하면 이 모드는 `MaxProtection`모드와 비슷합니다. 이 경우 다시 실행 스트림을 동기화된 대기 데이터베이스에 다시 쓸 수 있을 때까지 기본 데이터베이스 가용성을 보존하기 위해 `MaxPerformance` 모드에 있는 것처럼 작동합니다. | 
| `SYNC+NOAFFIRM` | 기본 데이터베이스의 트랜잭션의 경우 다시 실행이 대기 데이터베이스에 동기적으로 전송되고 기본 데이터베이스는 다시 실행이 대기 디스크에 기록된 것이 아니라 대기 데이터베이스에서 다시 실행이 수신되었다는 확인만 기다립니다. `FastSync`이라고도 하는 이 모드는 여러 개의 동시 오류가 발생하는 특수한 경우 데이터 손실에 노출될 수 있는 위험을 감수하면서 성능상의 이점을 제공할 수 있습니다. | 

RDS Custom for Oracle의 읽기 전용 복제본은 Oracle Data Guard의 기본 보호 모드이기도 한 최대 성능 보호 모드를 사용하여 생성됩니다. 최대 성능 모드는 기본 데이터베이스의 성능 영향을 최소화하므로 초 단위로 측정되는 Recovery Point Objective(RPO) 요구 사항을 충족할 수 있습니다.

데이터 손실 제로(RPO=0) 목표를 달성하기 위해 Oracle Data Guard 보호 모드를 `MaxAvailability`로 사용자 지정하고 다시 실행 전송을 `SYNC+NOAFFIRM`으로 설정하여 더 나은 성능을 얻을 수 있습니다. 기본 데이터베이스의 커밋은 해당 다시 실행 벡터가 대기 데이터베이스로 성공적으로 전송된 후에만 확인되므로 커밋에 민감한 워크로드의 경우 기본 인스턴스와 복제본 간의 네트워크 지연 시간이 매우 중요할 수 있습니다. 읽기 전용 복제본을 `MaxAvailability` 모드에서 실행하도록 사용자 지정했을 때 성능에 미치는 영향을 평가하려면 워크로드에 대한 부하 테스트를 수행하는 것이 좋습니다.

기본 데이터베이스와 동일한 가용 영역에 읽기 전용 복제본을 배포하면 다른 가용 영역에 읽기 전용 복제본을 배포하는 것보다 네트워크 지연 시간이 줄어듭니다. 그러나 동일한 가용 영역에 기본 복제본과 읽기 전용 복제본을 배포하는 것은 HA 요구 사항을 충족하지 못할 수 있습니다. 가용 영역을 사용할 수 없는 경우가 발생할 경우 기본 인스턴스와 읽기 전용 복제본 인스턴스가 모두 영향을 받기 때문입니다.

# Oracle에서 PostgreSQL로의 부분 데이터베이스 마이그레이션에 대한 객체 종속성 분석
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql"></a>

*anuradha 중국, Amazon Web Services*

## 요약
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-summary"></a>

이 패턴은 부분 Oracle 데이터베이스를 Amazon Relational Database Service(RDS) 또는 Amazon Aurora PostgreSQL로 마이그레이션할 때 시스템 종속성을 체계적으로 식별하고 관리하는 것의 중요성을 설명합니다. 부분 마이그레이션에서는 원본 데이터베이스의 데이터베이스 객체 및 데이터의 하위 집합만 마이그레이션되는 반면, 소스 데이터베이스는 마이그레이션되지 않은 구성 요소에 의존하는 애플리케이션을 계속 운영하고 제공합니다.

애플리케이션을 업스트림 및 다운스트림 종속성과 긴밀하게 결합한 대규모 데이터베이스를 처리할 때는 마이그레이션 범위를 식별하고 분석해야 합니다. 부분 마이그레이션을 시작하려면 테이블, 트리거, 뷰, 저장 프로시저, 함수 및 패키지를 포함한 범위 객체를 식별합니다. 범위 식별 프로세스는 포괄적인 접근 방식을 따릅니다.
+ 1단계 범위 객체는 애플리케이션 코드 및 중요한 모듈별 작업의 직접 참조를 통해 식별됩니다.
+ 2단계 객체는 포괄적인 종속성 분석을 통해 파생됩니다.

시스템의 여러 부분이 상호 작용하는 방식을 이해하면 데이터베이스 구성 요소를 이동하는 올바른 순서를 더 잘 계획하고 마이그레이션 실패 리스크를 줄일 수 있습니다. 다음 표에는 다양한 유형의 종속성 분석이 나열되어 있습니다.


| 
| 
| 분석 유형 | 중점 영역 | 용도 | 
| --- |--- |--- |
| 객체 종속성 | 테이블뷰저장 프로시저함수트리거 | 데이터베이스 객체와 해당 계층 구조 간의 관계를 식별합니다. | 
| 세그먼트 종속성 | 외래 키 관계기본 키 체인교차 스키마 참조 | 데이터 관계를 매핑하고 참조 무결성을 유지합니다. | 
| 보안 종속성 | 사용자 권한역할 계층 구조객체 권한 | 적절한 액세스 제어 마이그레이션 및 보안 유지 관리 보장 | 
| 액세스 패턴 | 읽기 작업쓰기 작업 | 데이터베이스 상호 작용 패턴을 결정합니다. | 

소스 시스템과 대상 시스템 간의 일관성을 유지하려면 전환 기간 동안 데이터 동기화 메커니즘을 설정합니다. 또한 소스 Oracle 및 대상 PostgreSQL 데이터베이스 모두에서 데이터 배포를 처리하도록 애플리케이션 코드와 함수를 수정해야 합니다.

## 사전 조건 및 제한 사항
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ ‬소스:‭ Oracle Database
+ 대상: Amazon RDS for PostgreSQL/Amazon Aurora PostgreSQL

**제품 버전**
+ Oracle 19c 이상
+ PostgreSQL 16 이상

## 아키텍처
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-architecture"></a>

**소스 기술 스택  **
+ Oracle 19c 이상

**대상 기술 스택**
+ Amazon RDS for PostgreSQL / Amazon Aurora PostgreSQL

**대상 아키텍처 **

다음 다이어그램은 온프레미스 Oracle 데이터베이스에서 Amazon RDS for Oracle로 마이그레이션하는 프로세스를 보여줍니다. 여기에는 다음이 포함됩니다.
+ 종속성 파악
+  AWS Schema Conversion Tool (AWS SCT)를 사용하여 데이터베이스 코드 및 객체 마이그레이션
+  AWS Database Migration Service (AWS DMS)를 사용하여 데이터 마이그레이션
+ 를 사용하여 변경 데이터 캡처(CDC)를 통해 진행 중인 변경 사항 복제 AWS DMS

자세한 내용은 AWS 설명서의 [AWS Database Migration Service 와 통합 AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_DMSIntegration.html)을 참조하세요.

![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/90160825-3199-4382-95a8-ad63139c5c89/images/b09c36a4-27fa-412e-877e-57a31bcce0dc.png)


## 도구
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-tools"></a>

**AWS 서비스**
+ Oracle용 Amazon Relational Database Service(RDS)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영, 확장하는 데 도움이 됩니다.
+ Amazon Aurora는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ AWS Schema Conversion Tool (AWS SCT)는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 또는 클라우드와 온프레미스 설정의 조합 AWS 클라우드 간에 마이그레이션할 수 있습니다.

**기타 서비스**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html)는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경입니다. 이 패턴의 경우 [SQL\$1Plus](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm)를 사용할 수 있습니다.

## 모범 사례
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-best-practices"></a>

Oracle 데이터베이스 프로비저닝 및 마이그레이션에 대한 모범 사례는 [Amazon RDS for Oracle로 마이그레이션하는 모범 사례](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/best-practices.html)를 참조하세요.

## 에픽
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-epics"></a>

### 종속성 파악
<a name="identify-object-dependencies"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 객체 테이블을 생성합니다. | 애플리케이션의 기능에 필수적인 객체를 식별하고 라는 테이블을 생성합니다`DEPENDENT_ANALYSIS_BASELINE`. 테이블에 각 객체의 레코드를 추가합니다. 예제를 보려면 *추가 정보* 섹션을 참조하세요. | 데이터 엔지니어, DBA | 
| 데이터베이스 프록시 생성 | `DBA_DEPENDENCIES` 테이블의 데이터를 사용하여 양방향(정방향 및 역방향)으로 객체 종속성을 분석`sp_object_dependency_analysis`하는 라는 저장 프로시저를 생성합니다. 예제를 보려면 *추가 정보* 섹션을 참조하세요. | 데이터 엔지니어, DBA | 
| 프로시저를 실행합니다. | 새 객체 종속성이 발견되지 않을 때까지 각 연속 수준에서 스크립트를 실행합니다. 모든 종속성과 수준은 `DEPENDENT_ANALYSIS_BASELINE` 테이블에 저장됩니다. | DBA, 데이터 엔지니어 | 

### 세그먼트 수준 종속성에 대한 프로시저 생성
<a name="create-a-procedure-for-segment-level-dependencies"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 종속성 테이블을 생성합니다. | 라는 세그먼트 수준 종속성 테이블을 생성합니다`REFERENTIAL_ANALYSIS_BASELINE`. 모든 객체 수준 종속성이 검색되면 테이블을 쿼리`DEPENDENT_ANALYSIS_BASELINE`하여의 상위 `DBA_CONSTRAINT` 테이블을 확인합니다.기준 테이블이 다른 테이블에서 참조되는 종속성을 제외합니다. 채우기는 이러한 관계를 처리합니다. 다음은 예제 스크립트입니다.<pre>CREATE TABLE REFERENTIAL_ANALYSIS_BASELINE<br />(CHILD_OWNER VARCHAR2(50 BYTE),<br />CHILD_NAME VARCHAR2(100 BYTE),<br />PARENT_OWNER VARCHAR2(50 BYTE),<br />PARENT_NAME VARCHAR2(50 BYTE),<br />REFERENCE_PATH VARCHAR2(1000 BYTE));</pre> | 데이터 엔지니어, DBA | 
| 데이터베이스 프록시 생성 | 라는 프로시저를 `SP_OBJECT_REFERENTIAL_ANALYSIS`생성하고 식별된 모든 객체에 대한 참조 분석을 생성합니다. 예제를 보려면 *추가 정보* 섹션을 참조하세요. | 데이터 엔지니어, DBA | 
| 프로시저를 실행합니다. | 프로시저를 실행하여 참조 종속성을 가져옵니다. 에서 참조 분석 객체 세부 정보를 생성합니다`REFERENTIAL_ANALYSIS_BASELINE`. | 데이터 엔지니어, DBA | 

### 읽고 쓰는 객체 식별
<a name="identify-objects-that-read-and-write"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 읽기 및 쓰기 객체에 대한 테이블을 생성합니다. | 다음 스크립트를 사용하여 이름이 인 읽기 객체 테이블`TABLE_READ_OBJECT_DETAILS`과 이름이 인 쓰기 객체 테이블을 생성합니다`TABLE_WRITE_OBJECT_DETAILS`.<pre>CREATE TABLE TABLE_READ_OBJECT_DETAILS<br />(OWNER VARCHAR2(50 BYTE),<br />TAB_NAME VARCHAR2(50 BYTE),<br />READER_OWNER VARCHAR2(50 BYTE),<br />READER_NAME VARCHAR2(50 BYTE),<br />READER_TYPE VARCHAR2(50 BYTE));</pre><pre>CREATE TABLE TABLE_WRITE_OBJECT_DETAILS<br />(TABLE_NAME VARCHAR2(100 BYTE),<br />WRITEOBJ_OWNER VARCHAR2(100 BYTE),<br />WRITEOBJ_NAME VARCHAR2(100 BYTE),<br />WRITEOBJ_TYPE VARCHAR2(100 BYTE),<br />LINE VARCHAR2(100 BYTE),<br />TEXT VARCHAR2(4000 BYTE),<br />OWNER VARCHAR2(50 BYTE));</pre> | 데이터 엔지니어, DBA | 
| 분석 절차를 생성합니다. | 읽기 객체`SP_READER_OBJECTS_ANALYSIS`와 쓰기 객체를 각각 분석하기 `SP_WRITER_OBJECTS_ANALYSIS` 위한 프로시저 및를 생성합니다. 이 절차에서는 패턴 일치를 사용하여 관련 객체를 찾습니다. 예는 *추가 정보* 섹션을 참조하세요. | 데이터 엔지니어, DBA | 
| 프로시저를 실행합니다. | 다음 절차를 실행하여 종속 객체를 식별합니다. | DBA, 데이터 엔지니어 | 

### 데이터베이스 권한 검토
<a name="review-database-privileges"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 권한을 검토할 테이블을 생성합니다. | 라는 이름의 권한을 분석하기 위한 테이블을 생성합니다`OBJECT_PRIVS_ANALYSIS`. `DEPENDENT_ANALYSIS_BASELINE` 테이블에서 객체 권한을 재귀적으로 캡처하려면 다음 스크립트를 사용합니다.<pre>CREATE TABLE OBJECT_PRIVS_ANALYSIS<br />(OWNER VARCHAR2(50 BYTE),<br />OBJECT_NAME VARCHAR2(50 BYTE),<br />USER_NAME VARCHAR2(50 BYTE),<br />PRIVS VARCHAR2(50 BYTE));</pre> | 데이터 엔지니어, DBA | 
| 권한을 검토하는 절차를 생성합니다. | 라는 프로시저를 생성합니다`SP_OBJECT_PRIVS_ANALYSIS`. 식별된 객체에 대한 권한 분석을 생성합니다. 예제를 보려면 *추가 정보* 섹션을 참조하세요. | DBA, 데이터 엔지니어 | 
| 프로시저를 실행합니다. | 프로시저를 실행하여 `OBJECT_PRIVS_ANALYSIS` 테이블에서 캡처합니다. | DBA, 데이터 엔지니어 | 

## 문제 해결
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 사전 테이블에 액세스할 수 없음 | 분석 객체를 생성한 사용자가 DBA 테이블에 액세스할 수 있는지 확인합니다. | 

## 관련 리소스
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-resources"></a>

**AWS 설명서**
+ [Amazon RDS 및 Aurora 설명서](https://docs.aws.amazon.com/rds/)
+ [Oracle Database 19c - Amazon Aurora PostgreSQL Migration Playbook](https://docs.aws.amazon.com/dms/latest/oracle-to-aurora-postgresql-migration-playbook/chap-oracle-aurora-pg.html)
+ [란 무엇입니까 AWS Database Migration Service?](https://docs.aws.amazon.com/dms/latest/userguide/)
+ AWS Schema Conversion Tool을 시작합니다.

**기타 설명서**
+ [Oracle 데이터베이스 객체](https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Database-Objects.html)

## 추가 정보
<a name="multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql-additional"></a>

**용 스크립트 `DEPENDENT_ANALYSIS_BASELINE`**

```
CREATE TABLE DEPENDENT_ANALYSIS_BASELINE
(OWNER VARCHAR2(128 BYTE) NOT NULL ENABLE,
OBJECT_NAME VARCHAR2(128 BYTE) NOT NULL ENABLE,
OBJECT_TYPE VARCHAR2(20 BYTE),
DEPEDNCY_LEVEL NUMBER,
PROJECT_NEED VARCHAR2(20 BYTE),
CATAGORY VARCHAR2(4000 BYTE),
COMMENTS VARCHAR2(4000 BYTE),
CATAGORY1 CLOB,
COMMENTS1 CLOB,
CUSTOMER_COMMENTS VARCHAR2(1000 BYTE),
BACKFILL_TO_GUS VARCHAR2(1000 BYTE),
BACKFILL_NEAR_REAL_TIME_OR_BATCH VARCHAR2(1000 BYTE),
PK_EXISTS VARCHAR2(3 BYTE),
UI_EXISTS VARCHAR2(3 BYTE),
LOB_EXISTS VARCHAR2(3 BYTE),
MASTER_LINK VARCHAR2(100 BYTE),
CONSTRAINT PK_DEPENDENT_ANALYSIS_BASELINE PRIMARY KEY (OWNER,OBJECT_NAME,OBJECT_TYPE));
```

의 절차

```
CREATE OR REPLACE PROCEDURE SP_WRITER_OBJECTS_ANALYSIS IS
BEGIN
  EXECUTE IMMEDIATE 'TRUNCATE TABLE TABLE_WRITE_OBJECT_DETAILS';
  FOR I IN (SELECT OWNER, OBJECT_NAME FROM DEPENDENT_ANALYSIS_BASELINE WHERE OBJECT_TYPE = 'TABLE')
  LOOP
    INSERT INTO TABLE_WRITE_OBJECT_DETAILS(OWNER, TABLE_NAME, WRITEOBJ_OWNER, WRITEOBJ_NAME, WRITEOBJ_TYPE, LINE, TEXT)
    SELECT DISTINCT I.OWNER, I.OBJECT_NAME, OWNER WRITEOBJ_OWNER, NAME, TYPE, LINE, TRIM(TEXT)
    FROM DBA_SOURCE 
    WHERE UPPER(TEXT) LIKE '%' || I.OBJECT_NAME || '%'
      AND (UPPER(TEXT) LIKE '%INSERT%' || I.OBJECT_NAME || '%' 
        OR UPPER(TEXT) LIKE '%UPDATE%' || I.OBJECT_NAME || '%' 
        OR UPPER(TEXT) LIKE '%DELETE%' || I.OBJECT_NAME || '%' 
        OR UPPER(TEXT) LIKE '%UPSERT%' || I.OBJECT_NAME || '%' 
        OR UPPER(TEXT) LIKE '%MERGE%' || I.OBJECT_NAME || '%') 
      AND UPPER(TEXT) NOT LIKE '%PROCEDURE%' 
      AND UPPER(TEXT) NOT LIKE 'PROCEDURE%' 
      AND UPPER(TEXT) NOT LIKE '%FUNCTION%' 
      AND UPPER(TEXT) NOT LIKE 'FUNCTION%'
      AND UPPER(TEXT) NOT LIKE '%TRIGGER%' 
      AND UPPER(TEXT) NOT LIKE 'TRIGGER%' 
      AND UPPER(TRIM(TEXT)) NOT LIKE '%AFTER UPDATE%' 
      AND UPPER(TRIM(TEXT)) NOT LIKE 'BEFORE UPDATE%' 
      AND UPPER(TRIM(TEXT)) NOT LIKE 'BEFORE INSERT%' 
      AND UPPER(TRIM(TEXT)) NOT LIKE 'AFTER INSERT%' 
      AND UPPER(TRIM(TEXT)) NOT LIKE 'BEFORE DELETE%' 
      AND UPPER(TRIM(TEXT)) NOT LIKE 'AFTER DELETE%' 
      AND UPPER(TRIM(TEXT)) NOT LIKE '%GGLOGADM.GG_LOG_ERROR%' 
      AND (TRIM(TEXT) NOT LIKE '/*%' AND TRIM(TEXT) NOT LIKE '--%' ) 
      AND (OWNER, NAME, TYPE) IN (SELECT OWNER, NAME, TYPE FROM DBA_DEPENDENCIES WHERE REFERENCED_NAME = I.OBJECT_NAME);
  END LOOP;
END;
```

**용 스크립트 `SP_READER_OBJECTS_ANALYSIS`**

```
CREATE OR REPLACE PROCEDURE SP_READER_OBJECTS_ANALYSIS IS
BEGIN
  EXECUTE IMMEDIATE 'TRUNCATE TABLE TABLE_READ_OBJECT_DETAILS';
  FOR I IN (SELECT OWNER, OBJECT_NAME FROM DEPENDENT_ANALYSIS_BASELINE WHERE OBJECT_TYPE = 'TABLE')
  LOOP
    INSERT INTO TABLE_READ_OBJECT_DETAILS
    SELECT DISTINCT i.owner, i.object_name, owner, name, type 
    FROM dba_dependencies 
    WHERE referenced_name = I.OBJECT_NAME
    AND referenced_type = 'TABLE' 
    AND type NOT IN ('SYNONYM', 'MATERIALIZED VIEW', 'VIEW') 
    AND (owner, name, type) NOT IN (
      SELECT DISTINCT owner, trigger_name, 'TRIGGER' 
      FROM dba_triggers 
      WHERE table_name = I.OBJECT_NAME 
      AND table_owner = i.owner
      UNION ALL
      SELECT DISTINCT owner, name, type 
      FROM dba_source
      WHERE upper(text) LIKE '%' || I.OBJECT_NAME || '%' 
      AND (upper(text) LIKE '%INSERT %' || I.OBJECT_NAME || '%' 
        OR upper(text) LIKE '%UPDATE% ' || I.OBJECT_NAME || '%' 
        OR upper(text) LIKE '%DELETE %' || I.OBJECT_NAME || '%' 
        OR upper(text) LIKE '%UPSERT %' || I.OBJECT_NAME || '%' 
        OR upper(text) LIKE '%MERGE %' || I.OBJECT_NAME || '%') 
      AND upper(text) NOT LIKE '%PROCEDURE %' 
      AND upper(text) NOT LIKE 'PROCEDURE %'
      AND upper(text) NOT LIKE '%FUNCTION %' 
      AND upper(text) NOT LIKE 'FUNCTION %'
      AND upper(text) NOT LIKE '%TRIGGER %'
      AND upper(text) NOT LIKE 'TRIGGER %'
      AND upper(trim(text)) NOT LIKE 'BEFORE INSERT %'
      AND upper(trim(text)) NOT LIKE 'BEFORE UPDATE %' 
      AND upper(trim(text)) NOT LIKE 'BEFORE DELETE %' 
      AND upper(trim(text)) NOT LIKE 'AFTER INSERT %' 
      AND upper(trim(text)) NOT LIKE 'AFTER UPDATE %' 
      AND upper(trim(text)) NOT LIKE 'AFTER DELETE %' 
      AND (trim(text) NOT LIKE '/*%' AND trim(text) NOT LIKE '--%'));
  END LOOP;
END;
```

**용 스크립트 `SP_OBJECT_REFERENTIAL_ANALYSIS`**

```
CREATE OR REPLACE PROCEDURE SP_OBJECT_REFERENTIAL_ANALYSIS IS
BEGIN
  EXECUTE IMMEDIATE 'TRUNCATE TABLE REFERENTIAL_ANALYSIS_BASELINE';
  INSERT INTO REFERENTIAL_ANALYSIS_BASELINE
  WITH rel AS (
    SELECT DISTINCT c.owner, c.table_name, c.r_owner r_owner,
      (SELECT table_name FROM dba_constraints 
       WHERE constraint_name = c.r_constraint_name 
       AND owner = c.r_owner) r_table_name 
    FROM dba_constraints c 
    WHERE constraint_type = 'R' 
    AND c.owner NOT IN (SELECT username FROM dba_users WHERE oracle_maintained = 'Y')
    AND c.r_owner NOT IN (SELECT username FROM dba_users WHERE oracle_maintained = 'Y')),
  tab_list AS (
    SELECT OWNER, object_name 
    FROM DEPENDENT_ANALYSIS_BASELINE 
    WHERE UPPER(OBJECT_TYPE) = 'TABLE')
  SELECT DISTINCT owner child_owner, table_name child, r_owner parent_owner,
    r_table_name parent, SYS_CONNECT_BY_PATH(r_table_name, ' -> ') || ' -> ' || table_name PATH
  FROM rel 
  START WITH (r_owner, r_table_name) IN (SELECT * FROM tab_list)
  CONNECT BY NOCYCLE (r_owner, r_table_name) = ((PRIOR owner, PRIOR table_name))
  UNION
  SELECT DISTINCT owner child_owner, table_name child, r_owner parent_owner,
    r_table_name parent, SYS_CONNECT_BY_PATH(table_name, ' -> ') || ' -> ' || r_table_name PATH
  FROM rel 
  START WITH (owner, table_name) IN (SELECT * FROM tab_list)
  CONNECT BY NOCYCLE (owner, table_name) = ((PRIOR r_owner, PRIOR r_table_name));
END;
```

**용 스크립트 `SP_OBJECT_PRIVS_ANALYSIS`**

```
CREATE OR REPLACE PROCEDURE SP_OBJECT_PRIVS_ANALYSIS IS
  V_SQL VARCHAR2(4000);
  V_CNT NUMBER;
BEGIN
  V_SQL := 'TRUNCATE TABLE OBJECT_PRIVS_ANALYSIS';
  EXECUTE IMMEDIATE V_SQL;
  FOR I IN (SELECT OWNER, OBJECT_NAME FROM DEPENDENT_ANALYSIS_BASELINE WHERE OBJECT_TYPE = 'TABLE')
  LOOP
    INSERT INTO OBJECT_PRIVS_ANALYSIS(OWNER, OBJECT_NAME, USER_NAME, PRIVS)
    WITH obj_to_role AS (
      SELECT DISTINCT GRANTEE role_name, 
        DECODE(privilege, 'SELECT', 'READ', 'REFERENCE', 'READ', 'INSERT', 'WRITE', 
               'UPDATE', 'WRITE', 'DELETE', 'WRITE', privilege) privs
      FROM DBA_TAB_PRIVS t, DBA_ROLES r 
      WHERE OWNER = I.OWNER 
      AND TYPE = 'TABLE' 
      AND TABLE_NAME = I.OBJECT_NAME 
      AND t.GRANTEE = r.ROLE 
      AND r.ROLE IN (SELECT ROLE FROM DBA_ROLES WHERE ORACLE_MAINTAINED = 'N')
    )
    SELECT I.OWNER, I.OBJECT_NAME, grantee, privs 
    FROM (
      -- Recursively Role to User mapping with privilege
      SELECT DISTINCT grantee, privs 
      FROM (SELECT rp.granted_role, rp.grantee, privs,
        (SELECT DECODE(COUNT(*), 0, 'ROLE', 'USER') 
         FROM (SELECT 'User' FROM DBA_users WHERE username = rp.GRANTEE)) grantee_type 
        FROM DBA_role_privs rp, obj_to_role r 
        WHERE rp.granted_role = r.role_name 
        AND grantee IN ((SELECT USERNAME FROM DBA_USERS WHERE ORACLE_MAINTAINED = 'N') 
                       UNION (SELECT ROLE FROM DBA_ROLES WHERE ORACLE_MAINTAINED = 'N'))
        AND granted_role IN (SELECT ROLE FROM DBA_ROLES WHERE ORACLE_MAINTAINED = 'N') 
        START WITH granted_role IN (SELECT DISTINCT role_name FROM obj_to_role) 
        CONNECT BY granted_role = PRIOR grantee) 
      WHERE grantee_type = 'USER'
    )
    UNION
    (
      -- Direct Object grants to User
      SELECT I.OWNER, I.OBJECT_NAME, GRANTEE, 
        DECODE(privilege, 'SELECT', 'READ', 'REFERENCE', 'READ', 'INSERT', 'WRITE',
               'UPDATE', 'WRITE', 'DELETE', 'WRITE', privilege) privs 
      FROM DBA_TAB_PRIVS, DBA_USERS 
      WHERE GRANTEE = USERNAME 
      AND OWNER = I.OWNER 
      AND TYPE = 'TABLE' 
      AND TABLE_NAME = I.OBJECT_NAME
    ) 
    ORDER BY 2 DESC;
  END LOOP;
END;
```

의 절차

```
CREATE OR REPLACE PROCEDURE SP_OBJECT_DEPENDENCY_ANALYSIS (v_level NUMBER) IS
  TYPE typ IS RECORD (
    schema VARCHAR2(100),
    obj_type VARCHAR2(100),
    obj_name VARCHAR2(100),
    path VARCHAR2(5000)
  );
  TYPE array IS TABLE OF typ;
  l_data array;
  c SYS_REFCURSOR;
  l_errors NUMBER;
  l_errno NUMBER;
  l_msg VARCHAR2(4000);
  l_idx NUMBER;
  l_level NUMBER;
BEGIN
  l_level := v_level + 1;
  OPEN c FOR 
    WITH obj_list AS (
      SELECT owner schema_name, object_type, object_name 
      FROM DEPENDENT_ANALYSIS_BASELINE 
      WHERE depedncy_level = v_level
    ),
    fw_dep_objects AS (
      SELECT level lvl, owner, name, type, referenced_owner, referenced_name,
        referenced_type, SYS_CONNECT_BY_PATH(name, ' -> ') || ' -> ' || referenced_name PATH 
      FROM dba_dependencies
      START WITH (owner, CASE WHEN type = 'PACKAGE BODY' THEN 'PACKAGE' ELSE type END, name) 
        IN (SELECT schema_name, object_type, object_name FROM obj_list)
      CONNECT BY NOCYCLE (owner, type, name) = 
        ((PRIOR referenced_owner, PRIOR referenced_type, PRIOR referenced_name))
    ),
    bw_dep_objects AS (
      SELECT level lvl, owner, name, type, referenced_owner, referenced_name,
        referenced_type, SYS_CONNECT_BY_PATH(name, ' <- ') || ' <- ' || referenced_name PATH 
      FROM dba_dependencies
      START WITH (referenced_owner, CASE WHEN referenced_type = 'PACKAGE BODY' THEN 'PACKAGE' 
        ELSE referenced_type END, referenced_name) IN (SELECT schema_name, object_type, object_name FROM obj_list)
      CONNECT BY NOCYCLE (referenced_owner, referenced_type, referenced_name) = 
        ((PRIOR owner, PRIOR type, PRIOR name))
    )
    SELECT * FROM (
      (SELECT DISTINCT referenced_owner schema, referenced_type obj_type, 
        referenced_name obj_name, path FROM fw_dep_objects)
      UNION
      (SELECT DISTINCT owner schema, type obj_type, name obj_name, path 
       FROM bw_dep_objects)
    )
    WHERE schema IN (SELECT username FROM all_users WHERE oracle_maintained = 'N')
    ORDER BY obj_type;

  LOOP
    FETCH c BULK COLLECT INTO l_data LIMIT 100;
    BEGIN
      FORALL i IN 1..l_data.count SAVE EXCEPTIONS
        INSERT INTO DEPENDENT_ANALYSIS_BASELINE (
          owner, object_name, object_type, catagory, depedncy_level, project_need, comments
        ) 
        VALUES (
          l_data(i).schema, 
          l_data(i).obj_name,
          CASE WHEN l_data(i).obj_type = 'PACKAGE BODY' THEN 'PACKAGE' ELSE l_data(i).obj_type END,
          'level ' || l_level || ' dependency',
          l_level,
          '',
          'from dependency proc' || l_data(i).path
        );
    EXCEPTION
      WHEN OTHERS THEN
        l_errors := sql%bulk_exceptions.count;
        FOR i IN 1..l_errors LOOP
          l_errno := sql%bulk_exceptions(i).error_code;
          l_msg := SQLERRM(-l_errno);
          l_idx := sql%bulk_exceptions(i).error_index;
          UPDATE DEPENDENT_ANALYSIS_BASELINE 
          SET catagory1 = catagory1 || ', found in level' || l_level || ' dependent of ' || l_data(l_idx).path,
              comments1 = comments1 || ', from dependency proc exception ' || l_data(i).path
          WHERE owner = l_data(l_idx).schema 
          AND object_name = l_data(l_idx).obj_name 
          AND object_type = l_data(l_idx).obj_type;
        END LOOP;
    END;
    EXIT WHEN c%NOTFOUND;
  END LOOP;
  CLOSE c;
END;
```

# SQL Server 데이터베이스를 AWS의 MongoDB Atlas로 마이그레이션하기 위한 쿼리 성능 평가
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws"></a>

*Battulga Purevragchaa, Amazon Web Services*

*Krishnakumar Sathyanarayana, PeerIslands US Inc*

*Babu Srinivasan, MongoDB*

## 요약
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-summary"></a>

이 패턴은 실제와 가까운 데이터를 사용하여 MongoDB를 로드하고 프로덕션 시나리오에 최대한 가까운 MongoDB 쿼리 성능을 평가하기 위한 지침을 제공합니다. 이 평가는 관계형 데이터베이스에서 MongoDB로의 마이그레이션을 계획하는 데 도움이 되는 정보를 제공합니다. 이 패턴은 [PeerIslands Test Data Generator and Performance Analyzer](https://tools.peerislands.io/)를 사용하여 쿼리 성능을 테스트합니다.

이 패턴은 Microsoft SQL Server를 MongoDB로 마이그레이션할 때 특히 유용합니다. 스키마 변환을 수행하고 현재 SQL Server 인스턴스에서 MongoDB로 데이터를 로드하는 작업은 매우 복잡할 수 있기 때문입니다. 대신 실제 마이그레이션을 시작하기 전에 실제와 가까운 데이터를 MongoDB로 로드하고, MongoDB 성능을 이해하고, 스키마 디자인을 미세 조정할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ [MongoDB Atlas](https://www.mongodb.com/docs/atlas/getting-started/)에 대한 지식
+ 대상 MongoDB 스키마
+ 일반적인 쿼리 패턴

**제한 사항 **
+ 데이터 로드 시간과 성능은 MongoDB 클러스터 인스턴스 크기에 따라 제한됩니다. 실제 성능을 이해하려면 프로덕션 용도로 권장되는 인스턴스를 선택하는 것이 좋습니다.
+ PeerIslands Test Data Generator and Performance Analyzer는 현재 온라인 데이터 로드 및 쿼리만 지원합니다. 오프라인 일괄 처리(예: Spark 커넥터를 사용하여 MongoDB로 데이터 로드)는 아직 지원되지 않습니다.
+ PeerIslands Test Data Generator and Performance Analyzer는 컬렉션 내 필드 관계를 지원합니다. 컬렉션 간의 관계는 지원하지 않습니다.

**제품 에디션**
+ 이 패턴은 [MongoDB Atlas](https://www.mongodb.com/atlas) 및 [MongoDB Enterprise Advanced](https://www.mongodb.com/products/mongodb-enterprise-advanced)를 모두 지원합니다.

## 아키텍처
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-architecture"></a>

**대상 기술 스택**
+ MongoDB Atlas 또는 MongoDB Enterprise Advanced

**아키텍처**

![\[SQL Server 데이터베이스를 AWS의 MongoDB Atlas로 마이그레이션하기 위한 쿼리 성능 평가를 위한 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/25f0ab73-d587-4bd0-9fc0-ac675d5aa349/images/717caae4-d52e-4c78-bb7d-2ecb5acccd42.png)


PeerIslands Test Data Generator and Performance Analyzer는 Java 및 Angular를 사용하여 구축되었으며 생성된 데이터를 Amazon Elastic Block Store(Amazon EBS)에 저장합니다. 이 도구는 테스트 데이터 생성 및 성능 테스트라는 두 가지 워크플로우로 구성되어 있습니다.
+ 테스트 데이터를 생성할 때는 생성해야 하는 데이터 모델의 JSON 표현인 템플릿을 생성합니다. 템플릿을 생성한 후에는 로드 생성 구성에 정의된 대로 대상 컬렉션에서 데이터를 생성할 수 있습니다.
+ 성능 테스트에서 프로필을 생성합니다. 프로필은 생성, 읽기, 업데이트, 삭제(CRUD) 작업, 집계 파이프라인, 각 작업의 가중치, 각 단계의 기간을 구성할 수 있는 다단계 테스트 시나리오입니다. 프로필을 생성한 후 구성을 기반으로 대상 데이터베이스에서 성능 테스트를 실행할 수 있습니다.

PeerIslands Test Data Generator and Performance Analyzer는 Amazon EBS에 데이터를 저장하므로 피어링, 허용 목록, 프라이빗 엔드포인트를 포함한 MongoDB가 지원하는 모든 연결 메커니즘을 사용하여 Amazon EBS를 MongoDB에 연결할 수 있습니다. 기본적으로 이 도구에는 운영 구성 요소가 포함되어 있지 않지만 필요한 경우 Amazon Managed Service for Prometheus, Amazon Managed Grafana, Amazon CloudWatch, AWS Secrets Manager를 사용하여 구성할 수 있습니다.

## 도구
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-tools"></a>
+ [PeerIslands Test Data Generator and Performance Analyzer](https://tools.peerislands.io/)에는 두 가지 구성 요소가 포함되어 있습니다. Test Data Generator 구성 요소를 사용하면 MongoDB 스키마를 기반으로 고도로 고객별로 특화된 실제 데이터를 생성할 수 있습니다. 이 도구는 풍부한 데이터 라이브러리를 갖춘 완전한 UI 기반이며 MongoDB에서 수십억 개의 레코드를 빠르게 생성하는 데 사용할 수 있습니다. 이 도구는 MongoDB 스키마의 필드 간 관계를 구현하는 기능도 제공합니다. Performance Analyzer 구성 요소를 사용하면 고도로 고객별 쿼리와 집계를 생성하고 MongoDB에서 현실적인 성능 테스트를 수행할 수 있습니다. Performance Analyzer를 사용하여 다양한 로드 프로필과 특정 사용 사례에 대한 파라미터화된 쿼리로 MongoDB 성능을 테스트할 수 있습니다.

## 모범 사례
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-best-practices"></a>

다음 리소스를 참조하세요.
+ [MongoDB 스키마 설계 모범 사례](https://www.mongodb.com/developer/products/mongodb/mongodb-schema-design-best-practices/) (MongoDB 개발자 웹사이트)
+ [AWS에 MongoDB Atlas를 배포하는 모범 사례](https://www.mongodb.com/presentation/best-practices-of-deploying-mongodb-atlas-on-aws) (MongoDB 웹사이트)
+ [AWS PrivateLink를 사용하여 MongoDB Atlas 데이터 영역에 애플리케이션을 안전하게 연결](https://aws.amazon.com/blogs/apn/connecting-applications-securely-to-a-mongodb-atlas-data-plane-with-aws-privatelink/) (AWS Blog 게시물)
+ [MongoDB 성능 모범 사례 가이드](https://www.mongodb.com/basics/best-practices) (MongoDB 웹사이트)

## 에픽
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-epics"></a>

### 소스 데이터 이해
<a name="understand-your-source-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 현재 SQL Server 소스의 데이터베이스 발자국을 이해합니다. | 현재 SQL Server 발자국을 이해합니다. 데이터베이스의 `INFORMATION` 스키마에 대해 쿼리를 실행하여 이 작업을 수행할 수 있습니다. 테이블 수와 각 테이블의 크기를 결정합니다. 각 테이블과 관련된 인덱스를 분석합니다. SQL 분석에 대한 자세한 내용은 PeerIslands 웹사이트의 블로그 게시물 [SQL2Mongo: 데이터 마이그레이션 여정](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)을 참조하세요. | DBA | 
| 소스 스키마를 이해합니다. | 테이블 스키마와 데이터의 비즈니스 표현(예: 우편번호, 이름, 통화)을 결정합니다. 기존 엔터티 관계(ER) 다이어그램을 사용하거나 기존 데이터베이스에서 ER 다이어그램을 생성합니다. 자세한 내용은 PeerIslands 웹사이트의 블로그 게시물 [SQL2Mongo: 데이터 마이그레이션 여정](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)을 참조하세요. | DBA | 
| 쿼리 패턴을 이해합니다. | 사용하는 상위 10개 SQL 쿼리를 문서화합니다. 데이터베이스에서 사용할 수 있는 **performance\$1schema.events\$1statements\$1summary\$1by\$1digest** 테이블을 사용하여 상위 쿼리를 이해할 수 있습니다. 자세한 내용은 PeerIslands 웹사이트의 블로그 게시물 [SQL2Mongo: 데이터 마이그레이션 여정](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)을 참조하세요. | DBA | 
| SLA 약정을 이해합니다. | 데이터베이스 운영에 대한 대상 서비스 수준에 관한 계약(SLA)을 문서화합니다. 일반적인 측정값에는 쿼리 지연 시간 및 초당 쿼리가 포함됩니다. 측정값과 그 목표는 일반적으로 비기능적 요구 사항(NFR) 문서에서 확인할 수 있습니다. | DBA | 

### MongoDB 스키마 정의
<a name="define-the-mongodb-schema"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 스키마를 정의합니다. | 대상 MongoDB 스키마에 대한 다양한 옵션을 정의합니다. 자세한 내용은 MongoDB Atlas 설명서의 [스키마](https://www.mongodb.com/docs/atlas/app-services/schemas/)를 참조하세요. 테이블 관계를 기반으로 모범 사례와 디자인 패턴을 고려하세요. | MongoDB 엔지니어 | 
| 대상 쿼리 패턴을 정의합니다. | MongoDB 쿼리 및 집계 파이프라인을 정의합니다. 이러한 쿼리는 SQL Server 워크로드에 대해 캡처한 상위 쿼리와 동일합니다. MongoDB 집계 파이프라인을 구성하는 방법을 이해하려면 [MongoDB 설명서](https://www.mongodb.com/docs/manual/core/aggregation-pipeline/)를 참조하세요. | MongoDB 엔지니어 | 
| MongoDB 인스턴스 유형을 정의합니다. | 테스트에 사용할 인스턴스의 크기를 결정합니다. 지침은 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)를 참조하세요. | MongoDB 엔지니어 | 

### 대상 데이터베이스를 준비합니다.
<a name="prepare-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| MongoDB Atlas 클러스터를 설정합니다. | AWS에서 MongoDB 클러스터를 설정하려면 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/tutorial/create-new-cluster/)의 지침을 따르세요. | MongoDB 엔지니어 | 
| 대상 데이터베이스에서 사용자를 생성합니다. | [MongoDB 설명서](https://www.mongodb.com/docs/atlas/connect-to-database-deployment/)의 지침에 따라 액세스 및 네트워크 보안을 위해 MongoDB Atlas 클러스터를 구성합니다. | MongoDB 엔지니어 | 
| AWS에서 적절한 역할을 생성하고 Atlas에 대한 역할 기반 액세스 제어를 구성합니다. | 필요한 경우 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/security/set-up-unified-aws-access/)의 지침에 따라 추가 사용자를 설정합니다. AWS 역할을 통해 [인증 및 권한](https://www.mongodb.com/docs/atlas/security/config-db-auth/)을 구성합니다. | MongoDB 엔지니어 | 
| MongoDB Atlas 액세스를 위한 Compass를 설정합니다. | 쉽게 탐색하고 액세스할 수 있도록 [MongoDB Compass GUI 유틸리티](https://www.mongodb.com/products/compass)를 설정합니다. | MongoDB 엔지니어 | 

### Test Data Generator를 사용하여 베이스 로드를 설정합니다.
<a name="set-up-the-base-load-by-using-test-data-generator"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Test Data Generator를 설치합니다. | 사용자 환경에 [PeerIsland Test Data Generator](https://github.com/PeerIslands/loadgen_binary)를 설치합니다. | MongoDB 엔지니어 | 
| 적절한 데이터를 생성하도록 Test Data Generator기를 구성합니다. | 데이터 라이브러리를 사용하여 MongoDB 스키마의 각 필드에 대한 특정 데이터를 생성하여 템플릿을 생성합니다. 자세한 내용은 [MongoDB Data Generaotor & Performance Analyzer](https://vimeo.com/570068857) 동영상을 참조하세요. | MongoDB 엔지니어 | 
| Test Data Generator를 수평적으로 확장하여 필요한 로드를 생성합니다. | 생성한 템플릿을 사용하여 필요한 병렬 처리를 구성하여 대상 컬렉션에 대한 로드 생성을 시작합니다. 필요한 데이터를 생성하기 위한 기간과 규모를 결정합니다. | MongoDB 엔지니어 | 
| MongoDB Atlas에서 로드를 검증합니다. | MongoDB Atlas에 로드된 데이터를 확인합니다. | MongoDB 엔지니어 | 
| MongoDB에서 필요한 인덱스를 생성합니다. | 쿼리 패턴을 기반으로 필요에 따라 인덱스를 정의합니다. 모범 사례는 [MongoDB 설명서](https://www.mongodb.com/docs/manual/applications/indexes/)를 참조하세요. | MongoDB 엔지니어 | 

### 성능 테스트 수행
<a name="conduct-performance-testing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Performance Analyzer에서 로드 프로필을 설정합니다. | Performance Analyzer에서 특정 쿼리와 해당 가중치, 테스트 실행 기간 및 단계를 구성하여 성능 테스트 프로필을 생성합니다. 자세한 내용은 [MongoDB Data Generaotor & Performance Analyzer](https://vimeo.com/570068857) 동영상을 참조하세요. | MongoDB 엔지니어 | 
| 성능 테스트를 실행합니다. | 생성한 성능 테스트 프로필을 사용하여 필요한 병렬 처리를 구성하여 대상 컬렉션에 대한 테스트를 시작합니다. 성능 테스트 도구를 수평적으로 확장하여 MongoDB Atlas에 대해 쿼리를 실행할 수 있습니다. | MongoDB 엔지니어 | 
| 테스트 결과를 기록합니다. | 쿼리에 대한 P95, P99 지연 시간을 기록합니다. | MongoDB 엔지니어 | 
| 스키마와 쿼리 패턴을 조정합니다. | 인덱스 및 쿼리 패턴을 수정하여 성능 문제를 해결합니다. | MongoDB 엔지니어 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. | Test Data Generator and Performance Analyzer에 사용한 모든 임시 리소스를 삭제합니다. | AWS 관리자 | 
| 성능 테스트 결과를 업데이트합니다. | MongoDB 쿼리 성능을 이해하고 SLA와 비교합니다. 필요한 경우 MongoDB 스키마를 미세 조정하고 프로세스를 다시 실행합니다. | MongoDB 엔지니어 | 
| 프로젝트를 마칩니다. | 프로젝트를 마무리하고 피드백을 제공하세요. | MongoDB 엔지니어 | 

## 관련 리소스
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-resources"></a>
+ GitHub 리포지토리: [S3toAtlas](https://github.com/mongodb-partners/S3toAtlas)
+ 스키마: [MongoDB 스키마 설계](https://www.mongodb.com/developer/products/mongodb/mongodb-schema-design-best-practices/)
+ 집계 파이프라인: [MongoDB 집계 파이프라인](https://www.mongodb.com/docs/manual/core/aggregation-pipeline/)
+ MongoDB Atlas 크기 조정: [크기 조정 티어 선택](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)
+ 동영상: [MongoDB Data Generator](https://vimeo.com/570068857) 및 Performance Analyzer
+ 참조: [MongoDB 설명서](https://www.mongodb.com/docs/)
+ 자습서:** **[MongoDB 개발자 가이드, ](https://www.mongodb.com/docs/develop-applications/)[MongoDB Jumpstart](https://www.youtube.com/playlist?list=PL4RCxklHWZ9v2lcat4oEVGQhZg6r4IQGV)
+ AWS Marketplace:** **[AWS Marketplace의 MongoDB Atlas](https://aws.amazon.com/marketplace/seller-profile?id=c9032c7b-70dd-459f-834f-c1e23cf3d092)
+ AWS 파트너 솔루션: ** **[ MongoDB Atlas on AWS Reference Deployment](https://aws.amazon.com/quickstart/architecture/mongodb-atlas/)

추가 리소스:
+ [SQL 분석](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)
+ [MongoDB 개발자 커뮤니티 포럼](https://www.mongodb.com/community/forums/)
+ [MongoDB 성능 튜닝 질문](https://www.mongodb.com/developer/products/mongodb/performance-tuning-tips/)
+ [Atlas 및 Redshift를 사용한 운영 분석](https://github.com/mongodb-partners/Atlas_to_Redshift)
+ [MongoDB Atlas 및 AWS Elastic Beanstalk를 사용한 애플리케이션 현대화](https://github.com/mongodb-partners/MEANStack_with_Atlas_on_AWS_EB)

# IaC 원칙을 사용하여 Amazon Aurora 글로벌 데이터베이스의 블루/그린 배포 자동화
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac"></a>

*Ishwar Chauthaiwale, ANKIT JAIN, Ramu Jagini, Amazon Web Services*

## 요약
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac-summary"></a>

[Amazon Aurora 글로벌](https://aws.amazon.com/rds/aurora/global-database/) 데이터베이스에서 중요한 워크로드를 실행하는 조직은 데이터베이스 업데이트, 마이그레이션 또는 규모 조정 작업을 관리하기 어려울 수 있습니다. 가동 중지 없이 이러한 작업이 원활하게 수행되도록 하는 것은 서비스 가용성을 유지하고 사용자의 중단을 방지하는 데 필수적입니다.

블루/그린 배포 전략은 블루(현재 환경)와 그린(새 환경)이라는 두 가지 동일한 환경을 동시에 실행할 수 있도록 하여이 문제에 대한 솔루션을 제공합니다. 블루/그린 전략을 사용하면 변경 사항을 구현하고, 테스트를 수행하고, 리스크와 가동 중지 시간을 최소화하면서 환경 간에 트래픽을 전환할 수 있습니다.

이 패턴은 코드형 인프라(IaC) 원칙을 사용하여 Aurora 글로벌 데이터베이스의 블루/그린 배포 프로세스를 자동화하는 데 도움이 됩니다. [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html), [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)및 [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html)을 사용하여 블루/그린 배포를 간소화합니다. 신뢰성을 높이기 위해 전역 트랜잭션 식별자(GTID)를 복제에 사용합니다. GTID 기반 복제는 바이너리 로그(binlog) 복제에 비해 환경 간에 더 나은 데이터 일관성과 장애 조치 기능을 제공합니다.

**참고**  
이 패턴은 Aurora MySQL 호환 버전 글로벌 데이터베이스 클러스터를 사용한다고 가정합니다. 대신 Aurora PostgreSQL-Compatible을 사용하는 경우 MySQL 명령의 PostgreSQL MySQL에 상응하는 명령을 사용합니다.

의 단계에 따라 이 작업을 수행할 수 있습니다.
+ 그린 Aurora 글로벌 데이터베이스 프로비저닝: CloudFormation 템플릿을 사용하여 기존 블루 환경을 미러링하는 그린 환경을 생성합니다.
+ GTID 기반 복제 설정: 블루 및 그린 환경을 동기화된 상태로 유지하도록 GTID 복제를 구성합니다.
+ 원활한 트래픽 전환: Route 53 및 Lambda를 사용하여 전체 동기화 후 트래픽을 블루에서 그린 환경으로 자동으로 전환합니다.
+ 배포 완료: 그린 환경이 기본 데이터베이스로 완전히 작동하는지 확인한 다음 복제를 중지하고 임시 리소스를 정리합니다.

이 패턴의 접근 방식은 다음과 같은 이점을 제공합니다.
+ 중요한 데이터베이스 업데이트 또는 마이그레이션 중 가동 중지 시간 단축: 자동화는 서비스 중단을 최소화하면서 환경 간에 원활한 전환을 보장합니다.
+ 빠른 롤백 활성화: 트래픽이 그린 환경으로 전환된 후 문제가 발생하면 빠르게 블루 환경으로 되돌리고 서비스 연속성을 유지할 수 있습니다.
+ 테스트 및 확인 기능 향상: 라이브 블루 환경에 영향을 주지 않고 그린 환경을 완전히 테스트할 수 있으므로 프로덕션에서 오류가 발생할 가능성이 줄어듭니다.
+ 데이터 일관성 보장: GTID 기반 복제는 블루 및 그린 환경을 동기화 상태로 유지하여 마이그레이션 중에 데이터 손실 또는 불일치를 방지합니다.
+ 비즈니스 연속성 유지: 블루/그린 배포를 자동화하면 업데이트 또는 마이그레이션 중에 서비스를 계속 사용할 수 있으므로 장기 중단 및 재정적 손실을 방지할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ 소스 Aurora MySQL 호환 글로벌 데이터베이스 클러스터(블루 환경). 글로벌 데이터베이스는 고가용성 및 재해 복구를 위한 다중 리전 구성을 제공합니다. 글로벌 데이터베이스 클러스터 설정에 대한 지침은 [Aurora 설명서를](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-getting-started.html) 참조하세요.
+ 소스 클러스터에서 [GTID 기반 복제](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-replication-gtid.html)가 활성화되었습니다.

**제한 사항 **
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ Aurora MySQL 호환 8.0 이상

## 아키텍처
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac-architecture"></a>

![\[GTID 복제를 사용하여 다른 리전의 블루 및 그린 환경을 동기화합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/19922266-c2e5-460b-9a0f-22e6d6736094/images/7a8c3095-7904-4080-906f-0c403c289a4f.png)


다이어그램은 다음을 보여 줍니다.
+ 글로벌 데이터베이스 설정: Aurora 글로벌 데이터베이스 클러스터는 두 개에 걸쳐 전략적으로 배포됩니다 AWS 리전. 이 구성을 사용하면 향상된 재해 복구 기능을 위해 지리적 배포 및 리전 중복성을 사용할 수 있습니다.
+ 기본 리전에서 보조 리전으로 복제: 논리적 복제 메커니즘은 기본 리전에서 보조 리전으로 원활한 데이터 동기화를 보장합니다. 이 복제는 지리적 거리에서 지연 시간을 최소화하면서 데이터 일관성을 유지합니다.
+ 클러스터 간 GTID 기반 복제: GTID 기반 복제는 블루 기본 클러스터와 그린 기본 클러스터 간에 트랜잭션 일관성과 정렬된 데이터 흐름을 유지하고 안정적인 데이터 동기화를 보장합니다.
+ 블루 기본 복제에서 보조 복제로: 논리적 복제는 블루 기본 클러스터와 보조 클러스터 간에 강력한 데이터 파이프라인을 설정합니다. 이 복제를 통해 지속적인 데이터 동기화와 고가용성을 구현할 수 있습니다.
+ Route 53 DNS 구성: Route 53 호스팅 영역 레코드는 모든 블루 및 그린 클러스터 데이터베이스 엔드포인트의 DNS 확인을 관리합니다. 이 구성은 원활한 엔드포인트 매핑을 제공하고 장애 조치 시나리오 중에 효율적인 트래픽 라우팅을 가능하게 합니다.

## 도구
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac-tools"></a>

**서비스**
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 클라우드용으로 구축되었으며 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)는 AWS 리소스를 모델링하고 설정하여 리소스를 관리하는 데 소요되는 시간을 줄이고에서 실행되는 애플리케이션에 더 많은 시간을 할애할 수 있도록 지원합니다 AWS. 원하는 모든 AWS 리소스를 설명하는 템플릿을 생성하면 CloudFormation에서 해당 리소스를 프로비저닝하고 구성합니다.
+  [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html)는 가용성과 확장성이 뛰어난 DNS 웹 서비스입니다.

## 모범 사례
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac-best-practices"></a>

 AWS 설명서를 철저히 검토하여 Route 53의 [블루/그린 배포 전략](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments-overview.html), [GTID 기반 복제](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-replication-gtid.html) 및 [가중치 기반 라우팅 정책에](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-weighted.html) 대한 이해를 높이는 것이 좋습니다. 이 지식은 데이터베이스 마이그레이션을 효과적으로 구현 및 관리하고, 데이터 일관성을 보장하고, 트래픽 라우팅을 최적화하는 데 매우 중요합니다. 이러한 AWS 기능과 모범 사례를 포괄적으로 이해하면 향후 업데이트를 처리하고, 가동 중지 시간을 최소화하고, 복원력이 뛰어나고 안전한 데이터베이스 환경을 유지할 수 있습니다.

이 패턴에 대한 사용 지침은 다음 AWS 설명서를 참조하세요 AWS 서비스 .
+ [Amazon Aurora MySQL의 모범 사례](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html)
+ [CloudFormation  ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) 모범 사례
+ [AWS Lambda 함수 작업 모범 사례](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)
+ [Amazon Route 53 모범 사례](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices.html)

## 에픽
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac-epics"></a>

### 그린 환경 생성
<a name="create-the-green-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 블루 클러스터에서 스냅샷 백업을 생성합니다. | 블루/그린 배포에서 그린 환경은 현재 (블루) 데이터베이스 환경의 새롭고 동일한 버전을 나타냅니다. 그린 환경을 사용하여 업데이트를 안전하게 테스트하고, 변경 사항을 검증하고, 프로덕션 트래픽을 전환하기 전에 안정성을 보장합니다. 라이브 환경의 중단을 최소화하면서 데이터베이스 변경을 구현하기 위한 스테이징 기지 역할을 합니다.그린 환경을 생성하려면 먼저 Aurora MySQL 호환 글로벌 데이터베이스에 기본(블루) 클러스터의 스냅샷을 생성합니다. 이 스냅샷은 그린 환경을 생성하기 위한 기반 역할을 합니다.스냅샷을 생성하려면[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)또는 AWS Command Line Interface (AWS CLI)를 사용하여 스냅샷을 생성할 수 있습니다.<pre>aws rds create-db-cluster-snapshot --db-cluster-snapshot-identifier blue-green-demo --db-cluster-identifier ex-global-cluster --region eu-west-1</pre>다음 단계로 이동하기 전에 마법사가 성공적을 완료되었는지 확인합니다. | DBA | 
| 글로벌 데이터베이스 및 해당 리소스에 대한 CloudFormation 템플릿을 생성합니다. | CloudFormation IaC 생성기는 기존 AWS 리소스에서 CloudFormation 템플릿을 생성하는 데 도움이 됩니다. 이 기능을 사용하여 기존 Aurora MySQL 호환 글로벌 데이터베이스 및 관련 리소스에 대한 CloudFormation 템플릿을 생성합니다. 이 템플릿은 서브넷 그룹, 보안 그룹, 파라미터 그룹 및 기타 설정을 구성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html) | DBA | 
| 그린 환경에 대한 CloudFormation 템플릿을 수정합니다. | 그린 환경의 설정을 반영하도록 CloudFormation 템플릿을 사용자 지정합니다. 여기에는 그린 환경이 블루 클러스터와 독립적으로 작동하도록 리소스 이름 및 식별자 업데이트가 포함됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)`SnapshotIdentifier` 속성을 사용하여 DB 클러스터를 복원하는 경우 `GlobalClusterIdentifier`, `MasterUsername` 또는 `MasterUserPassword`와 같은 속성을 지정하지 마세요. | DBA | 
| CloudFormation 스택을 배포하여 그린 환경에 대한 리소스를 생성합니다. | 이 단계에서는 사용자 지정 CloudFormation 템플릿을 배포하여 그린 환경에 대한 리소스를 생성합니다.CloudFormation 스택 배포[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)CloudFormation은 그린 환경 리소스를 생성하는 프로세스를 시작합니다. 이 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다. | DBA | 
| AWS CloudFormation 스택 결과를 검증하십시오. | CloudFormation 스택 배포가 완료되면 그린 환경이 성공적으로 생성되었는지 확인해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)확인 후 블루 환경에서의 복제를 포함하여 그린 환경을 추가로 설정할 준비가 되었습니다. | DBA | 

### GTID 기반 복제 구성
<a name="configure-gtid-based-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 블루 클러스터에서 GTID 설정을 확인합니다. | GTID는 블루 환경과 그린 환경 간에 데이터를 복제하기 위한 매우 안정적인 방법을 제공합니다. [GTID 기반 복제](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-replication-gtid.html)는 블루 환경의 모든 트랜잭션에 고유 식별자를 할당하여 복원력이 뛰어나고 간소화된 접근 방식을 제공합니다. 이 방법을 사용하면 환경 간의 데이터 동기화가 기존 binlog 복제보다 원활하고 일관되며 관리하기 쉽습니다.복제를 구성하기 전에 블루 클러스터에서 GTID 기반 복제가 제대로 활성화되어 있는지 확인해야 합니다. 이 단계는 블루 환경의 각 트랜잭션이 고유하게 추적되고 그린 환경에서 복제될 수 있도록 보장합니다.GTID가 활성화되었는지 확인하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)이러한 설정을 사용하면 블루 환경의 향후 모든 트랜잭션에 대해 GTID를 추적할 수 있습니다. 이러한 설정을 확인한 후 복제 설정을 시작할 수 있습니다. | DBA | 
| 복제 규칙 생성 | 블루 환경에서 그린 환경으로 데이터를 복제하려면 블루 클러스터에 전용 복제 사용자를 생성해야 합니다. 이 사용자는 복제 프로세스를 관리할 책임이 있습니다.복제 사용자를 설정하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)이제이 사용자에게는 두 환경 간에 데이터를 복제하는 데 필요한 권한이 있습니다. | DBA | 
| 그린 클러스터에서 GTID 기반 복제를 구성합니다. | 다음 단계는 GTID 기반 복제를 위해 그린 클러스터를 구성하는 것입니다. 이 설정을 통해 그린 환경이 블루 환경에서 발생하는 모든 트랜잭션을 지속적으로 미러링할 수 있습니다.그린 클러스터를 구성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html) | DBA | 
| 그린 클러스터에서 복제를 시작합니다. | 이제 복제 태스크를 시작할 수 있습니다. 그린 클러스터에서 명령을 실행합니다.<pre>START SLAVE;</pre>이렇게 하면 그린 환경이 데이터를 동기화하고 블루 환경에서 트랜잭션을 수신 및 적용할 수 있습니다. | DBA | 
| 복제 프로세스를 확인합니다. | 그린 환경이 블루 클러스터에서 데이터를 정확하게 복제하고 있는지 확인하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)모든 표시기가 올바르면 GTID 기반 복제가 원활하게 작동하고 그린 환경이 블루 환경과 완전히 동기화됩니다. | DBA | 

### 읽기 트래픽도 블루에서 그린 클러스터로 전환합니다.
<a name="switch-traffic-from-blue-to-green-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Route 53 가중치 기반 라우팅 정책을 구성합니다. | 블루 환경과 그린 환경 간의 데이터 일관성을 확인한 후 블루 클러스터에서 그린 클러스터로 트래픽을 전환할 수 있습니다. 이 전환은 원활해야 하며 가동 중지 시간을 최소화하고 애플리케이션 데이터베이스의 무결성을 보장해야 합니다. 이러한 요구 사항을 해결하기 위해 DNS 라우팅에 Route 53을 사용하고 Lambda를 사용하여 트래픽 전환을 자동화할 수 있습니다. 또한 잘 정의된 롤백 계획을 사용하면 문제가 발생할 경우 블루 클러스터로 되돌릴 수 있습니다.첫 번째 단계는 Route 53에서 가중치 기반 라우팅을 구성하는 것입니다. 가중치 기반 라우팅을 사용하면 블루 클러스터와 그린 클러스터 간의 트래픽 분산을 제어하고 트래픽을 한 환경에서 다른 환경으로 점진적으로 이동할 수 있습니다.가중치 기반 라우팅을 구성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)가중치 기반 라우팅 정책에 대한 자세한 내용은 [Route 53 설명서를](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-weighted.html) 참조하세요. | DevOps | 
| Lambda 함수를 배포하여 복제 지연을 모니터링합니다. | 그린 환경이 블루 환경과 완전히 동기화되도록 하려면 클러스터 간에 복제 지연을 모니터링하는 Lambda 함수를 배포합니다. 이 함수는 복제 상태, 특히 **Seconds\$1Behind\$1Master** 지표를 확인하여 그린 클러스터가 모든 트래픽을 처리할 준비가 되었는지 확인할 수 있습니다.다음은 사용할 수 있는 Lambda 함수 샘플입니다.<pre>import boto3<br /><br />def check_replication_lag(event, context):<br />    client = boto3.client('rds')<br />    response = client.describe_db_instances(DBInstanceIdentifier='green-cluster-instance')<br />    replication_status = response['DBInstances'][0]['ReadReplicaDBInstanceIdentifiers']<br />    if replication_status:<br />        lag = replication_status[0]['ReplicationLag']<br />        return lag<br />    return -1</pre>이 함수는 복제 지연을 확인하고 값을 반환합니다. 지연이 0이면 그린 클러스터가 블루 클러스터와 완전히 동기화됩니다. | DevOps | 
| Lambda를 사용하여 DNS 가중치 조정을 자동화합니다. | 복제 지연이 0에 도달하면 이제 모든 트래픽을 그린 클러스터로 전환해야 합니다. Route 53의 DNS 가중치를 조정하여 트래픽의 100%를 그린 클러스터로 보내는 다른 Lambda 함수를 사용하여이 전환을 자동화할 수 있습니다.다음은 트래픽 전환을 자동화하는 Lambda 함수의 예입니다.<pre>import boto3<br /><br />def switch_traffic(event, context):<br />    route53 = boto3.client('route53')<br />    lag = check_replication_lag(event, context)<br />    if lag == 0:<br />        response = route53.change_resource_record_sets(<br />            HostedZoneId='YOUR_HOSTED_ZONE_ID',<br />            ChangeBatch={<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': 'db.example.com',<br />                            'Type': 'CNAME',<br />                            'SetIdentifier': 'GreenCluster',<br />                            'Weight': 100,<br />                            'TTL': 60,<br />                            'ResourceRecords': [{'Value': 'green-cluster-endpoint'}]<br />                        }<br />                    },<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': 'db.example.com',<br />                            'Type': 'CNAME',<br />                            'SetIdentifier': 'BlueCluster',<br />                            'Weight': 0,<br />                            'TTL': 60,<br />                            'ResourceRecords': [{'Value': 'blue-cluster-endpoint'}]<br />                        }<br />                    }<br />                ]<br />            }<br />        )<br />        return response</pre>이 함수는 복제 지연을 확인하고 지연이 0일 때 Route 53 DNS 가중치를 업데이트하여 트래픽을 그린 클러스터로 완전히 전환합니다.** **전환 프로세스 중에 블루 클러스터에 쓰기 트래픽이 많으면 전환 중에 쓰기 작업을 일시적으로 일시 중지하는 것이 좋습니다. 이렇게 하면 복제가 포착되고 블루 클러스터와 그린 클러스터 간의 데이터 불일치를 방지할 수 있습니다. | DevOps | 
| 트래픽 스위치를 확인합니다. | Lambda 함수가 DNS 가중치를 조정한 후 모든 트래픽이 그린 클러스터로 전달되고 전환이 성공했는지 확인해야 합니다.확인 방법:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)모든 것이 예상대로 실행되면 트래픽 전환이 완료된 것입니다. | DevOps | 
| 문제가 발생하면 변경 사항을 롤백합니다. | 트래픽 전환 후 문제가 발생할 경우 롤백 계획을 세우는 것이 중요합니다. 필요한 경우 블루 클러스터로 빠르게 되돌리는 방법은 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)이 롤백 계획을 구현하면 예기치 않은 문제가 발생할 경우 사용자의 중단을 최소화할 수 있습니다. | DevOps | 

### GTID 기반 복제 검증 및 중지
<a name="validate-and-stop-gtid-based-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 그린 클러스터에서 GTID 기반 복제를 중지합니다. | 블루 환경에서 그린 환경으로 트래픽을 전환한 후에는 전환의 성공을 검증하고 그린 클러스터가 예상대로 작동하는지 확인해야 합니다. 또한 그린 환경이 이제 기본 데이터베이스 역할을 하므로 블루 클러스터와 그린 클러스터 간의 GTID 기반 복제를 중지해야 합니다. 이러한 작업을 완료하면 환경이 안전하고 간소화되며 지속적인 운영에 최적화됩니다.복제 중지[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)복제를 중지하면 그린 클러스터가 완전히 독립적이 되고 워크로드의 기본 데이터베이스 환경으로 작동합니다. | DBA | 
| 리소스를 정리합니다. | 블루 클러스터에서 그린 클러스터로 마이그레이션하는 동안 생성된 임시 또는 미사용 리소스를 정리하면 환경이 최적화되고 안전하며 비용 효율적으로 유지됩니다. 정리에는 보안 설정 조정, 최종 백업, 불필요한 리소스 폐기가 포함됩니다.리소스를 정리하려면[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/p-automate-blue-green-deployments-aurora-global-databases-iac.html)리소스를 정리하면 안전하고 간소화된 환경을 유지하고 비용을 절감하며 필요한 인프라만 유지할 수 있습니다. | DevOps | 

## 관련 리소스
<a name="p-automate-blue-green-deployments-aurora-global-databases-iac-resources"></a>

CloudFormation:
+ [CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [CloudFormation  ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) 모범 사례
+ [IaC 생성기를 사용하여 기존 리소스에서 템플릿 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/generate-IaC.html)
+ [전체 애플리케이션을 로 가져오기 CloudFormation](https://aws.amazon.com/blogs/devops/import-entire-applications-into-aws-cloudformation/)(AWS 블로그 게시물)

Amazon Aurora
+ [Amazon Aurora 사용 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Welcome.html)
+ [Amazon Aurora DB 클러스터 관리](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_Aurora.html)

블루/그린 배포 상태
+ Aurora용 Amazon RDS 블루/그린 배포 개요

GTID 기반 복제
+ [GTID 기반 복제 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-replication-gtid.html)(Amazon RDS 설명서)

AWS Lambda:
+ [AWS Lambda 개발자 안내서](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [AWS Lambda 함수 작업 모범 사례](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)

Amazon Route 53
+ [Amazon Route 53 개발자 가이드](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html)
+ [가중치 기반 라우팅](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-weighted.html)

MySQL 클라이언트 도구:
+ [PyMySQL](https://github.com/PyMySQL/PyMySQL)

# 에서 Amazon RDS 인스턴스 복제 자동화 AWS 계정
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts"></a>

*Parag Nagwekar 및 Arun Chandapillai, Amazon Web Services*

## 요약
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts-summary"></a>

이 패턴은 AWS Step Functions 및를 사용하여 여러에서 Amazon Relational Database Service(RDS) DB 인스턴스를 복제, 추적 및 롤백 AWS 계정 하는 프로세스를 자동화하는 방법을 보여줍니다 AWS Lambda. 이 자동화를 사용하면 조직의 규모와 상관없이 성능 영향이나 운영 오버헤드 없이 RDS DB 인스턴스의 대규모 복제를 수행할 수 있습니다. 또한이 패턴을 사용하면 조직이 서로 다른 AWS 계정 및 간에 데이터를 복제하고 중복하도록 요구하는 필수 데이터 거버넌스 전략 또는 규정 준수 요구 사항을 준수할 수 있습니다 AWS 리전. Amazon RDS 데이터의 대규모 교차 계정 복제는 비용과 시간이 많이 소요될 수 있는 비효율적이고 오류가 발생하기 쉬운 수동 프로세스입니다. 하지만 이 패턴의 자동화는 교차 계정 복제를 안전하고 효과적이며 효율적으로 수행하는 데 도움이 될 수 있습니다.

## 사전 조건 및 제한 사항
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts-prereqs"></a>

**사전 조건 **
+ 2개 AWS 계정
+ 소스에서 실행 중인 RDS DB 인스턴스 AWS 계정
+ 대상의 RDS DB 인스턴스에 대한 서브넷 그룹 AWS 계정
+ 소스에서 생성 AWS 계정 되고 대상 계정과 공유되는 AWS Key Management Service (AWS KMS) 키(정책 세부 정보에 대한 자세한 내용은이 패턴의 [추가 정보](#automate-the-replication-of-amazon-rds-instances-across-aws-accounts-additional) 섹션을 참조하세요.)
+ 대상 계정 AWS KMS key 의 데이터베이스를 암호화 AWS 계정 하기 위한 대상의

**제한 사항 **
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ Python 3.9( 사용 AWS Lambda)
+ PostgreSQL 11.3, 13.x, and 14.x

## 아키텍처
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts-architecture"></a>

**기술 스택**
+ Amazon Relational Database Service(Amazon RDS)
+ Amazon Simple Notification Service(SNS)
+ AWS Key Management Service (AWS KMS)
+ AWS Lambda
+ AWS Secrets Manager
+ AWS Step Functions

**대상 아키텍처**

다음 다이어그램은 Step Functions를 사용하여 소스 계정(계정 A)에서 대상 계정(계정 B)으로 RDS DB 인스턴스의 예약된 온디맨드 복제를 오케스트레이션하는 아키텍처를 보여줍니다.

![\[Step Functions를 사용하여 소스 및 대상 계정 간에 Amazon RDS DB 인스턴스 복제.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6310ad9b-1b1a-4a67-b684-ef605fef3e87/images/001550bb-cf6b-493d-9de9-0229a43753a1.png)


소스 계정(다이어그램의 계정 A)에서 Step Functions 상태 시스템은 다음을 수행합니다.

1. 계정 A의 RDS DB 인스턴스를 통해 스냅샷을 생성합니다.

1.  AWS KMS key 계정 A의를 사용하여 스냅샷을 복사하고 암호화합니다. 전송 중 암호화를 보장하기 위해 DB 인스턴스 암호화 여부에 관계없이 스냅샷이 암호화됩니다.

1. 계정 B에게 스냅샷에 대한 액세스 권한을 부여하여 계정 B와 DB 스냅샷을 공유합니다.

1. 알림을 SNS 주제로 푸시하면 SNS 주제가 계정 B에서 Lambda 함수를 호출합니다.

대상 계정(다이어그램의 계정 B)에서 Lambda 함수는 Step Functions 상태 시스템을 실행하여 다음을 오케스트레이션합니다.

1. 계정 A의를 사용하여 먼저 데이터를 복호화한 다음 계정 B의를 사용하여 데이터를 암호화하는 동안 계정 A AWS KMS key 의 공유 스냅샷 AWS KMS key 을 계정 B로 복사합니다.

1. Secrets Manager에서 보안 암호를 읽어 현재 DB 인스턴스의 이름을 캡처합니다.

1. 스냅샷에서 AWS KMS key DB 인스턴스를 Amazon RDS의 새 이름과 기본값으로 복원합니다.

1. 새 데이터베이스의 엔드포인트를 읽고 Secrets Manager에서 보안 암호를 새 데이터베이스 엔드포인트로 업데이트한 다음, 나중에 삭제할 수 있도록 이전 DB 인스턴스에 태그를 지정합니다.

1. 데이터베이스의 최신 N 인스턴스를 유지하고 나머지 인스턴스는 모두 삭제합니다.

## 도구
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts-tools"></a>

**AWS 서비스**
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Simple Notification Service(Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및의 수명 주기 동안 리소스를 관리할 수 있습니다 AWS 리전.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)는 Python 애플리케이션, 라이브러리 또는 스크립트를와 통합하는 데 도움이 되는 소프트웨어 개발 키트입니다 AWS 서비스.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 이용하면 코드의 시크릿을 포함해 하드 코딩된 보안 인증을 Secrets Manager에서 프로그래밍 방식으로 시크릿을 검색하도록 하는 API 호출로 바꿀 수 있습니다.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)는 Lambda 함수 및 기타를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [교차 계정 RDS 복제](https://github.com/aws-samples/aws-rds-crossaccount-replication) 리포지토리에서 사용할 수 있습니다.

## 에픽
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts-epics"></a>

### 클릭 한 AWS 계정 번으로에서 RDS DB 인스턴스 복제 자동화
<a name="automate-the-replication-of-rds-db-instances-across-aws-accounts-with-a-single-click"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 계정에 CloudFormation 스택을 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-the-replication-of-amazon-rds-instances-across-aws-accounts.html) | 클라우드 관리자, 클라우드 아키텍트 | 
| 목적지 계정에 CloudFormation 스택을 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-the-replication-of-amazon-rds-instances-across-aws-accounts.html) | 클라우드 아키텍트, DevOps 엔지니어, 클라우드 관리자 | 
| 목적지 계정에서 RDS DB 인스턴스가 생성되었는지 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-the-replication-of-amazon-rds-instances-across-aws-accounts.html) | 클라우드 관리자, 클라우드 아키텍트, DevOps 엔지니어 | 
| SNS 주제에 대한 Lambda 함수를 구독합니다. | 대상 계정 AWS Command Line Interface (계정 B AWS CLI)의 Lambda 함수를 소스 계정(계정 A)의 SNS 주제에 구독하려면 다음() 명령을 실행해야 합니다.계정 A에서 다음  명령을 실행합니다.<pre>aws sns add-permission \<br />--label lambda-access --aws-account-id <DestinationAccount> \<br />--topic-arn <Arn of SNSTopic > \<br />--action-name Subscribe ListSubscriptionsByTopic </pre>계정 B에서 다음  명령을 실행합니다.<pre>aws lambda add-permission \<br />--function-name <Name of InvokeStepFunction> \<br />--source-arn <Arn of SNSTopic > \<br />--statement-id function-with-sns \<br />--action lambda:InvokeFunction \<br />--principal sns.amazonaws.com</pre>계정 B에서 다음  명령을 실행합니다.<pre>aws sns subscribe \<br />--protocol "lambda" \<br />--topic-arn <Arn of SNSTopic> \<br />--notification-endpoint <Arn of InvokeStepFunction></pre> | 클라우드 관리자, 클라우드 아키텍트, DBA | 
| 소스 계정의 RDS DB 인스턴스를 목적지 계정과 동기화합니다. | 소스 계정에서 Step Functions 상태 기계를 시작하여 온디맨드 데이터베이스 복제를 시작합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-the-replication-of-amazon-rds-instances-across-aws-accounts.html)일정에 따라 복제를 자동으로 실행할 수 있도록 스케줄러가 마련되어 있지만 스케줄러는 기본적으로 꺼져 있습니다. 목적지 계정에 있는 CloudFormation 스택의 **리소스** 탭에서 스케줄러에 대한 Amazon CloudWatch 규칙의 이름을 찾을 수 있습니다. CloudWatch Events 규칙을 수정하는 방법에 대한 지침은 CloudWatch 설명서에서 [CloudWatch Events 규칙 삭제 또는 비활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Delete-or-Disable-Rule.html)를 참조하십시오. | 클라우드 아키텍트, DevOps 엔지니어, 클라우드 관리자 | 
| 필요한 경우 데이터베이스를 이전 복사본 중 하나로 롤백합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-the-replication-of-amazon-rds-instances-across-aws-accounts.html) | 클라우드 관리자, DBA, DevOps 엔지니어 | 

## 관련 리소스
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts-resources"></a>
+ [리전 간 읽기 전용 복제본](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.CrossRegionReadReplicas.html)(Amazon RDS 설명서)
+ [블루/그린 배포](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.BlueGreenDeployments.html)(Amazon RDS 설명서)

## 추가 정보
<a name="automate-the-replication-of-amazon-rds-instances-across-aws-accounts-additional"></a>

다음 예제 정책을 사용하여 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": "*"
        }
    ]
}
```

# AWS Lambda 및 Task Scheduler를 사용하여 Amazon EC2에서 실행되는 SQL Server Express 에디션에서 데이터베이스 작업 자동화
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2"></a>

*Subhani Shaik, Amazon Web Services*

## 요약
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-summary"></a>

이 패턴은 SQL Server의 무료 버전인 SQL Server Express 에디션에서 데이터베이스 작업을 예약하고 관리하는 방법을 보여줍니다. 하지만 SQL Server Express 에디션에는 일반적으로 자동화된 데이터베이스 작업을 처리하는 SQL Server Agent 서비스가 없습니다. 이 패턴에서는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행되는 SQL Server Express 에디션에서 데이터베이스 작업을 자동화하기 위한 대안으로 작업 스케줄러와 Lambda를 사용하는 방법을 설명합니다.

[Task Scheduler](https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page)는 일상적인 작업의 자동 실행을 지원하는 기본 제공 Windows 시스템 유틸리티입니다. 자동 작업을 예약하고 관리하는 메커니즘을 제공하므로 반복 프로세스에서 수동 개입이 필요하지 않습니다. [AWS Lambda](https://aws.amazon.com/lambda/)는 기본 인프라를 관리할 필요 없이 이벤트에 대한 응답으로 코드를 자동으로 실행하는 서버리스 컴퓨팅 서비스입니다.

## 사전 조건 및 제한 사항
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ Amazon Virtual Private Cloud(Amazon VPC)로 생성된 가상 프라이빗 클라우드(VPC)
+ Windows Server를 사용하는 Amazon EC2 인스턴스
+ Windows Server를 사용하여 Amazon EC2 인스턴스에 연결된 Amazon Elastic Block Store(Amazon EBS) 볼륨
+ [SQL Server Express 에디션](https://www.microsoft.com/en-us/download/details.aspx?id=101064) 바이너리

**제한 사항 **
+ SQL Server Express 에디션의 기능 제한에 대한 자세한 내용은 [Microsoft 웹 사이트](https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2019?view=sql-server-ver16)를 참조하세요.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전별 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ SQL Server Express 에디션을 사용하는 SQL Server 2016 이상

## 아키텍처
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-architecture"></a>

다음 다이어그램은 SQL Server Express 에디션이 설치된 상태에서 실행 중인 Amazon EC2 인스턴스를 보여줍니다. 인스턴스는 RDP(원격 데스크톱 프로토콜) 클라이언트 또는에서 액세스할 수 있습니다 AWS Systems Manager Session Manager. AWS Key Management Service (AWS KMS)는 Amazon EBS 볼륨의 데이터 암호화를 처리하여 data-at-rest 보안을 보장합니다. 인프라에는 액세스 제어를 제공하고 Lambda 함수 실행에 대한 권한을 관리하는 AWS Identity and Access Management (IAM)도 포함됩니다. Amazon Simple Storage Service(Amazon S3)에는 Lambda 함수가 저장됩니다.

![\[프라이빗 서브넷에 설치된 SQL Server Express 에디션으로 실행되는 Amazon EC2 인스턴스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/3af2174d-bf49-4e43-86f7-34759e5eea84/images/3a37dcb8-10af-42f2-8ff1-fab4f87eb646.png)


## 도구
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-tools"></a>

**AWS 서비스**
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html)는 Amazon EC2 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공합니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)는 완전 관리형 AWS Systems Manager 도구입니다. Session Manager를 사용하여 Amazon EC2 인스턴스, 엣지 디바이스, 온프레미스 서버 및 가상 머신을 관리할 수 있습니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.

**기타 도구**
+ [Microsoft SQL Server Management Studio(SSMS)](https://learn.microsoft.com/en-us/ssms/download-sql-server-management-studio-ssms)는 SQL 서버 구성 요소에 대한 액세스, 구성 및 관리를 포함하여 SQL Server를 관리하기 위한 도구입니다.
+ [Python](https://www.python.org/)은 범용 컴퓨터 프로그래밍 언어입니다. 이를 사용하여 [AWS 클라우드](https://aws.amazon.com/developer/language/python/)에서 애플리케이션을 구축하고, 작업을 자동화하고, 서비스를 개발할 수 있습니다.
+ [작업 스케줄러](https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page)는 컴퓨터에서 일상적인 작업을 자동으로 예약하는 데 사용할 수 있는 Microsoft 도구입니다.

## 모범 사례
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-best-practices"></a>
+ [Amazon EC2 모범 사례](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-best-practices.html)
+ [Amazon EC2에 Microsoft SQL Server 배포를 위한 모범 사례](https://docs.aws.amazon.com/prescriptive-guidance/latest/sql-server-ec2-best-practices/welcome.html)
+ [AWS Lambda 함수 작업 모범 사례](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)
+ [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)

## 에픽
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-epics"></a>

### Amazon EC2 인스턴스 생성 및 SQL Server Express 에디션 설치
<a name="create-an-amazon-ec2-instance-and-install-sql-server-express-edition"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 인스턴스를 배포합니다. | Amazon EC2 인스턴스를 생성하려면 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 열고 Windows Server에 사용할 수 있는 인스턴스 목록에서 [Amazon Machine Image(AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)를 선택합니다.자세한 내용은 AWS 설명서의 [ Amazon EC2 인스턴스 시작을](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html) 참조하세요. | DBA, AWS DevOps | 
| SQL Server Express 에디션을 설치합니다. | SQL Server Express 에디션을 설치하려면 다음 단계를 완료합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html) | DBA, AWS DevOps | 

### 자동 데이터베이스 유지 관리 작업 생성
<a name="create-automated-database-maintenance-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 일상적인 작업을 찾습니다. | 자동화할 일상 작업을 찾습니다. 예를 들어 다음과 같은 작업이 자동화에 적합합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html) | DBA | 
| SQL 스크립트를 준비합니다. | SQL 스크립트를 준비하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html) | DBA | 
| 액세스 권한을 구성합니다. | 액세스 권한을 구성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html) | DBA | 

### 작업 스케줄러를 사용하여 작업 자동화
<a name="automate-tasks-with-task-scheduler"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 배치 파일을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html)<pre>sqlcmd -S servername -U username -P password -i <T-SQL query path.sql></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html)<pre><br />@echo off<br />sqlcmd -S [ServerName] -d [DatabaseName] -U username -P password -i "PathToSQLScript\Script.sql" -o "PathToOutput\Output.txt"</pre> | AWS DevOps, DBA | 
| 작업 스케줄러에서 작업을 생성합니다. | 작업 스케줄러에서 작업을 생성하려면 다음 단계를 따릅니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html)작업을 수동으로 실행하려면 새로 생성된 작업을 마우스 오른쪽 버튼으로 클릭한 다음 **실행**을 선택합니다. | DBA | 
| 작업 상태를 봅니다. | 작업 스케줄러에서 작업 상태를 보려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html) | DBA, AWS DevOps | 

### 를 사용하여 작업 자동화 AWS Lambda
<a name="automate-tasks-with-lamlong"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 솔루션을 구현합니다. | 이 패턴의 솔루션을 구현하려면 다음 단계를 따릅니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.html) | AWS DevOps, DevOps 엔지니어 | 

## 문제 해결
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Lambda 문제 | 사용 시 발생할 수 있는 오류 및 문제에 대한 도움말은 AWS 설명서[의 Lambda 문제 해결을](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html) AWS Lambda참조하세요. | 

## 관련 리소스
<a name="automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2-resources"></a>
+ [Amazon EC2 인스턴스 유형](https://aws.amazon.com/ec2/instance-types/)
+ [AWS Lambda 설명서](https://docs.aws.amazon.com/lambda/latest/dg/with-eventbridge-scheduler.html)
+ [AWS Lambda 요금](https://aws.amazon.com/lambda/pricing/)
+ [개발자용 작업 스케줄러](https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page)(Microsoft 웹 사이트)

# DR Orchestrator Framework를 사용하여 리전 간 장애 조치 및 장애 복구 자동화
<a name="automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework"></a>

*Jitendra Kumar, Pavithra Balasubramanian, Oliver Francis, Amazon Web Services*

## 요약
<a name="automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework-summary"></a>

이 패턴은 [DR Orchestrator Framework](https://docs.aws.amazon.com/prescriptive-guidance/latest/automate-dr-solution-relational-database/dr-orchestrator-framework-overview.html)를 사용하여 오류가 발생하기 쉬운 수동 단계를 오케스트레이션하고 자동화하여 Amazon Web Services(AWS) 리전에서 재해 복구를 수행하는 방법을 설명합니다. 이 패턴에서는 다음 데이터베이스를 다룹니다.
+ Amazon Relational Database Service(Amazon RDS) for MySQL, Amazon RDS for PostgreSQL 또는 Amazon RDS for MariaDB
+ Amazon Aurora MySQL 호환 버전 또는 Amazon Aurora PostgreSQL 호환 버전(중앙 집중식 파일 사용)
+ Amazon ElastiCache (Redis OSS)

DR Orchestrator Framework의 기능을 시연하려면 두 개의 DB 인스턴스 또는 클러스터를 생성합니다. 기본는에 AWS 리전 `us-east-1`있고 보조는에 있습니다`us-west-2`. 이러한 리소스를 생성하려면 [aws-cross-region-dr-databases](https://github.com/aws-samples/aws-cross-region-dr-databases) GitHub 리포지토리의 `App-Stack` 폴더에 있는 AWS CloudFormation 템플릿을 사용합니다.

## 사전 조건 및 제한 사항
<a name="automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework-prereqs"></a>

**일반 사전 조건**
+ 기본 및 보조 모두에 배포된 DR Orchestrator Framework AWS 리전
+ [Amazon Simple Storage Service](https://aws.amazon.com/s3/) 버킷 2개
+ 서브넷 2개와 AWS 보안 그룹이 있는 [Virtual Private Cloud(VPC)](https://aws.amazon.com/vpc/) 

**엔진별 사전 조건**
+ **Amazon Aurora** - 둘 중 하나 이상의 Aurora 글로벌 데이터베이스를 사용할 수 있어야 합니다 AWS 리전. 를 기본 리전`us-east-1`으로 사용하고를 보조 리전`us-west-2`으로 사용할 수 있습니다.
+ **Amazon ElastiCache(Redis OSS)** - ElastiCache 글로벌 데이터 스토어를 두 개로 사용할 수 있어야 합니다 AWS 리전. 기본 리전`use us-east-1`으로를 사용하고 보조 리전`us-west-2`으로를 사용할 수 있습니다.

**Amazon RDS 제한 사항**
+ DR Orchestrator Framework는 장애 조치 또는 장애 복구를 수행하기 전에 복제 지연을 확인하지 않습니다. 복제 지연은 수동으로 확인해야 합니다.
+ 이 솔루션은 읽기 전용 복제본이 하나 있는 기본 데이터베이스 인스턴스를 사용하여 테스트되었습니다. 둘 이상의 읽기 전용 복제본을 사용하려면 프로덕션 환경에서 솔루션을 구현하기 전에 솔루션을 철저히 테스트합니다.

**Aurora 제한 사항**
+ 기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전에 따라 다릅니다. 교차 리전 복제의 기능 및 리전 가용성에 대한 자세한 내용은 [교차 리전 읽기 전용 복제본](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.CrossRegionReadReplicas.html)을 참조하세요.
+ Aurora 글로벌 데이터베이스에는 지원되는 Aurora DB 인스턴스 클래스와 최대 수에 대한 특정 구성 요구 사항이 있습니다 AWS 리전. 자세한 내용은 [Amazon Aurora Global Database의 구성 요구 사항](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-getting-started.html#aurora-global-database.configuration.requirements)을 참조하세요.
+ 이 솔루션은 읽기 전용 복제본이 하나 있는 기본 데이터베이스 인스턴스를 사용하여 테스트되었습니다. 둘 이상의 읽기 전용 복제본을 사용하려면 프로덕션 환경에서 솔루션을 구현하기 전에 솔루션을 철저히 테스트합니다.

**ElastiCache 제한 사항**
+ 글로벌 데이터 스토어 및 ElastiCache 구성 요구 사항의 리전 가용성에 대한 자세한 내용은 ElastiCache 설명서의 [사전 조건 및 제한 사항](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Redis-Global-Datastores-Getting-Started.html)을 참조하세요.

**Amazon RDS p****roduct 버전**

Amazon RDS에서는 다음 엔진 버전을 지원합니다.
+ **MySQL** - Amazon RDS는 [MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html) 8.0 및 MySQL 5.7 버전을 실행하는 DB 인스턴스 MySQL를 지원합니다.
+ **PostgreSQL** - 지원되는 Amazon RDS for PostgreSQL 버전에 대한 자세한 내용은 [사용 가능한 PostgreSQL 데이터베이스 버전](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.DBVersions)을 참조하세요.
+ **MariaDB** – Amazon RDS는 다음 버전의 [MariaDB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html)를 실행하는 DB 인스턴스를 지원합니다.
  + MariaDB 10.11
  + MariaDB 10.6
  + MariaDB 10.5

**Aurora 제품 버전**
+ Amazon Aurora Global Database 전환에는 MySQL 5.7과 호환되는 Aurora MySQL 호환 버전 2.09.1 이상이 필요합니다.

  자세한 내용은 [Amazon Aurora Global Databases에 적용되는 제한 사항](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database.limitations)을 참조하세요.

**ElastiCache(Redis OSS) 제품 버전**

Amazon ElastiCache(Redis OSS)는 다음 Redis 버전을 지원합니다.
+ Redis 7.1(향상된 버전)
+ Redis 7.0(향상된 버전)
+ Redis 6.2(향상된 버전)
+ Redis 6.0(향상된 버전)
+ Redis 5.0.6(확장)

자세한 내용은 [지원되는 ElastiCache(Redis OSS) 버전](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Redis-Global-Datastores-Getting-Started.html)을 참조하세요.

## 아키텍처
<a name="automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework-architecture"></a>

**Amazon RDS**** 아키텍처**

Amazon RDS 아키텍처에는 리소스가 포함되어 있습니다.
+ 클라이언트에 대한 읽기/쓰기 액세스 권한이 있는 기본 리전(`us-east-1`)에서 생성된 기본 Amazon RDS DB 인스턴스
+ 클라이언트에 대한 읽기 전용 액세스 권한이 있는 보조 리전(`us-west-2`)에서 생성된 Amazon RDS 읽기 전용 복제본
+ 기본 리전과 보조 리전 모두에 배포된 DR 오케스트레이터 프레임워크

![\[단일 AWS 계정의 2개 리전 RDS 아키텍처 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8d39561f-924e-4b3e-8175-c5c3cab163bd/images/ad217033-600c-40da-929c-b9f9aecb4c2c.png)


이 다이어그램은 다음을 보여 줍니다.

1. 기본 인스턴스와 보조 인스턴스 간의 비동기 복제

1. 기본 리전의 클라이언트에 대한 읽기/쓰기 액세스

1. 보조 리전의 클라이언트에 대한 읽기 전용 액세스

**Aurora 아키텍처**

Amazon Aurora 아키텍처에는 리소스가 포함되어 있습니다.
+ 액티브 라이터 엔드포인트가 있는 기본 리전(`us-east-1`)에서 생성된 기본 Aurora DB 클러스터
+ 비활성 라이터 엔드포인트가 있는 보조 리전(`us-west-2`)에서 생성된 Aurora DB 클러스터
+ 기본 리전과 보조 리전 모두에 배포된 DR 오케스트레이터 프레임워크

![\[단일 AWS 계정의 2개 리전 Aurora 배포 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8d39561f-924e-4b3e-8175-c5c3cab163bd/images/524ec002-5aa7-47b2-8c8d-6d1a3b535e9e.png)


이 다이어그램은 다음을 보여 줍니다.

1. 기본 클러스터와 보조 클러스터 간의 비동기 복제

1. 액티브 라이터 엔드포인트가 있는 기본 DB 클러스터

1. 비활성 라이터 엔드포인트가 있는 보조 DB 클러스터

**ElastiCache(Redis OSS) 아키텍처**

Amazon ElastiCache(Redis OSS) 아키텍처에는 다음 리소스가 포함되어 있습니다.
+ 두 개의 클러스터로 생성된 ElastiCache(Redis OSS) 글로벌 데이터 스토어:

  1. 기본 리전의 기본 클러스터(`us-east-1`)

  1. 보조 클러스터는 보조 리전(`us-west-2`)에 있습니다.
+ 두 클러스터 간의 TLS 1.2 암호화가 포함된 Amazon 리전 간 링크
+ 기본 및 보조 리전 모두에 배포된 DR 오케스트레이터 프레임워크

![\[Amazon 교차 리전 링크를 사용한 2 리전 ElastiCache 배포 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8d39561f-924e-4b3e-8175-c5c3cab163bd/images/cf6620a0-dd42-4042-8dc2-012bf514ffc0.png)


**자동화 및 규모 조정**

DR Orchestrator Framework는 확장 가능하며 둘 이상의 AWS 데이터베이스의 장애 조치 또는 장애 복구를 병렬로 지원합니다.

다음 페이로드 코드를 사용하여 계정의 여러 AWS 데이터베이스를 장애 조치할 수 있습니다. 이 예제에서는 세 개의 AWS 데이터베이스(Aurora MySQL 호환 또는 Aurora PostgreSQL 호환과 같은 두 개의 글로벌 데이터베이스와 하나의 Amazon RDS for MySQL 인스턴스)가 DR 리전으로 장애 조치합니다.

```
{
  "StatePayload": [
    {
      "layer": 1,
      "resources": [
        {
          "resourceType": "PlannedFailoverAurora",
          "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (MySQL)",
          "parameters": {
            "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-mysql-global-identifier",
            "DBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-cluster-identifier" 
          }
        },
        {
          "resourceType": "PlannedFailoverAurora",
          "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (PostgreSQL)",
          "parameters": {
            "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-postgres-global-identifier",
            "DBClusterIdentifier": "!Import dr-globaldb-cluster-postgres-cluster-identifier" 
          }
        },
        {
          "resourceType": "PromoteRDSReadReplica",
          "resourceName": "Promote RDS for MySQL Read Replica",
          "parameters": {
            "RDSInstanceIdentifier": "!Import rds-mysql-instance-identifier",
            "TargetClusterIdentifier": "!Import rds-mysql-instance-global-arn"
          }
        }         
      ]
    }
  ]
}
```

## 도구
<a name="automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework-tools"></a>

**AWS 서비스**
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [Amazon ElastiCache](https://docs.aws.amazon.com/elasticache/)는 AWS 클라우드에서 분산 인 메모리 캐시 환경을 설정 및 관리하고 규모를 조정할 수 있습니다. 이 패턴은 Amazon ElastiCache(Redis OSS)를 사용합니다.
+ [AWS Lambda](https://aws.amazon.com/lambda/)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다. 이 패턴에서 Lambda 함수는에서 단계를 수행하는 AWS Step Functions 데 사용됩니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다. 이 패턴은 Amazon RDS for MySQL, Amazon RDS for PostgreSQL 및 Amazon RDS for MariaDB를 지원합니다.
+ [AWS SDK for Python (Boto3)](https://aws.amazon.com/sdk-for-python/)를 사용하면 Python 애플리케이션, 라이브러리 또는 스크립트를와 통합할 수 있습니다 AWS 서비스. 이 패턴에서 Boto3 API는 데이터베이스 인스턴스 또는 글로벌 데이터베이스와 통신하는 데 사용됩니다.
+ [AWS Step Functions](https://aws.amazon.com/step-functions/)는 AWS Lambda 함수 및 기타를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다. 이 패턴에서 Step Functions 상태 시스템은 데이터베이스 인스턴스 또는 글로벌 데이터베이스의 리전 간 장애 조치 및 장애 복구를 오케스트레이션하고 실행하는 데 사용됩니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub의 [aws-cross-region-dr-databases](https://github.com/aws-samples/aws-cross-region-dr-databases/tree/main/App-Stack) 리포지토리에서 사용할 수 있습니다.

## 에픽
<a name="automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework-epics"></a>

### DR 오케스트레이터 프레임워크 설치
<a name="install-dr-orchestrator-framework"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| GitHub 리포지토리를 복제합니다. | 리포지토리를 복제하려면 다음 명령을 실행합니다.<pre>git clone https://github.com/aws-samples/aws-cross-region-dr-databases.git</pre> | AWS DevOps, AWS 관리자 | 
| Lambda 함수 코드를 .zip 파일 아카이브에 패키징합니다. | DR Orchestrator Framework 종속성을 포함하도록 Lambda 함수에 대한 아카이브 파일을 생성합니다.<pre>cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts<br /><br />bash scripts/deploy-orchestrator-sh.sh</pre> | 관리자 | 
| S3 버킷 생성 | 최신 구성과 함께 DR Orchestrator Framework를 저장하려면 S3 버킷이 필요합니다. 두 개의 S3 버킷을 생성합니다. 하나는 기본 리전(`us-east-1`)에 있고 다른 하나는 보조 리전()에 있습니다.`us-west-2`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.html)버킷 이름을 고유하게 만들려면 `xxxxxx`를 임의의 값으로 바꿉니다. | 관리자 | 
| 서브넷 및 보안 그룹을 생성합니다. | 기본 리전(`us-east-1`)과 보조 리전() 모두에서 VPC에서 Lambda 함수 배포를 위한 서브넷 2개와 보안 그룹 1개를 `us-west-2`생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.html) | 관리자 | 
| DR Orchestrator 파라미터 파일을 업데이트합니다. | `<YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation` 폴더에서 다음 DR Orchestrator 파라미터 파일을 업데이트합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.html)다음 파라미터 값을 사용하여 `x` 및 `y`를 리소스 이름으로 바꿉니다.<pre>[<br />    {<br />         "ParameterKey": "TemplateStoreS3BucketName",<br />         "ParameterValue": "dr-orchestrator-xxxxxx-us-east-1"<br />    },<br />    {<br />        "ParameterKey": "TemplateVPCId",<br />        "ParameterValue": "vpc-xxxxxx"<br />    },<br />    {<br />        "ParameterKey": "TemplateLambdaSubnetID1",<br />        "ParameterValue": "subnet-xxxxxx"<br />    },<br />    {<br />        "ParameterKey": "TemplateLambdaSubnetID2",<br />        "ParameterValue": "subnet-yyyyyy"<br />    },<br />    {<br />        "ParameterKey": "TemplateLambdaSecurityGroupID",<br />        "ParameterValue": "sg-xxxxxxxxxx"<br />    }<br /> ]</pre> | 관리자 | 
| DR Orchestrator 프레임워크 코드를 S3 버킷에 업로드합니다. | 코드는 로컬 디렉터리보다 S3 버킷에서 더 안전합니다. 모든 파일 및 하위 폴더를 포함한 `DR-Orchestration-artifacts` 디렉터리를 S3 버킷에 업로드합니다.이 코드를 업로드하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.html) | 관리자 | 
| 기본 리전에 DR Orchestrator Framework를 배포합니다. | 기본 리전(`us-east-1`)에 DR Orchestrator Framework를 배포하려면 다음 명령을 실행합니다.<pre>cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation<br /><br />aws cloudformation deploy \<br />--region us-east-1 \<br />--stack-name dr-orchestrator \<br />--template-file Orchestrator-Deployer.yaml \<br />--parameter-overrides file://Orchestrator-Deployer-parameters-us-east-1.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback</pre> | 관리자 | 
| 보조 리전에 DR Orchestrator Framework를 배포합니다. | 보조 리전(`us-west-2`)에서 다음 명령을 실행합니다.<pre>cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation<br /><br />aws cloudformation deploy \<br />--region us-west-2 \<br />--stack-name dr-orchestrator \<br />--template-file Orchestrator-Deployer.yaml \<br />--parameter-overrides file://Orchestrator-Deployer-parameters-us-west-2.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback</pre> | 관리자 | 
| 배포를 확인합니다. |  CloudFormation 명령이 성공적으로 실행되면 다음 출력을 반환합니다.<pre>Successfully created/updated stack - dr-orchestrator</pre>또는 CloudFormation 콘솔로 이동하여 `dr-orchestrator` 스택의 상태를 확인할 수 있습니다. | 관리자 | 

### 데이터베이스 인스턴스 또는 클러스터 생성
<a name="create-the-database-instances-or-clusters"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 서브넷 및 보안 그룹을 생성합니다. | VPC에서 기본(`us-east-1`) 및 보조(`us-west-2`) 리전 모두에서 DB 인스턴스 또는 글로벌 데이터베이스에 대해 서브넷 2개와 보안 그룹 1개를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.html) | 관리자 | 
| 기본 DB 인스턴스 또는 클러스터의 파라미터 파일을 업데이트합니다. | `<YOUR LOCAL GIT FOLDER>/App-Stack` 폴더에서 기본 리전의 파라미터 파일을 업데이트합니다.**Amazon RDS**`RDS-MySQL-parameter-us-east-1.json` 파일에서 `SubnetIds` 및 `DBSecurityGroup`를 생성한 리소스 이름으로 업데이트합니다.<pre>{<br />  "Parameters": {<br />    "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx",<br />    "DBSecurityGroup": "sg-xxxxxxxxxx",<br />    "MySqlGlobalIdentifier":"rds-mysql-instance",<br />    "InitialDatabaseName": "mysqldb",<br />    "DBPortNumber": "3789",<br />    "PrimaryRegion": "us-east-1",<br />    "SecondaryRegion": "us-west-2",<br />    "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId"<br />  }<br />}<br /></pre>**Amazon Aurora** `Aurora-MySQL-parameter-us-east-1.json` 파일에서 `SubnetIds` 및 `DBSecurityGroup`를 생성한 리소스 이름으로 업데이트합니다.<pre>{<br />  "Parameters": {<br />    "SubnetIds": "subnet1-xxxxxx,subnet2-xxxxxx",<br />    "DBSecurityGroup": "sg-xxxxxxxxxx",<br />    "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql",<br />    "DBClusterName":"dbcluster-01",<br />    "SourceDBClusterName":"dbcluster-02",<br />    "DBPortNumber": "3787",<br />    "DBInstanceClass":"db.r5.large",<br />    "InitialDatabaseName": "sampledb",<br />    "PrimaryRegion": "us-east-1",<br />    "SecondaryRegion": "us-west-2",<br />    "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId"<br />  }<br />}</pre>**Amazon ElastiCache (Redis OSS)**`ElastiCache-parameter-us-east-1.json` 파일에서 `SubnetIds` 및 `DBSecurityGroup`를 생성한 리소스 이름으로 업데이트합니다.<pre>{<br />  "Parameters": {<br />    "CacheNodeType": "cache.m5.large",<br />    "DBSecurityGroup": "sg-xxxxxxxxxx",<br />    "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx",<br />    "EngineVersion": "5.0.6",<br />    "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore",<br />    "NumReplicas": "1",<br />    "NumShards": "1",<br />    "ReplicationGroupId": "demo-redis-cluster",<br />    "DBPortNumber": "3788",<br />    "TransitEncryption": "true",<br />    "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId",<br />    "PrimaryRegion": "us-east-1",<br />    "SecondaryRegion": "us-west-2"<br />  }<br />}</pre> | 관리자 | 
| 기본 리전에 DB 인스턴스 또는 클러스터를 배포합니다. | 기본 리전(`us-east-1`)에 인스턴스 또는 클러스터를 배포하려면 데이터베이스 엔진에 따라 다음 명령을 실행합니다.**Amazon RDS**<pre>cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack<br /><br />aws cloudformation deploy \<br />--region us-east-1 \<br />--stack-name rds-mysql-app-stack \<br />--template-file RDS-MySQL-Primary.yaml \<br />--parameter-overrides file://RDS-MySQL-parameter-us-east-1.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback</pre>**Amazon Aurora**<pre>cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack<br /><br />aws cloudformation deploy \<br />--region us-east-1 \<br />--stack-name aurora-mysql-app-stack \<br />--template-file Aurora-MySQL-Primary.yaml \<br />--parameter-overrides file://Aurora-MySQL-parameter-us-east-1.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback</pre>**Amazon ElastiCache (Redis OSS)**<pre>cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack<br /><br />aws cloudformation deploy \<br />--region us-east-1 --stack-name elasticache-ds-app-stack \<br />--template-file ElastiCache-Primary.yaml \<br />--parameter-overrides file://ElastiCache-parameter-us-east-1.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback<br /></pre> CloudFormation 리소스가 성공적으로 배포되었는지 확인합니다. | 관리자 | 
| 보조 DB 인스턴스 또는 클러스터의 파라미터 파일을 업데이트합니다. | `<YOUR LOCAL GIT FOLDER>/App-Stack` 폴더에서 보조 리전의 파라미터 파일을 업데이트합니다.**Amazon RDS**`RDS-MySQL-parameter-us-west-2.json` 파일에서 `SubnetIDs` 및 `DBSecurityGroup`를 생성한 리소스 이름으로 업데이트합니다. 기본 DB 인스턴스`PrimaryRegionKMSKeyArn`에 대한 CloudFormation 스택의 **출력** 섹션에서 `MySQLKmsKeyId` 가져온 값으로를 업데이트합니다.<pre>{<br />  "Parameters": {<br />    "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb",<br />    "DBSecurityGroup": "sg-cccccccccc",<br />    "MySqlGlobalIdentifier":"rds-mysql-instance",<br />    "InitialDatabaseName": "mysqldb",<br />    "DBPortNumber": "3789",<br />    "PrimaryRegion": "us-east-1",<br />    "SecondaryRegion": "us-west-2",<br />    "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId",<br />    "PrimaryRegionKMSKeyArn":"arn:aws:kms:us-east-1:xxxxxxxxx:key/mrk-xxxxxxxxxxxxxxxxxxxxx"<br />  }<br />} </pre>**Amazon Aurora**`Aurora-MySQL-parameter-us-west-2.json` 파일에서 `SubnetIDs` 및를 생성한 리소스 `DBSecurityGroup` 이름으로 업데이트합니다. 기본 DB 인스턴스`PrimaryRegionKMSKeyArn`에 대한 CloudFormation 스택의 **출력** 섹션에서 `AuroraKmsKeyId` 가져온 값으로를 업데이트합니다.<pre>{<br />  "Parameters": {<br />    "SubnetIds": "subnet1-aaaaaaaaa,subnet2-bbbbbbbbb",<br />    "DBSecurityGroup": "sg-cccccccccc",<br />    "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql",<br />    "DBClusterName":"dbcluster-01",<br />    "SourceDBClusterName":"dbcluster-02",<br />    "DBPortNumber": "3787",<br />    "DBInstanceClass":"db.r5.large",<br />    "InitialDatabaseName": "sampledb",<br />    "PrimaryRegion": "us-east-1",<br />    "SecondaryRegion": "us-west-2",<br />    "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId"<br />  }<br />}</pre>**Amazon ElastiCache (Redis OSS)**`ElastiCache-parameter-us-west-2.json` 파일에서 `SubnetIDs` 및 `DBSecurityGroup`를 생성한 리소스 이름으로 업데이트합니다. 기본 DB 인스턴스`PrimaryRegionKMSKeyArn`에 대한 CloudFormation 스택의 **출력** 섹션에서 `ElastiCacheKmsKeyId` 가져온 값으로를 업데이트합니다.<pre>{<br />  "Parameters": {<br />    "CacheNodeType": "cache.m5.large",<br />    "DBSecurityGroup": "sg-cccccccccc",<br />    "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb",<br />    "EngineVersion": "5.0.6",<br />    "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore",<br />    "NumReplicas": "1",<br />    "NumShards": "1",<br />    "ReplicationGroupId": "demo-redis-cluster",<br />    "DBPortNumber": "3788",<br />    "TransitEncryption": "true",<br />    "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId",<br />    "PrimaryRegion": "us-east-1",<br />    "SecondaryRegion": "us-west-2"<br />  }<br />}</pre> | 관리자 | 
| DB 인스턴스 또는 클러스터를 보조 리전에 배포합니다. | 데이터베이스 엔진에 따라 다음 명령을 실행합니다.**Amazon RDS**<pre>cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack<br /><br />aws cloudformation deploy \<br />--region us-west-2 \<br />--stack-name rds-mysql-app-stack \<br />--template-file RDS-MySQL-DR.yaml \<br />--parameter-overrides file://RDS-MySQL-parameter-us-west-2.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback</pre>**Amazon Aurora**<pre>cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack<br /><br />aws cloudformation deploy \<br />--region us-west-2 \<br />--stack-name aurora-mysql-app-stack \<br />--template-file Aurora-MySQL-DR.yaml \<br />--parameter-overrides file://Aurora-MySQL-parameter-us-west-2.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback</pre>**Amazon ElastiCache (Redis OSS)**<pre>cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack<br /><br />aws cloudformation deploy \<br />--region us-west-2 \<br />--stack-name elasticache-ds-app-stack \<br />--template-file ElastiCache-DR.yaml \<br />--parameter-overrides file://ElastiCache-parameter-us-west-2.json \<br />--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \<br />--disable-rollback</pre> CloudFormation 리소스가 성공적으로 배포되었는지 확인합니다. | 관리자 | 

## 관련 리소스
<a name="automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework-resources"></a>
+ [의 데이터베이스에 대한 재해 복구 전략 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-disaster-recovery/welcome.html)(AWS 권고 지침 전략)
+ [에서 관계형 데이터베이스에 대한 DR 솔루션 자동화 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/automate-dr-solution-relational-database/dr-orchestrator-framework-overview.html)(AWS 권장 가이드)
+ [Amazon Aurora Global Database 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html)
+ [글로벌 데이터 스토어 AWS 리전 를 사용하여 간 복제](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Redis-Global-Datastore.html)
+ [에서 관계형 데이터베이스에 대한 DR 솔루션 자동화 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/automate-dr-solution-relational-database/introduction.html)(AWS 권장 가이드)

# Systems Manager와 EventBridge를 사용하여 SAP HANA 데이터베이스를 자동으로 백업
<a name="automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge"></a>

*Ambarish Satarkar, Gaurav Rath, Amazon Web Services*

## 요약
<a name="automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge-summary"></a>

이 패턴은 AWS Systems Manager, Amazon EventBridge, Amazon Simple Storage Service(S3) 및 SAP HANA용 AWS Backint Agent를 사용하여 SAP HANA 데이터베이스 백업을 자동화하는 방법을 설명합니다.

이 패턴은 `BACKUP DATA` 명령을 사용하는 쉘 스크립트 기반 접근 방식을 제공하므로 수많은 시스템에서 각 운영 체제(OS) 인스턴스에 대한 스크립트와 작업 구성을 유지 관리할 필요가 없습니다.


| 
| 
| 참고: 2023년 4월부터 AWS Backup은 Amazon Elastic Compute Cloud(Amazon EC2)에서 SAP HANA 데이터베이스를 지원한다고 발표했습니다. 자세한 내용은 [Amazon EC2 인스턴스 백업의 SAP HANA 데이터베이스](https://docs.aws.amazon.com/aws-backup/latest/devguide/backup-saphana.html)를 참조하십시오.조직의 필요에 따라 AWS Backup 서비스를 사용하여 SAP HANA 데이터베이스를 자동으로 백업하거나 이 패턴을 사용할 수 있습니다. | 
| --- |

## 사전 조건 및 제한 사항
<a name="automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge-prereqs"></a>

**사전 조건 **
+ Systems Manager에 대해 구성된 관리형 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행 중인 상태로 릴리스가 지원되는 기존 SAP HANA 인스턴스
+ Systems Manager Agent(SSM Agent) 2.3.274.0 이상 설치
+ 퍼블릭 액세스가 활성화되지 않은 S3 버킷
+ `SYSTEM`로 명명된 `hdbuserstore` 키
+ 일정에 따라 Automation 런북을 실행하기 위한 AWS Identity and Access Management(IAM) 역할
+ `AmazonSSMManagedInstanceCore` 및 `ssm:StartAutomationExecution` 정책은 Systems Manager 자동화 서비스 역할에 연결됩니다.

**제한 사항 **
+ SAP HANA용 AWS Backint Agent는 중복 제거를 지원하지 않습니다.
+ SAP HANA용 AWS Backint Agent는 데이터 압축을 지원하지 않습니다.

**제품 버전**

AWS Backint Agent 는 다음 운영 체제에서 지원됩니다.
+ SUSE Linux Enterprise Server
+ SUSE Linux Enterprise Server for SAP
+ Red Hat Enterprise Linux for SAP

AWS Backint Agent는 다음 데이터베이스를 지원합니다. 
+ SAP HANA 1.0 SP12(단일 노드 및 다중 노드)
+ SAP HANA 2.0 이상(단일 노드 및 다중 노드)

## 아키텍처
<a name="automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge-architecture"></a>

**대상 기술 스택**
+ AWS Backint Agent
+ Amazon S3
+ AWS Systems Manager
+ Amazon EventBridge
+ SAP HANA

**대상 아키텍처 **

다음 다이어그램은 명령 문서를 사용하여 정기 백업을 예약하는 AWS Backint Agent, S3 버킷, Systems Manager 및 EventBridge를 설치하는 설치 스크립트를 보여줍니다.

![\[정기 백업을 예약하는 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0aa22a27-d100-483d-95f9-c3101f40402c/images/201d2b9a-b88e-4432-82cd-240b81da981e.png)


**자동화 및 규모 조정**
+ Systems Manager Automation 런북을 사용하여 여러 AWS Backint Agent를 설치할 수 있습니다.
+ Systems Manager 런북을 실행할 때마다 대상 선택에 따라 *n*개의 SAP HANA 인스턴스로 규모를 조정할 수 있습니다.
+ EventBridge는 SAP HANA 백업을 자동화할 수 있습니다.

## 도구
<a name="automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge-tools"></a>
+ [SAP HANA용 AWS Backint Agent](https://docs.aws.amazon.com/sap/latest/sap-hana/aws-backint-agent-sap-hana.html)는 기존 워크플로와 통합되어 구성 파일에 지정된 S3 버킷에 SAP HANA 데이터베이스를 백업하는 독립 실행형 애플리케이션입니다. AWS Backint Agent는 SAP HANA 데이터베이스의 전체, 증분 및 차등 백업을 지원합니다. 백업 및 카탈로그가 SAP HANA 데이터베이스에서 AWS Backint Agent로 전송되는 SAP HANA 데이터베이스 서버에서 실행됩니다.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)는 애플리케이션을 다양한 소스의 데이터와 연결하는 데 사용할 수 있는 서버리스 이벤트 버스 서비스입니다. EventBridge는 애플리케이션, 서비스형 소프트웨어(SaaS) 애플리케이션 및 AWS 서비스의 실시간 데이터 스트림을 AWS Lambda 함수, API 대상을 사용하는 HTTP 호출 엔드포인트 또는 다른 계정의 이벤트 버스와 같은 대상으로 제공합니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 객체 스토리지 서비스입니다. Amazon S3를 사용하면 인터넷을 통해 언제 어디서든 원하는 양의 데이터를 저장하고 검색할 수 있습니다.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)는 AWS 인프라를 확인하고 제어할 수 있도록 지원합니다. Systems Manager 콘솔을 사용하여 여러 AWS 서비스의 운영 데이터를 보고 AWS 리소스에서 운영 작업을 자동화할 수 있습니다.

**코드**

이 패턴의 코드는 [aws-backint-automated-backup](https://github.com/aws-samples/aws-backint-automated-backup) GitHub 리포지토리에서 사용할 수 있습니다.

## 에픽
<a name="automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge-epics"></a>

### hdbuserstore 키 시스템 생성
<a name="create-an-hdbuserstore-key-system"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| hdbuserstore 키를 생성하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge.html) | AWS 관리자, SAP HANA 관리자 | 

### AWS Backint Agent 설치
<a name="install-aws-backint-agent"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS Backint Agent 설치. | AWS Backint Agent 설명서에서 [SAP HANA용 AWS Backint Agent 설치 및 구성](https://docs.aws.amazon.com/sap/latest/sap-hana/aws-backint-agent-installing-configuring.html)의 지침을 따르십시오. | AWS 관리자, SAP HANA 관리자 | 

### Systems Manager 명령 문서 생성
<a name="create-the-systems-manager-command-document"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Systems Manager 명령 문서를 생성하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge.html) | AWS 관리자, SAP HANA 관리자 | 

### 정기적인 빈도로 백업 일정 잡기
<a name="schedule-backups-on-a-regular-frequency"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EventBridge를 사용하여 정기 백업을 예약하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge.html)S3 버킷 경로에서 백업 성공을 확인할 수 있습니다. <pre> s3:/<your_bucket_name>/<target folder>/<SID>/usr/sap/<SID>/SYS/global/hdb/backint/DB_<SID>/</pre>SAP HANA 백업 카탈로그에서 백업을 확인할 수도 있습니다. | AWS 관리자, SAP HANA 관리자 | 

## 관련 리소스
<a name="automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge-resources"></a>
+ [SAP HANA용 AWS Backint Agent](https://docs.aws.amazon.com/sap/latest/sap-hana/aws-backint-agent-sap-hana.html)
+ [SAP HANA용 AWS Backint Agent 설치 및 구성](https://docs.aws.amazon.com/sap/latest/sap-hana/aws-backint-agent-installing-configuring.html)

# Python 애플리케이션을 사용하여 Amazon DynamoDB용 PynamoDB DynamoDB 모델 및 CRUD 함수 자동 생성
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application"></a>

*Vijit Vashishtha, Dheeraj Alimchandani, Dhananjay Karanjkar, Amazon Web Services*

## 요약
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-summary"></a>

Amazon DynamoDB 데이터베이스 작업을 효율적으로 수행하기 위해 개체와 생성, 읽기, 업데이트 및 삭제(CRUD) 작업 함수를 요구하는 것이 일반적입니다. PynamoDB는 Python 3을 지원하는 Python 기반 인터페이스입니다. 또한 Amazon DynamoDB 트랜잭션 지원, 자동 속성 값 직렬화 및 역직렬화, Flask 및 Django와 같은 일반적인 Python 프레임워크와의 호환성과 같은 기능도 제공합니다. 이 패턴은 PynamoDB 모델 및 CRUD 작업 함수의 자동 생성을 간소화하는 라이브러리를 제공하여 Python 및 DynamoDB PynamoDB 로 작업하는 개발자에게 도움이 됩니다. 데이터베이스 테이블에 필요한 CRUD 함수를 생성하지만 Amazon DynamoDB 테이블에서 PynamoDB 모델 및 CRUD 함수를 리버스 엔지니어링할 수도 있습니다. 이 패턴은 Python 기반 애플리케이션을 사용하여 데이터베이스 작업을 간소화하도록 설계되었습니다.

다음은이 솔루션의 주요 기능입니다.
+ **JSON 스키마에서 PynamoDB 모델로 **- JSON 스키마 파일을 가져와 Python에서 PynamoDB 모델을 자동으로 생성합니다.
+ **CRUD 함수 생성** - DynamoDB 테이블에서 CRUD 작업을 수행하는 함수를 자동으로 생성합니다.
+ **DynamoDB에서 역설계** - PynamoDB 객체 관계 매핑(ORM)을 사용하여 기존 Amazon DynamoDB 테이블에 대한 PynamoDB 모델 및 CRUD 함수를 역설계합니다.

## 사전 조건 및 제한 사항
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ Python 버전 3.8 이상 [다운로드](https://www.python.org/downloads/) 및 설치
+ Jinja2 버전 3.1.2 이상, [다운로드](https://pypi.org/project/Jinja2/#files) 및 설치됨
+ ORM을 생성하려는 Amazon DynamoDB 테이블
+ AWS Command Line Interface (AWS CLI), [설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)됨
+ PynamoDB 버전 5.4.1 이상 [설치](https://pynamodb.readthedocs.io/en/stable/tutorial.html#installation)

## 아키텍처
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-architecture"></a>

**대상 기술 스택**
+ JSON 스크립트
+ Python 애플리케이션
+ PynamoDB 모델
+ Amazon DynamoDB 데이터베이스 인스턴스

**대상 아키텍처 **

![\[Python 앱을 사용하여 DynamoDB 테이블에서 CRUD 함수 및 PynamoDB 모델을 생성합니다. DynamoDB\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/74cc4c73-5c8b-448d-98fb-b681cfa5f860/images/c2c367d6-d88a-4f49-8571-89160539eb08.png)


1. 입력 JSON 스키마 파일을 생성합니다. 이 JSON 스키마 파일은 및 CRUD 함수에서 PynamoDB 모델을 생성하려는 각 DynamoDB 테이블의 속성을 나타냅니다. PynamoDB 여기에는 다음과 같은 세 가지 중요한 키가 포함되어 있습니다.
   + `name` - 대상 DynamoDB 테이블의 이름입니다.
   + `region` - 테이블이 호스팅 AWS 리전 되는 입니다.
   + `attributes` - [파티션 키](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)(*해시* 속성이라고도 함), [정렬 키](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey), [로컬 보조 인덱스](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html), [글로벌 보조 인덱스](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) 및 [키가 아닌 속성과 같이 대상 테이블의 일부인 속성](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.TablesItemsAttributes)입니다. 이 도구는 애플리케이션이 대상 테이블에서 직접 키 속성을 가져올 때 입력 스키마가 키가 아닌 속성만 제공할 것으로 예상합니다. JSON 스키마 파일에서 속성을 지정하는 방법의 예는이 패턴의 [추가 정보](#automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional) 섹션을 참조하세요.

1. Python 애플리케이션을 실행하고 JSON 스키마 파일을 입력으로 제공합니다.

1. Python 애플리케이션은 JSON 스키마 파일을 읽습니다.

1. Python 애플리케이션은 DynamoDB 테이블에 연결하여 스키마와 데이터 형식을 도출합니다. 애플리케이션은 [describe\$1table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_table.html) 작업을 실행하고 테이블의 키 및 인덱스 속성을 가져옵니다.

1. Python 애플리케이션은 JSON 스키마 파일과 DynamoDB 테이블의 속성을 결합합니다. Jinja 템플릿 엔진을 사용하여 PynamoDB 모델 및 해당 CRUD 함수를 생성합니다.

1. PynamoDB 모델에 액세스하여 DynamoDB 테이블에서 CRUD 작업을 수행합니다.

## 도구
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-tools"></a>

**AWS 서비스**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.

**기타 도구**
+ [Jinja](https://jinja.palletsprojects.com/en/)는 템플릿을 최적화된 Python 코드로 컴파일하는 확장 가능한 템플릿 엔진입니다. 이 패턴은 Jinja를 사용하여 템플릿 내에 자리 표시자 및 로직을 임베딩하여 동적 콘텐츠를 생성합니다.
+ [PynamoDB](https://pynamodb.readthedocs.io/en/stable/)는 Amazon DynamoDB용 Python 기반 인터페이스입니다.
+ [Python](https://www.python.org/)은 범용 컴퓨터 프로그래밍 언어입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [Auto-generate PynamoDB 모델 및 CRUD 함수](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) 리포지토리에서 사용할 수 있습니다. 리포지토리는 컨트롤러 패키지와 템플릿의 두 가지 주요 부분으로 나뉩니다.

*컨트롤러 패키지*

컨트롤러 Python 패키지에는 PynamoDB 모델 및 CRUD 함수를 생성하는 데 도움이 되는 기본 애플리케이션 로직이 포함되어 있습니다. 이는 다음을 포함합니다.
+ `input_json_validator.py` -이 Python 스크립트는 입력 JSON 스키마 파일을 검증하고 대상 DynamoDB 테이블 목록과 각 테이블에 필요한 속성이 포함된 Python 객체를 생성합니다.
+ `dynamo_connection.py` -이 스크립트는 DynamoDB 테이블에 대한 연결을 설정하고 `describe_table` 작업을 사용하여 PynamoDB 모델을 생성하는 데 필요한 속성을 추출합니다.
+ `generate_model.py` -이 스크립트에는 입력 JSON 스키마 파일 및 `describe_table` 작업을 기반으로 PynamoDB 모델을 `GenerateModel` 생성하는 Python 클래스가 포함되어 있습니다. PynamoDB 
+ `generate_crud.py` - JSON 스키마 파일에 정의된 DynamoDB 테이블의 경우이 스크립트는 `GenerateCrud` 작업을 사용하여 Python 클래스를 생성합니다.

*템플릿*

이 Python 디렉터리에는 다음과 같은 Jinja 템플릿이 포함되어 있습니다.
+ `model.jinja` -이 Jinja 템플릿에는 PynamoDB 모델 스크립트를 생성하기 위한 템플릿 표현식이 포함되어 있습니다.
+ `crud.jinja` -이 Jinja 템플릿에는 CRUD 함수 스크립트를 생성하기 위한 템플릿 표현식이 포함되어 있습니다.

## 에픽
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-epics"></a>

### 환경 설정
<a name="set-up-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | 다음 명령을 입력하여 [ PynamoDB 모델 및 CRUD 함수 자동 생성](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) 리포지토리를 복제합니다.<pre>git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git</pre> | 앱 개발자 | 
| Python 환경을 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 

### PynamoDB 모델 및 CRUD 함수 생성
<a name="generate-the-pynamodb-model-and-crud-functions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| JSON 스키마 파일을 수정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 
| Python 애플리케이션을 실행합니다. | 다음 명령을 입력하여 PynamoDB 모델 및 CRUD 함수를 생성합니다. 여기서 `<input_schema.json>`는 JSON 스키마 파일의 이름입니다.<pre>python main.py --file <input_schema.json></pre> | 앱 개발자 | 

### PynamoDB 모델 및 CRUD 함수 확인
<a name="verify-the-pynamodb-model-and-crud-functions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 생성된 PynamoDB 모델을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 
| 생성된 CRUD 함수를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 

## 관련 리소스
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-resources"></a>
+ [Amazon DynamoDB의 핵심 구성 요소](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html)(DynamoDB 설명서)
+ [보조 인덱스를 사용하여 데이터 액세스 개선](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html)(DynamoDB 설명서)

## 추가 정보
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional"></a>

**JSON 스키마 파일의 샘플 속성**

```
[
{
"name": "test_table",
"region": "ap-south-1",
"attributes": [
{
"name": "id",
"type": "UnicodeAttribute"
},
{
"name": "name",
"type": "UnicodeAttribute"
},
{
"name": "age",
"type": "NumberAttribute"
}
]
}
]
```

# Cloud Custodian을 사용하여 Amazon RDS에 대한 퍼블릭 액세스 차단
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian"></a>

*abhay kumar 및 Dwarika Patra, Amazon Web Services*

## 요약
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian-summary"></a>

많은 조직이 여러 클라우드 공급업체에서 워크로드와 서비스를 실행합니다. 이러한 하이브리드 클라우드 환경에서 클라우드 인프라에는 개별 클라우드 공급자가 제공하는 보안 외에도 엄격한 클라우드 거버넌스가 필요합니다. Amazon Relational Database Service(Amazon RDS)와 같은 클라우드 데이터베이스는 액세스 및 권한 취약성을 모니터링해야 하는 중요한 서비스입니다. 보안 그룹을 구성하여 Amazon RDS 데이터베이스에 대한 액세스를 제한할 수 있지만, 두 번째 보호 계층을 추가하여 공개 액세스와 같은 작업을 금지할 수 있습니다. 공개 액세스를 차단하면 일반 데이터 보호 규정(GDPR), 건강보험 이전과 책임에 관한 법(HIPAA), 미국 국립표준기술연구소(NIST), 지불 카드 보안 표준(PCI DSS) 준수에 도움이 됩니다.

Cloud Custodian은 Amazon Web Services(AWS) 리소스에 대한 액세스 제한을 적용하는 데 사용할 수 있는 오픈 소스 규칙 엔진입니다. Cloud Custodian을 사용하면 정의된 보안 및 규정 준수 표준에 따라 환경을 검증하는 규칙을 설정할 수 있습니다. Cloud Custodian을 사용하면 보안 정책, 태그 정책, 미사용 리소스의 가비지 수집 및 비용 관리를 준수하도록 지원하여 클라우드 환경을 관리할 수 있습니다. Cloud Custodian을 사용하면 단일 인터페이스를 사용하여 하이브리드 클라우드 환경에서 거버넌스를 구현할 수 있습니다. 예를 들어 Cloud Custodian 인터페이스를 사용하여 AWS 및 Microsoft Azure와 상호 작용하여 AWS Config AWS 보안 그룹 및 Azure 정책과 같은 메커니즘으로 작업하는 노력을 줄일 수 있습니다.

이 패턴은에서 Cloud Custodian AWS 을 사용하여 Amazon RDS 인스턴스에 대한 퍼블릭 액세스 제한을 적용하는 지침을 제공합니다.

## 사전 조건 및 제한 사항
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ [키 페어](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds-create)
+ AWS Lambda 설치됨

## 아키텍처
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian-architecture"></a>

다음 다이어그램은 정책을 배포하고 AWS Lambda, `CreateDBInstance` 이벤트를 AWS CloudTrail 시작하고, Amazon RDS에서 Lambda 함수 설정을 false`PubliclyAccessible`로 설정하는 Cloud Custodian을 보여줍니다.

![\[AWS의 Cloud Custodian을 사용하여 Amazon RDS 인스턴스에 대한 퍼블릭 액세스를 제한합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/90f9537e-9365-4da2-8a28-da0ff374743c/images/6d04ca3b-6aa4-4c62-ade9-8b7474928c5e.png)


## 도구
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian-tools"></a>

**AWS 서비스**
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)는의 거버넌스, 규정 준수 및 운영 위험을 감사하는 데 도움이 됩니다 AWS 계정.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 셸의 명령을 AWS 서비스 통해와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.

**기타 도구**
+ [Cloud Custodian](https://cloudcustodian.io/)은 많은 조직이 공개 클라우드 계정을 관리하는 데 사용하는 도구와 스크립트를 하나의 오픈소스 도구로 통합합니다. 정책 정의 및 시행에 스테이트리스 규칙 엔진을 사용하고 클라우드 인프라에 대한 지표, 구조화된 결과, 세부 보고 기능을 제공합니다. 서버리스 런타임과 긴밀하게 통합되어 운영 오버헤드를 낮추면서 실시간 수정 및 대응을 제공합니다.

## 에픽
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian-epics"></a>

### 설정 AWS CLI
<a name="set-up-the-cli"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 를 설치합니다 AWS CLI. | 를 설치하려면 [AWS 설명서](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)의 지침을 AWS CLI따릅니다. | 관리자 | 
|  AWS 자격 증명을 설정합니다. |  AWS 리전 및 AWS CLI 사용하려는 출력 형식을 AWS포함하여가 상호 작용하는 데 사용하는 설정을 구성합니다.<pre>$>aws configure<br />AWS Access Key ID [None]: <your_access_key_id><br />AWS Secret Access Key [None]: <your_secret_access_key><br />Default region name [None]:<br />Default output format [None]:</pre>자세한 내용은 [AWS 설명서](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)를 참조하세요. | 관리자 | 
| IAM 역할을 생성합니다. | Lambda 실행 역할을 사용하여 IAM 역할을 생성하려면 다음 명령을 실행합니다.<pre>aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17",		 	 	 "Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}</pre> | DevOps | 

### Cloud Custodian 설정
<a name="set-up-cloud-custodian"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Cloud Custodian을 설치합니다. | 운영 체제 및 환경에 맞게 Cloud Custodian을 설치하려면 [Cloud Custodian 설명서](https://cloudcustodian.io/docs/quickstart/index.html#install-cc)의 지침을 따르십시오. | DevOps 엔지니어 | 
| Cloud Custodian 스키마를 확인합니다. | 정책을 실행할 수 있는 Amazon RDS 리소스의 전체 목록을 보려면 다음 명령을 사용하십시오.<pre>custodian schema aws.rds</pre> | DevOps 엔지니어 | 
| Cloud Custodian 정책을 생성합니다. | YAML 확장을 사용하여 [추가 정보](#block-public-access-to-amazon-rds-by-using-cloud-custodian-additional) 섹션의 *Cloud Custodian 정책 파일*에 있는 코드를 저장합니다. | DevOps 엔지니어 | 
| 공개적으로 액세스할 수 있는 플래그를 변경하기 위한 Cloud Custodian 작업을 정의합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/block-public-access-to-amazon-rds-by-using-cloud-custodian.html) | DevOps 엔지니어 | 
| 모의 실행을 수행합니다. | (선택 사항) 리소스에 대한 작업을 실행하지 않고 정책으로 식별되는 리소스를 확인하려면 다음 명령을 사용합니다.<pre>custodian run -dryrun <policy_name>.yaml -s <output_directory></pre> | DevOps 엔지니어 | 

### 정책 배포하기
<a name="deploy-the-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda를 사용하여 정책을 배포합니다. | 정책을 실행할 Lambda 함수를 생성하려면 다음 명령을 사용하십시오.<pre>custodian run -s policy.yaml</pre>그러면이 정책이 AWS CloudTrail `CreateDBInstance` 이벤트에 의해 시작됩니다.따라서 AWS Lambda 는 기준과 일치하는 인스턴스에 `false` 대해 공개적으로 액세스할 수 있는 플래그를 로 설정합니다. | DevOps 엔지니어 | 

## 관련 리소스
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian-resources"></a>
+ [AWS Lambda 웹 사이트](https://aws.amazon.com/lambda/)
+ [Amazon RDS 웹 사이트](https://aws.amazon.com/rds/)
+ [Cloud Custodian 설명서](https://cloudcustodian.io/docs/quickstart/index.html)

## 추가 정보
<a name="block-public-access-to-amazon-rds-by-using-cloud-custodian-additional"></a>

**Cloud Custodian 정책 YAML 파일**

```
policies:
  - name: "block-public-access"
    resource: rds
    description: |
      This Enforcement blocks public access for RDS instances.
    mode:
      type: cloudtrail
      events:
        - event: CreateDBInstance # Create RDS instance cloudtrail event
          source: rds.amazonaws.com
          ids: requestParameters.dBInstanceIdentifier
      role: arn:aws:iam::1234567890:role/Custodian-compliance-role
    filters:
      - type: event
        key: 'detail.requestParameters.publiclyAccessible'
        value: true
    actions:
      - type: set-public-access
        state: false
```

**c7n 리소스 rds.py 파일**

```
@actions.register('set-public-access')
 class RDSSetPublicAvailability(BaseAction):
 
     schema = type_schema(
         "set-public-access",
         state={'type': 'boolean'})
     permissions = ('rds:ModifyDBInstance',)
 
     def set_accessibility(self, r):
         client = local_session(self.manager.session_factory).client('rds')
         waiter = client.get_waiter('db_instance_available')
         waiter.wait(DBInstanceIdentifier=r['DBInstanceIdentifier'])
         client.modify_db_instance(
             DBInstanceIdentifier=r['DBInstanceIdentifier'],
             PubliclyAccessible=self.data.get('state', False))
 
 
     def process(self, rds):
         with self.executor_factory(max_workers=2) as w:
             futures = {w.submit(self.set_accessibility, r): r for r in rds}
             for f in as_completed(futures):
                 if f.exception():
                     self.log.error(
                         "Exception setting public access on %s  \n %s",
                         futures[f]['DBInstanceIdentifier'], f.exception())
         return rds
```

**Security Hub CSPM 통합**

Cloud Custodian을 [AWS Security Hub CSPM](https://aws.amazon.com/security-hub/)와 통합하여 보안 조사 결과를 전송하고 수정 조치를 시도할 수 있습니다. 자세한 내용은 [와 클라우드 관리자 통합 발표를 참조하세요 AWS Security Hub CSPM](https://aws.amazon.com/blogs/opensource/announcing-cloud-custodian-integration-aws-security-hub/).

# 를 사용하여 Amazon RDS for Microsoft SQL Server에 대한 Windows 인증 구성 AWS Managed Microsoft AD
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad"></a>

*Ramesh Babu Donti, Amazon Web Services*

## 요약
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad-summary"></a>

이 패턴은 AWS Directory Service for Microsoft Active Directory ()를 사용하여 SQL Server 인스턴스용 Amazon Relational Database Service(RDS)에 대한 Windows 인증을 구성하는 방법을 보여줍니다AWS Managed Microsoft AD. Windows 인증을 통해 사용자는 데이터베이스별 사용자 이름과 암호 대신 도메인 자격 증명을 사용하여 RDS 인스턴스에 연결할 수 있습니다.

새 RDS SQL Server 데이터베이스를 생성할 때 또는 기존 데이터베이스 인스턴스에 추가하여 Windows 인증을 활성화할 수 있습니다. 데이터베이스 인스턴스는와 통합되어 SQL Server 데이터베이스에 액세스하는 도메인 사용자에게 중앙 집중식 인증 및 권한 부여를 AWS Managed Microsoft AD 제공합니다.

이 구성은 기존 Active Directory 인프라를 활용하여 보안을 강화하고 도메인 사용자를 위해 별도의 데이터베이스 자격 증명을 관리할 필요가 없습니다.

## 사전 조건 및 제한 사항
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad-prereqs"></a>

**사전 조건 **
+ 적절한 권한이 AWS 계정 있는 활성
+ 다음과 같은 Virtual Private Cloud(VPC)입니다.
  + 구성된 인터넷 게이트웨이 및 라우팅 테이블
  + 퍼블릭 서브넷의 NAT 게이트웨이(인스턴스에 인터넷 액세스가 필요한 경우)
+ AWS Identity and Access Management (IAM) 역할:
  + 다음과 같은 AWS 관리형 정책이 있는 도메인 역할:
    + `AmazonSSMManagedInstanceCore`를 활성화하려면 AWS Systems Manager
    + `AmazonSSMDirectoryServiceAccess` 인스턴스를 디렉터리에 조인할 수 있는 권한을 제공하려면
  + RDS 확장 모니터링 역할(확장 모니터링이 활성화된 경우)
+ 보안 그룹
  + Active Directory 통신 포트를 허용하는 디렉터리 서비스 보안 그룹
  + RDP `3389` 및 도메인 통신을 허용하는 Amazon Elastic Compute Cloud(Amazon EC2) 보안 그룹
  + 승인된 소스`1433`의 SQL Server 포트를 허용하는 RDS 보안 그룹
+ 네트워크 연결:
  + 서브넷 간의 적절한 DNS 확인 및 네트워크 연결

**제한 사항 **
+ RDS for SQL Server AWS Managed Microsoft AD 를 지원하는 AWS 리전 에 대한 자세한 내용은 [리전 및 버전 가용성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServerWinAuth.html#USER_SQLServerWinAuth.RegionVersionAvailability)을 참조하세요.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad-architecture"></a>

**소스 기술 스택  **
+ 온프레미스 Active Directory 또는 AWS Managed Microsoft AD

**대상 기술 스택**
+ Amazon EC2
+ Amazon RDS for Microsoft SQL Server
+ AWS Managed Microsoft AD

**대상 아키텍처 **

![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/e02f6059-6631-46f6-819c-5961af7ba4ae/images/1aa50e3b-b4f6-4d44-9f9e-6cbb248a159c.png)


이 아키텍처에는 다음 이벤트가 포함됩니다.
+ Amazon EC2 인스턴스를 AWS Managed Microsoft AD 도메인에 조인하는 IAM 역할입니다.
+ 데이터베이스 관리 및 테스트를 위한 Amazon EC2 Windows 인스턴스입니다.
+ 가용 영역 전체에서 Amazon RDS 인스턴스 및 내부 리소스를 호스팅하기 위한 프라이빗 서브넷이 있는 Amazon VPC입니다.
+ 보안 그룹을 통한 네트워크 액세스 제어
  + 승인된 소스`1433`에서 SQL Server 포트에 대한 인바운드 액세스를 제어하는 Amazon RDS 보안 그룹입니다.
  + 포트 `3389` 및 도메인 통신 포트를 통해 RDP 액세스를 관리하는 Amazon EC2 보안 그룹입니다.
  + 포트 `53`, , `88` `389`및를 통한 Active Directory 통신을 위한 Directory Services 보안 그룹입니다`445`.
+ AWS Managed Microsoft AD Windows 리소스에 대한 중앙 집중식 인증 및 권한 부여 서비스를 제공합니다.
+ Windows 인증이 활성화된 프라이빗 서브넷의 Amazon RDS for SQL Server 데이터베이스 인스턴스입니다.

## 도구
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad-tools"></a>

**AWS 서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ Amazon Relational Database Service(RDS)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)는 Amazon Elastic Compute Cloud(Amazon EC2), SQL Server용 Amazon Relational Database Service(RDS), Windows File Server용 Amazon FSx AWS 서비스 와 같은 다른와 함께 Microsoft Active Directory(AD)를 사용하는 여러 가지 방법을 제공합니다.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)를 사용하면 디렉터리 인식 워크로드 및 AWS 리소스가에서 Microsoft Active Directory를 사용할 수 있습니다 AWS 클라우드.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.

**기타 서비스**
+ [Microsoft SQL Server Management Studio(SSMS)](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms)는 SQL 서버 구성 요소에 대한 액세스, 구성 및 관리를 포함하여 SQL Server를 관리하기 위한 도구입니다.

## 모범 사례
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad-best-practices"></a>
+ 일반적인 모범 사례는 [Amazon RDS 모범 사례를 참조하세요](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html).

## 에픽
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad-epics"></a>

### 구성 AWS Managed Microsoft AD
<a name="configure-managed-ad"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 디렉터리 유형을 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 디렉터리 정보를 구성합니다. | **디렉터리 정보** 섹션에 필수 정보를 입력하고 선택적 값을 유지합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| VPC 및 서브넷을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 디렉터리를 검토하고 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 

### Amazon DocumentDB용 EC2 인스턴스를 생성하고 구성합니다.
<a name="create-and-configure-an-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Windows용 AMI를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 네트워크 설정 구성 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 스토리지를 구성합니다. | 필요에 따라 Amazon EBS 볼륨을 구성합니다. | DBA, DevOps 엔지니어 | 
| 고급 세부 정보를 구성하고 인스턴스를 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 

### Windows 인증을 사용하여 RDS for SQL Server 생성 및 구성
<a name="create-and-configure-rds-for-sql-server-with-windows-authentication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스를 생성하고 엔진 옵션을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 템플릿(Template)을 선택합니다. | 요구 사항에 맞는 샘플 템플릿을 선택합니다. | DBA, DevOps 엔지니어 | 
| 특정 데이터베이스 설정을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 인스턴스를 구성합니다. | **인스턴스 구성** 섹션의 **DB 인스턴스 클래스**에서 요구 사항에 맞는 인스턴스 크기를 선택합니다. | DBA, DevOps 엔지니어 | 
| 스토리지를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
|  연결 구성 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| Windows 인증을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
|  모니터링을 구성하려면() | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html)다른 프로세스 또는 스레드에서 CPU를 사용하는 방법을 확인하려면 Enhanced Monitoring 지표가 유용합니다. 오류 로그가 활성화된 경우 **오류 로그**를 Amazon CloudWatch로 내보낼 수도 있습니다. | DBA, DevOps 엔지니어 | 
| ​추가 설정을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 비용을 검토하고 데이터베이스를 생성합니다. | **예상 월별 비용** 섹션을 검토한 다음 **데이터베이스 생성을** 선택합니다. | DBA, DevOps 엔지니어 | 

### 데이터베이스 액세스 및 테스트 연결 구성
<a name="configure-database-access-and-test-connections"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Windows 시스템에 연결합니다. | Windows 시스템에 연결하고 SQL Server Management Studio를 시작합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| SSH 연결을 구성합니다. | Windows 인증을 사용하여 데이터베이스 연결을 설정합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| 보안 설정을 구성합니다. | SSMS 버전 20 이상에 필요한 보안 파라미터를 설정합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 
| Windows 로그인을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html)<pre>CREATE LOGIN [<domainName>\<user_name>] FROM WINDOWS;<br />GO</pre> | DBA, DevOps 엔지니어 | 
| Windows 인증 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-windows-authentication-for-amazon-rds-using-microsoft-ad.html) | DBA, DevOps 엔지니어 | 

## 관련 리소스
<a name="configure-windows-authentication-for-amazon-rds-using-microsoft-ad-resources"></a>
+ [생성 AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html)
+ [에 Amazon EC2 Windows 인스턴스 조인 AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html)
+ [Amazon RDS에서 Kerberos 인증에 지원되는 리전 및 DB 엔진](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.html)
+ [SQL Server Management Studio(SSMS)란 무엇인가요?](https://learn.microsoft.com/en-us/ssms/sql-server-management-studio-ssms)

# Amazon DynamoDB에 대한 크로스 계정 액세스 구성
<a name="configure-cross-account-access-to-amazon-dynamodb"></a>

*Shashi Dalmia, Imhoertha Ojior, Esteban Serna Parra, Amazon Web Services*

## 요약
<a name="configure-cross-account-access-to-amazon-dynamodb-summary"></a>

이 패턴은 Amazon DynamoDB에 대한 크로스 계정 액세스 구성 단계를 설명합니다. DynamoDB를 사용하는 워크로드의 경우 [워크로드 격리 전략을](https://aws.amazon.com/solutions/guidance/workload-isolation-on-aws/?did=sl_card&trk=sl_card) 사용하여 보안 위협을 최소화하고 규정 준수 요구 사항을 충족하는 것이 더 일반적입니다. 워크로드 격리 전략을 구현하려면 AWS Identity and Access Management (IAM) 자격 증명 기반 정책을 사용하여 DynamoDB 리소스에 대한 교차 계정 및 교차 리전 액세스가 필요한 경우가 많습니다. 여기에는 IAM 권한을 설정하고 간에 신뢰 관계를 설정하는 작업이 포함됩니다 AWS 계정.

[DynamoDB에 대한 리소스 기반 정책은](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html) 교차 계정 워크로드의 보안 태세를 크게 단순화합니다. 이 패턴은 다른 계정의 DynamoDB 데이터베이스 테이블에 데이터를 쓰 AWS 계정 도록 AWS Lambda 함수를 한에서 구성하는 방법을 보여주는 단계와 샘플 코드를 제공합니다.

## 사전 조건 및 제한 사항
<a name="configure-cross-account-access-to-amazon-dynamodb-prereqs"></a>

**사전 조건 **
+ 2개가 활성 상태입니다 AWS 계정. 이 패턴은 이러한 계정을 *계정 A*와 *계정 B*라고 합니다.
+ AWS Command Line Interface (AWS CLI)를 [설치하고](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 계정 A에 액세스하도록 [구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)하여 DynamoDB 테이블을 생성합니다. 이 패턴의 다른 단계는 IAM, DynamoDB 및 Lambda 콘솔 사용에 대한 지침을 제공합니다. AWS CLI 대신를 사용하려는 경우 두 계정에 모두 액세스하도록 구성합니다.

**제한 사항 **
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="configure-cross-account-access-to-amazon-dynamodb-architecture"></a>

다음 다이어그램은 단일 계정 아키텍처를 보여줍니다. AWS Lambda Amazon Elastic Compute Cloud(Amazon EC2) 및 DynamoDB는 모두 동일한 계정에 있습니다. 이 시나리오에서는 Lambda 함수와 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 DynamoDB에 액세스할 수 있습니다. DynamoDB 테이블에 대한 액세스 권한을 부여하려면 IAM에서 자격 증명 기반 정책을 생성하거나 DynamoDB에서 리소스 기반 정책을 생성할 수 있습니다.

![\[IAM 권한을 사용하여 동일한 계정의 DynamoDB 테이블에 액세스합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/cbb009eb-422d-4833-a1bc-0c571d83c21f.png)


다음 다이어그램은 다중 계정 아키텍처를 보여줍니다. 한의 리소스가 다른 계정의 DynamoDB 테이블에 액세스 AWS 계정 해야 하는 경우 DynamoDB에서 리소스 기반 정책을 설정하여 필요한 액세스 권한을 부여해야 합니다. 예를 들어 다음 다이어그램에서는 리소스 기반 정책을 사용하여 계정 A의 DynamoDB 테이블에 대한 액세스 권한을 계정 B의 Lambda 함수에 부여합니다.

![\[리소스 기반 정책을 사용하여 다른 계정의 DynamoDB 테이블에 액세스합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/9f9165a8-b767-4427-a2ae-31b5b8c83326.png)


이 패턴은 Lambda와 DynamoDB 간의 교차 계정 액세스를 설명합니다. 두 계정 모두에 적절한 권한이 구성된 AWS 서비스 경우 다른에 유사한 단계를 사용할 수 있습니다. 예를 들어 계정 A의 Amazon Simple Storage Service(Amazon S3) 버킷에 대한 Lambda 함수 액세스를 제공하려는 경우 Amazon S3에서 [리소스 기반 정책을](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) 생성하고 계정 B의 [Lambda 실행 역할에](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) 권한을 추가할 수 있습니다.

## 도구
<a name="configure-cross-account-access-to-amazon-dynamodb-tools"></a>

**AWS 서비스**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있도록 인증 및 사용 권한이 있는 사용자를 제어합니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.

**코드**

이 패턴에는 계정 A의 DynamoDB 테이블에서 쓰고 읽도록 계정 B의 Lambda 함수를 구성하는 방법을 설명하는 [추가 정보](#configure-cross-account-access-to-amazon-dynamodb-additional) 섹션의 샘플 코드가 포함되어 있습니다. 코드는 설명 및 테스트 목적으로만 제공됩니다. 프로덕션 환경에서 이 패턴을 구현하는 경우 코드를 참조로 사용하고 사용자 환경에 맞게 사용자 정의하십시오.

## 모범 사례
<a name="configure-cross-account-access-to-amazon-dynamodb-best-practices"></a>
+ DynamoDB 설명서의 [리소스 기반 정책에 대한 모범 사례를](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-best-practices.html) 따릅니다.
+ 최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여하세요. 자세한 내용은 IAM 설명서의 [최소 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) 및 [보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## 에픽
<a name="configure-cross-account-access-to-amazon-dynamodb-epics"></a>

### 계정 B에서 Lambda 함수에 대한 IAM 정책 및 역할 생성
<a name="create-an-iam-policy-and-role-for-the-lam-function-in-account-b"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 계정 B에서 IAM 인라인 정책 생성 | 이 IAM 정책은 계정 A의 DynamoDB 테이블에 대한 [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) 작업을 허용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | 일반 AWS | 
| 계정 A에서 역할을 생성합니다. | 계정 B의 Lambda 함수는이 IAM 역할을 사용하여 계정 A의 DynamoDB 테이블에 액세스합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)역할 생성에 대한 자세한 내용은 [IAM 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)를 참조하십시오. | 일반 AWS | 
|  역할 ARN을 기록해 둡니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | 일반 AWS | 

### 계정 A에서 DynamoDB 테이블 생성
<a name="create-a-ddb-table-in-account-a"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DynamoDB 테이블을 생성합니다. | 다음 AWS CLI 명령을 사용하여 DynamoDB 테이블을 생성합니다.<pre> aws dynamodb create-table \<br />    --table-name Table-Account-A \<br />    --attribute-definitions \<br />      AttributeName=category,AttributeType=S \<br />      AttributeName=item,AttributeType=S \<br />    --key-schema \<br />      AttributeName=category,KeyType=HASH \<br />      AttributeName=item,KeyType=RANGE \<br />    --provisioned-throughput \<br />      ReadCapacityUnits=5,WriteCapacityUnits=5 \<br />    --resource-policy \<br />      '{         <br />          "Version": "2012-10-17",		 	 	 <br />          "Statement": [<br />            {                    <br />               "Sid": "Statement1",<br />               "Effect": "Allow",<br />               "Principal": {<br />                  "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>"<br />               },<br />               "Action": "dynamodb:PutItem",<br />               "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A"<br />            }            <br />         ]<br />      }'</pre>이 코드 샘플에서 다음을 바꿉니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)`--resource-policy` 플래그를 사용하여 `create-table` 문에서 리소스 기반 정책 구성을 지정합니다. 이 정책은 계정 A의 DynamoDB 테이블에 대한 ARN을 참조합니다.테이블 생성에 대한 자세한 내용은 [DynamoDB 설명서](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html)를 참조하십시오. | 일반 AWS | 

### Lambda 함수 생성(계정 B)
<a name="create-a-lam-function-in-account-b"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DynamoDB에 데이터를 쓰기 위해 Lambda 함수를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)Lambda 함수 생성에 대한 자세한 내용은 [Lambda 설명서](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)를 참조하십시오. | 일반 AWS | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 삭제합니다. | 이 패턴으로 생성된 리소스와 관련된 비용이 발생하지 않도록 하려면 다음을 수행하여 이러한 리소스를 삭제합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | 일반 AWS | 

## 문제 해결
<a name="configure-cross-account-access-to-amazon-dynamodb-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Lambda 함수를 생성할 때 `ResourceNotFoundException` 오류가 발생합니다. | 계정 A의 AWS 리전 및 ID를 올바르게 입력했는지 확인합니다. 이는 DynamoDB 테이블에 대한 ARN의 일부입니다. | 

## 관련 리소스
<a name="configure-cross-account-access-to-amazon-dynamodb-resources"></a>
+ [DynamoDB 시작하기](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html)(DynamoDB 설명서)
+ [Lambda 시작하기](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)(AWS Lambda 설명서)
+ [DynamoDB에 리소스 기반 정책 사용](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)(DynamoDB 설명서)
+ [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)(IAM 설명서)
+ [크로스 계정 정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)(IAM 설명서)
+ [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)(IAM 설명서)

## 추가 정보
<a name="configure-cross-account-access-to-amazon-dynamodb-additional"></a>

*샘플 코드*

```
import boto3
from datetime import datetime

dynamodb_client = boto3.client('dynamodb')

def lambda_handler(event, context):
     now = datetime.now().isoformat()
     data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}})
     return data
```

**참고**  
DynamoDB 클라이언트가 인스턴스화되면 테이블 이름 대신 DynamoDB 테이블의 ARN이 제공됩니다. 이는 Lambda 함수가 실행될 때 올바른 DynamoDB 테이블에 연결하기 위해 필요합니다.

# AWS 기반 SQL Server의 Always On 가용성 그룹에서 읽기 전용 라우팅 구성
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws"></a>

*Subhani Shaik, Amazon Web Services*

## 요약
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-summary"></a>

이 패턴은 읽기 전용 워크로드를 기본 복제본에서 보조 복제본으로 넘겨서 SQL Server Always On에서 예비 보조 복제본을 사용하는 방법을 다룹니다.

데이터베이스 미러링에는 일대일 매핑이 있습니다. 보조 데이터베이스를 직접 읽을 수 없으므로 스냅샷을 만들어야 합니다. Always On 가용성 그룹 기능은 Microsoft SQL Server 2012에 도입되었습니다. 이후 버전에서는 읽기 전용 라우팅을 비롯한 주요 기능이 도입되었습니다. Always On 가용성 그룹에서는 복제본 모드를 읽기 전용으로 변경하여 보조 복제본에서 직접 데이터를 읽을 수 있습니다.

Always On 가용성 그룹 솔루션은 고가용성(HA), 재해 복구(DR) 및 데이터베이스 미러링의 대안을 지원합니다. Always On 가용성 그룹은 데이터베이스 수준에서 작동하며 사용자 데이터베이스 집합의 가용성을 극대화합니다.

SQL Server는 읽기 전용 라우팅 메커니즘을 사용하여 들어오는 읽기 전용 연결을 보조 읽기 전용 복제본으로 리디렉션합니다. 이렇게 하려면 연결 문자열에 다음 파라미터와 값을 추가해야 합니다.
+ `ApplicationIntent=ReadOnly`
+ `Initial Catalog=<database name>`

## 사전 조건 및 제한 사항
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-prereqs"></a>

**사전 조건 **
+ Virtual Private Cloud(VPC), 두 개의 가용 영역, 프라이빗 서브넷 및 보안 그룹을 갖춘 활성 AWS 계정
+ [Windows Server Failover Clustering(WSFC)](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/ec2-fci.html)이 인스턴스 수준에 구성되었으며 프라이머리 노드(`WSFCNODE1`)와 `tagechtalk.com`이라고 이름이 지정된 Microsoft Active Directory 디렉터리용 AWS Directory Service의 일부인 세컨더리 노드(`WSFCNODE2`) 사이의 SQL Server 수준에 Always On 가용성 그룹이 구성된 [SQL Server 2019 Enterprise Edition Amazon Machine Image](https://aws.amazon.com/marketplace/pp/prodview-btjcozd246p6w)가 탑재된 Amazon Elastic Compute Cloud(AmazonEC2) 시스템 두 개
+ 보조 복제본에 `read-only`를 허용하도록 구성된 하나 이상의 노드
+ Always On 가용성 그룹에 대하여 이름이 `SQLAG1`인 리스너
+ 두 노드에서 동일한 서비스 계정으로 실행되는 SQL Server 데이터베이스 엔진
+ SQL Server Management Studio(SSMS)
+ 이름이 `test`인 테스트 데이터베이스

**제품 버전**
+ SQL 2014 이상

## 아키텍처
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-architecture"></a>

**대상 기술 스택**
+ Amazon EC2
+ AWS 관리형 Microsoft AD
+ Amazon FSx

**대상 아키텍처**

다음 다이어그램은 Always On 가용성 그룹(AG) 리스너가 연결에 `ApplicationIntent` 파라미터가 포함된 쿼리를 적절한 보조 노드로 리디렉션하는 방법을 보여줍니다.

![\[Amazon EFS를 사용하는 노드 1 WSFC 및 노드 2 WSFC에 대한 두 가용 영역 간의 3단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/19b5937b-da10-4c74-8619-fdcb758f2211/images/f9ba0f89-7dc2-4f4c-8eee-bef56968ad2d.png)


1. Always On 가용성 그룹 리스너로 요청이 전송됩니다.

1. 연결 문자열에 `ApplicationIntent` 파라미터가 없으면 해당 요청이 기본 인스턴스에 전송됩니다.

1. 연결 문자열에 `ApplicationIntent=ReadOnly`가 포함되어 있는 경우 요청은 읽기 전용 라우팅 구성을 사용하는 보조 인스턴스, 즉 Always On 가용성 그룹이 있는 WSFC로 전송됩니다.

## 도구
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-tools"></a>

**서비스**
+ [Microsoft Active Directory용 AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)를 사용하면 디렉터리 인식 워크로드와 AWS 리소스가 AWS 클라우드에서 Microsoft Active Directory를 사용할 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 규모를 조정할 수 있는 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon FSx는](https://docs.aws.amazon.com/fsx/?id=docs_gateway) 업계 표준 연결 프로토콜을 지원하고 AWS 리전 전반에 걸쳐 고가용성 및 복제를 제공하는 파일 시스템을 제공합니다.

**기타 서비스**
+ SQL Management Studio(SSMS)는 SQL Server 인스턴스를 연결, 관리 및 집행하기 위한 도구입니다.
+ sqlcmd는 명령줄 유틸리티입니다.

## 모범 사례
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-best-practices"></a>

Always On 가용성 그룹에 대한 자세한 내용은 [SQL Server 설명서](https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server?view=sql-server-ver16)를 참조하세요.

## 에픽
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-epics"></a>

### 읽기 전용 라우팅 설정
<a name="set-up-read-only-routing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 읽기 전용에 복제본을 업데이트합니다. | 기본 복제본과 보조 복제본을 모두 읽기 전용으로 업데이트하려면 SSMS에서 기본 복제본에 연결하고 *추가 정보* 섹션에서 *1단계* 코드를 실행합니다. | DBA | 
| 라우팅 URL을 생성합니다. | 두 복제본의 라우팅 URL을 생성하려면 *추가 정보* 섹션에서 *2단계* 코드를 실행합니다. 이 코드에서 `tagechtalk.com`은 AWS Managed Microsoft AD 디렉터리의 이름입니다. | DBA | 
| 라우팅 목록을 생성합니다. | 두 복제본의 라우팅 목록을 생성하려면 *추가 정보* 섹션에서 3단계 코드를 실행합니다. | DBA | 
| 라우팅 목록 검증합니다. | SQL Server Management Studio에서 기본 인스턴스에 연결하고 *추가 정보* 섹션의 *4단계* 코드를 실행하여 라우팅 목록을 검증합니다. | DBA | 

### 읽기 전용 라우팅 테스트
<a name="test-the-read-only-routing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| ApplicationIntent 파라미터를 사용하여 연결합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.html) | DBA | 
| 장애 조치를 수행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.html) | DBA | 

### sqlcmd 명령줄 유틸리티를 사용하여 연결
<a name="connect-by-using-the-sqlcmd-command-line-utility"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| sqlcmd를 사용하여 연결합니다. | sqlcmd에서 연결하려면 명령 프롬프트의 *추가 정보* 섹션에서 *5단계* 코드를 실행합니다. 연결된 후 다음 명령을 실행하여 연결된 서버 이름을 표시합니다.<pre>SELECT SERVERPROPERTY('ComputernamePhysicalNetBios') .</pre>출력에는 현재 보조 복제본 이름(`WSFCNODE1`)이 표시됩니다. | DBA | 

## 문제 해결
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 리스너 생성이 실패하면 'WSFC 클러스터가 네트워크 이름 리소스를 온라인 상태로 가져올 수 없습니다'라는 메시지가 표시됩니다. | 자세한 내용은 Microsoft 블로그 게시물 ['WSFC 클러스터가 네트워크 이름 리소스를 온라인 상태로 가져올 수 없습니다'라는 메시지로 리스너 생성 실패](https://techcommunity.microsoft.com/t5/sql-server-support-blog/create-listener-fails-with-message-the-wsfc-cluster-could-not/ba-p/318235)를 참조하세요. | 
| 기타 리스너 문제나 네트워크 액세스 문제를 비롯한 잠재적 문제. | Microsoft 설명서의 [Always On 가용성 그룹 구성 문제 해결(SQL Server)](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/troubleshoot-always-on-availability-groups-configuration-sql-server?view=sql-server-ver16)을 참조하세요. | 

## 관련 리소스
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-resources"></a>
+ [Always On 가용성 그룹에 대한 읽기 전용 라우팅 구성](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-ver16)
+ [Always On 가용성 그룹 구성 문제 해결(SQL Server)](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/troubleshoot-always-on-availability-groups-configuration-sql-server?view=sql-server-ver16)

## 추가 정보
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional"></a>

**단계 1. 복제본을 읽기 전용으로 업데이트**

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY))
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY))
GO
```

**2단계. 라우팅 URL 생성**

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://WSFCNode1.tagechtalk.com:1433'))
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://WSFCNode2.tagechtalk.com:1433'))
GO
```

**단계 3. 라우팅 목록 생성**

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('WSFCNODE2','WSFCNODE1')));
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('WSFCNODE1','WSFCNODE2')));
GO
```

**4단계. 라우팅 목록 검증**

```
SELECT AGSrc.replica_server_name AS PrimaryReplica, AGRepl.replica_server_name AS ReadOnlyReplica, AGRepl.read_only_routing_url AS RoutingURL , AGRL.routing_priority AS RoutingPriority FROM sys.availability_read_only_routing_lists AGRL INNER JOIN sys.availability_replicas AGSrc ON AGRL.replica_id = AGSrc.replica_id INNER JOIN sys.availability_replicas AGRepl ON AGRL.read_only_replica_id = AGRepl.replica_id INNER JOIN sys.availability_groups AV ON AV.group_id = AGSrc.group_id ORDER BY PrimaryReplica
```

**5단계. SQL 명령 유틸리티**

```
sqlcmd -S SQLAG1,1433 -E -d test -K ReadOnly
```

# pgAdmin에서 SSH 터널을 사용하여 연결
<a name="connect-by-using-an-ssh-tunnel-in-pgadmin"></a>

*Jeevan Shetty, Bhanu Ganesh Gudivada, Amazon Web Services*

## 요약
<a name="connect-by-using-an-ssh-tunnel-in-pgadmin-summary"></a>

보안상의 이유로 데이터베이스는 항상 프라이빗 서브넷에 배치하는 것이 좋습니다. Amazon Web Services AWS) 클라우드의 퍼블릭 서브넷에 있는 Amazon Elastic Compute Cloud(Amazon EC2) Bastion Host를 통해 연결하여 데이터베이스에 대한 쿼리를 실행할 수 있습니다. 이를 위해서는 개발자나 데이터베이스 관리자가 일반적으로 사용하는 pGadmin 또는 DBeaver와 같은 소프트웨어를 Amazon EC2 호스트에 설치해야 합니다.

Linux 서버에서 PgAdmin을 실행하고 웹 브라우저를 통해 액세스하려면 추가 종속성 설치, 권한 설정 및 구성이 필요합니다.

대체 솔루션으로는 개발자 또는 데이터베이스 관리자가 PgAdmin을 사용하여 로컬 시스템에서 SSH 터널을 활성화하여 PostgreSQL 데이터베이스에 연결할 수 있습니다. 이 접근 방식에서 PgAdmin은 데이터베이스에 연결하기 전에 퍼블릭 서브넷의 Amazon EC2 호스트를 중간 호스트로 사용합니다. *아키텍처* 섹션의 다이어그램은 설정을 보여줍니다.

**참고**  
PostgreSQL 데이터베이스에 연결된 보안 그룹이 Amazon EC2 호스트의 포트 5432를 통한 연결을 허용하는지 확인하십시오.

## 사전 조건 및 제한 사항
<a name="connect-by-using-an-ssh-tunnel-in-pgadmin-prereqs"></a>

**사전 조건 **
+ 기존 AWS 계정
+ 퍼블릭 서브넷 하나와 인스턴스의 프라이빗 서브넷을 사용하는 Virtual Private Cloud(VPC)
+ 보안 그룹이 연결된 EC2 인스턴스
+ 보안 그룹이 연결된 Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스
+ 터널 설정을 위한 Secure Shell(SSH) 키 페어

**제품 버전**
+ PgAdmin 버전 6.2\$1
+ Amazon Aurora PostgreSQL-Compatible Edition 버전 12.7\$1

## 아키텍처
<a name="connect-by-using-an-ssh-tunnel-in-pgadmin-architecture"></a>

**대상 기술 스택**
+ Amazon EC2
+ Amazon Aurora PostgreSQL-Compatible

**대상 아키텍처**

다음 다이어그램은 PgAdmin을 SSH 터널과 함께 사용하여 인터넷 게이트웨이를 통해 데이터베이스에 연결되는 EC2 인스턴스에 연결하는 것을 보여줍니다.

![\[SSH 터널을 사용한 pgAdmin은 인터넷 게이트웨이를 통해 데이터베이스에 연결되는 EC2 인스턴스에 연결합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7d25d570-5685-4f1a-bef0-212e257cb589/images/4556d930-f9b3-4b65-be5d-d40dd9437d5a.png)


## 도구
<a name="connect-by-using-an-ssh-tunnel-in-pgadmin-tools"></a>

**서비스**
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 규모를 조정할 수 있는 완전관리형의 ACID 준수 관계형 데이터베이스 엔진입니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)‬는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.

**기타 서비스**
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

## 에픽
<a name="connect-by-using-an-ssh-tunnel-in-pgadmin-epics"></a>

### 연결 생성
<a name="create-the-connection"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서버를 생성합니다. | PgAdmin에서 **생성**을 선택한 다음 **서버**를 선택합니다. 서버 대화 상자를 사용하여 서버를 등록하고, 연결을 구성하며, SSH 터널링을 통해 연결하도록 PgAdmin을 설정하는 방법에 대한 추가 도움말은 *관련 리소스* 섹션의 링크를 참조하십시오. | DBA | 
| 서버의 이름을 입력합니다. | **일반** 탭에서 이름을 입력합니다. | DBA | 
| 데이터베이스 세부 정보를 입력합니다. | **연결** 탭에서 다음 값을 입력합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/connect-by-using-an-ssh-tunnel-in-pgadmin.html) | DBA | 
| Amazon EC2 서버 세부 정보를 입력합니다. | **SSH 터널** 탭에서 퍼블릭 서브넷에 있는 Amazon EC2 인스턴스의 세부 정보를 제공합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/connect-by-using-an-ssh-tunnel-in-pgadmin.html) | DBA | 
| 저장하고 연결하십시오. | **저장**을 선택하여 설정을 완료하고 SSH 터널을 사용하여 Aurora PostgreSQL-Compatible 데이터베이스에 연결합니다. | DBA | 

## 관련 리소스
<a name="connect-by-using-an-ssh-tunnel-in-pgadmin-resources"></a>
+ [서버 다이얼로그](https://www.pgadmin.org/docs/pgadmin4/latest/server_dialog.html)
+ [서버에 연결](https://www.pgadmin.org/docs/pgadmin4/latest/connect_to_server.html)

# JSON Oracle 쿼리를 PostgreSQL 데이터베이스 SQL로 변환
<a name="convert-json-oracle-queries-into-postgresql-database-sql"></a>

*Pinesh Singal, Lokesh Gurram, Amazon Web Services*

## 요약
<a name="convert-json-oracle-queries-into-postgresql-database-sql-summary"></a>

온프레미스에서 Amazon Web Services(AWS) 클라우드로 이전하기 위한 이 마이그레이션 프로세스는 AWS Schema Conversion Tool(AWS SCT)를 사용하여 Oracle 데이터베이스의 코드를 PostgreSQL 데이터베이스로 변환합니다. 대부분의 코드는 AWS SCT에 의해 자동으로 변환됩니다. 그러나 JSON 관련 Oracle 쿼리는 자동으로 변환되지 않습니다.

Oracle 12.2 버전부터 Oracle 데이터베이스는 JSON 기반 데이터를 행 기반 데이터로 변환하는 데 도움이 되는 다양한 JSON 함수를 지원합니다. 그러나 AWS SCT는 JSON 기반 데이터를 PostgreSQL에서 지원하는 언어로 자동 변환하지 않습니다.

이 마이그레이션 패턴은 주로 `JSON_OBJECT`, `JSON_ARRAYAGG` 및 `JSON_TABLE`와 같은 함수를 사용하는 JSON 관련 Oracle 쿼리를 Oracle 데이터베이스에서 PostgreSQL 데이터베이스로 수동으로 변환하는 데 중점을 둡니다.

## 사전 조건 및 제한 사항
<a name="convert-json-oracle-queries-into-postgresql-database-sql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 Oracle 데이터베이스 인스턴스(작동 및 실행 중)
+ Amazon Relational Database Service(RDS) for PostgreSQ 또는 Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스 인스턴스(가동 및 실행 중)

**제한 사항 **
+ JSON 관련 쿼리에는 고정된 `KEY` 및 `VALUE` 형식이 필요합니다. 해당 형식을 사용하지 않으면 잘못된 결과가 반환됩니다.
+ JSON 구조를 변경하여 결과 섹션에 새 `KEY` 및 `VALUE` 쌍이 추가되는 경우 SQL 쿼리에서 해당 프로시저 또는 함수를 변경해야 합니다.
+ 일부 JSON 관련 함수는 이전 버전의 Oracle 및 PostgreSQL에서 지원되지만 기능이 더 적습니다.

**제품 버전**
+ Oracle 데이터베이스 버전 12.2 이상
+ Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환 버전 9.5 이상
+ AWS SCT 최신 버전(버전 1.0.664를 사용하여 테스트됨) 

## 아키텍처
<a name="convert-json-oracle-queries-into-postgresql-database-sql-architecture"></a>

**소스 기술 스택  **
+ 버전 19c의 Oracle 데이터베이스 인스턴스

**대상 기술 스택  **
+ 버전 13의 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스 인스턴스

**대상 아키텍처 **

![\[설명은 다이어그램을 따릅니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5e2c3b07-9ef5-417f-b049-bcea58f2c3ec/images/2ff8b00b-8849-4ef1-9be1-579f7b51be10.png)


1. AWS SCT를 JSON 함수 코드와 함께 사용하여 소스 코드를 Oracle에서 PostgreSQL로 변환합니다.

1. 변환 과정에서 PostgreSQL이 지원하는 마이그레이션된 .sql 파일이 생성됩니다.

1. 변환되지 않은 Oracle JSON 함수 코드를 PostgreSQL JSON 함수 코드로 수동으로 변환합니다.

1. 대상 Aurora PostgreSQL 호환 DB 인스턴스에서.sql 파일을 실행합니다.

## 도구
<a name="convert-json-oracle-queries-into-postgresql-database-sql-tools"></a>

**서비스**
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 클라우드용으로 구축되었으며 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [Amazon Relational Database Service(Amazon RDS) for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)은 AWS 클라우드에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

**기타 서비스**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html)는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경입니다.
+ PGAdmin 또는 DBeaver. [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다. [DBeaver](https://dbeaver.io/)는 유니버설 데이터베이스 도구입니다.

## 모범 사례
<a name="convert-json-oracle-queries-into-postgresql-database-sql-best-practices"></a>

Oracle 쿼리는`JSON_TABLE` 함수를 사용할 때 `CAST` 유형을 기본값으로 사용합니다. 두 번 큰 문자(`>>`)를 사용하여 PostgreSQL의 `CAST`도 사용하는 것이 가장 좋습니다.

자세한 내용은 *추가 정보* 섹션의 *Postgres\$1SQL\$1Read\$1JSON*을 참조하세요.

## 에픽
<a name="convert-json-oracle-queries-into-postgresql-database-sql-epics"></a>

### Oracle 및 PostgreSQL 데이터베이스에서 JSON 데이터를 생성합니다.
<a name="generate-the-json-data-in-the-oracle-and-postgresql-databases"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| JSON 데이터를 Oracle 데이터베이스에 저장합니다. | Oracle 데이터베이스에 테이블을 생성하고 `CLOB` 열에 JSON 데이터를 저장합니다.  *추가 정보* 섹션에 있는 *Oracle\$1Table\$1Creation\$1Insert\$1Script*를 사용합니다. | 마이그레이션 엔지니어 | 
| JSON 데이터를 PostgreSQL 데이터베이스에 저장합니다. | PostgreSQL 데이터베이스에서 테이블을 생성하고 `TEXT` 열에 JSON 데이터를 저장합니다. *추가 정보* 섹션에 있는 *Postgres\$1Table\$1Creation\$1Insert\$1Script*를 사용합니다. | 마이그레이션 엔지니어 | 

### JSON을 ROW 형식으로 변환
<a name="convert-the-json-into-row-format"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 데이터베이스의 JSON 데이터를 변환합니다. | Oracle SQL 쿼리를 작성하여 JSON 데이터를 ROW 형식으로 읽어 들입니다. 자세한 내용 및 예제 구문은 *추가 정보* 섹션의 *Oracle\$1SQL\$1Read\$1JSON*을 참조하세요. | 마이그레이션 엔지니어 | 
| PostgreSQL 데이터베이스의 JSON 데이터를 변환합니다. | PostgreSQL 쿼리를 작성하여 JSON 데이터를 ROW 형식으로 읽어 들입니다. 자세한 내용 및 예제 구문은 *추가 정보* 섹션의 *Postgres\$1SQL\$1Read\$1JSON*을 참조하세요. | 마이그레이션 엔지니어 | 

### SQL 쿼리를 사용하여 JSON 데이터를 수동으로 변환하고 출력을 JSON 형식으로 보고합니다.
<a name="manually-convert-the-json-data-using-the-sql-query-and-report-the-output-in-json-format"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle SQL 쿼리에 대한 집계 및 검증을 수행합니다. | JSON 데이터를 수동으로 변환하려면 Oracle SQL 쿼리에서 조인, 집계 및 검증을 수행하고 출력을 JSON 형식으로 보고하세요. *추가 정보* 섹션의 *Oracle\$1SQL\$1JSON\$1Aggregation\$1Join* 아래에 있는 코드를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-json-oracle-queries-into-postgresql-database-sql.html) | 마이그레이션 엔지니어 | 
| Postgres SQL 쿼리에 대한 집계 및 검증을 수행합니다. | JSON 데이터를 수동으로 변환하려면 PostgreSQL 쿼리에서 조인, 집계 및 검증을 수행하고 출력을 JSON 형식으로 보고하세요. *추가 정보* 섹션의 *Postgres\$1SQL\$1JSON\$1Aggregation\$1Join* 아래에 있는 코드를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-json-oracle-queries-into-postgresql-database-sql.html) | 마이그레이션 엔지니어 | 

### 오라클 프로시저를 JSON 쿼리가 포함된 PostgreSQL 함수로 변환
<a name="convert-the-oracle-procedure-into-a-postgresql-function-that-contains-json-queries"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 프로시저의 JSON 쿼리를 행으로 변환합니다. | 예제 Oracle 프로시저의 경우 이전 Oracle 쿼리와 *추가 정보* 섹션의 *Oracle\$1procedure\$1with\$1JSON\$1Query*에 있는 코드를 사용하세요. | 마이그레이션 엔지니어 | 
| JSON 쿼리가 있는 PostgreSQL 함수를 행 기반 데이터로 변환합니다. | 예제 PostgreSQL 함수의 경우 *추가 정보* 섹션의 PostgreSQL 쿼리와 *Postgres\$1function\$1with\$1JSON\$1Query*에 있는 코드를 사용하세요. | 마이그레이션 엔지니어 | 

## 관련 리소스
<a name="convert-json-oracle-queries-into-postgresql-database-sql-resources"></a>
+ [Oracle JSON 함수](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/generation.html)
+ [PostgreSQL JSON 함수](https://www.postgresql.org/docs/13/functions-json.html)
+ [Oracle JSON 함수 예제](https://oracle-base.com/articles/12c/sql-json-functions-12cr2)
+ [PostgreSQL JSON 함수 예제](https://dba.stackexchange.com/questions/69655/select-columns-inside-json-agg)
+ [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)

## 추가 정보
<a name="convert-json-oracle-queries-into-postgresql-database-sql-additional"></a>

Oracle 데이터베이스의 JSON 코드를 PostgreSQL 데이터베이스로 변환하려면 다음 스크립트를 순서대로 사용하세요.

**1: Oracle\$1Table\$1Creation\$1Insert\$1Script**

```
create table aws_test_table(id number,created_on date default sysdate,modified_on date,json_doc clob);

REM INSERTING into EXPORT_TABLE
SET DEFINE OFF;
Insert into aws_test_table (ID,CREATED_ON,MODIFIED_ON,json_doc)
values (1,to_date('02-AUG-2022 12:30:14','DD-MON-YYYY HH24:MI:SS'),to_date('02-AUG-2022 12:30:14','DD-MON-YYYY HH24:MI:SS'),TO_CLOB(q'[{
  "metadata" : {
    "upperLastNameFirstName" : "ABC XYZ",
    "upperEmailAddress" : "abc@gmail.com",
    "profileType" : "P"
  },
  "data" : {
    "onlineContactId" : "032323323",
    "displayName" : "Abc, Xyz",
    "firstName" : "Xyz",
    "lastName" : "Abc",
    "emailAddress" : "abc@gmail.com",
    "productRegistrationStatus" : "Not registered",
    "positionId" : "0100",
    "arrayPattern" : " -'",
    "a]')
|| TO_CLOB(q'[ccount" : {
      "companyId" : "SMGE",
      "businessUnitId" : 7,
      "accountNumber" : 42000,
      "parentAccountNumber" : 32000,
      "firstName" : "john",
      "lastName" : "doe",
      "street1" : "retOdertcaShr ",
      "city" : "new york",
      "postalcode" : "XY ABC",
      "country" : "United States"
    },
    "products" : [
      {
        "appUserGuid" : "i0acc4450000001823fbad478e2eab8a0",
        "id" : "0000000046",
]')
|| TO_CLOB(q'[        "name" : "ProView",
        "domain" : "EREADER",
        "registrationStatus" : false,
        "status" : "11"
      }
    ]
  }
}]'));
Insert into aws_test_table (ID,CREATED_ON,MODIFIED_ON,json_doc) values (2,to_date('02-AUG-2022 12:30:14','DD-MON-YYYY HH24:MI:SS'),to_date('02-AUG-2022 12:30:14','DD-MON-YYYY HH24:MI:SS'),TO_CLOB(q'[{
  "metadata" : {
    "upperLastNameFirstName" : "PQR XYZ",
    "upperEmailAddress" : "pqr@gmail.com",
    "profileType" : "P"
  },
  "data" : {
    "onlineContactId" : "54534343",
    "displayName" : "Xyz, pqr",
    "firstName" : "pqr",
    "lastName" : "Xyz",
    "emailAddress" : "pqr@gmail.com",
    "productRegistrationStatus" : "Not registered",
    "positionId" : "0090",
    "arrayPattern" : " -'",
    "account" : {
      "companyId" : "CARS",
      "busin]')
|| TO_CLOB(q'[essUnitId" : 6,
      "accountNumber" : 42001,
      "parentAccountNumber" : 32001,
      "firstName" : "terry",
      "lastName" : "whitlock",
      "street1" : "UO  123",
      "city" : "TOTORON",
      "region" : "NO",
      "postalcode" : "LKM 111",
      "country" : "Canada"
    },
    "products" : [
      {
        "appUserGuid" : "ia744d7790000016899f8cf3f417d6df6",
        "id" : "0000000014",
        "name" : "ProView eLooseleaf",
      ]')
|| TO_CLOB(q'[  "domain" : "EREADER",
        "registrationStatus" : false,
        "status" : "11"
      }
    ]
  }
}]'));

commit;
```

**2. Postgres\$1Table\$1Creation\$1Insert\$1Script**

```
create table aws_test_pg_table(id int,created_on date ,modified_on date,json_doc text);
insert into aws_test_pg_table(id,created_on,modified_on,json_doc)
values(1,now(),now(),'{
  "metadata" : {
    "upperLastNameFirstName" : "ABC XYZ",
    "upperEmailAddress" : "abc@gmail.com",
    "profileType" : "P"
  },
  "data" : {
    "onlineContactId" : "032323323",
    "displayName" : "Abc, Xyz",
    "firstName" : "Xyz",
    "lastName" : "Abc",
    "emailAddress" : "abc@gmail.com",
    "productRegistrationStatus" : "Not registered",
    "positionId" : "0100",
    "arrayPattern" : " -",
    "account" : {
      "companyId" : "SMGE",
      "businessUnitId" : 7,
      "accountNumber" : 42000,
      "parentAccountNumber" : 32000,
      "firstName" : "john",
      "lastName" : "doe",
      "street1" : "retOdertcaShr ",
      "city" : "new york",
      "postalcode" : "XY ABC",
      "country" : "United States"
    },
    "products" : [
      {
        "appUserGuid" : "i0acc4450000001823fbad478e2eab8a0",
        "id" : "0000000046",
        "name" : "ProView",
        "domain" : "EREADER",
        "registrationStatus" : false,
        "status" : "11"
      }
    ]
  }
}');


insert into aws_test_pg_table(id,created_on,modified_on,json_doc)
values(2,now(),now(),'{
  "metadata" : {
    "upperLastNameFirstName" : "PQR XYZ",
    "upperEmailAddress" : "pqr@gmail.com",
    "profileType" : "P"
  },
  "data" : {
    "onlineContactId" : "54534343",
    "displayName" : "Xyz, pqr",
    "firstName" : "pqr",
    "lastName" : "Xyz",
    "emailAddress" : "a*b**@h**.k**",
    "productRegistrationStatus" : "Not registered",
    "positionId" : "0090",
    "arrayPattern" : " -",
    "account" : {
      "companyId" : "CARS",
      "businessUnitId" : 6,
      "accountNumber" : 42001,
      "parentAccountNumber" : 32001,
      "firstName" : "terry",
      "lastName" : "whitlock",
      "street1" : "UO  123",
      "city" : "TOTORON",
      "region" : "NO",
      "postalcode" : "LKM 111",
      "country" : "Canada"
    },
    "products" : [
      {
        "appUserGuid" : "ia744d7790000016899f8cf3f417d6df6",
        "id" : "0000000014",
        "name" : "ProView eLooseleaf",
        "domain" : "EREADER",
        "registrationStatus" : false,
        "status" : "11"
      }
    ]
  }
}');
```

**3. Oracle\$1SQL\$1Read\$1JSON**

다음 코드 블록은 Oracle JSON 데이터를 행 형식으로 변환하는 방법을 보여줍니다.

*쿼리 및 구문 예제*

```
SELECT   JSON_OBJECT( 
 'accountCounts' VALUE JSON_ARRAYAGG( 
            JSON_OBJECT( 
                'businessUnitId' VALUE business_unit_id, 
                        'parentAccountNumber' VALUE parent_account_number, 
                        'accountNumber' VALUE account_number, 
                        'totalOnlineContactsCount' VALUE online_contacts_count, 
                        'countByPosition' VALUE 
                    JSON_OBJECT( 
                        'taxProfessionalCount' VALUE tax_count, 
                        'attorneyCount' VALUE attorney_count,
                        'nonAttorneyCount' VALUE non_attorney_count, 
                        'clerkCount' VALUE clerk_count
                               ) ) ) ) FROM 
    (SELECT   tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number, 
            SUM(1) online_contacts_count, 
            SUM(CASE WHEN tab_data.position_id = '0095' THEN  1 ELSE 0 END) tax_count, 
            SUM(CASE    WHEN tab_data.position_id = '0100' THEN 1 ELSE 0 END) attorney_count, 
            SUM(CASE    WHEN tab_data.position_id = '0090' THEN 1 ELSE 0 END) non_attorney_count,                                       
            SUM(CASE    WHEN tab_data.position_id = '0050' THEN 1 ELSE 0 END) clerk_count 
        FROM aws_test_table scco,JSON_TABLE ( json_doc, '$' ERROR ON ERROR         COLUMNS ( 
          parent_account_number NUMBER PATH
           '$.data.account.parentAccountNumber',
            account_number NUMBER PATH '$.data.account.accountNumber',
            business_unit_id NUMBER PATH '$.data.account.businessUnitId',
            position_id VARCHAR2 ( 4 ) PATH '$.data.positionId'    )
            ) AS tab_data 
            INNER JOIN JSON_TABLE ( '{ 
        "accounts": [{ 
          "accountNumber": 42000, 
          "parentAccountNumber": 32000, 
          "businessUnitId": 7 
        }, { 
          "accountNumber": 42001, 
          "parentAccountNumber": 32001, 
          "businessUnitId": 6 
        }] 
      }', '$.accounts[*]' ERROR ON ERROR 
      COLUMNS (
      parent_account_number PATH '$.parentAccountNumber',
      account_number PATH '$.accountNumber',
      business_unit_id PATH '$.businessUnitId')
      ) static_data 
      ON ( static_data.parent_account_number = tab_data.parent_account_number 
           AND static_data.account_number = tab_data.account_number  
           AND static_data.business_unit_id = tab_data.business_unit_id ) 
        GROUP BY 
            tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number );
```

JSON 문서는 데이터를 컬렉션으로 저장합니다. 각 컬렉션에는 `KEY` 및 `VALUE` 쌍이 있을 수 있습니다. 모든 `VALUE`는 `KEY` 중첩과 `VALUE` 쌍을 가질 수 있습니다. 다음 표는 JSON 문서의 `VALUE`에서 특정 내용을 읽는 방법에 대한 정보를 제공합니다.


| 
| 
| 키 | 값을 가져오는 데 사용할 계층 또는 경로 | 값 | 
| --- |--- |--- |
| `profileType` | `metadata` -> `profileType` | "P" | 
| `positionId` | `data` -> `positionId` | "0100" | 
| `accountNumber` | `data` -> 계정 -> `accountNumber` | 42000 | 

이전 표에서는 `KEY` `profileType`이 `metadata` `KEY`의 `VALUE`입니다. `KEY` `positionId`는 `data` `KEY`의 `VALUE`입니다. `KEY` `accountNumber`는 `account` `KEY`의 `VALUE`이고, `account` `KEY`는 `data` `KEY`의 `VALUE`입니다.

*예제 JSON 문서*

```
{
  "metadata" : {
    "upperLastNameFirstName" : "ABC XYZ",
    "upperEmailAddress" : "abc@gmail.com",
"profileType" : "P"
  },
  "data" : {
    "onlineContactId" : "032323323",
    "displayName" : "Abc, Xyz",
    "firstName" : "Xyz",
    "lastName" : "Abc",
    "emailAddress" : "abc@gmail.com",
    "productRegistrationStatus" : "Not registered",
"positionId" : "0100",
    "arrayPattern" : " -",
    "account" : {
      "companyId" : "SMGE",
      "businessUnitId" : 7,
"accountNumber" : 42000,
      "parentAccountNumber" : 32000,
      "firstName" : "john",
      "lastName" : "doe",
      "street1" : "retOdertcaShr ",
      "city" : "new york",
      "postalcode" : "XY ABC",
      "country" : "United States"
    },
    "products" : [
      {
        "appUserGuid" : "i0acc4450000001823fbad478e2eab8a0",
        "id" : "0000000046",
        "name" : "ProView",
        "domain" : "EREADER",
        "registrationStatus" : false,
        "status" : "11"
      }
    ]
  }
}
```

*JSON 문서에서 선택한 필드를 가져오는 데 사용되는 SQL 쿼리*

```
select parent_account_number,account_number,business_unit_id,position_id from aws_test_table aws,JSON_TABLE ( json_doc, '$' ERROR ON ERROR
COLUMNS (
parent_account_number NUMBER PATH '$.data.account.parentAccountNumber',
account_number NUMBER PATH '$.data.account.accountNumber',
business_unit_id NUMBER PATH '$.data.account.businessUnitId',
position_id VARCHAR2 ( 4 ) PATH '$.data.positionId'
)) as sc
```

이전 쿼리에서는 `JSON_TABLE`은 JSON 데이터를 행 형식으로 변환하는 Oracle의 기본 제공 함수입니다. JSON\$1TABLE 함수에는 JSON 형식의 파라미터가 예상됩니다.

`COLUMNS`의 모든 항목에는 `PATH`가 미리 정의되어 있으며 주어진 `KEY`에 적합한 `VALUE`가 행 형식으로 반환됩니다.

*이전 쿼리의 결과*


| 
| 
| PARENT\$1ACCOUNT\$1NUMBER | ACCOUNT\$1NUMBER | BUSINESS\$1UNIT\$1ID | POSITION\$1ID | 
| --- |--- |--- |--- |
| 32000 | 42000 | 7 | 0100 | 
| 32001 | 42001 | 6 | 0090 | 

**4. Postgres\$1SQL\$1Read\$1JSON**

** ***쿼리 및 구문 예제*

```
select *
from ( 
select (json_doc::json->'data'->'account'->>'parentAccountNumber')::INTEGER as parentAccountNumber, 
(json_doc::json->'data'->'account'->>'accountNumber')::INTEGER as accountNumber, 
(json_doc::json->'data'->'account'->>'businessUnitId')::INTEGER as businessUnitId, 
(json_doc::json->'data'->>'positionId')::VARCHAR as positionId 
from aws_test_pg_table) d ;
```

Oracle에서 `PATH`는 특정 `KEY` 및 `VALUE`를 식별하는 데 사용됩니다. 그러나 PostgreSQL은 JSON에서 `KEY` 및 `VALUE`를 위한 `HIERARCHY` 모델을 사용합니다. `Oracle_SQL_Read_JSON`에 언급된 것과 동일한 JSON 데이터가 다음 예제에 사용됩니다.

*유형이 CAST인 SQL 쿼리는 허용되지 않습니다*

(`CAST`를 강제로 입력하면 구문 오류가 발생하여 쿼리가 실패합니다.)

```
select *
from ( 
select (json_doc::json->'data'->'account'->'parentAccountNumber') as parentAccountNumber, 
(json_doc::json->'data'->'account'->'accountNumber')as accountNumber, 
(json_doc::json->'data'->'account'->'businessUnitId') as businessUnitId, 
(json_doc::json->'data'->'positionId')as positionId 
from aws_test_pg_table) d ;
```

하나 이상의 연산자(`>`)를 사용하면 해당 `KEY`에 대해 `VALUE`이 정의된 값이 반환됩니다. 예를 들어, `KEY`: `positionId` 및 `VALUE`: `"0100"`입니다.

하나 이상의 연산자(`>`)를 사용할 때는 유형 `CAST`를 사용할 수 없습니다.

*유형이 CAST인 SQL 쿼리는 허용됩니다*

```
select *
from ( 
select (json_doc::json->'data'->'account'->>'parentAccountNumber')::INTEGER as parentAccountNumber, 
(json_doc::json->'data'->'account'->>'accountNumber')::INTEGER as accountNumber, 
(json_doc::json->'data'->'account'->>'businessUnitId')::INTEGER as businessUnitId, 
(json_doc::json->'data'->>'positionId')::varchar as positionId 
from aws_test_pg_table) d ;
```

`CAST`유형을 사용하려면 double greater-than 연산자를 사용해야 합니다. 하나 이상의 큰 연산자를 사용하는 경우 쿼리는 정의된 `VALUE`(예: `KEY`는 `positionId` 및 `VALUE`는 `"0100"`)를 반환합니다. 두 배 큰 연산자(`>>`)를 사용하면 `KEY` (예: `KEY`: `positionId` 및 `VALUE`: `0100`, 큰따옴표 제외)에 대해 정의된 실제 값이 반환됩니다.

이전 케이스에서 `parentAccountNumber`은 `INT`에 대한 `CAST` 타입, `accountNumber`은 `INT`에 대한 `CAST` 타입, `businessUnitId`는 `INT`에 대한 `CAST` 타입, `positionId`는 `VARCHAR`에 대한 `CAST` 타입입니다.

다음 표에는 단일 초과 연산자(`>`)와 두 배 큰 연산자(`>>`)의 역할을 설명하는 쿼리 결과가 나와 있습니다.

첫 번째 테이블 테이블의 쿼리는 단일 대보다 큰 연산자(`>`)를 사용합니다. 각 열은 JSON 유형이며 다른 데이터 유형으로 변환할 수 없습니다.


| 
| 
| parentAccountNumber | accountNumber | businessUnitId | positionId | 
| --- |--- |--- |--- |
| 2003565430 | 2003564830 | 7 | "0100" | 
| 2005284042 | 2005284042 | 6 | "0090" | 
| 2000272719 | 2000272719 | 1 | "0100" | 

두 번째 테이블에서 쿼리는 두 배 큰 연산자(`>>`)를 사용합니다. 각 열은 열 값을 기반으로 하는 `CAST` 유형을 지원합니다. 예를 들어 이 경우에는 `INTEGER`입니다.


| 
| 
| parentAccountNumber | accountNumber | businessUnitId | positionId | 
| --- |--- |--- |--- |
| 2003565430 | 2003564830 | 7 | 0100 | 
| 2005284042 | 2005284042 | 6 | 0090 | 
| 2000272719 | 2000272719 | 1 | 0100 | 

**5. Oracle\$1SQL\$1JSON\$1Aggregation\$1Join**

*쿼리 예제*

```
SELECT 
    JSON_OBJECT( 
        'accountCounts' VALUE JSON_ARRAYAGG( 
            JSON_OBJECT( 
                'businessUnitId' VALUE business_unit_id, 
                        'parentAccountNumber' VALUE parent_account_number, 
                        'accountNumber' VALUE account_number, 
                        'totalOnlineContactsCount' VALUE online_contacts_count, 
                        'countByPosition' VALUE 
                    JSON_OBJECT( 
                        'taxProfessionalCount' VALUE tax_count, 
                        'attorneyCount' VALUE attorney_count, 
                        'nonAttorneyCount' VALUE non_attorney_count, 
                        'clerkCount' VALUE clerk_count
                               ) ) ) ) 
FROM 
    (SELECT 
            tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number, 
            SUM(1) online_contacts_count, 
            SUM(CASE WHEN tab_data.position_id = '0095' THEN  1 ELSE 0 END) tax_count, 
            SUM(CASE    WHEN tab_data.position_id = '0100' THEN 1 ELSE 0 END) attorney_count,                                                       
            SUM(CASE    WHEN tab_data.position_id = '0090' THEN 1 ELSE 0 END) non_attorney_count,                                                   
            SUM(CASE    WHEN tab_data.position_id = '0050' THEN 1 ELSE 0 END) clerk_count                                                           
        FROM aws_test_table scco,JSON_TABLE ( json_doc, '$' ERROR ON ERROR         COLUMNS ( 
          parent_account_number NUMBER PATH
           '$.data.account.parentAccountNumber',
            account_number NUMBER PATH '$.data.account.accountNumber',
            business_unit_id NUMBER PATH '$.data.account.businessUnitId',
            position_id VARCHAR2 ( 4 ) PATH '$.data.positionId'    )
            ) AS tab_data 
            INNER JOIN JSON_TABLE ( '{ 
        "accounts": [{ 
          "accountNumber": 42000, 
          "parentAccountNumber": 32000, 
          "businessUnitId": 7 
        }, { 
          "accountNumber": 42001, 
          "parentAccountNumber": 32001, 
          "businessUnitId": 6 
        }] 
      }', '$.accounts[*]' ERROR ON ERROR    
      COLUMNS (
      parent_account_number PATH '$.parentAccountNumber',
      account_number PATH '$.accountNumber',
      business_unit_id PATH '$.businessUnitId')
      ) static_data 
      ON ( static_data.parent_account_number = tab_data.parent_account_number 
           AND static_data.account_number = tab_data.account_number                
           AND static_data.business_unit_id = tab_data.business_unit_id ) 
        GROUP BY 
            tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number 
    );
```

행 수준 데이터를 JSON 형식으로 변환하기 위해 Oracle에는 `JSON_OBJECT`, `JSON_ARRAY`, `JSON_OBJECTAGG`, `JSON_ARRAYAGG`와 같은 빌트인 함수가 있습니다.
+ `JSON_OBJECT`는 `KEY` 및 `VALUE`라는 두 개의 파라미터를 허용합니다. `KEY` 파라미터는 하드코딩되거나 정적이어야 합니다. `VALUE` 파라미터는 테이블 출력에서 파생됩니다.
+ `JSON_ARRAYAGG`은 `JSON_OBJECT`를 파라미터로 받아들입니다. 이렇게 하면 `JSON_OBJECT` 요소 세트를 목록으로 그룹화하는 데 도움이 됩니다. 예를 들어 여러 레코드(데이터 세트에 있는 여러 개의 `KEY` 및 `VALUE` 페어)가 있는 `JSON_OBJECT` 요소가 있는 경우 `JSON_ARRAYAGG`는 데이터 세트를 추가하고 목록을 생성합니다. 데이터 구조 언어에 따르면 `LIST`는 요소 그룹입니다. 이 컨텍스트에서는 `LIST`는 `JSON_OBJECT` 요소 그룹입니다.

다음 예에서는 `JSON_OBJECT` 요소 하나를 보여 줍니다.

```
{
   "taxProfessionalCount": 0,
   "attorneyCount": 0,
   "nonAttorneyCount": 1,
   "clerkCount": 0
}
```

다음 예제에서는 대괄호(`[ ]`)로 표시된 `LIST`가 있는 두 `JSON_OBJECT` 요소를 보여줍니다.

```
[ 
    {
        "taxProfessionalCount": 0,
        "attorneyCount": 0,
        "nonAttorneyCount": 1,
        "clerkCount": 0
      }
,
    {
        "taxProfessionalCount": 2,
        "attorneyCount": 1,
        "nonAttorneyCount": 3,
        "clerkCount":4
      }
]
```

*예제 SQL 쿼리*

```
SELECT 
    JSON_OBJECT( 
        'accountCounts' VALUE JSON_ARRAYAGG( 
            JSON_OBJECT( 
                'businessUnitId' VALUE business_unit_id, 
                        'parentAccountNumber' VALUE parent_account_number, 
                        'accountNumber' VALUE account_number, 
                        'totalOnlineContactsCount' VALUE online_contacts_count, 
                        'countByPosition' VALUE 
                    JSON_OBJECT( 
                        'taxProfessionalCount' VALUE tax_count, 
                        'attorneyCount' VALUE attorney_count, 
                        'nonAttorneyCount' VALUE non_attorney_count, 
                        'clerkCount' VALUE clerk_count
                               ) 
                        ) 
                                           ) 
              ) 
FROM 
    (SELECT 
            tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number, 
            SUM(1) online_contacts_count, 
            SUM(CASE WHEN tab_data.position_id = '0095' THEN  1 ELSE   0 END 
            )      tax_count, 
            SUM(CASE    WHEN tab_data.position_id = '0100' THEN        1    ELSE        0 END 
            )      attorney_count,                                                       
            SUM(CASE    WHEN tab_data.position_id = '0090' THEN        1    ELSE        0 END 
            )      non_attorney_count,                                                   
            SUM(CASE    WHEN tab_data.position_id = '0050' THEN        1    ELSE        0 END 
            )      clerk_count                                                           
        FROM 
            aws_test_table scco,  JSON_TABLE ( json_doc, '$' ERROR ON ERROR    
            COLUMNS ( 
            parent_account_number NUMBER PATH '$.data.account.parentAccountNumber',
            account_number NUMBER PATH '$.data.account.accountNumber',
            business_unit_id NUMBER PATH '$.data.account.businessUnitId',
            position_id VARCHAR2 ( 4 ) PATH '$.data.positionId'    )
            ) AS tab_data 
            INNER JOIN JSON_TABLE ( '{ 
        "accounts": [{ 
          "accountNumber": 42000, 
          "parentAccountNumber": 32000, 
          "businessUnitId": 7 
        }, { 
          "accountNumber": 42001, 
          "parentAccountNumber": 32001, 
          "businessUnitId": 6 
        }] 
      }', '$.accounts[*]' ERROR ON ERROR    
      COLUMNS (
      parent_account_number PATH '$.parentAccountNumber',
      account_number PATH '$.accountNumber',
      business_unit_id PATH '$.businessUnitId')
      ) static_data ON ( static_data.parent_account_number = tab_data.parent_account_number 
                         AND static_data.account_number = tab_data.account_number                
                         AND static_data.business_unit_id = tab_data.business_unit_id ) 
        GROUP BY 
            tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number 
    );
```

*이전 SQL 쿼리의 출력 예제*

```
{
  "accountCounts": [
    {
      "businessUnitId": 6,
      "parentAccountNumber": 32001,
      "accountNumber": 42001,
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 0,
        "nonAttorneyCount": 1,
        "clerkCount": 0
      }
    },
    {
      "businessUnitId": 7,
      "parentAccountNumber": 32000,
      "accountNumber": 42000,
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 1,
        "nonAttorneyCount": 0,
        "clerkCount": 0
      }
    }
  ]
}
```

**6.  Postgres\$1SQL\$1JSON\$1Aggregation\$1Join**

PostgreSQL 빌트인 함수 `JSON_BUILD_OBJECT` 및 `JSON_AGG`는 ROW 수준 데이터를 JSON 형식으로 변환합니다.  PostgreSQL `JSON_BUILD_OBJECT` 및 `JSON_AGG` 는 Oracle `JSON_OBJECT` 및 `JSON_ARRAYAGG`와 동일합니다.

*쿼리 예제*

```
select    
JSON_BUILD_OBJECT ('accountCounts', 
    JSON_AGG( 
        JSON_BUILD_OBJECT ('businessUnitId',businessUnitId 
        ,'parentAccountNumber',parentAccountNumber 
        ,'accountNumber',accountNumber 
        ,'totalOnlineContactsCount',online_contacts_count, 
        'countByPosition',
            JSON_BUILD_OBJECT (
            'taxProfessionalCount',tax_professional_count 
            ,'attorneyCount',attorney_count 
            ,'nonAttorneyCount',non_attorney_count 
            ,'clerkCount',clerk_count 
            ) 
        )  
    ) 
) 
from ( 
with tab as (select * from ( 
select (json_doc::json->'data'->'account'->>'parentAccountNumber')::INTEGER as parentAccountNumber, 
(json_doc::json->'data'->'account'->>'accountNumber')::INTEGER as accountNumber, 
(json_doc::json->'data'->'account'->>'businessUnitId')::INTEGER as businessUnitId, 
(json_doc::json->'data'->>'positionId')::varchar as positionId 
from aws_test_pg_table) a ) , 
tab1 as ( select   
(json_array_elements(b.jc -> 'accounts') ->> 'accountNumber')::integer accountNumber, 
(json_array_elements(b.jc -> 'accounts') ->> 'businessUnitId')::integer businessUnitId, 
(json_array_elements(b.jc -> 'accounts') ->> 'parentAccountNumber')::integer parentAccountNumber 
from ( 
select '{ 
        "accounts": [{ 
          "accountNumber": 42001, 
          "parentAccountNumber": 32001, 
          "businessUnitId": 6 
        }, { 
          "accountNumber": 42000, 
          "parentAccountNumber": 32000, 
          "businessUnitId": 7 
        }] 
      }'::json as jc) b) 
select  
tab.businessUnitId::text, 
tab.parentAccountNumber::text, 
tab.accountNumber::text, 
SUM(1) online_contacts_count, 
SUM(CASE WHEN tab.positionId::text = '0095' THEN 1 ELSE 0  END)      tax_professional_count,  
SUM(CASE WHEN tab.positionId::text = '0100' THEN 1 ELSE 0  END)      attorney_count, 
SUM(CASE  WHEN tab.positionId::text = '0090' THEN      1  ELSE      0 END)      non_attorney_count, 
SUM(CASE  WHEN tab.positionId::text = '0050' THEN      1  ELSE      0 END)      clerk_count
from tab1,tab  
where tab.parentAccountNumber::INTEGER=tab1.parentAccountNumber::INTEGER  
and tab.accountNumber::INTEGER=tab1.accountNumber::INTEGER 
and tab.businessUnitId::INTEGER=tab1.businessUnitId::INTEGER 
GROUP BY      tab.businessUnitId::text, 
            tab.parentAccountNumber::text, 
            tab.accountNumber::text) a;
```

*이전 쿼리의 예제 출력*

Oracle과 PostgreSQL의 출력은 정확히 동일합니다.

```
{
  "accountCounts": [
    {
      "businessUnitId": 6,
      "parentAccountNumber": 32001,
      "accountNumber": 42001,
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 0,
        "nonAttorneyCount": 1,
        "clerkCount": 0
      }
    },
    {
      "businessUnitId": 7,
      "parentAccountNumber": 32000,
      "accountNumber": 42000,
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 1,
        "nonAttorneyCount": 0,
        "clerkCount": 0
      }
    }
  ]
}
```

**7.Oracle\$1procedure\$1with\$1JSON\$1Query**

이 코드는 Oracle 절차를 JSON SQL 쿼리가 있는 PostgreSQL 함수로 변환합니다. 쿼리가 JSON을 행으로, 그 반대로 변환하는 방법을 보여줍니다.

```
CREATE OR REPLACE PROCEDURE p_json_test(p_in_accounts_json IN varchar2,   p_out_accunts_json  OUT varchar2)
IS
BEGIN
/*
p_in_accounts_json paramter should have following format:
       { 
        "accounts": [{ 
          "accountNumber": 42000, 
          "parentAccountNumber": 32000, 
          "businessUnitId": 7 
        }, { 
          "accountNumber": 42001, 
          "parentAccountNumber": 32001, 
          "businessUnitId": 6 
        }] 
      }
*/
SELECT 
    JSON_OBJECT( 
        'accountCounts' VALUE JSON_ARRAYAGG( 
            JSON_OBJECT( 
                'businessUnitId' VALUE business_unit_id, 
                        'parentAccountNumber' VALUE parent_account_number, 
                        'accountNumber' VALUE account_number, 
                        'totalOnlineContactsCount' VALUE online_contacts_count, 
                        'countByPosition' VALUE 
                    JSON_OBJECT( 
                        'taxProfessionalCount' VALUE tax_count, 
                        'attorneyCount' VALUE attorney_count, 
                        'nonAttorneyCount' VALUE non_attorney_count, 
                        'clerkCount' VALUE clerk_count
                               ) ) ) ) 
into p_out_accunts_json
FROM 
    (SELECT 
            tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number, 
            SUM(1) online_contacts_count, 
            SUM(CASE WHEN tab_data.position_id = '0095' THEN  1 ELSE 0 END) tax_count, 
            SUM(CASE    WHEN tab_data.position_id = '0100' THEN 1 ELSE 0 END) attorney_count,                                                       
            SUM(CASE    WHEN tab_data.position_id = '0090' THEN 1 ELSE 0 END) non_attorney_count,                                                   
            SUM(CASE    WHEN tab_data.position_id = '0050' THEN 1 ELSE 0 END) clerk_count                                                           
        FROM aws_test_table scco,JSON_TABLE ( json_doc, '$' ERROR ON ERROR    
            COLUMNS ( 
            parent_account_number NUMBER PATH '$.data.account.parentAccountNumber',
            account_number NUMBER PATH '$.data.account.accountNumber',
            business_unit_id NUMBER PATH '$.data.account.businessUnitId',
            position_id VARCHAR2 ( 4 ) PATH '$.data.positionId'    )
            ) AS tab_data 
            INNER JOIN JSON_TABLE ( p_in_accounts_json, '$.accounts[*]' ERROR ON ERROR    
      COLUMNS (
      parent_account_number PATH '$.parentAccountNumber',
      account_number PATH '$.accountNumber',
      business_unit_id PATH '$.businessUnitId')
      ) static_data 
      ON ( static_data.parent_account_number = tab_data.parent_account_number 
           AND static_data.account_number = tab_data.account_number                
           AND static_data.business_unit_id = tab_data.business_unit_id ) 
        GROUP BY 
            tab_data.business_unit_id, 
            tab_data.parent_account_number, 
            tab_data.account_number 
    ); 
EXCEPTION 
WHEN OTHERS THEN
   raise_application_error(-20001,'Error while running the JSON query');
END;
/
```

*프로시저 실행*

다음 코드 블록은 프로시저에 대한 예제 JSON 입력을 사용하여 이전에 만든 Oracle 프로시저를 실행하는 방법을 설명합니다. 또한 이 프로시저의 결과 또는 출력도 제공합니다.

```
set serveroutput on;
declare
v_out varchar2(30000);
v_in varchar2(30000):= '{ 
        "accounts": [{ 
          "accountNumber": 42000, 
          "parentAccountNumber": 32000, 
          "businessUnitId": 7 
        }, { 
          "accountNumber": 42001, 
          "parentAccountNumber": 32001, 
          "businessUnitId": 6 
        }] 
      }';
begin
  p_json_test(v_in,v_out);
  dbms_output.put_line(v_out);
end;
/
```

*프로시저 출력*

```
{
  "accountCounts": [
    {
      "businessUnitId": 6,
      "parentAccountNumber": 32001,
      "accountNumber": 42001,
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 0,
        "nonAttorneyCount": 1,
        "clerkCount": 0
      }
    },
    {
      "businessUnitId": 7,
      "parentAccountNumber": 32000,
      "accountNumber": 42000,
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 1,
        "nonAttorneyCount": 0,
        "clerkCount": 0
      }
    }
  ]
}
```

**8.Postgres\$1function\$1with\$1JSON\$1Query**

*함수 예제*

```
CREATE OR REPLACE  FUNCTION f_pg_json_test(p_in_accounts_json  text)
RETURNS text  
LANGUAGE plpgsql  
AS  
$$  
DECLARE  
 v_out_accunts_json   text;  
BEGIN  
SELECT    
JSON_BUILD_OBJECT ('accountCounts',
    JSON_AGG(
        JSON_BUILD_OBJECT ('businessUnitId',businessUnitId
        ,'parentAccountNumber',parentAccountNumber
        ,'accountNumber',accountNumber
        ,'totalOnlineContactsCount',online_contacts_count,
        'countByPosition',
            JSON_BUILD_OBJECT (
            'taxProfessionalCount',tax_professional_count
            ,'attorneyCount',attorney_count
            ,'nonAttorneyCount',non_attorney_count
            ,'clerkCount',clerk_count
            ))))
INTO v_out_accunts_json
FROM (
WITH tab AS (SELECT * FROM (
SELECT (json_doc::json->'data'->'account'->>'parentAccountNumber')::INTEGER AS parentAccountNumber,
(json_doc::json->'data'->'account'->>'accountNumber')::INTEGER AS accountNumber,
(json_doc::json->'data'->'account'->>'businessUnitId')::INTEGER AS businessUnitId,
(json_doc::json->'data'->>'positionId')::varchar AS positionId
FROM aws_test_pg_table) a ) ,
tab1 AS ( SELECT  
(json_array_elements(b.jc -> 'accounts') ->> 'accountNumber')::integer accountNumber,
(json_array_elements(b.jc -> 'accounts') ->> 'businessUnitId')::integer businessUnitId,
(json_array_elements(b.jc -> 'accounts') ->> 'parentAccountNumber')::integer parentAccountNumber
FROM (
SELECT p_in_accounts_json::json AS jc) b)
SELECT  
tab.businessUnitId::text,
tab.parentAccountNumber::text,
tab.accountNumber::text,
SUM(1) online_contacts_count,
SUM(CASE WHEN tab.positionId::text = '0095' THEN 1 ELSE 0  END)      tax_professional_count,  
SUM(CASE WHEN tab.positionId::text = '0100' THEN 1 ELSE 0  END)      attorney_count,
SUM(CASE  WHEN tab.positionId::text = '0090' THEN      1  ELSE      0 END)      non_attorney_count,
SUM(CASE  WHEN tab.positionId::text = '0050' THEN      1  ELSE      0 END)      clerk_count
FROM tab1,tab  
WHERE tab.parentAccountNumber::INTEGER=tab1.parentAccountNumber::INTEGER  
AND tab.accountNumber::INTEGER=tab1.accountNumber::INTEGER
AND tab.businessUnitId::INTEGER=tab1.businessUnitId::INTEGER
GROUP BY      tab.businessUnitId::text,
            tab.parentAccountNumber::text,
            tab.accountNumber::text) a;
RETURN v_out_accunts_json;          
END;  
$$;
```

*함수 실행*

```
select    f_pg_json_test('{ 
        "accounts": [{ 
          "accountNumber": 42001, 
          "parentAccountNumber": 32001, 
          "businessUnitId": 6 
        }, { 
          "accountNumber": 42000, 
          "parentAccountNumber": 32000, 
          "businessUnitId": 7 
        }] 
      }')   ;
```

*함수 출력 *

다음 출력은 Oracle 프로시저 출력과 유사합니다. 차이점은 이 출력이 텍스트 형식이라는 점입니다.

```
{
  "accountCounts": [
    {
      "businessUnitId": "6",
      "parentAccountNumber": "32001",
      "accountNumber": "42001",
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 0,
        "nonAttorneyCount": 1,
        "clerkCount": 0
      }
    },
    {
      "businessUnitId": "7",
      "parentAccountNumber": "32000",
      "accountNumber": "42000",
      "totalOnlineContactsCount": 1,
      "countByPosition": {
        "taxProfessionalCount": 0,
        "attorneyCount": 1,
        "nonAttorneyCount": 0,
        "clerkCount": 0
      }
    }
  ]
}
```

# 를 사용하여 계정 간에 Amazon DynamoDB 테이블 복사 AWS Backup
<a name="copy-amazon-dynamodb-tables-across-accounts-using-aws-backup"></a>

*Ramkumar Ramanujam, Amazon Web Services*

## 요약
<a name="copy-amazon-dynamodb-tables-across-accounts-using-aws-backup-summary"></a>

에서 Amazon DynamoDB로 작업할 때 일반적인 사용 사례는 개발 AWS, 테스트 또는 스테이징 환경의 DynamoDB 테이블을 프로덕션 환경에 있는 테이블 데이터와 복사하거나 동기화하는 것입니다. 표준 관행에 따라 각 환경은 서로 다른 계정을 사용합니다. 

AWS Backup 는 DynamoDB, Amazon Simple Storage Service(Amazon S3) 및 기타에 대한 교차 리전 및 교차 계정 데이터 백업 및 복원을 지원합니다 AWS 서비스. 이 패턴은 AWS Backup 교차 계정 백업 및 복원을 사용하여 DynamoDB 테이블을 복사하는 단계를 제공합니다 AWS 계정.

## 사전 조건 및 제한 사항
<a name="copy-amazon-dynamodb-tables-across-accounts-using-aws-backup-prereqs"></a>

**사전 조건 **
+ 에서 동일한 조직에 AWS 계정 속하는 활성 2개 AWS Organizations
+ 두 계정 모두에서 DynamoDB 테이블을 생성할 수 있는 권한
+ AWS Identity and Access Management AWS Backup 볼트를 생성하고 사용할 수 있는 (IAM) 권한

**제한 사항 **
+ 소스와 대상은 동일한 조직의 일부여야 AWS 계정 합니다 AWS Organizations.

## 아키텍처
<a name="copy-amazon-dynamodb-tables-across-accounts-using-aws-backup-architecture"></a>

**대상 기술 스택  **
+ AWS Backup 
+ Amazon DynamoDB

**대상 아키텍처 **

![\[백업 볼트 간 테이블 복사에 대한 설명은 다이어그램을 따릅니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/ef6e7393-edb6-4744-be26-43f1cbff9de9/images/fa9f3f2f-7a01-4093-9bd5-fc355e57ba67.png)


1. 소스 계정의 백업 볼트에 DynamoDB 테이블 AWS Backup 백업을 생성합니다.

1. 백업을 대상 계정의 백업 볼트에 복사합니다.

1. 대상 계정 백업 볼트의 백업을 사용하여 대상 계정의 DynamoDB 테이블을 복원합니다.

**자동화 및 규모 조정**

 AWS Backup 를 사용하여 백업이 특정 간격으로 실행되도록 예약할 수 있습니다.

## 도구
<a name="copy-amazon-dynamodb-tables-across-accounts-using-aws-backup-tools"></a>
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)는 클라우드 및 온프레미스 AWS 서비스에서 데이터 보호를 중앙 집중화하고 자동화하기 위한 완전관리형 서비스입니다. 이 서비스를 사용하면 한 곳에서 AWS 리소스에 대한 백업 정책을 구성하고 활동을 모니터링할 수 있습니다. 이를 통해 이전에 서비스별로 수행되던 백업 작업을 자동화하고 통합할 수 있으며, 사용자 지정 스크립트와 수동 프로세스를 생성할 필요가 없습니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다.

## 에픽
<a name="copy-amazon-dynamodb-tables-across-accounts-using-aws-backup-epics"></a>

### 소스 및 대상 계정에서 AWS Backup 기능 활성화
<a name="turn-on-bkp-features-in-the-source-and-target-accounts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DynamoDB 및 교차 계정 백업을 위한 고급 기능을 활성화합니다. | 소스와 대상 모두에서 다음을 AWS 계정수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.html) | AWS DevOps, 마이그레이션 엔지니어 | 

### 소스 및 대상 계정에 백업 볼트 생성
<a name="create-backup-vaults-in-the-source-and-target-accounts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 백업 볼트를 생성합니다. | 소스와 대상 모두에서 다음을 AWS 계정수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.html)소스 계정과 대상 계정 간에 DynamoDB 테이블 백업을 복사할 때는 소스 및 대상 백업 볼트의 ARN이 모두 필요합니다. | AWS DevOps, 마이그레이션 엔지니어 | 

### 백업 볼트를 사용하여 백업 및 복원 수행
<a name="perform-backup-and-restore-using-backup-vaults"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 계정에서 DynamoDB 테이블 백업을 생성합니다. | 소스 계정의 DynamoDB 테이블에 대한 백업을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.html)새 백업 작업이 생성됩니다. 백업 작업의 상태를 모니터링하려면 AWS Backup **작업** 페이지에서 **백업 작업** 탭을 선택합니다. 이 탭에는 모든 활성, 진행 중, 완료 백업 작업이 나열됩니다. | AWS DevOps, DBA, 마이그레이션 엔지니어 | 
| 소스 계정에서 대상 계정으로 백업을 복사합니다. | 백업 작업이 완료되면 소스 계정의 백업 볼트에서 대상 계정의 백업 볼트로 DynamoDB 테이블 백업을 복사합니다.백업 볼트를 복사하려면 소스 계정에서 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.html) | AWS DevOps, 마이그레이션 엔지니어, DBA | 
| 대상 계정의 백업을 복원합니다. | 대상에서 다음을 AWS 계정수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.html) | AWS DevOps, DBA, 마이그레이션 엔지니어 | 

## 관련 리소스
<a name="copy-amazon-dynamodb-tables-across-accounts-using-aws-backup-resources"></a>
+ [DynamoDB AWS Backup 와 함께 사용](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/backuprestore_HowItWorksAWS.html)
+ [에서 백업 복사본 생성 AWS 계정](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-cross-account-backup.html)
+ [AWS Backup 요금](https://aws.amazon.com/backup/pricing/)

# 사용자 지정 구현을 사용하여 계정 전반적으로 Amazon DynamoDB 테이블 복사
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation"></a>

*Ramkumar Ramanujam, Amazon Web Services*

## 요약
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-summary"></a>

Amazon Web Services(AWS)의 Amazon DynamoDB를 사용할 때 일반적인 사용 사례는 개발, 테스트 또는 스테이징 환경에서 DynamoDB 테이블을 복사하거나 프로덕션 환경에 있는 테이블 데이터와 동기화하는 것입니다. 표준 관행에 따라 각 환경은 서로 다른 계정을 사용합니다.

DynamoDB는 이제 AWS Backup을 사용하여 교차 계정 백업을 지원합니다. AWS Backup을 사용할 때의 관련 스토리지 비용에 대한 자세한 내용은 [Backup 요금 책정](https://aws.amazon.com/backup/pricing/)을 참조하십시오. AWS Backup을 사용하여 계정 전반적으로 복사를 하는 경우 소스 및 대상 계정이 AWS Organizations 조직의 일부여야 합니다. AWS Glue와 같은 서비스를 사용하여 교차 계정 백업 및 복원을 위한 다른 솔루션도 있습니다. 그러나 이러한 솔루션을 사용하면 배포 및 유지 관리해야 할 서비스가 더 많기 때문에 애플리케이션 설치 공간이 늘어납니다. 

Amazon DynamoDB Streams를 사용하여 소스 계정의 테이블 변경 내용을 캡처할 수도 있습니다. 그런 다음 Lambda 함수를 시작하고 대상 계정의 대상 테이블에서 해당 내용을 변경할 수 있습니다. 하지만 이 솔루션은 소스 테이블과 대상 테이블을 항상 동기화된 상태로 유지해야 하는 사용 사례에 적용됩니다. 데이터가 자주 업데이트되는 개발, 테스트 및 스테이징 환경에는 적용하지 못할 수 있습니다.

이 패턴은 한 계정에서 다른 계정으로 Amazon DynamoDB 테이블을 복사하기 위해 사용자 지정 솔루션을 구현하는 절차를 제공합니다. 이 패턴은 C\$1, Java, Python과 같은 일반적인 프로그래밍 언어를 사용하여 구현할 수 있습니다. [SDK](https://aws.amazon.com/tools/)에 의해 지원되는 언어를 사용하는 것이 좋습니다.

## 사전 조건 및 제한 사항
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-prereqs"></a>

**사전 조건 **
+ 두 개의 활성 상태 계정
+ 두 계정 모두의 DynamoDB 테이블
+ Identity and Access Management(IAM) 역할과 정책에 대한 지식
+ C\$1, Java 또는 Python과 같은 모든 일반적인 프로그래밍 언어를 사용하여 Amazon DynamoDB 테이블에 액세스하는 방법에 대한 지식

**제한 사항 **

이 패턴은 크기가 약 2GB 이하인 DynamoDB 테이블에 적용됩니다. 연결 또는 세션 중단, 조절, 장애 및 재시도를 처리하는 추가 로직이 있으면 더 큰 테이블에 이를 사용할 수 있습니다.

소스 테이블에서 항목을 읽는 DynamoDB 스캔 작업은 한 번의 호출로 최대 1 MB의 데이터만 가져올 수 있습니다. 크기가 2 GB를 초과하는 대형 테이블의 경우 이 제한으로 인해 전체 테이블 복사를 수행하는 데 걸리는 총 시간이 늘어날 수 있습니다.

## 아키텍처
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-architecture"></a>

다음 다이어그램은 소스 및 대상 AWS 계정 간의 사용자 지정 구현을 보여줍니다. 이 사용자 지정 구현에는 IAM 정책과 보안 토큰은 사용되었습니다. 데이터는 소스 계정의 Amazon DynamoDB에서 읽고 대상 계정의 DynamoDB에 씁니다.

![\[사용자 지정 구현을 사용하여 복사할 소스 및 대상 계정 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/ba8175be-9809-4c2e-b2d1-6b9180ed056c/images/d9d4c2c8-ff04-443f-9137-e37b8e23ccb5.png)


 

**자동화 및 규모 조정**

이 패턴은 크기가 약 2GB 이하인 DynamoDB 테이블에 적용됩니다. 

대형 테이블에 이 패턴을 적용하려면 다음 문제를 해결합니다.
+ 테이블 복사 작업 중에는 서로 다른 보안 토큰을 사용하여 두 개의 활성 세션을 유지합니다. 테이블 복사 작업이 토큰 만료 시간보다 더 오래 걸리는 경우 보안 토큰을 새로 고치는 로직을 마련해야 합니다. 
+ 읽기 용량 단위(RCU) 및 쓰기 용량 단위(WCU)가 충분히 프로비저닝되지 않은 경우 소스 또는 대상 테이블에 대한 읽기 또는 쓰기가 제한될 수 있습니다. 이러한 예외를 파악하고 처리해야 합니다. 
+ 기타 실패나 예외를 처리하고, 복사 작업이 실패한 부분부터 다시 시도하거나 계속할 수 있는 재시도 메커니즘을 마련합니다.

## 도구
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-tools"></a>

**도구**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) – Amazon DynamoDB는 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다. 
+ 필요한 추가 도구는 구현을 위해 선택하는 프로그래밍 언어에 따라 달라집니다. 예를 들어 C\$1을 사용하는 경우 Microsoft Visual Studio 및 다음과 같은 NuGet 패키지가 필요합니다.
  + `AWSSDK`
  + `AWSSDK.DynamoDBv2`

**코드**

다음 Python 코드 조각은 Boto3 라이브러리를 사용하여 DynamoDB 테이블을 삭제하고 다시 생성합니다.

장기 자격 증명이므로 IAM 사용자의 `AWS_ACCESS_KEY_ID` 및 `AWS_SECRET_ACCESS_KEY`(을)를 사용해서는 안 됩니다. 서비스에 프로그래밍 방식으로 액세스할 때는 이를 자제해야 합니다. 임시 보안 자격 증명에 관한 자세한 내용은 *모범 사례* 섹션을 확인하십시오.

다음 코드 조각에 사용되는 `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `TEMPORARY_SESSION_TOKEN`(은)는 Security Token Service(STS)에서 가져온 임시 자격 증명입니다.

```
import boto3
import sys
import json

#args = input-parameters = GLOBAL_SEC_INDEXES_JSON_COLLECTION, ATTRIBUTES_JSON_COLLECTION, TARGET_DYNAMODB_NAME, TARGET_REGION, ...

#Input param: GLOBAL_SEC_INDEXES_JSON_COLLECTION
#[{"IndexName":"Test-index","KeySchema":[{"AttributeName":"AppId","KeyType":"HASH"},{"AttributeName":"AppType","KeyType":"RANGE"}],"Projection":{"ProjectionType":"INCLUDE","NonKeyAttributes":["PK","SK","OwnerName","AppVersion"]}}]

#Input param: ATTRIBUTES_JSON_COLLECTION
#[{"AttributeName":"PK","AttributeType":"S"},{"AttributeName":"SK","AttributeType":"S"},{"AttributeName":"AppId","AttributeType":"S"},{"AttributeName":"AppType","AttributeType":"N"}]

region = args['TARGET_REGION']
target_ddb_name = args['TARGET_DYNAMODB_NAME']

global_secondary_indexes = json.loads(args['GLOBAL_SEC_INDEXES_JSON_COLLECTION'])
attribute_definitions = json.loads(args['ATTRIBUTES_JSON_COLLECTION'])

# Drop and create target DynamoDB table
dynamodb_client = boto3.Session(
        aws_access_key_id=args['AWS_ACCESS_KEY_ID'],
        aws_secret_access_key=args['AWS_SECRET_ACCESS_KEY'],
        aws_session_token=args['TEMPORARY_SESSION_TOKEN'],
    ).client('dynamodb')
    
# Delete table
print('Deleting table: ' + target_ddb_name + ' ...')

try:
    dynamodb_client.delete_table(TableName=target_ddb_name)

    #Wait for table deletion to complete
    waiter = dynamodb_client.get_waiter('table_not_exists')
    waiter.wait(TableName=target_ddb_name)
    print('Table deleted.')
except dynamodb_client.exceptions.ResourceNotFoundException:
    print('Table already deleted / does not exist.')
    pass

print('Creating table: ' + target_ddb_name + ' ...')

table = dynamodb_client.create_table(
    TableName=target_ddb_name,
    KeySchema=[
        {
            'AttributeName': 'PK',
            'KeyType': 'HASH'  # Partition key
        },
        {
            'AttributeName': 'SK',
            'KeyType': 'RANGE'  # Sort key
        }
    ],
    AttributeDefinitions=attribute_definitions,
    GlobalSecondaryIndexes=global_secondary_indexes,
    BillingMode='PAY_PER_REQUEST'
)
    
waiter = dynamodb_client.get_waiter('table_exists')
waiter.wait(TableName=target_ddb_name)
    
print('Table created.')
```

## 모범 사례
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-best-practices"></a>

**임시 자격 증명**

보안 모범 사례로서, 프로그래밍 방식으로 서비스에 액세스하는 동안에는 장기 자격 증명이므로 IAM 사용자의 `AWS_ACCESS_KEY_ID` 및 `AWS_SECRET_ACCESS_KEY` 사용을 자제합니다. 프로그래밍 방식으로 서비스에 액세스하려면 항상 임시 자격 증명을 사용합니다.

예를 들어 개발자는 개발 중에 애플리케이션에서 IAM 사용자의 `AWS_ACCESS_KEY_ID` 및 `AWS_SECRET_ACCESS_KEY`(을)를 하드코딩하지만, 코드 리포지토리에 변경 내용을 푸시하기 전에는 하드코딩된 값을 제거하지 못합니다. 이러한 노출된 자격 증명은 의도하지 않았거나 악의적인 사용자가 사용할 수 있으며, 이는 심각한 영향을 미칠 수 있습니다(특히 노출된 자격 증명에 관리자 권한이 있는 경우 더욱 그렇습니다). 이러한 노출된 자격 증명은 IAM 콘솔 또는 Command Line Interface(CLI)를 사용하여 즉시 비활성화하거나 삭제해야 합니다.

프로그래밍 방식으로 서비스에 액세스하려면 항상 임시 자격 증명을 사용합니다. 임시 자격 증명은 지정된 시간(15분\$136시간) 동안만 유효합니다. 임시 자격 증명의 최대 허용 기간은 역할 설정 및 역할 함께 묶기와 같은 요인에 따라 달라집니다. STS에 대한 자세한 내용은 [설명서](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html)를 참조하세요.

## 에픽
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-epics"></a>

### DynamoDB 테이블 설정
<a name="set-up-dynamodb-tables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DynamoDB 테이블을 생성합니다. | 소스 및 대상 AWS 계정 모두에서 인덱스가 포함된 DynamoDB 테이블을 생성합니다.용량 프로비저닝을 온디맨드 모드로 설정하면 DynamoDB가 워크로드에 따라 읽기/쓰기 용량을 동적으로 확장할 수 있습니다. 또는 4,000개의 RCU와 4,000개의 WCU가 있는 프로비저닝된 용량을 사용할 수 있습니다. | 앱 개발자, DBA, 마이그레이션 엔지니어 | 
| 소스 테이블을 채웁니다. | 소스 계정의 DynamoDB 테이블을 테스트 데이터로 채웁니다. 최소 50 MB 이상의 테스트 데이터가 있으면 테이블 복사 중에 사용된 최대 RCU와 평균 RCU를 확인할 수 있습니다. 그런 다음 필요에 따라 용량 프로비저닝을 변경할 수 있습니다. | 앱 개발자, DBA, 마이그레이션 엔지니어 | 

### DynamoDB 테이블에 액세스하기 위한 자격 증명 설정
<a name="set-up-credentials-to-access-the-dynamodb-tables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 DynamoDB 테이블에 액세스하기 위한 IAM 역할을 생성합니다. | 소스 계정의 DynamoDB 테이블에 액세스(읽기) 할 권한이 있는 IAM 역할을 소스 계정에 생성합니다.소스 계정을 이 역할의 신뢰할 수 있는 개체로 추가합니다.대상 계정의 DynamoDB 테이블에 액세스(생성, 읽기, 업데이트, 삭제)할 권한이 있는 IAM 역할과 함께 대상 계정에 생성합니다. 대상 계정을 이 역할의 신뢰할 수 있는 개체로 추가합니다. | 앱 개발자, AWS DevOps | 

### 계정 간에 테이블 데이터 복사
<a name="copy-table-data-from-one-account-to-another"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IAM 역할을 위한 임시 자격 증명을 가져옵니다. | 소스 계정에서 생성한 IAM 역할을 위한 임시 자격 증명을 가져옵니다.대상 계정에서 생성한 IAM 역할을 위한 임시 자격 증명을 가져옵니다.IAM 역할을 위한 임시 자격 증명을 가져오는 한 가지 방법은 CLI에서 STS를 사용하는 것입니다.<pre>aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<role-name> --role-session-name <session-name> --profile <profile-name></pre>적절한 프로필(소스 또는 대상 계정에 해당)을 사용합니다.임시 보안 자격 증명에 관한 자세한 내용은 다음을 참조하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation.html) | 앱 개발자, 마이그레이션 엔지니어 | 
| 소스 및 대상 DynamoDB 액세스를 위한 DynamoDB 클라이언트를 초기화합니다. | 소스 및 대상 DynamoDB 테이블에 대해, SDK에서 제공하는 DynamoDB 클라이언트를 초기화합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation.html)IAM 임시 자격 증명을 사용하여 요청하는 방법에 대한 자세한 내용은 [설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/AuthUsingTempSessionToken.html)를 참조하십시오. | 앱 개발자 | 
| 대상 테이블을 삭제하고 다시 생성합니다. | 대상 계정 DynamoDB 클라이언트를 사용하여 대상 계정에서 대상 DynamoDB 테이블(인덱스 포함)을 삭제하고 다시 생성합니다.DynamoDB 테이블에서 모든 레코드를 삭제하는 작업은 프로비저닝된 WCU를 사용하기 때문에 비용이 많이 드는 작업입니다. 테이블을 삭제하고 다시 생성하면 이러한 추가 비용을 피할 수 있습니다.테이블을 생성한 후 테이블에 인덱스를 추가할 수 있지만, 이 경우 2\$15분 정도 더 걸립니다. 인덱스 컬렉션을 `createTable` 호출에 전달하여 테이블을 생성하는 동안 인덱스를 생성하는 것이 더 효율적입니다. | 앱 개발자 | 
| 테이블 복사를 수행합니다. | 모든 데이터가 복사될 때까지 다음 절차를 반복합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation.html)자세한 내용은 *첨부 파일* 섹션에서 C\$1의 참조 구현(테이블 삭제, 생성, 채우기에 사용)을 참조하십시오. 예제 테이블 구성 JavaScript Object Notation(JSON) 파일도 첨부됩니다. | 앱 개발자 | 

## 관련 리소스
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-resources"></a>
+ [Amazon DynamoDB 설명서](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)
+ [계정에서 IAM 사용자 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)
+ [SDK](https://aws.amazon.com/tools/)
+ [리소스에서 임시 자격 증명 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)

## 추가 정보
<a name="copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation-additional"></a>

이 패턴은 200,000개의 항목(평균 항목 크기 5 KB, 테이블 크기 250 MB) 이 있는 DynamoDB 테이블을 복사하기 위해 C\$1을 사용하여 구현되었습니다. 대상 DynamoDB 테이블은 RCU 4,000개와 WCU 4,000개의 프로비저닝된 용량으로 설정되었습니다.

테이블 삭제 및 재생성을 포함한 전체 테이블 복사 작업(소스 계정에서 대상 계정으로 복사)에는 5분이 걸렸습니다. 사용된 총 용량 단위: 30,000개의 RCU 및 약 400,000개의 WCU.

DynamoDB 용량 모드에 대한 자세한 내용은 AWS 설명서에서 [읽기/쓰기 용량 모드](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html)를 참조하십시오.

## 첨부
<a name="attachments-ba8175be-9809-4c2e-b2d1-6b9180ed056c"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/ba8175be-9809-4c2e-b2d1-6b9180ed056c/attachments/attachment.zip) 파일의 압축을 풉니다.

# Amazon RDS 및 Amazon Aurora에 대한 자세한 비용 및 사용 보고서 생성
<a name="create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora"></a>

*Lakshmanan Lakshmanan, Sudarshan Narasimhan, Amazon Web Services*

## 요약
<a name="create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora-summary"></a>

이 패턴은 [사용자 정의 비용 할당 태그](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html)를 구성하여 Amazon Relational Database Service(RDS) 또는 Amazon Aurora 클러스터가 사용하는 비용을 추적하는 방법을 보여줍니다. 이 태그를 사용하여 AWS Cost Explorer에서 여러 차원의 클러스터에 대한 자세한 비용 및 사용 보고서를 생성할 수 있습니다. 예를 들어 팀, 프로젝트 또는 비용 센터 수준에서 사용 비용을 추적한 다음 Amazon Athena에서 이 데이터를 분석할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 하나 이상의 [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html) 또는 [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html) 인스턴스

**제한 사항 **

태그 지정 제한은 [AWS Billing 사용 설명서](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)를 참조하세요.

## 아키텍처
<a name="create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora-architecture"></a>

**대상 기술 스택**
+ Amazon RDS 또는 Amazon Aurora
+ AWS 비용 및 사용 보고서
+ AWS Cost Explorer
+ Amazon Athena

**워크플로 및 아키텍처**

태깅 및 분석 워크플로는 다음 단계로 구성됩니다.

1. 데이터 엔지니어, 데이터베이스 관리자 또는 AWS 관리자는 Amazon RDS 또는 Aurora 클러스터에 대한 사용자 정의 비용 할당 태그를 생성합니다.

1. AWS 관리자가 태그를 활성화합니다.

1. 태그는 AWS Cost Explorer에 메타데이터를 보고합니다.

1. 데이터 엔지니어, 데이터베이스 관리자 또는 AWS 관리자가 [월별 비용 할당 보고서](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html#allocation-viewing)를 생성합니다.

1. 데이터 엔지니어, 데이터베이스 관리자 또는 AWS 관리자는 Amazon Athena를 사용하여 월별 비용 할당 보고서를 분석합니다.

다음 다이어그램은 Amazon RDS 또는 Aurora 인스턴스의 사용 비용을 추적하기 위해 태그를 적용하는 방법을 보여줍니다.

 

![\[태그를 적용하여 데이터베이스 인스턴스 및 클러스터의 사용 비용을 추적\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/eab5001d-5115-4aa6-bdd2-23063b08b262/images/63292b18-01d6-4523-b8ac-2c3b12b11b84.png)


다음 아키텍처 다이어그램은 비용 할당 보고서가 분석을 위해 Amazon Athena와 통합되는 방법을 보여줍니다.

![\[Athena에서 비용 할당 보고서 쿼리\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/eab5001d-5115-4aa6-bdd2-23063b08b262/images/9c028405-1e93-4f6a-a0e5-36154e2b8eab.png)


월별 비용 할당 보고서는 지정한 Amazon S3 버킷에 저장됩니다. *에픽* 섹션의 설명을 따라 AWS CloudFormation 템플릿으로 Athena를 설정하면 템플릿은 AWS Glue 크롤러, AWS Glue 데이터베이스, Amazon Simple Notification System (SNS) 이벤트, AWS Lambda 함수, 그리고 Lambda 함수를 위한 AWS Identity and Access Management(IAM) 역할을 비롯한 몇 가지 추가 리소스를 프로비저닝합니다. 새 비용 데이터 파일이 S3 버킷에 도착하면 이벤트 알림을 사용하여 이러한 파일을 Lambda 함수로 전달하여 처리합니다. Lambda 함수는 AWS Glue 데이터 카탈로그에서 테이블을 생성하거나 업데이트하는 AWS Glue 크롤러 작업을 시작합니다. 그런 다음 이 테이블을 사용하여 Athena에서 데이터를 쿼리합니다.

 

## 도구
<a name="create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora-tools"></a>
+ [Amazon Athena](https://aws.amazon.com/athena/)는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스입니다.
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)은 AWS 및 타사 리소스를 쉽게 모델링, 프로비저닝 및 관리할 수 있는 코드형 인프라(IaC) 서비스입니다.
+ [AWS Cost Explorer](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/ce-what-is.html)는 AWS 비용 및 사용량을 보고 분석할 수 있도록 지원합니다.

## 에픽
<a name="create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora-epics"></a>

### Amazon RDS 또는 Aurora 클러스터용 태그를 생성하고 활성화
<a name="create-and-activate-tags-for-your-amazon-rds-or-aurora-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS 또는 Aurora 클러스터에 대한 사용자 정의 비용 할당 태그를 생성합니다. | 새로 생성했거나 기존에 사용하던 Amazon RDS 또는 Aurora 클러스터에 태그를 추가하려면 *Amazon Aurora 사용 설명서*의 [태그 추가, 나열 및 제거](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html#Tagging.HowTo) 지침을 따르세요.Amazon Aurora 클러스터를 설정하는 방법에 대한 자세한 내용은 *Amazon Aurora 사용 설명서*의 [MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html) 및 [PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)에 대한 지침을 참조하세요. | AWS 관리자, 데이터 엔지니어, DBA | 
| 사용자 정의 비용 할당 태그를 활성화합니다. | *AWS 결제 사용 설명서*의 [사용자 정의 비용 할당 태그 활성화](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html)의 지침을 따르세요. | AWS 관리자 | 

### 비용 및 사용 보고서 생성
<a name="create-cost-and-usage-reports"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클러스터에 대한 비용 및 사용 보고서를 만들고 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora.html)데이터는 24시간 후에 사용할 수 있습니다. | 앱 소유자, AWS 관리자, DBA, 일반 AWS, 데이터 엔지니어 | 

### 비용 및 사용 보고서 데이터 분석
<a name="analyze-cost-and-usage-report-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 비용 및 사용 보고서 데이터를 분석하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora.html)<pre>select status from cost_and_usage_data_status</pre>자세한 내용은* * 사용 설명서의 [비용 및 사용 보고서 생성](https://docs.aws.amazon.com/cur/latest/userguide/cur-ate-run.html)을 참조하세요.SQL 쿼리를 실행할 때 드롭다운 목록에서 올바른 데이터베이스를 선택했는지 확인합니다. | 앱 소유자, AWS 관리자, DBA, 일반 AWS, 데이터 엔지니어 | 

## 관련 리소스
<a name="create-detailed-cost-and-usage-reports-for-amazon-rds-and-amazon-aurora-resources"></a>

**참조**
+ [AWS CloudFormation 템플릿을 사용하여 Athena를 설정](https://docs.aws.amazon.com/cur/latest/userguide/use-athena-cf.html)(권장)
+ [Athena를 수동으로 설정](https://docs.aws.amazon.com/cur/latest/userguide/cur-ate-manual.html)
+ [Amazon Athena 쿼리 실행](https://docs.aws.amazon.com/cur/latest/userguide/cur-ate-run.html)
+ [보고서 데이터를 다른 리소스로 로드](https://docs.aws.amazon.com/cur/latest/userguide/cur-query-other.html)

**자습서 및 동영상**
+ [Amazon Athena를 사용한 비용 및 사용 보고서 분석](https://youtu.be/KEeJEZTYE8E)(YouTube 동영상)

# Terraform을 사용하여 Amazon EC2 및 Amazon FSx에 SQL Server 장애 조치 클러스터 인스턴스 배포
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx"></a>

*Amazon Web Services의 Mark Hudson과 Matt Burgess*

## 요약
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-summary"></a>

이 패턴은 Terraform을 사용하여 Amazon Elastic Compute Cloud(Amazon EC2)의 Windows Server 장애 조치 클러스터(WSFC) 노드에 SQL Server 장애 조치 클러스터 인스턴스(FCIs)를 배포합니다. 또한 패턴은 데이터 및 로그 파일에 Amazon FSx 공유 스토리지를 사용합니다.

SQL Server 데이터베이스를 로 마이그레이션할 때 AWS첫 번째 선택은 Amazon RDS for SQL Server입니다. 그러나 경우에 따라 Amazon RDS for SQL Server가 적합하지 않아 SQL Server를 가용성이 높은 아키텍처의 Amazon EC2에 배포해야 합니다. 이 솔루션에서는 SQL Server FCIs WSFC 노드에 설치됩니다.

이 패턴에 포함된 Terraform 모듈은 최대 2개의 Amazon EC2 SQL Server 인스턴스를 프로비저닝합니다. Amazon FSx for Windows File Server 파일 시스템은 쿼럼 감시 역할을 하며 공유 데이터 및 로그 파일을 저장합니다. 구성된 인스턴스 수에 관계없이 SQL Server 인스턴스 노드는 항상 FCI 클러스터를 생성하고 조인하여 환경 패리티를 보장합니다. (일반적으로 1개의 인스턴스는 개발을 위해 구성되고 2개의 인스턴스는 프로덕션 환경을 위해 구성됩니다.) 고가용성을 위해 두 개의 노드를 사용하는 구성의 경우 내부 Network Load Balancer가 프로비저닝됩니다. Network Load Balancer는 FCI 클러스터에 구성된 상태 프로브를 사용하여 기본 노드를 식별합니다.

## 사전 조건 및 제한 사항
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ 별도의 가용 영역에 두 개의 서브넷이 있는 Amazon Virtual Private Cloud(VPC).
+ Amazon VPC [DHCP 옵션 세트](https://docs.aws.amazon.com/vpc/latest/userguide/DHCPOptionSet.html). Active Directory 도메인 이름을 확인하도록 도메인 이름을 구성하고 Active Directory 도메인 컨트롤러를 가리키도록 도메인 및 NetBIOS 이름 서버를 구성합니다. 자세한 내용은 [추가 정보의](#deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-additional) *VPC 구성을* 참조하세요.
+ AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD).
+ 사용자 지정 Amazon Machine Image(AMI) 자세한 내용은 [추가 정보의](#deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-additional) *AMI 구성을* 참조하세요.
+ SQL Server ISO 이미지가 포함된 Amazon Simple Storage Service(Amazon S3) 버킷입니다. 이 사전 조건은 제공된 `component.yaml` 파일과 함께 [EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)를 사용하여 사용자 지정 AMI를 빌드하는 경우에만 필요합니다.
+ AWS Key Management Service (AWS KMS) 암호화 키.
+ 기본적으로 SQL Server는 개발자 에디션 제품 키를 사용하여 설치됩니다. 프로덕션 시스템은 관련 변수가 모듈에 전달한 유효한 제품 키를 사용해야 합니다.

**제한 사항 **
+ 이 솔루션에는가 필요합니다 AWS Managed Microsoft AD. 그러나 원하는 경우 자체 관리형 Active Directory 구현을 대신 사용할 수 있습니다. 이렇게 하려면 포함된 Amazon FSx Terraform 모듈을 수정하여 `active_directory_id` 속성을 제거합니다. 그런 다음 [Terraform 설명서에](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/fsx_windows_file_system) 표시된 대로 자체 관리형 Active Directory에 필요한 네 가지 속성을 추가합니다.
+ SQL Server는 혼합 모드 인증을 사용하도록 설정되어 있습니다. 원하는 경우 Windows 전용 인증을 사용할 수 있습니다. 이렇게 하려면 제공된 사용자 데이터 스크립트에서 `setup.exe` 명령에 제공된 `/SECURITYMODE` 및 `/SAPWD` 파라미터를 제거합니다. `sql_accounts.tf` 파일을 제거하고 `instances.tf` 파일을 수정하여 `sql_sa_password` 항목을 제거할 수 있습니다.
+ 배포된 클러스터를 삭제할 때는 Active Directory에서 해당 가상 컴퓨터 객체와 개별 컴퓨터 객체를 제거해야 합니다. 객체를 제거하려면 Active Directory 관리 도구를 사용합니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전별 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

**제품 버전**

이 솔루션은 다음 버전으로 테스트되었습니다.
+ Windows Server 2019
+ SQL Server 2019
+ [Terraform v0.13.0](https://developer.hashicorp.com/terraform/language/v1.1.x/upgrade-guides/0-13)

## 아키텍처
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-architecture"></a>

**소스 기술 스택  **
+ SQL Server

**대상 기술 스택**
+ Amazon EC2를 사용하는 WSFC 노드의 SQL Server FCI
+ Amazon FSx for Windows File Server
+ Amazon S3 버킷
+ AWS Secrets Manager
+ AWS Managed Microsoft AD
+ AWS KMS
+ AWS Identity and Access Management (IAM)

**대상 아키텍처 **

다음 다이어그램은 이 솔루션의 아키텍처를 보여 줍니다.

![\[Amazon EC2의 Windows Server 장애 조치 클러스터 노드에 SQL Server 장애 조치 클러스터 인스턴스를 배포하는 아키텍처입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/45f3ab19-d240-4353-ab6e-f6e565f537a4/images/0bff16f2-94e7-4e86-91ea-7ab5f3725620.png)


이 다이어그램은 다음을 보여 줍니다.
+ EC2 인스턴스에 AWS KMS 및 Secrets Manager에 대한 액세스 권한을 제공하는 IAM 역할
+ 두 가용 영역에 걸쳐 프라이빗 서브넷의 Amazon EC2 인스턴스에 배포된 SQL Server 노드 2개
+ 활성 SQL Server 인스턴스에 대한 연결을 용이하게 하기 위한 Network Load Balancer(단일 노드 클러스터를 설정할 때 배포되지 않음)
+ SQL Server 노드에서 공유 스토리지를 위해 두 프라이빗 서브넷에 배포된 Amazon FSx for Windows File Server 파일 시스템
+ Active Directory 및 SQL Server 자격 증명 및 구성을 저장하기 위한 Secrets Manager
+ SQL Server 설치 이미지를 저장하기 위한 Amazon S3 버킷
+ AWS Managed Microsoft AD Windows 인증용
+ AWS KMS 암호화 키 생성

**자동화 및 규모 조정**

[GitHub 리포지토리](https://github.com/aws-samples/cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server)에 있는 Terraform 모듈을 사용하여 대상 아키텍처의 배포를 자동화할 수 있습니다. 환경에 고유한 변수 값을 포함하도록 `terraform.tfvars` 파일을 수정해야 합니다. Amazon S3 버킷, AWS Managed Microsoft AD 구성 요소, AWS KMS 암호화 키 및 일부 보안 암호는이 배포의 사전 조건이며 Terraform 코드에 포함되지 않습니다.

## 도구
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-tools"></a>

**AWS 서비스**
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)를 사용하면 디렉터리 인식 워크로드 및 AWS 리소스가에서 Microsoft Active Directory를 사용할 수 있습니다 AWS 클라우드. 이 패턴에서 AWS Managed Microsoft AD 는 Windows Server 및 SQL Server 인증과 DNS에 사용됩니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다. 이 패턴에서는 SQL Server 장애 조치 클러스터 인스턴스가 Amazon EC2 인스턴스에 설치됩니다.
+ EC2 Image Builder는 사용자 정의되고 안전하며 최신 서버 이미지의 생성, 관리 및 배포를 자동화할 수 있도록 도와주는 완전 관리형 입니다.
+ [Amazon FSx for Windows File Server](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html)는 Windows Server에서 완전 관리형 공유 스토리지를 제공합니다. 이 패턴에서 FSx for Windows File Server는 SQL Server 데이터 및 로그 파일과 쿼럼 감시를 위한 공유 스토리지를 제공합니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다. 이 패턴은 Secrets Manager 시크릿, Amazon Elastic Block Store(Amazon EBS) 볼륨의 SQL Server 스토리지 및 FSx for Windows File Server 파일 시스템을 암호화하는 데 사용됩니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 이용하면 코드의 시크릿을 포함해 하드 코딩된 보안 인증을 Secrets Manager에서 프로그래밍 방식으로 시크릿을 검색하도록 하는 API 호출로 바꿀 수 있습니다. 이 패턴에서는 SQL Server 설치 및 실행을 위한 Active Directory 자격 증명, `sa` 사용자 자격 증명 및 데이터베이스 연결 정보가 Secrets Manager에 저장됩니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다. 이 패턴은 Amazon S3 버킷을 사용하여 SQL Server 설치 이미지를 저장합니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.

******기타 도구**
+ [Microsoft SQL Server FCIs](https://learn.microsoft.com/en-us/sql/sql-server/failover-clusters/windows/always-on-failover-cluster-instances-sql-server?view=sql-server-ver15)는 Windows Server 클러스터 노드에 설치됩니다. 또한 여러 서브넷에 설치할 수 있습니다. 이 패턴에서는 SQL Server FCI 인스턴스가 WSFC 노드에 설치됩니다.
+ Terraform은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 오픈 소스 코드형 인프라(IaC) 도구입니다. 이 패턴에서 Terraform은 리소스를 생성하고 SQL Server FCI 인스턴스를 구성하는 데 사용됩니다.
+ [Windows Server 장애 조치 클러스터링](https://learn.microsoft.com/en-us/sql/sql-server/failover-clusters/windows/windows-server-failover-clustering-wsfc-with-sql-server?view=sql-server-ver15)은 SQL Server와 같은 호스팅 서버 애플리케이션의 고가용성을 지원하는 인프라 기능을 제공합니다. 이 패턴에서 FCI 노드는 WSFC 기능을 사용하여 인스턴스 수준에서 중복성을 통해 로컬 고가용성을 제공합니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server](https://github.com/aws-samples/cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server) 리포지토리에서 사용할 수 있습니다. 리포지토리에서 사용할 수 있는 리소스는 다음과 같습니다.
+ 솔루션의 개요와 추가 설치 및 사용 정보를 제공하는 `README.md` 파일
+ 이 패턴의 구성 요소를 프로비저닝하기 위한 기본 Terraform 구성 파일 세트 및 Amazon FSx 전용 모듈
+ Amazon EC2 사용자 데이터 스크립트로 실행되는 인스턴스 설정 스크립트
+ Image Builder가 사용자 지정 AMI를 생성하는 데 사용할 수 있는 `component.yam`l 파일

## 모범 사례
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-best-practices"></a>

보안 패치
+ AMI 사전 조건 설치 및 구성은 SQL Server FCI 클러스터를 배포하기 위한 최소 요구 사항입니다. 조직의 표준 및 보안 요구 사항을 준수하기 위해 추가 소프트웨어 및 구성이 필요할 수 있습니다.
+ 배포 후 Windows를 지속적으로 패치합니다. 실행 중인 인스턴스를 직접 패치하거나 최신 Windows 패치로 새 AMI를 생성하고 새 AMI를 사용하여 인스턴스(한 번에 하나씩)를 교체합니다.는 최신 운영 체제 패치, 드라이버 및 시작 에이전트가 포함된 새 Windows AMIs 매월 AWS 릴리스합니다. 새 인스턴스를 시작하거나 자체 사용자 지정 이미지를 만들 때는 최신 AMI를 사용해야 합니다.
+ Amazon EC2 인스턴스는 모든 발신 트래픽을 허용하도록 구성됩니다. 프로덕션 환경에 배포하는 경우이 트래픽을 필요한 대상으로 제한하기 위해 보안 그룹의 아웃바운드 규칙을 마련해야 합니다.
+ FSx for Windows File Server 파일 시스템은 파일 공유 및 파일 및 폴더 액세스에 대한 감사 로그를 자동으로 기록하고 환경에서 필요한 경우 원하는 대상으로 전송할 수 있습니다.
+ Secrets Manager 시크릿을 정기적으로 자동으로 교체합니다. Amazon EC2 인스턴스 키 페어의 경우 [AWS Secrets Manager를 사용하여 SSH 키 페어를 안전하게 저장하고 교체하는 방법](https://aws.amazon.com/blogs/security/how-to-use-aws-secrets-manager-securely-store-rotate-ssh-key-pairs/)에 설명된 대로 자동 교체 솔루션을 고려하세요. Active Directory 자격 증명 및 SQL Server `sa` 자격 증명 시크릿의 경우 암호 관리 정책에 따라 자동 교체를 설정합니다.

**Active Directory 관리**
+ FCI 클러스터의 일부로 Windows는 Active Directory에서 컴퓨터 이름 객체(CNO)를 생성합니다. CNO는 DNS 요청에 응답하고 트래픽을 활성 SQL 노드로 전달합니다. 이 Active Directory 제공 DNS는 사용하지 *않는* 것이 좋습니다. TTL이 너무 높아서 적절한 장애 조치 시간을 제공할 수 없으며 새 기본 IP 주소를 반영하는 데 5분 이상 걸리는 경우가 많습니다. 반면 가용성이 높은 설치의 경우 내부 Network Load Balancer는 30초 이내에 장애 조치를 수행하도록 구성됩니다.
+ 클러스터를 생성하려면 Active Directory 도메인 관리자가 필요합니다. 이 요구 사항은 클러스터 객체를 생성하고 Active Directory에서 권한을 수정하는 데 필요한 권한이 높기 때문입니다. 그러나 SQL Server 서비스는 도메인 관리자로 실행할 필요가 없습니다. 따라서 이를 위해 두 번째 Active Directory 사용자를 생성하는 것이 좋습니다. 그러나 서비스가 도메인 관리자 사용자로 실행되는 경우이 사용자를 제거할 수 있습니다. 이 경우이 패턴의 일부로 생성된 Active Directory 관리자 그룹에 도메인 관리자 사용자를 추가해야 합니다.

## 에픽
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-epics"></a>

### 클러스터 자격 증명 설정
<a name="set-up-cluster-credentials"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Active Directory 그룹 | 에서 다음 그룹을 AWS Managed Microsoft AD생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.html)자세한 내용은 AWS 설명서의 [AWS Managed Microsoft AD 그룹 생성을](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_create_group.html) 참조하세요. | 관리자 | 
| Active Directory 사용자를 생성하려면 | 에서 다음 사용자를 AWS Managed Microsoft AD생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.html)자세한 내용은 AWS 설명서의 [AWS Managed Microsoft AD 사용자 생성을](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups_create_user.html) 참조하세요. | 관리자 | 
| 는 보안 암호를 사용하여 Active Directory 자격 증명을 저장합니다. | Secrets Manager를 사용하여 다음 정보를 저장할 4개의 시크릿을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.html)자세한 내용은 AWS 설명서의 [AWS Secrets Manager 보안 암호 생성을](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) 참조하세요. | 관리자 | 

### 환경 준비
<a name="prepare-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Windows AMI를 생성합니다. | 필수 소프트웨어 및 구성이 포함된 사용자 지정 Windows AMI를 생성합니다. 자세한 내용은 [추가 세부 정보](#deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-additional)를 참조하십시오. | AWS 관리자, AWS DevOps | 
| Terraform 설치 | Terraform을 설치하려면 [Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) 웹 사이트의 지침을 따릅니다. | DevOps | 
| 리포지토리를 복제합니다. | 이 패턴의 [리포지토리](https://github.com/aws-samples/cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server)를 복제합니다. 자세한 내용은 GitHub 웹 사이트에서 [리포지토리 복제](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)를 참조하세요. | DevOps | 

### 클러스터 설치
<a name="install-the-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Terraform 변수를 수정합니다. | 제공된 `terraform.tfvars` 파일을 업데이트하여 모든 변수를 환경에 적합한 값으로 설정합니다.예를 들어, Active Directory 도메인 이름과 이전에 생성한 Active Directory 그룹의 이름을 사용하도록 `domain_group_administrators` 및 `domain_group_rdp_users` 변수를 업데이트합니다. | DevOps | 
| Terraform을 초기화합니다. | 제안된 배포를 보려면 리포지토리의 루트로 이동합니다. Terraform 명령줄 인터페이스(CLI)를 사용하여를 실행`terraform init`한 다음를 실행합니다`terraform plan`. | DevOps | 
| 리소스 배포 | SQL 클러스터 및 관련 리소스를 배포하려면 Terraform CLI를 사용하여를 실행합니다`terraform apply`. | AWS DevOps, AWS 관리자 | 
| 배포를 검증합니다. | 배포를 검증하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.html) | DBA, AWS 시스템 관리자 | 

## 문제 해결
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Terraform 프로비저닝이 완료되었지만 Windows Failover Cluster Manager에 클러스터가 생성되었거나 클러스터가 작동하지 않는 상태로 표시되지 않습니다. | 리소스의 전체 설치와 클러스터의 구성에는 45\$160분이 걸릴 수 있습니다. Terraform이 완료되면 사용자 데이터 스크립트가 완료될 때까지 실행되어야 하므로 여러 번 재부팅해야 합니다. 진행 상황을 모니터링하기 위해 `C:\` 드라이브의 `Checkpoints` 디렉터리와의 SQL Server 설치 로그를 사용할 수 있습니다`C:\Program Data\Microsoft SQL Server\150\Log`. 완료되면 `C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log` 파일에서 **Installation Complete** 메시지를 사용할 수 있습니다. | 
| 작동하는 클러스터를 프로비저닝한 후 Terraform을 사용하여 클러스터를 삭제하고 다시 생성해도 성공하지 않습니다. Terraform이 완료되었지만 클러스터가 제대로 설정되지 않았습니다. | 프로비저닝 프로세스의 일부에는 Active Directory 및 Active Directory DNS에 머신과 가상 객체를 등록하는 작업이 포함됩니다. Amazon EC2 클러스터 노드 및 클러스터 노드의 컴퓨터 이름이 있는 경우 FCI는 올바르게 초기화할 수 없으며 프로비저닝에 실패합니다.이 문제를 해결하려면 아래 단계를 따르세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.html) | 

## 관련 리소스
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-resources"></a>

**AWS 설명서**
+ [Image Builder를 사용하여 사용자 지정 이미지 생성](https://docs.aws.amazon.com/imagebuilder/latest/userguide/create-images.html)
+ [KMS 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [범용 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)
+ [키 정책 생성](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)
+ [생성 AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html)

## 추가 정보
<a name="deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-additional"></a>

**Terraform 모듈 정보**

이 모듈은 AMI 구성과 사용자 데이터 구성을 혼합하여 프로비저닝 시간과 안정성을 적절히 혼합합니다. 프로비저닝 중에 Windows를 여러 번 다시 시작하고 기다려야 합니다. 영구 사용자 데이터를 다시 시작하는 동안 무한 루프로부터 보호하기 위해 체크포인트 메서드가 구현되었습니다. 사용자 데이터는 영구적이 되도록 구성됩니다. 따라서 사용자 데이터 구성 스크립트는 멱등성을 갖도록 개발되었으며 계속 개발되어야 합니다. Idempotency는 업데이트 프로세스를 간소화하므로 수동 구성 없이 업데이트 주기 중에 인스턴스를 교체하여 FCI 클러스터에 다시 조인하거나 다시 생성할 수 있습니다.

**SQL Server 연결 문자열 및 장애 조치 클러스터링**

모듈은 이 데이터베이스의 연결 문자열에 사용해야 하는 엔드포인트 주소가 포함된 시크릿을 게시합니다. 이름은 `{environment_name}/sqlserver/{cluster_name}/endpoint` 형식입니다. 노드가 하나만 사용되는 설치의 경우 Amazon EC2 인스턴스 SQL Server 인터페이스의 IP 주소가 될 것으로 예상할 수 있습니다. 고가용성 설치(인스턴스 2개)의 경우 내부 Network Load Balancer의 DNS 이름이 될 것으로 예상할 수 있습니다.

이 모듈에서는 장애 조치 클러스터링 가상 IPs 지원되지 않습니다. 가상 IP가 작동하려면 동일한 서브넷에 남아 있어야 합니다. 에서는 단일 서브넷 AWS이 여러 가용 영역에 걸쳐 있을 수 없습니다. 따라서 가상 IPs가용성으로 간주할 수 없습니다.

각 Amazon EC2 인스턴스에는 3개의 프라이빗 IP 주소가 부여됩니다. 사용법은 다음과 같습니다.
+ **네트워크 트래픽의 기본 IP** - 송신 트래픽의 소스 IP입니다.
+ **FCI 통신** - 장애 조치 클러스터의 상태 및 동기화를 유지하는 데 사용됩니다.
+ **SQL Server(TCP 포트 1433)** - 리스너 및는 하트비트 트래픽을 수신하여 기본 인스턴스를 결정합니다.

**VPC 구성**

[사전 조건에](#deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx-prereqs)는 DNS 확인에 Active Directory를 사용하도록 구성된 DHCP 옵션 세트가 나열됩니다. 그러나이 사전 조건은 엄격한 요구 사항이 아닙니다. 엄격한 요구 사항은 EC2 인스턴스가 Active Directory 도메인 이름을 확인할 수 있어야 한다는 것입니다. 이 요구 사항을 충족하는 방법은 Amazon Route 53 Resolver 엔드포인트 사용과 같은 다른 방법으로 수행할 수 있습니다. 자세한 내용은 [Directory Service의 DNS 확인을 Amazon Route 53 Resolver와 통합(블로그 게시물)을 참조하세요](https://aws.amazon.com/blogs/networking-and-content-delivery/integrating-your-directory-services-dns-resolution-with-amazon-route-53-resolvers/).AWS 

**AMI 구성**

이 패턴에 사용되는 AMI에는 다음과 같은 사전 필수 소프트웨어 및 구성이 포함되어야 합니다.

1. SQL Server 2019 설치 파일을 다운로드하여 로 확장합니다`C:\SQL_Install_media`.

1. 다음 Windows 기능을 설치합니다.
   + `Install-WindowsFeature Failover-Clustering`
   + `Install-WindowsFeature RSAT-AD-PowerShell`
   + `Install-WindowsFeature RSAT-AD-Tools`
   + `Install-WindowsFeature RSAT-Clustering-Mgmt`
   + `Install-WindowsFeature RSAT-Clustering-PowerShell`
   + `Install-WindowsFeature RSAT-Clustering-CmdInterface`

1. Windows 방화벽 비활성화
   + `Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False`

1. 다음과 같이 CredSSP 인증 방법(`<domain>`조직의 Windows 도메인 이름으로 대체)을 활성화합니다.
   + `Enable-WSManCredSSP -Role "Server" -Force`
   + `Enable-WSManCredSSP -Role "Client" -DelegateComputer *.<domain>.com -Force`

1. 다음 레지스트리 키를 설정합니다.
   + NTLM 인증 자격 증명 허용:
     + `HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation`
       + 이름: `AllowFreshCredentialsWhenNTLMOnly`
       + 값 = 1
       + 유형: `REG_DWORD`
   + 로컬 도메인 컴퓨터가 PowerShell의 NTLM을 사용하도록 허용:
     + 경로: `HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly`
       + 이름: `1`
       + 값: `wsman/*.<domain>.com`
       + 유형: `REG_SZ`

1. 다음과 같이 [PowerShell Gallery](https://learn.microsoft.com/en-us/powershell/gallery/overview?view=powershellget-3.x)를 설정합니다.
   + `[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12`
   + `Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force`
   + `Set-PSRepository -Name PSGallery -InstallationPolicy Trusted`

1. `*`다음 Windows PowerShell 모듈을 설치합니다.
   + `Install-Module -Name ComputerManagementDsc`
   + `Install-Module -Name FailOverClusterDsc`
   + `Install-Module -Name PSDscResources`
   + `Install-Module -Name xSmbShare`
   + `Install-Module -Name xActiveDirectory`
   + `Install-Module -Name SqlServer`

Image Builder를 사용하여 AMI를 생성하려면 Image Builder 설명서의 [EC2 Image Builderconsole 마법사를 사용하여 이미지 파이프라인 생성](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-image-pipeline.html)의 지침을 따릅니다. 이전 사전 조건을 사용하여 레시피의 구성 요소를 생성하려면 다음 단계를 사용합니다.

1. [GitHub 리포지토리](https://github.com/aws-samples/cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server)의 `ami `폴더에서 [component.yaml](https://github.com/aws-samples/cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server/blob/main/ami/component.yaml) 파일을 다운로드합니다.

1. 콘텐츠를 새 Image Builder 구성 요소에 복사합니다.

1. 다음 자리 표시자를 정보로 업데이트합니다.
   + `<domain>` - Active Directory 도메인 이름
   + `<bucket_name>` - SQL Server 이미지가 포함된 Amazon S3 버킷의 이름

# Amazon Aurora PostgreSQL 및 Amazon RDS for PostgreSQLPostgreSQL 연결 배열 에뮬레이션
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql"></a>

*Rajkumar Raghuwanshi, Bhanu Ganesh Gudivada, Sachin Khanna, Amazon Web Services*

## 요약
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql-summary"></a>

이 패턴은 [Amazon Aurora PostgreSQL](https://aws.amazon.com/rds/aurora/) 및 [Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/) 환경에서 빈 인덱스 위치가 있는 Oracle PL/SQL 연결 배열을 에뮬레이션하는 방법을 설명합니다. 또한 각가 마이그레이션 중에 빈 인덱스 위치를 처리하는 방법과 관련하여 Oracle PL/SQL 연결 배열과 PostgreSQL 배열 간의 몇 가지 차이점에 대해서도 설명합니다.

Oracle 데이터베이스를 마이그레이션할 때 빈 인덱스 위치를 처리하기 위한 `aws_oracle_ext` 함수를 사용하는 대신 PostgreSQL 대안을 제공합니다. 이 패턴은 추가 열을 사용하여 인덱스 위치를 저장하고 기본 PostgreSQL 기능을 통합하면서 Oracle의 희소 배열 처리를 유지합니다.

**Oracle**

Oracle에서는 배열에 `NULL` 요소를 추가하는 수집 방법을 사용하여 `EXTEND` 컬렉션을 빈 것으로 초기화하고 채울 수 있습니다. 로 인덱싱된 PL/SQL 연결 배열로 작업할 때 `EXTEND` 메서드`PLS_INTEGER`는 `NULL` 요소를 순차적으로 추가하지만 요소는 비순차적 인덱스 위치에서 초기화할 수도 있습니다. 명시적으로 초기화되지 않은 인덱스 위치는 비어 있습니다.

이러한 유연성을 통해 임의의 위치에 요소를 채울 수 있는 희소 배열 구조가 가능합니다. `FIRST` 및 `LAST` 경계가 `FOR LOOP` 있는를 사용하여 컬렉션을 반복할 때 초기화된 요소(`NULL`또는 정의된 값이 있는 요소)만 처리되고 빈 위치는 건너뜁니다.

Amazon RDS PostgreSQL 및 Amazon Aurora PostgreSQL

PostgreSQL은 빈 값을 `NULL` 값과 다르게 처리합니다. 빈 값은 1바이트의 스토리지를 사용하는 개별 엔터티로 저장됩니다. 배열에 빈 값이 있는 경우 PostgreSQL은 비어 있지 않은 값과 마찬가지로 순차적 인덱스 위치를 할당합니다. 그러나 시스템이 빈 위치를 포함하여 인덱싱된 모든 위치를 반복해야 하므로 순차 인덱싱에는 추가 처리가 필요합니다. 따라서 희소 데이터 세트에는 기존 배열 생성이 비효율적입니다.

**AWS Schema Conversion Tool**

[AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/)는 일반적으로 `aws_oracle_ext` 함수Oracle-to-PostgreSQL 마이그레이션을 처리합니다. 이 패턴에서는 PostgreSQL 배열 유형을 인덱스 위치를 저장하기 위한 추가 열과 결합하는 기본 PostgreSQL 기능을 사용하는 대체 접근 방식을 제안합니다. 그런 다음 시스템은 인덱스 열만 사용하여 배열을 반복할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ 관리자 권한이 있는 AWS Identity and Access Management (IAM) 사용자.
+ Amazon RDS 인스턴스 또는 Aurora PostgreSQL-Compatible 인스턴스
+ 관계형 데이터베이스에 대한 기본적인 이해.

**제한 사항 **
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

**제품 버전**

이 솔루션은 다음 버전으로 테스트되었습니다.
+ Amazon Aurora PostgreSQL 13.3
+ Amazon RDS for PostgreSQL 13.3
+ AWS SCT 1.0.674
+ Oracle 12c EE 12.2

## 아키텍처
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle 데이터베이스

**대상 기술 스택**
+ Amazon Aurora PostgreSQL
+ Amazon RDS for PostgreSQL

**대상 아키텍처 **

![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a62d038c-ca3c-41e1-aa7e-74282d2e54f4/images/13aacf00-655a-4149-a4e7-42b66dbea4e1.png)


이 다이어그램은 다음을 보여 줍니다.
+ Amazon RDS for Oracle 소스 데이터베이스
+ Oracle 함수를 PostgreSQL로 변환하기 AWS SCT 위한가 있는 Amazon EC2 인스턴스
+ Amazon Aurora PostgreSQL과 호환되는 대상 데이터베이스

## 도구
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql-tools"></a>

**서비스**
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 클라우드용으로 구축되었으며 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ Oracle용 Amazon Relational Database Service(RDS)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영, 확장하는 데 도움이 됩니다.
+ Amazon Relational Database Service(RDS) for PostgreSQL는 AWS Cloud에서 관계형 데이터베이스를 설정, 운영 및 규모를 조정하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

**기타 도구**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html)는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경입니다.
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다. 이 패턴에서 pgAdmin은 RDS for PostgreSQL 데이터베이스 인스턴스에 연결하고 데이터를 쿼리합니다. 또는 AWS CLI mb 명령을 사용할 수도 있습니다.

## 모범 사례
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql-best-practices"></a>
+ 데이터 세트 경계 및 엣지 시나리오를 테스트합니다.
+ out-of-bounds 것이 좋습니다.
+ 희소 데이터 세트를 스캔하지 않도록 쿼리를 최적화합니다.

## 에픽
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql-epics"></a>

### Oracle 연결 배열 동작(소스)
<a name="oracle-associative-array-behavior-source"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle에서 소스 PL/SQL 블록을 생성합니다. | Oracle에서 다음 연결 배열을 사용하는 소스 PL/SQL 블록을 생성합니다.<pre>DECLARE<br />    TYPE country_codes IS TABLE OF VARCHAR2(100) INDEX BY pls_integer;<br />    cc country_codes;<br />    cc_idx NUMBER := NULL;<br />BEGIN<br />    cc(7) := 'India';<br />    cc(3) := 'UK';<br />    cc(5) := 'USA';<br />    cc(0) := 'China';<br />    cc(-2) := 'Invalid';<br />    dbms_output.put_line('cc_length:' || cc.COUNT);<br />    IF (cc.COUNT > 0) THEN<br />        cc_idx := cc.FIRST;<br />        FOR i IN 1..cc.COUNT LOOP<br />            dbms_output.put_line('cc_idx:' || cc_idx || ' country:' || cc(cc_idx));<br />            cc_idx := cc.next(cc_idx);<br />        END LOOP;<br />    END IF;<br />END;</pre> | DBA | 
| PL/SQL 블록을 실행합니다. | Oracle에서 소스 PL/SQL 블록을 실행합니다. 연결 배열의 인덱스 값 사이에 간격이 있는 경우 해당 간격에 데이터가 저장되지 않습니다. 이렇게 하면 Oracle 루프가 인덱스 위치를 통해서만 반복할 수 있습니다. | DBA | 
| 출력 결과를 검토합니다. | 5개의 요소가 비연속 간격으로 배열(`cc`)에 삽입되었습니다. 배열 수는 다음 출력에 표시됩니다.<pre>cc_length:5<br />cc_idx:-2 country:Invalid<br />cc_idx:0 country:China<br />cc_idx:3 country:UK<br />cc_idx:5 country:USA<br />cc_idx:7 country:India</pre> | DBA | 

### PostgreSQL 연결 배열 동작(대상)
<a name="postgresql-associative-array-behavior-target"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PostgreSQL에서 대상 PL/pgSQL 블록을 생성합니다. PostgreSQL | PostgreSQL에서 다음 연결 배열을 사용하는 대상 PL/pgSQL PostgreSQL 블록을 생성합니다.<pre>DO $$<br />DECLARE<br />    cc character varying(100)[];<br />    cc_idx integer := NULL;<br />BEGIN<br />    cc[7] := 'India';<br />    cc[3] := 'UK';<br />    cc[5] := 'USA';<br />    cc[0] := 'China';<br />    cc[-2] := 'Invalid';<br />    RAISE NOTICE 'cc_length: %', ARRAY_LENGTH(cc, 1);<br />    IF (ARRAY_LENGTH(cc, 1) > 0) THEN<br />        FOR i IN ARRAY_LOWER(cc, 1)..ARRAY_UPPER(cc, 1)<br />        LOOP<br />            RAISE NOTICE 'cc_idx:% country:%', i, cc[i];<br />        END LOOP;<br />    END IF;<br />END;<br />$$;</pre> | DBA | 
| PL/pgSQL 블록을 실행합니다. | PostgreSQL에서 대상 PL/pgSQL 블록을 실행합니다. PostgreSQL 연결 배열의 인덱스 값 사이에 간격이 있는 경우 해당 간격에 데이터가 저장되지 않습니다. 이렇게 하면 Oracle 루프가 인덱스 위치를 통해서만 반복할 수 있습니다. | DBA | 
| 출력 결과를 검토합니다. | 는 인덱스 위치 간의 간격에 `NULL` 저장되므로 배열 길이는 5보다 큽니다. 다음 출력과 같이 루프는 10회 반복을 완료하여 배열에서 5개의 값을 검색합니다.<pre>cc_length:10<br />cc_idx:-2 country:Invalid<br />cc_idx:-1 country:<NULL><br />cc_idx:0 country:China<br />cc_idx:1 country:<NULL><br />cc_idx:2 country:<NULL><br />cc_idx:3 country:UK<br />cc_idx:4 country:<NULL><br />cc_idx:5 country:USA<br />cc_idx:6 country:<NULL><br />cc_idx:7 country:India</pre> | DBA | 

### Oracle 연결 배열 동작 에뮬레이션
<a name="emulate-oracle-associative-array-behavior"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 배열 및 사용자 정의 유형을 사용하여 대상 PL/pgSQL 블록을 생성합니다. | 성능을 최적화하고 Oracle의 기능과 일치시키기 위해 인덱스 위치와 해당 데이터를 모두 저장하는 사용자 정의 유형을 생성할 수 있습니다. 이 접근 방식은 인덱스와 값 간의 직접 연결을 유지하여 불필요한 반복을 줄입니다.<pre>DO $$<br />DECLARE<br />    cc country_codes[];<br />    cc_append country_codes := NULL;<br />    i record;<br />BEGIN<br />    cc_append.idx = 7;<br />    cc_append.val = 'India';<br />    cc := array_append(cc, cc_append);<br />    cc_append.idx = 3;<br />    cc_append.val = 'UK';<br />    cc := array_append(cc, cc_append);<br />    cc_append.idx = 5;<br />    cc_append.val = 'USA';<br />    cc := array_append(cc, cc_append);<br />    cc_append.idx = 0;<br />    cc_append.val = 'China';<br />    cc := array_append(cc, cc_append);<br />    cc_append.idx = - 2;<br />    cc_append.val = 'Invalid';<br />    cc := array_append(cc, cc_append);<br />    RAISE NOTICE 'cc_length: %', ARRAY_LENGTH(cc, 1);<br />    IF (ARRAY_LENGTH(cc, 1) > 0) THEN<br />        FOR i IN (<br />            SELECT<br />                *<br />            FROM<br />                unnest(cc)<br />            ORDER BY<br />                idx)<br />                LOOP<br />                    RAISE NOTICE 'cc_idx:% country:%', i.idx, i.val;<br />                END LOOP;<br />    END IF;<br />END;<br />$$;</pre> | DBA | 
| PL/pgSQL 블록을 실행합니다. | 대상 PL/pgSQL 블록을 실행합니다. 연결 배열의 인덱스 값 사이에 간격이 있는 경우 해당 간격에 데이터가 저장되지 않습니다. 이렇게 하면 Oracle 루프가 인덱스 위치를 통해서만 반복할 수 있습니다. | DBA | 
| 출력 결과를 검토합니다. | 다음 출력과 같이 사용자 정의 유형은 채워진 데이터 요소만 저장합니다. 즉, 배열 길이는 값 수와 일치합니다. 따라서 기존 데이터만 처리하도록 `LOOP` 반복이 최적화되므로 빈 위치를 추적할 필요가 없습니다.<pre>cc_length:5<br />cc_idx:-2 country:Invalid<br />cc_idx:0 country:China<br />cc_idx:3 country:UK<br />cc_idx:5 country:USA<br />cc_idx:7 country:India</pre> | DBA | 

## 관련 리소스
<a name="emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql-resources"></a>

**AWS 설명서**
+ [AWS 데이터베이스 블로그](https://aws.amazon.com/blogs/database/)
+ [Oracle Database 19c - Amazon Aurora PostgreSQL Migration Playbook](https://docs.aws.amazon.com/dms/latest/oracle-to-aurora-postgresql-migration-playbook/chap-oracle-aurora-pg.html)

**기타 설명서**
+ [Oracle 연결 배열](https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/associative-arrays.html#GUID-8060F01F-B53B-48D4-9239-7EA8461C2170)
+ PostgreSQL JSON 함수 및 연산자
+ [PostgreSQL 사용자 정의 유형](https://www.postgresql.org/docs/current/sql-createtype.html)

# Amazon RDS에서 PostgreSQL DB 인스턴스에 대한 암호화된 연결 활성화하기
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds"></a>

*Rohit Kapoor, Amazon Web Services*

## 요약
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-summary"></a>

Amazon Relational Database Service(Amazon Relational Database Service)는 PostgreSQL DB 인스턴스에 대한 SSL 암호화를 지원합니다. SSL을 사용하여 애플리케이션과 Amazon RDS for PostgreSQL DB 인스턴스 사이의 PostgreSQL 연결을 암호화할 수 있습니다. 기본적으로 Amazon RDS for PostgreSQL는 SSL/TLS를 사용하며 모든 클라이언트가 SSL/TLS 암호화를 사용하여 연결하기를 기대합니다. Amazon RDS for PostgreSQL은 TLS 버전 1.1 및 1.2를 지원합니다.

이 패턴은 Amazon RDS for PostgreSQL DB instance 인스턴스의 암호화된 연결을 활성화하는 방법을 설명합니다. 동일한 프로세스를 사용하여 Amazon Aurora PostgreSQL-Compatible Edition에서 암호화된 연결을 활성화할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-prereqs"></a>
+ 활성 상태의 AWS 계정
+ [Amazon RDS for PostgreSQL DB 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_RDS_Configuring.html)
+ [SSL 번들](https://www.postgresql.org/docs/current/ssl-tcp.html)

## 아키텍처
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-architecture"></a>

![\[Amazon RDS에서 PostgreSQL DB 인스턴스에 대해 암호화된 연결 활성화하기\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4f87c6a3-b4ff-4248-96d3-a4a498659735/images/ccc5c880-1191-4c12-a255-6908b96b96a5.png)


## 도구
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-tools"></a>
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL를 위한 오픈 소스 관리 및 개발 플랫폼입니다. Linux, Unix, macOS, Windows에서 pgAdmin을 사용하여 PostgreSQL 10 이상에서 데이터베이스 객체를 관리할 수 있습니다.
+ [PostgreSQL 편집기](https://wiki.postgresql.org/wiki/PostgreSQL_Clients)는 쿼리를 생성, 개발 및 실행하고 요구 사항에 따라 코드를 편집하는 데 도움이 되는 보다 사용자 친화적인 인터페이스를 제공합니다.

## 모범 사례
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-best-practices"></a>
+ 비보안 데이터베이스 연결을 모니터링합니다.
+ 데이터베이스 액세스 권한을 감사합니다.
+ 백업 및 스냅샷이 저장 시 암호화되는지 확인하도록 하십시오.
+ 데이터베이스 액세스를 모니터링합니다.
+ 무제한 액세스 그룹은 피하도록 하십시오.
+ [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html)로 알림을 개선합니다.
+ 정책 준수를 정기적으로 모니터링합니다.

## 에픽
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-epics"></a>

### 신뢰할 수 있는 인증서를 다운로드하여 트러스트 스토어로 가져옵니다.
<a name="download-a-trusted-certificate-and-import-it-into-your-trust-store"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 컴퓨터에 신뢰할 수 있는 인증서를 로드합니다. | 컴퓨터의 신뢰할 수 있는 루트 인증 기관 스토어에 인증서를 추가하려면 다음 단계를 따르십시오. (이 지침에서는 Window Server를 예로 사용합니다.)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html) | DevOps 엔지니어, 마이그레이션 엔지니어, DBA | 

### SSL 연결 강제 설정
<a name="force-ssl-connections"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 매개변수 그룹을 생성하고 rds.force\$1ssl 매개변수를 설정합니다. | PostgreSQL DB 인스턴스에 사용자 지정 매개변수 그룹이 있는 경우 매개변수 그룹을 편집하고 `rds.force_ssl`을 1로 변경합니다.DB 인스턴스에서 `rds.force_ssl`이 활성화되지 않은 기본 매개변수 그룹을 사용하는 경우 새 매개변수 그룹을 생성합니다. Amazon RDS API를 사용하거나 다음 지침에 따라 수동으로 새 매개변수 그룹을 수정할 수 있습니다.새 파라미터 그룹을 생성하려면 다음을 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html)파라미터 그룹을 PostgreSQL DB 인스턴스에 연결하려면 다음을 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html)자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html)를 참조하세요. | DevOps 엔지니어, 마이그레이션 엔지니어, DBA | 
| SSL 연결을 강제 설정합니다. | Amazon RDS for PostgreSQL DB 인스턴스에 연결합니다. SSL을 사용하지 않는 연결 시도는 오류 메시지와 함께 거부됩니다. 자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.SSL.html#PostgreSQL.Concepts.General.SSL.Requiring)를 참조하세요. | DevOps 엔지니어, 마이그레이션 엔지니어, DBA | 

### SSL 확장 설치
<a name="install-ssl-extension"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSL 확장을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html)자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.SSL.html)를 참조하세요. | DevOps 엔지니어, 마이그레이션 엔지니어, DBA | 

### SSL에 대한 PostgreSQL 클라이언트를 구성합니다.
<a name="configure-your-postgresql-client-for-ssl"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSL을 사용하도록 클라이언트를 구성합니다. | SSL을 사용하면 TLS 프로토콜을 사용하는 암호화된 연결을 지원하는 PostgreSQL 서버를 시작할 수 있습니다. 서버는 동일한 TCP 포트에서 표준 연결과 SSL 연결을 모두 수신하고 연결 클라이언트와 SSL 사용 여부를 협상합니다. 기본적으로, 이는 클라이언트 옵션입니다.psql 클라이언트를 사용 중인 경우,[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html)기타 PostgreSQL 클라이언트의 경우,[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html)이러한 클라이언트에 대해 다음 페이지를 검토하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html) | DevOps 엔지니어, 마이그레이션 엔지니어, DBA | 

## 문제 해결
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| SSL 인증서를 다운로드할 수 없습니다. | 웹사이트 연결을 확인하고, 로컬 컴퓨터에 인증서를 다시 다운로드해 보십시오. | 

## 관련 리소스
<a name="enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds-resources"></a>
+ [Amazon RDS for PostgreSQL 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)
+ [PostgreSQL DB 인스턴스와 함께 SSL 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.SSL.html) (Amazon RDS 설명서)
+ [SSL을 사용한 안전한 TCP/IP 연결](https://www.postgresql.org/docs/9.1/ssl-tcp.html) (PostgreSQL 설명서)
+ [SSL 사용](https://jdbc.postgresql.org/documentation/ssl/) (JDBC 설명서)

# 기존 Amazon RDS for PostgreSQL DB 인스턴스 암호화하기
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance"></a>

*Piyush Goyal, Shobana Raghu, Yaser Raja, Amazon Web Services*

## 요약
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-summary"></a>

이 패턴은 AWS 클라우드에서 가동 중지 시간을 최소화하면서 PostgreSQL용 Amazon Relational Database Service(RDS) 단원을 암호화하는 방법을 설명합니다. 이 프로세스는 Amazon RDS for MySQL DB 인스턴스에서 사용할 수 있습니다.

Amazon RDS DB 인스턴스를 생성할 때 암호화를 사용하도록 설정할 수 있지만, 생성된 후에는 사용할 수 없습니다. 하지만 DB 인스턴스의 스냅샷을 만든 다음 해당 스냅샷의 암호화된 사본을 만들어 암호화되지 않은 DB 인스턴스에 암호화를 추가할 수 있습니다. 그런 다음 암호화된 스냅샷에서 DB 인스턴스를 복원하여 원본 DB 인스턴스의 암호화된 사본을 얻을 수 있습니다. 이 작업 중에 프로젝트가 다운타임 (최소한 쓰기 트랜잭션의 경우) 을 허용하는 경우 이 작업만 수행하면 됩니다. 암호화된 새 DB 인스턴스 사본을 사용할 수 있게 되면 애플리케이션이 새 데이터베이스를 가리키도록 할 수 있습니다. 그러나 프로젝트에서 이러한 활동으로 인한 심각한 가동 중지 시간이 허용되지 않는 경우 가동 중지 시간을 최소화하는 데 도움이 되는 대체 접근 방식이 필요합니다. 이 패턴은 AWS Database Migration Service(AWS DMS)를 사용하여 데이터를 마이그레이션하고 지속적으로 복제하므로 가동 중지 시간을 최소화하면서 암호화된 새 데이터베이스로 전환할 수 있습니다. 

Amazon RDS 암호화 DB 인스턴스는 업계 표준인 AES-256 암호화 알고리즘을 사용하여 Amazon RDS DB 인스턴스를 호스팅하는 서버의 데이터를 암호화합니다. 데이터가 암호화되면 Amazon RDS는 성능에 미치는 영향을 최소화하면서 데이터의 액세스 인증 및 암호 해독을 투명하게 처리합니다. 암호화를 사용하도록 데이터베이스 클라이언트 애플리케이션을 수정하지 않아도 됩니다.

## 사전 조건 및 제한 사항
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 암호화 해제된 Amazon RDS for PostgreSQL DB 인스턴스
+ AWS DMS 작업을 사용한 경험(생성, 수정 또는 중지) (AWS DMS 설명서의 [AWS DMS 작업](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html) 사용 참조)
+ 데이터베이스 암호화를 위한 AWS Key Management Service(AWS KMS))에 대한 지식이 있어야 함([AWS KMS 설명서 참고](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html))

**제한 사항 **
+ Amazon RDS DB 인스턴스에 대한 암호화는 암호화를 생성할 때에만 활성화할 수 있으며 DB 인스턴스가 생성된 후에는 불가능합니다.
+ [로깅되지 않은 테이블](https://www.postgresql.org/docs/current/sql-createtable.html)의 데이터는 스냅샷을 사용하여 복원되지 않습니다. 자세한 내용은 [PostgreSQL로 작업하기 위한 모범 사례를](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html#CHAP_BestPractices.PostgreSQL) 참조하십시오.
+ 암호화되지 않은 DB 인스턴스의 암호화된 읽기 전용 복제본이나 암호화된 DB 인스턴스의 암호화되지 않은 읽기 전용 복제본은 보유할 수 없습니다.
+ 암호화되지 않은 백업 또는 스냅샷을 암호화된 DB 인스턴스로 복원할 수 없습니다.
+ AWS DMS는 시퀀스를 자동으로 전송하지 않으므로 이를 처리하려면 추가 단계가 필요합니다.

자세한 내용은 Amazon RDS 설명서의 [Amazon RDS 암호화된 DB 인스턴스의 제한을](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html#Overview.Encryption.Limitations) 참조하십시오.

## 아키텍처
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-architecture"></a>

**소스 아키텍처**
+ 암호화되지 않은 RDS DB 인스턴스

**대상 아키텍처 **
+ 암호화된 RDS DB 인스턴스
  + 대상 RDS DB 인스턴스는 원본 RDS DB 인스턴스의 DB 스냅샷 복사본을 복원하여 생성됩니다.
  + AWS KMS 키는 스냅샷을 복원하는 동안 암호화하는 데 사용됩니다.
  + AWS DMS 복제 작업은 데이터를 마이그레이션하는 데 사용됩니다.

![\[프로세스는 AWS DMS를 사용하여 기존 Amazon RDS for PostgreSQL DB 인스턴스를 새 DB로 암호화합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/44dd8420-d89d-466e-b7fb-1bdafab8f7f9.png)


## 도구
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-tools"></a>

**암호화를 활성화하는 데 사용되는 도구:**
+ 암호화를 위한 AWS KMS 키 - 암호화된 DB 인스턴스를 생성할 때 고객 관리형 키 또는 Amazon RDS용 AWS 관리형 키를 선택하여 DB 인스턴스를 암호화할 수 있습니다. 고객 관리형 키에 대한 키 식별자를 지정하지 않으면 Amazon RDS는 새 DB 인스턴스에 대해 AWS 관리형 키를 사용합니다. Amazon RDS는 AWS 계정에 대한 AWS 관리형 키를 생성합니다. AWS 계정에는 각 AWS 리전마다 Amazon RDS에 대해 서로 다른 AWS 관리형 키가 있습니다. Amazon RDS 암호화에 KMS 키를 사용하는 방법에 대한 자세한 내용은 [Amazon RDS 리소스 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)를 참조하십시오.

**지속적인 복제에 사용되는 도구**:
+ AWS Database Migration Service(AWS DMS)를 사용하여 원본 DB에서 대상 DB로 변경 내용을 복제할 수 있습니다. 다운타임을 최소화하려면 원본과 대상 DB를 동기화된 상태로 유지하는 것이 중요합니다. AWS DMS 설정 및 작업 생성에 대한 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 참조하십시오.

## 에픽
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-epics"></a>

### 소스 DB 인스턴스의 스냅샷을 만들고 암호화합니다.
<a name="create-a-snapshot-of-the-source-db-instance-and-encrypt-it"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 원본 PostgreSQL DB 인스턴스의 세부 정보를 확인합니다. | Amazon RDS 콘솔에서 원본 PostgreSQL DB 인스턴스를 선택합니다. **구성** 탭에서 인스턴스에 대해 암호화가 활성화되어 있지 않은지 확인합니다. 화면 그림은 [추가 정보](#encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional) 섹션을 참조하십시오. | DBA | 
| DB 스냅샷을 만듭니다. | 암호화하려는 인스턴스의 DB 스냅샷을 생성합니다. 스냅샷을 만드는 데 걸리는 시간은 데이터베이스의 크기에 따라 다릅니다. 지침은 Amazon RDS 설명서의 [DB 스냅샷 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)을 참조하십시오. | DBA | 
| 스냅샷을 암호화합니다. | Amazon RDS 콘솔 탐색 창에서 [스냅샷] 을 선택하고 생성한 DB **스냅샷**을 선택합니다. **작업**에서 **스냅샷 복사**를 선택합니다. 대상 AWS 리전과 DB 스냅샷 사본의 이름을 해당 필드에 입력합니다. **암호화 활성화** 확인란을 선택합니다. [**Master Key**]에 대해 DB 스냅샷 사본을 암호화할 때 사용할 KMS 키 식별자를 지정합니다. [**Copy Snapshot**]을 선택합니다. 자세한 내용은 Amazon RDS 문서에서 [스냅샷 복사](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)를 참조하세요. | DBA | 

### 대상 DB 인스턴스 준비
<a name="prepare-the-target-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DB 스냅샷을 복원합니다. | Amazon RDS 콘솔에서 **스냅샷**을 선택합니다. 생성한 암호화된 스냅샷을 선택합니다. **작업**에서 **스냅샷 복원**을 선택합니다. **DB 인스턴스 식별자**의 경우 새 DB 인스턴스의 고유 이름을 입력합니다. 인스턴스 세부 정보를 검토한 다음 **DB 인스턴스 복원** 을 선택합니다. 스냅샷에서 암호화된 새 DB 인스턴스가 생성됩니다. 자세한 내용은 Amazon RDS 설명서에서 [DB 스냅샷에서 복원](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)을 참조하세요. | DBA | 
| AWS DMS를 사용하여 데이터를 마이그레이션합니다. | AWS DMS 콘솔에서 AWS DMS 작업을 생성합니다. **마이그레이션 유형**에서 **기존 데이터 마이그레이션 및 진행 중인 변경 사항 복제**를 선택합니다. **작업 설정**에서 **대상 테이블 준비 모드**에 대해 **잘라내기**를 선택합니다. 자세한 내용은 AWS DMS 문서에서 [작업 만들기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)를 참조하세요. | DBA | 
| 데이터 유효성 검사를 사용 설정합니다. | **작업 설정에서** **검증 활성화**를 선택합니다. 이렇게 하면 소스 데이터와 대상 데이터를 비교하여 데이터가 정확하게 마이그레이션되었는지 확인할 수 있습니다.  | DBA | 
| 대상 DB 인스턴스에서 제약 조건을 비활성화합니다. | 대상 DB [인스턴스에서 트리거 및 외래 키 제약 조건을 비활성화한](https://www.postgresql.org/docs/current/sql-altertable.html) 다음 AWS DMS 작업을 시작합니다. 트리거 비활성화 및 외래 키 제약 조건에 대한 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)를 참조하십시오. | DBA | 
| 데이터 확인  | 전체 로드가 완료되면 대상 DB 인스턴스의 데이터가 원본 데이터와 일치하는지 확인합니다. 자세한 내용은 AWS DMS 설명서에서 [AWS DMS 데이터 유효성 검사](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)를 참조하세요. | DBA | 

### 대상 DB 인스턴스로 전환
<a name="cut-over-to-the-target-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 DB 인스턴스에서 쓰기 작업을 중지합니다. | 애플리케이션 다운타임이 시작될 수 있도록 원본 DB 인스턴스에서 쓰기 작업을 중지하십시오. AWS DMS가 파이프라인의 데이터 복제를 완료했는지 확인하십시오. 대상 DB 인스턴스에서 트리거와 외래 키를 활성화합니다. | DBA | 
| 데이터베이스 시퀀스 업데이트 | 원본 데이터베이스에 시퀀스 번호가 포함되어 있는 경우 대상 데이터베이스의 시퀀스를 확인하고 업데이트하십시오. | DBA | 
| 애플리케이션 엔드포인트를 구성합니다. | 애플리케이션 연결을 구성하여 Amazon RDS DB 인스턴스 엔드포인트를 사용합니다. 이제 DB 인스턴스가 암호화됩니다. | DBA, 애플리케이션 소유자 | 

## 관련 리소스
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-resources"></a>
+ [AWS DMS 태스크 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html) 
+ [Amazon CloudWatch를 사용한 복제 작업 모니터링](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Monitoring.CloudWatch)
+ [AWS DMS 작업 모니터링](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)
+ [Amazon RDS 암호화 키 업데이트](https://aws.amazon.com/premiumsupport/knowledge-center/update-encryption-key-rds/)

## 추가 정보
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional"></a>

원본 PostgreSQL DB 인스턴스의 암호화를 확인합니다.

![\[소스 PostgreSQL DB 인스턴스의 요약 페이지에는 스토리지에 대해 활성화되지 않은 암호화가 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/d53d1dab-b5c2-452d-b823-ba3d6508ad15.png)


이 패턴에 대한 추가 참고 사항:
+ `rds.logical_replication` 파라미터를 1로 설정하여 PostgreSQL에서 복제를 활성화합니다.

**중요 참고 사항:** 복제 슬롯은 파일이 외부에서 사용될 때까지 WAL (Write Ahead Log) 파일을 보관합니다. 예를 들어, `pg_recvlogical` 등 추출, 전환, 적재(ETL) 작업이나 AWS DMS에 의해 사용됩니다. `rds.logical_replication` 파라미터 값을 1로 설정하면 AWS DMS는 `wal_level`, `max_wal_senders`, `max_replication_slots`, 및 `max_connections` 파라미터를 설정합니다. 논리적 복제 슬롯이 있지만 복제 슬롯에 보관된 WAL 파일을 사용할 소비자가 없는 경우, 트랜잭션 로그 디스크 사용량은 증가하고 사용 가능한 스토리지 공간은 계속 감소할 수 있습니다. 이 문제를 해결하기 위한 자세한 내용 및 단계는 AWS Support 지식 센터의 [Amazon RDS for PostgreSQL에서 ‘디바이스에 남은 공간 없음’ 또는 ‘DiskFull’ 오류의 원인을 식별하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/diskfull-error-rds-postgresql/) 문서를 참조하십시오.
+ DB 스냅샷을 생성한 후 원본 DB 인스턴스에 적용한 스키마 변경 사항은 대상 DB 인스턴스에 적용되지 않습니다.
+ 암호화된 DB 인스턴스를 만든 후에는 해당 DB 인스턴스에서 사용하는 KMS 키를 변경할 수 없습니다. 암호화된 DB 인스턴스를 생성하기 전에 KMS 키 요구 사항을 확인해야 합니다.
+ AWS DMS 작업을 실행하기 전에 대상 DB 인스턴스에서 트리거와 외래 키를 비활성화해야 합니다. 작업이 완료되면 이러한 기능을 다시 활성화할 수 있습니다.

# 시작 시 Amazon RDS 데이터베이스의 자동 태그 지정 적용
<a name="enforce-automatic-tagging-of-amazon-rds-databases-at-launch"></a>

*Susanne Kangnoh, Archit Mathur, Amazon Web Services*

## 요약
<a name="enforce-automatic-tagging-of-amazon-rds-databases-at-launch-summary"></a>

Amazon Relational Database Service(RDS)는 Amazon Web Services(AWS) 클라우드에서 관계형 데이터베이스를 더 쉽게 설치, 운영 및 확장할 수 있는 웹 서비스입니다. 업계 표준 관계형 데이터베이스를 위한 비용 효율적이고 크기 조정이 가능한 용량을 제공하며 일반적인 데이터베이스 관리 작업을 관리합니다.

태그를 사용하여 다양한 방식으로 AWS 리소스를 분류할 수 있습니다. 계정에 리소스가 많을 때 태그에 따라 특정 리소스를 빠르게 식별하려는 경우 관계형 데이터베이스 태깅이 유용합니다. Amazon RDS 태그를 사용하여 RDS DB 인스턴스에 사용자 정의 메타데이터를 추가할 수 있습니다. 태그는 사용자 정의 키와 값으로 구성됩니다. 조직 요구 사항에 맞는 일관된 태그 집합을 생성하는 것이 좋습니다.

이 패턴은 RDS DB 인스턴스를 모니터링하고 태그를 지정하는 데 도움이 되는 AWS CloudFormation 템플릿을 제공합니다. 템플릿은 AWS CloudTrail에서 **CreateDBInstance ** 이벤트를 감시하는 Amazon CloudWatch Events 이벤트를 생성합니다. (CloudTrail은 Amazon RDS에 대한 API 직접 호출을 이벤트로 캡처합니다.) 이 이벤트가 감지되면 사용자가 정의한 태그 키와 값을 자동으로 적용하는 AWS Lambda 함수를 호출합니다. 템플릿은 Amazon Simple Notification Service(SNS)를 사용하여 인스턴스에 태그가 지정되었다는 알림도 보냅니다.

## 사전 조건 및 제한 사항
<a name="enforce-automatic-tagging-of-amazon-rds-databases-at-launch-prerequisites-and-limitations"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ Lambda 코드를 업로드하기 위한 Amazon Simple Storage Service(S3) 버킷입니다.
+ 태깅 알림을 받으려는 이메일 주소입니다.

**제한 사항 **
+ 이 솔루션은 CloudTrail **CreateDBInstance** 이벤트를 지원합니다. 다른 이벤트에 대한 알림은 생성되지 않습니다.

## 아키텍처
<a name="enforce-automatic-tagging-of-amazon-rds-databases-at-launch-architecture"></a>

**워크플로 아키텍처**

![\[Workflow diagram showing AWS 서비스 interaction for RDS instance creation and notification.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5541bc1e-e00f-4b5a-94b7-bb1808b5591a/images/ec0bcf92-f986-4af3-bfe7-d2c5e04051c5.png)


 

**자동화 및 규모 조정**
+ 여러 AWS 리전 및 계정에 대해 AWS CloudFormation 템플릿을 여러 번 사용할 수 있습니다. 템플릿은 각 리전 또는 계정에서 한 번만 실행하면 됩니다.

## 도구
<a name="enforce-automatic-tagging-of-amazon-rds-databases-at-launch-tools"></a>

**서비스**
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) – AWS CloudTrail은 AWS 계정의 거버넌스, 규정 준수와 운영 및 위험 감사를 지원하는 AWS 서비스입니다. 사용자, 역할 또는 AWS 서비스가 수행하는 작업들은 CloudTrail에 이벤트로 기록됩니다. 
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) - Amazon CloudWatch Events는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다. 또한 CloudWatch Events는 이러한 운영 변경 발생 시 이를 인지하고, 환경에 응답하기 위한 메시지를 전송하고, 함수를 활성화하고, 변경을 수행하고, 상태 정보를 기록하는 등 필요에 따라 교정 조치를 취합니다. 
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) - AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드 실행을 지원하는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)-Amazon Simple Storage Service(S3)는 웹 사이트, 모바일 애플리케이션, 백업, 데이터 레이크 등 다양한 스토리지 솔루션에 사용할 수 있는 확장성이 뛰어난 객체 스토리지 서비스입니다.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) – Amazon Simple Notification Service(SNS)는 애플리케이션, 최종 사용자 및 디바이스가 클라우드에서 즉시 알림을 전송하고 수신할 수 있게 해 주는 웹 서비스입니다. 

**코드 **

이 패턴에는 두 개의 파일이 포함된 첨부 파일이 포함됩니다.
+ `index.zip`은(는) 이 패턴의 Lambda 코드가 포함된 압축 파일입니다.
+ `rds.yaml`은(는) Lambda 코드를 배포하는 CloudFormation 템플릿입니다.

이러한 파일을 사용하는 방법에 대한 자세한 내용은 *에픽 *섹션을 참조하세요.

## 에픽
<a name="enforce-automatic-tagging-of-amazon-rds-databases-at-launch-epics"></a>

### Lambda 코드 배포
<a name="deploy-the-lambda-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 코드를 S3 버킷에 업로드합니다. | 새 S3 버킷을 생성하거나 기존 S3 버킷을 사용하여 첨부 `index.zip` 파일(Lambda 코드)을 업로드합니다. 이 버킷은 모니터링하려는 리소스(RDS DB 인스턴스)와 동일한 AWS 리전에 있어야 합니다. | 클라우드 아키텍트 | 
| CloudFormation 템플릿을 배포합니다. | S3 버킷과 동일한 AWS 리전에서 Cloudformation 콘솔을 열고 첨부 파일에 제공된 `rds.yaml` 파일을 배포합니다. 다음 에픽에서 템플릿 파라미터에 대한 값을 입력합니다. | 클라우드 아키텍트 | 

### CloudFormation 템플릿에서 파라미터 작성
<a name="complete-the-parameters-in-the-cloudformation-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷 이름을 제공합니다. | 첫 번째 에픽에서 생성하거나 선택한 S3 버킷의 이름을 입력합니다. 이 S3 버킷에는 Lambda 코드용 .zip 파일이 들어 있으며 모니터링하려는 CloudFormation 템플릿 및 RDS DB 인스턴스와 동일한 AWS 리전에 있어야 합니다. | 클라우드 아키텍트 | 
| S3 키를 입력합니다. | S3 버킷에 있는 Lambda 코드 .zip 파일의 위치를 앞에 슬래시 없이 입력합니다(예: `index.zip` 또는 `controls/index.zip`). | 클라우드 아키텍트 | 
| 이메일 주소를 입력합니다. | 위반 알림을 받을 사용 중인 이메일 주소를 입력합니다. | 클라우드 아키텍트 | 
| 로깅 수준을 지정합니다. | 로깅 수준 및 상세 정보를 지정합니다. `Info`는 애플리케이션 진행 상황에 대한 자세한 정보 메시지를 지정하며 디버깅용으로만 사용해야 합니다. `Error`는 애플리케이션을 계속 실행할 수 있는 오류 이벤트를 지정합니다. `Warning`은 잠재적으로 유해한 상황을 지정합니다. | 클라우드 아키텍트 | 
| RDS DB 인스턴스의 태그 키와 값을 입력합니다. | RDS 인스턴스에 자동으로 적용할 필수 태그 키 및 값을 입력합니다. 자세한 내용은 AWS 설명서의 [Amazon RDS 리소스에 태그 지정](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html)을 참조하세요. | 클라우드 아키텍트 | 

### 구독 확인
<a name="confirm-the-subscription"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 이메일 구독을 확인합니다. | CloudFormation 템플릿이 성공적으로 배포되면 입력한 이메일 주소로 구독 이메일 메시지가 전송됩니다. 인스턴스에 태그가 지정되었을 때 알림을 받으려면 이 이메일 구독을 확인해야 합니다. | 클라우드 아키텍트 | 

## 관련 리소스
<a name="enforce-automatic-tagging-of-amazon-rds-databases-at-launch-related-resources"></a>
+ [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)(Amazon S3 설명서)
+ [Amazon RDS 리소스에 태그 지정](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html)(Amazon Aurora 설명서)
+ [객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html)(Amazon S3 설명서)
+ [AWS CloudTrail을 사용하여 AWS API 직접 호출에서 트리거되는 CloudWatch Events 규칙 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-CloudTrail-Rule.html)(Amazon CloudWatch 문서)

## 첨부
<a name="attachments-5541bc1e-e00f-4b5a-94b7-bb1808b5591a"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/5541bc1e-e00f-4b5a-94b7-bb1808b5591a/attachments/attachment.zip) 파일의 압축을 풉니다.

# 온디맨드 용량에 대한 DynamoDB 테이블의 비용 추정
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity"></a>

*Moinul Al-Mamun, Amazon Web Services*

## 요약
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity-summary"></a>

[Amazon DynamoDB](https://aws.amazon.com/dynamodb/)는 페타바이트 규모에서도 10밀리 초 미만의 지연 시간을 지원하는 NoSQL 트랜잭션 데이터베이스입니다. 이 Amazon Web Services(AWS) 서버리스 제품은 일관된 성능과 확장성으로 인기를 얻고 있습니다.  기본 인프라의 프로비저닝이 필요하지 않습니다. 단일 테이블은 페타바이트까지 확장 가능합니다.

온디맨드 용량 모드를 이용하면 애플리케이션이 테이블에서 수행하는 데이터 읽기 및 쓰기에 대해 요청당 요금을 지불합니다. AWS 요금은 한 달 동안 누적된 읽기 요청 단위(RRU) 및 쓰기 요청 단위(WRU)를 기준으로 합니다. DynamoDB는 한 달 내내 지속적으로 테이블 크기를 모니터링하여 스토리지 요금을 결정합니다. 시점 복구(PITR)로 지속적인 백업을 지원합니다. DynamoDB는 한 달 내내 지속적으로 PITR 지원 테이블 크기를 모니터링하여 백업 요금을 결정합니다.

프로젝트의 DynamoDB 비용을 추정할 때 제품 수명 주기의 여러 단계에서 소비되는 RRU, WRU 및 스토리지의 양을 계산하는 것이 중요합니다. 대략적인 비용 산정을 위해 [AWS 요금 계산기](https://calculator.aws/#/createCalculator/DynamoDB)를 사용할 수 있지만 테이블에 필요한 RRU, WRU 및 스토리지 요구 사항의 대략적인 수를 제공해야 합니다. 프로젝트 초기에는 이러한 수치를 예측하기 어려울 수 있습니다. AWS 요금 계산기는 데이터 증가율이나 항목 크기를 고려하지 않으며, 기본 테이블과 글로벌 보조 인덱스(GSI)의 읽기 및 쓰기 수를 별도로 고려하지 않습니다. AWS 요금 계산기를 사용하려면 WRU, RRU 및 스토리지 크기에 대한 모든 측면을 추정하여 예상 비용을 산출해야 합니다.

이 패턴은 온디맨드 용량 모드에서 쓰기, 읽기, 스토리지, 백업 및 복구 비용과 같은 기본 DynamoDB 비용 요소를 추정하는 메커니즘과 재사용 가능한 Microsoft Excel 템플릿을 제공합니다. AWS 요금 계산기보다 더 세분화되어 있으며 기본 테이블과 GSI 요구 사항을 독립적으로 고려합니다. 또한 월별 품목 데이터 증가율을 고려하여 3년간의 비용을 예측합니다.

## 사전 조건 및 제한 사항
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity-prereqs"></a>

**사전 조건 **
+ DynamoDB 및 DynamoDB 데이터 모델 설계에 대한 기본 지식
+ DynamoDB 요금, WRU, RRU, 스토리지, 백업 및 복구에 대한 기본 지식(자세한 내용은 [온디맨드 용량 요금](https://aws.amazon.com/dynamodb/pricing/on-demand/) 참조)
+ DynamoDB의 데이터, 데이터 모델, 항목 크기에 대한 지식
+ DynamoDB GSI에 대한 지식

**제한 사항 **
+ 템플릿은 대략적인 계산을 제공하지만 모든 구성에 적합하지는 않습니다. 더 정확한 추정치를 얻으려면 기본 표와 GSI에 있는 각 항목의 개별 크기를 측정해야 합니다.
+ 더 정확한 추정을 위해서는 월별 각 항목에 대한 예상 쓰기(삽입, 업데이트, 삭제) 및 읽기 횟수를 고려해야 합니다.
+ 이 패턴은 고정된 데이터 증가 가정을 기반으로 향후 몇 년간 쓰기, 읽기, 스토리지, 백업 및 복구 비용만 추정하는 것을 지원합니다.

## 도구
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity-tools"></a>

**서비스**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.

**기타 도구**
+ [AWS 요금 계산기](https://calculator.aws/#/createCalculator/DynamoDB)는 AWS 사용 사례에 대한 추정치를 생성하는 데 사용할 수 있는 웹 기반 계획 도구입니다.

## 모범 사례
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity-best-practices"></a>

비용을 낮게 유지하려면 다음과 같은 DynamoDB 설계 모범 사례를 고려해 보세요.
+ [파티션 키 설계](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-uniform-load.html)-카디널리티가 높은 파티션 키를 사용하여 로드를 균등하게 분산합니다.
+ [인접 목록 설계 패턴](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html) - 이 설계 패턴을 사용하여 일대다 및 다대다 관계를 관리합니다.
+ [스파스 인덱스](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-general-sparse-indexes.html) - GSI에 스파스 인덱스를 사용합니다. GSI를 생성할 때는 파티션 키와 정렬 키(선택 사항)를 지정해야 합니다. 해당 GSI 파티션 키를 포함하는 기본 테이블의 항목만 스파스 인덱스에 나타납니다. 이는 GSI를 더 작게 유지하는 데 도움이 됩니다.
+ [인덱스 오버로딩](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-gsi-overloading.html) - 다양한 유형의 항목을 인덱싱하는 데 동일한 GSI를 사용합니다.
+ [GSI 쓰기 샤드](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-gsi-sharding.html) - 효율적이고 빠른 쿼리를 위해 파티션 전체에 데이터를 현명하게 샤드합니다.
+ [대용량 항목](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-use-s3-too.html) - 테이블 내에 메타데이터만 저장하고, Amazon S3에 blob을 저장하고, DynamoDB에 참조를 유지합니다. 대용량 항목을 여러 항목으로 나누고 정렬 키를 사용하여 효율적으로 인덱싱합니다.

추가 설계 모범 사례는 Amazon DynamoDB [개발자 안내서](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html)를 참조하세요.

## 에픽
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity-epics"></a>

### DynamoDB 데이터 모델에서 항목 정보 추출
<a name="extract-item-information-from-your-dynamodb-data-model"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 항목의 크기를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.html) | 데이터 엔지니어 | 
| 쓰기 비용을 추정합니다. | 온디맨드 용량 모드에서 쓰기 비용을 추정하려면 먼저 한 달에 소비될 WRU 수를 측정해야 합니다. 이를 위해서는 다음 요소를 고려해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.html)자세한 내용은 *추가 정보* 섹션을 참조하세요. | 데이터 엔지니어 | 
| 읽기 비용을 추정합니다. | 온디맨드 모드에서 읽기 비용을 추정하려면 먼저 한 달에 소비될 RRU 수를 측정해야 합니다. 이를 위해서는 다음 요소를 고려해야 합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.html) | 데이터 엔지니어, 앱 개발자 | 
| 스토리지 크기 및 비용을 추정합니다. | 먼저 표의 항목 크기를 기준으로 월 평균 스토리지 요구량을 추정합니다. 그런 다음 스토리지 크기에 AWS 리전의 GB당 스토리지 가격을 곱하여 스토리지 비용을 계산합니다. 쓰기 비용 추정을 위한 데이터를 이미 입력한 경우 스토리지 크기를 계산할 때 다시 입력할 필요가 없습니다. 그렇지 않으면 스토리지 크기를 추정하기 위해 다음 요소를 고려해야 합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.html) | 데이터 엔지니어 | 

### Excel 템플릿에 항목 및 객체 정보 입력
<a name="enter-the-item-and-object-information-in-the-excel-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 첨부 파일 섹션에서 Excel 템플릿을 다운로드하여 사용 사례 표에 맞게 조정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.html) | 데이터 엔지니어 | 
| Excel 템플릿에 정보를 입력합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.html)템플릿에는 정보, 메타데이터, 관계라는 세 가지 항목 또는 엔티티가 있습니다. 두 개의 GSI가 있습니다. 사용 사례에 따라 더 많은 항목이 필요한 경우 새 행을 생성합니다. GSI가 더 필요한 경우 기존 GSI 블록을 복사한 다음 붙여넣어 필요한 만큼 GSI 블록을 생성합니다. 그런 다음 합계 및 총계 열 계산을 조정합니다. | 데이터 엔지니어 | 

## 관련 리소스
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity-resources"></a>

**참조**
+ [온디맨드 용량에 대한 Amazon DynamoDB 요금](https://aws.amazon.com/dynamodb/pricing/on-demand/)
+ [DynamoDB용 AWS 요금 계산기](https://calculator.aws/#/createCalculator/DynamoDB)
+ [DynamoDB를 사용한 설계 및 아키텍처 설계 모범 사례](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html)
+ [DynamoDB 시작하기](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html)

**가이드 및 패턴**
+ [Amazon DynamoDB를 사용한 데이터 모델링](https://docs.aws.amazon.com/prescriptive-guidance/latest/dynamodb-data-modeling/)
+ [Amazon DynamoDB 테이블의 스토리지 비용 추정](https://apg-library.amazonaws.com/content/9b74399d-9655-47ee-b9b3-de46b65bc4e3)

## 추가 정보
<a name="estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity-additional"></a>

**작성 비용 계산 예제**

DynamoDB 데이터 모델 설계에서는 한 제품에 대해 세 개의 항목이 표시되며 평균 항목 크기는 4KB입니다. DynamoDB 기본 테이블에 새 제품을 추가하면 항목 수 \$1 (항목 크기/1KB 쓰기 단위) = 3 \$1 (4/1) = 12WRU를 소비합니다. 이 예제에서 1KB를 쓰는 경우 제품은 1WRU를 소비합니다. 

**읽기 비용 계산 예제**

RRU 추정치를 구하려면 매달 각 항목을 읽는 횟수의 평균을 고려합니다. 예를 들어 정보 항목은 한 달에 평균 10회, 메타데이터 항목은 2회, 관계 항목은 5회 읽습니다. 예제 템플릿에서 모든 구성 요소의 총 RRU는 매월 생성되는 새 구성 요소 수 \$1 월별 구성 요소당 RRU = 1천만 \$1 17 RRU = 매월 1억 7천만 RRU입니다.

매달 새로운 항목(구성 요소 또는 제품)이 추가되며 총 제품 수는 시간이 지남에 따라 늘어납니다. 따라서 RRU 요구 사항도 시간이 지남에 따라 증가합니다.
+ 첫 달 RRU 소비량은 1억 7천만입니다.
+ 두 번째 달의 RRU 소비량은 2 \$1 1억 7천만 = 3억 4천만이 됩니다.
+ 세 번째 달의 RRU 소비량은 3 \$1 1억 7천만 = 5억 1천만이 됩니다.

다음 그래프는 월별 RRU 소비량과 비용 예측을 보여줍니다.

![\[비용보다 RRU 소비가 더 급증합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/1797b48f-a183-4f25-811f-44921c3a48ee/images/3505bfc8-694d-4acc-8585-cd71258fa315.png)


그래프 내의 가격은 설명을 돕기 위한 것입니다. 사용 사례에 대한 정확한 예측을 생성하려면 AWS 요금 페이지를 확인하고 Excel 시트에서 해당 가격을 사용합니다.

**스토리지, 백업 및 복구 비용 계산 예제**

DynamoDB 스토리지, 백업, 복원은 모두 서로 연결되어 있습니다. 백업은 스토리지와 직접 연결되고 복구는 백업 크기와 직접 연결됩니다. 테이블 크기가 커지면 그에 따라 해당 스토리지, 백업 및 복원 비용도 증가합니다.

*스토리지 크기 및 비용*

스토리지 비용은 데이터 증가율에 따라 시간이 지나면서 증가합니다. 예를 들어 기본 테이블과 GSI에 있는 구성 요소 또는 제품의 평균 크기가 11KB이고 데이터베이스 테이블에 매달 1천만 개의 새 제품이 추가된다고 가정해 보겠습니다. 이 경우 DynamoDB 테이블 크기가 매월 (11KB \$1 1천만)/1024/1024 = 105GB씩 늘어납니다. 첫 번째 달에는 테이블 스토리지 크기가 105GB이고, 두 번째 달에는 105 \$1 105 = 210GB가 되는 식입니다.
+ 첫 달의 스토리지 비용은 AWS 리전의 GB당 105GB \$1 스토리지 요금이 부과됩니다. 
+ 두 번째 달의 스토리지 비용은 해당 리전의 GB당 210GB \$1 스토리지 요금이 부과됩니다.
+ 세 번째 달의 스토리지 비용은 해당 리전의 GB당 315GB \$1 스토리지 요금이 부과됩니다.

향후 3년간의 스토리지 크기 및 비용은 *스토리지 크기 및 예측* 섹션을 참조하세요.

*백업 비용*

백업 비용은 데이터 증가율에 따라 시간이 지나면서 증가합니다. 시점 복구(PITR)로 연속 백업을 활성화하는 경우 지속적 백업 요금은 월별 평균 스토리지 GB를 기준으로 합니다. 월별 평균 백업 크기는 테이블 스토리지 크기와 같지만 실제 크기는 약간 다를 수 있습니다. 매달 새 제품이 추가되므로 시간이 지남에 따라 전체 스토리지 크기와 백업 크기도 커집니다. 예를 들어 첫 달의 평균 백업 크기가 105GB에서 두 번째 달에 210GB로 증가할 수 있습니다.
+ 첫 달의 백업 비용은 AWS 리전의 GB당 월 105GB \$1 연속 백업 요금입니다. 
+ 두 번째 달의 백업 비용은 해당 리전의 GB당 월 210GB \$1 연속 백업 요금입니다.
+ 세 번째 달의 백업 비용은 해당 리전의 GB당 월 315GB \$1 연속 백업 요금입니다.
+ 이런 식으로 계속 진행됩니다.

백업 비용은 *스토리지 크기 및 비용 예측* 섹션의 그래프에 포함됩니다.

*복구 비용*

PITR을 활성화한 상태에서 연속 백업을 수행하는 경우 복구 작업 요금은 복원 크기에 따라 달라집니다. 복원할 때마다 기가바이트의 복원된 데이터를 기준으로 비용을 지불합니다. 테이블 크기가 크고 한 달에 여러 번 복원을 수행하면 비용이 많이 듭니다.

복원 비용을 추정하기 위해 이 예에서는 매월 말에 PITR 복구를 1회 수행한다고 가정합니다. 이 예에서는 월별 평균 백업 크기를 해당 월의 복원 데이터 크기로 사용합니다. 첫 달의 평균 백업 크기는 105GB이고, 월말 복구의 경우 복원 데이터 크기는 105GB입니다. 두 번째 달에는 210GB가 되는 식입니다.

복구 비용은 데이터 증가율에 따라 시간이 지나면서 증가합니다.
+ 첫 달의 복구 비용은 AWS 리전의 GB당 105GB \$1 복원 요금이 부과됩니다. 
+ 두 번째 달의 복구 비용은 해당 리전의 GB당 210GB \$1 복원 요금이 부과됩니다.
+ 세 번째 달의 복구 비용은 해당 리전의 GB당 315GB \$1 복원 요금이 부과됩니다.

자세한 내용은 Excel 템플릿의 스토리지, 백업 및 복구 탭과 다음 섹션의 그래프를 참조하세요.

*스토리지 크기 및 비용 예측*

템플릿에서 실제 청구 가능한 스토리지 크기는 표준 테이블 클래스의 월 25GB 프리 티어를 빼서 계산합니다. 이 시트에는 월별 값으로 구분된 예측 그래프가 포함되어 있습니다.

다음 예제 차트는 향후 36개월의 월별 스토리지 크기(GB), 청구 가능한 스토리지 비용, 온디맨드 백업 비용, 복구 비용을 예측합니다. 모든 비용은 USD로 표시됩니다. 그래프를 보면 스토리지, 백업 및 복구 비용이 스토리지 크기 증가에 비례하여 증가한다는 것을 알 수 있습니다.

![\[스토리지 크기는 3,000개 이상으로 증가하고 비용은 1,000 USD 미만입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/1797b48f-a183-4f25-811f-44921c3a48ee/images/fd9f06d0-bc9c-4b4e-8cbd-3e527fe09e88.png)


그래프에 사용된 가격은 설명을 돕기 위한 것입니다. 사용 사례에 대한 정확한 가격을 생성하려면 AWS 요금 페이지를 확인하고 Excel 템플릿에서 해당 가격을 사용합니다.

## 첨부
<a name="attachments-1797b48f-a183-4f25-811f-44921c3a48ee"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/1797b48f-a183-4f25-811f-44921c3a48ee/attachments/attachment.zip) 파일의 압축을 풉니다.

# Amazon DynamoDB 테이블의 스토리지 비용 추정
<a name="estimate-storage-costs-for-an-amazon-dynamodb-table"></a>

*Moinul Al-Mamun, Amazon Web Services*

## 요약
<a name="estimate-storage-costs-for-an-amazon-dynamodb-table-summary"></a>

Amazon DynamoDB는 페타바이트 규모에서도 10밀리 초 미만의 지연 시간을 지원하는 NoSQL 트랜잭션 데이터베이스입니다. 에서 널리 사용되는이 서버리스 제품은 일관된 성능과 확장성을 AWS 제공합니다. 스토리지를 프로비저닝할 필요가 없으며 단일 테이블은 최대 페타바이트까지 증가할 수 있습니다. 

DynamoDB는 한 달 동안 테이블 크기를 지속적으로 모니터링하여 스토리지 요금을 결정합니다. AWS 그런 다음 평균 스토리지 크기에 대해 기가바이트 단위로 요금을 청구합니다. 시간이 지남에 따라 테이블 크기가 커질수록 스토리지 비용도 더 커집니다. 스토리지 비용을 계산하려면 [AWS AWS 요금 계산기](https://calculator.aws/#/createCalculator/DynamoDB)를 사용할 수 있지만 글로벌 보조 인덱스(GSI)를 포함하여 테이블의 대략적인 크기를 제공해야 하는데, 이는 프로젝트 초기에 예측하기가 매우 어렵습니다. 또한 AWS 가격 계산기는 데이터 증가율을 고려하지 않습니다.

이 패턴은 DynamoDB 스토리지 크기 및 비용을 계산하는 메커니즘과 재사용 가능한 Microsoft Excel 템플릿을 제공합니다. 기본 테이블과 GSI의 스토리지 요구 사항을 개별적으로 고려합니다. 개별 항목의 크기와 시간에 따른 데이터 증가율을 고려하여 스토리지 크기를 계산합니다. 

추정치를 구하려면 템플릿에 다음과 같은 두 가지 정보를 삽입합니다.
+ 기본 테이블 및 GSI의 개별 항목 킬로바이트 크기
+ 한 달에 평균적으로 테이블에 추가할 수 있는 새 객체 또는 제품 수(예를 들어 1,000만 개)

템플릿은 다음 예와 같이 향후 3년 간의 스토리지 및 비용 예측 그래프를 생성합니다.

![\[비용 하한선은 천천히 오르고 스토리지의 상한선은 더 빠르게 상승합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9b74399d-9655-47ee-b9b3-de46b65bc4e3/images/c0436252-cc42-4ea3-ac50-c0455aece39d.png)


 

## 사전 조건 및 제한 사항
<a name="estimate-storage-costs-for-an-amazon-dynamodb-table-prereqs"></a>

**사전 조건 **
+ DynamoDB, DynamoDB 스토리지 및 요금에 대한 기본 지식
+ DynamoDB의 데이터, 데이터 모델, 항목 크기에 대한 지식
+ DynamoDB 글로벌 보조 인덱스(GSI)에 대한 지식

**제한 사항 **
+ 템플릿은 대략적인 계산을 제공하지만 모든 구성에 적합하지는 않습니다. 더 정확한 추정치를 얻으려면 기본 표와 GSI에 있는 각 항목의 개별 크기를 측정해야 합니다. 
+ 이 패턴은 고정된 데이터 증가 가정을 기반으로 향후 몇 년간 스토리지 크기와 비용만 추정하는 것을 지원합니다.

## 도구
<a name="estimate-storage-costs-for-an-amazon-dynamodb-table-tools"></a>

**서비스**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.

**기타 도구**
+ [AWS 요금 계산기](https://docs.aws.amazon.com/pricing-calculator/latest/userguide/what-is-pricing-calculator.html)는 AWS 사용 사례에 대한 견적을 생성하는 데 사용할 수 있는 웹 기반 계획 도구입니다.

## 에픽
<a name="estimate-storage-costs-for-an-amazon-dynamodb-table-epics"></a>

### DynamoDB 데이터 모델에서 항목 정보 추출
<a name="extract-item-information-from-your-ddb-data-model"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 항목의 크기를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-storage-costs-for-an-amazon-dynamodb-table.html) | 데이터 엔지니어 | 
| 한 달 동안 추가된 객체 수를 구합니다. | 한 달 동안 DynamoDB 테이블에 추가될 구성 요소 또는 객체 수를 평균적으로 추정합니다. | 데이터 엔지니어 | 

### Excel 템플릿에 항목 및 객체 정보 입력
<a name="enter-the-item-and-object-information-in-the-excel-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Excel 스프레드시트를 다운로드하고 조정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-storage-costs-for-an-amazon-dynamodb-table.html) | 데이터 엔지니어 | 
| Excel 템플릿에 정보를 입력합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-storage-costs-for-an-amazon-dynamodb-table.html) | 데이터 엔지니어 | 

## 관련 리소스
<a name="estimate-storage-costs-for-an-amazon-dynamodb-table-resources"></a>
+ [온디맨드 용량에 대한 Amazon DynamoDB 요금](https://aws.amazon.com/dynamodb/pricing/on-demand/)
+ [AWS DynamoDB용 요금 계산기](https://calculator.aws/#/createCalculator/DynamoDB)

## 추가 정보
<a name="estimate-storage-costs-for-an-amazon-dynamodb-table-additional"></a>

첨부된 템플릿은 표준 스토리지 테이블 클래스의 스토리지 크기 및 비용만 예측한다는 점에 유의하세요. 저장 비용 예측을 기반으로 개별 항목의 크기와 제품 또는 객체의 증가율을 고려하면 다음을 추정할 수 있습니다.
+ 데이터 내보내기 비용
+ 백업 및 복구 비용
+ 데이터 스토리지 요구 사항

**Amazon DynamoDB 데이터 스토리지 비용**

DynamoDB는 지속적으로 테이블 크기를 모니터링하여 스토리지 요금을 결정합니다. DynamoDB는 데이터의 원시 바이트 크기와 활성화한 기능에 따라 항목당 스토리지 오버헤드를 추가하여 청구 가능한 데이터의 크기를 측정합니다. 자세한 내용은 [DynamoDB 개발자 안내서](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/CapacityUnitCalculations.html)를 참조하세요. 

데이터 스토리지 요금은 테이블 클래스에 따라 다릅니다. DynamoDB 표준 테이블 클래스를 사용하는 경우 매월 처음 저장되는 25GB는 무료입니다. 다양한의 Standard 및 Standard-Infrequent Access 테이블 클래스의 스토리지 비용에 대한 자세한 내용은 [온디맨드 용량 요금을](https://aws.amazon.com/dynamodb/pricing/on-demand/) AWS 리전참조하세요.

## 첨부
<a name="attachments-9b74399d-9655-47ee-b9b3-de46b65bc4e3"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/9b74399d-9655-47ee-b9b3-de46b65bc4e3/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWR 보고서를 사용하여 Oracle 데이터베이스의 Amazon RDS 엔진 크기 추정
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports"></a>

*Abhishek Verma 및 Eduardo Valentim, Amazon Web Services*

## 요약
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports-summary"></a>

Oracle 데이터베이스를 Amazon Relational Database Service(RDS) 또는 Amazon Aurora로 마이그레이션하는 경우 대상 데이터베이스의 CPU, 메모리 및 디스크 I/O를 계산하는 것이 주요 요구 사항입니다. Oracle 자동 워크로드 리포지토리(AWR) 보고서를 분석하여 대상 데이터베이스의 필수 용량을 추정할 수 있습니다. 이 패턴은 AWR 보고서를 사용하여 이러한 값을 추정하는 방법을 설명합니다.

Oracle 데이터베이스 온프레미스 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 Amazon RDS for Oracle DB 인스턴스 대상 데이터베이스는 모든 Amazon RDS 또는 Aurora 데이터베이스일 수 있습니다.

**참고**  
대상 데이터베이스 엔진이 Oracle인 경우 용량 추정치가 더 정확합니다. 다른 Amazon RDS 데이터베이스의 경우 데이터베이스 아키텍처의 차이로 인해 엔진 크기가 달라질 수 있습니다.

Oracle 데이터베이스를 마이그레이션하기 전에 성능 테스트를 실행하는 것이 좋습니다.

## 사전 조건 및 제한 사항
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports-prereqs"></a>

**사전 조건 **
+ AWR 보고서를 다운로드하기 위한 Oracle Database Enterprise Edition 라이선스 및 Oracle Diagnostics Pack 라이선스.

**제품 버전**
+ 버전 11g(버전 11.2.0.3.v1 이상) 및 12.2 까지, 18c에 대한 모든 Oracle 데이터베이스 에디션.
+ 이 패턴은 Oracle Engineered Systems 또는 Oracle Cloud Infrastructure(OCI)를 다루지 않습니다.

## 아키텍처
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports-architecture"></a>

**소스 기술 스택  **

다음 중 하나입니다.
+ 온프레미스 Oracle 데이터베이스
+ EC2 인스턴스의 Oracle 데이터베이스
+ Amazon RDS for Oracle DB 인스턴스

**대상 기술 스택**
+ Amazon RDS 및 Amazon Aurora 데이터베이스

**대상 아키텍처 **

전체 마이그레이션 프로세스에 대한 자세한 내용은 AWS [DMS 및 AWS SCT를 사용하여 Oracle 데이터베이스를 Aurora PostgreSQL로 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.html) 패턴을 참조하세요.

**자동화 및 규모 조정**

마이그레이션할 Oracle 데이터베이스가 여러 개 있고 추가 성능 지표를 사용하려는 경우 블로그 게시물 [Oracle 성능 지표를 기반으로 규모가 적절한 Amazon RDS 인스턴스](https://aws.amazon.com/blogs/database/right-sizing-amazon-rds-instances-at-scale-based-on-oracle-performance-metrics/)에 설명된 단계에 따라 프로세스를 자동화할 수 있습니다.

## 도구
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports-tools"></a>
+ [Oracle Automatic Workload Repository(AWR)](https://docs.oracle.com/en-us/iaas/performance-hub/doc/awr-report-ui.html)는 Oracle 데이터베이스에 내장된 리포지토리입니다. 시스템 활동 및 워크로드 데이터를 주기적으로 수집하고 저장한 다음 자동 데이터베이스 진단 모니터(ADDM)로 분석합니다. AWR은 시스템 성능 데이터의 스냅샷을 주기적으로(기본적으로 60분마다) 생성하고 정보를 저장합니다(기본적으로 최대 8일).  AWR 보기 및 보고서를 사용하여이 데이터를 분석할 수 있습니다.

## 모범 사례
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports-best-practices"></a>
+ 대상 데이터베이스의 리소스 요구 사항을 계산하려면 단일 AWR 보고서, 여러 AWR 보고서 또는 동적 AWR 보기를 사용할 수 있습니다. 피크 로드 기간 동안 여러 AWR 보고서를 사용하여 이러한 피크 로드를 처리하는 데 필요한 리소스를 추정하는 것이 좋습니다. 또한 동적 뷰는 리소스 요구 사항을 보다 정확하게 계산하는 데 도움이 되는 더 많은 데이터 포인트를 제공합니다. 
+ 마이그레이션하려는 데이터베이스에 대해서만 IOPS를 추정해야 하며 디스크를 사용하는 다른 데이터베이스 및 프로세스에 대해서는 추정하지 않아야 합니다.
+ 데이터베이스에서 사용하는 I/O의 양을 계산하려면 AWR 보고서의 로드 프로필 섹션에 있는 정보를 사용하지 마세요. 사용 가능한 경우 I/O 프로파일 섹션을 대신 사용하거나 인스턴스 활동 통계 섹션으로 건너뛰고 물리적 읽기 및 쓰기 작업의 총 값을 확인합니다.
+ CPU 사용률을 추정할 때는 운영 체제(OS) 통계 대신 데이터베이스 지표 방법을 사용하는 것이 좋습니다. 데이터베이스에서만 사용하는 CPU를 기반으로 하기 때문입니다. (OS 통계에는 다른 프로세스의 CPU 사용량도 포함됩니다.) 또한 마이그레이션 후 성능을 개선하려면 ADDM 보고서에서 CPU 관련 권장 사항을 확인해야 합니다.
+ 올바른 인스턴스 유형을 결정할 때 특정 인스턴스 크기에 대해 I/O 처리량 제한 - Amazon Elastic Block Store(Amazon EBS) 처리량 및 네트워크 처리량을 고려합니다.
+ 마이그레이션 전에 성능 테스트를 실행하여 엔진 크기를 검증합니다.

## 에픽
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports-epics"></a>

### 보고서를 생성하려면
<a name="create-an-awr-report"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWR 보고서를 활성화합니다. | 보고서를 활성화하려면 [Oracle 설명서](https://docs.oracle.com/en/database/oracle/oracle-database/18/tgdba/gathering-database-statistics.html#GUID-26D359FA-F809-4444-907C-B5AFECD9AE29)의 지침을 따릅니다. | DBA | 
| 보존 기간을 확인합니다. | AWR 보고서의 보존 기간을 확인하려면 다음 쿼리를 사용합니다.<pre>SQL> SELECT snap_interval,retention FROM dba_hist_wr_control;</pre> | DBA | 
| 스냅샷을 생성합니다. | AWR 스냅샷 간격이 피크 워크로드의 스파이크를 캡처할 만큼 세분화되지 않은 경우 AWR 보고서를 수동으로 생성할 수 있습니다. 수동 AWR 스냅샷을 생성하려면 다음 쿼리를 사용합니다.<pre>SQL> EXEC dbms_workload_repository.create_snapshot;</pre> | DBA | 
| 최근 스냅샷을 확인합니다. | 최근 AWR 스냅샷을 확인하려면 다음 쿼리를 사용합니다.<pre>SQL> SELECT snap_id, to_char(begin_interval_time,'dd/MON/yy hh24:mi') Begin_Interval,<br /> to_char(end_interval_time,'dd/MON/yy hh24:mi') End_Interval<br /> FROM dba_hist_snapshot<br /> ORDER BY 1;</pre> | DBA | 

### 디스크 I/O 요구 사항 추정
<a name="estimate-disk-i-o-requirements"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 방법을 선택합니다. | IOPS는 스토리지 디바이스에서 초당 입력 및 출력 작업의 표준 측정값이며 읽기 및 쓰기 작업을 모두 포함합니다. 온프레미스 데이터베이스를 AWS로 마이그레이션하는 경우 데이터베이스에서 사용하는 피크 디스크 I/O를 결정해야 합니다. 다음 방법을 사용하여 대상 데이터베이스의 디스크 I/O를 추정할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)다음 단계에서는 이러한 네 가지 방법을 설명합니다. | DBA | 
| 옵션 1: 로드 프로파일을 사용합니다. | 다음 표에는 AWR 보고서의 로드 프로파일 섹션의 예가 나와 있습니다.보다 정확한 정보를 얻으려면 로드 프로파일 대신 옵션 2(I/O 프로파일) 또는 옵션 3(인스턴스 활동 통계)을 사용하는 것이 좋습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)이 정보를 기반으로 총 IOPS와 처리량을 다음과 같이 계산할 수 있습니다.*IOPS = 읽기 I/O 요청: \$1 쓰기 I/O 요청 = 3,586.8 \$1 574.7 = 4134.5**처리량 = 물리적 읽기(블록) \$1 물리적 쓰기(블록) = 13,575.1 \$1 3,467.3 = 17,042.4*Oracle의 블록 크기는 8KB이므로 다음과 같이 총 처리량을 계산할 수 있습니다.*MB 단위의 총 처리량은 17042.4 \$1 8 \$1 1024 / 1024 / 1024 = 133.2MB입니다.*로드 프로필을 사용하여 인스턴스 크기를 추정하지 마세요. 인스턴스 활동 통계 또는 I/O 프로파일만큼 정확하지 않습니다. | DBA | 
| 옵션 2: 인스턴스 활동 통계를 사용합니다. | 12c 이전 버전의 Oracle Database를 사용하는 경우 AWR 보고서의 인스턴스 활동 통계 섹션을 사용하여 IOPS 및 처리량을 추정할 수 있습니다. 다음 표에서는 이 섹션의 예제를 보여줍니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)이 정보를 기반으로 총 IOPS와 처리량을 다음과 같이 계산할 수 있습니다.*   총 IOPS = 3,610.28 \$1 757.11 = 4367 **   총 Mbps = 114,482,426.26 \$1 36,165,631.84 = 150648058.1 / 1024 / 1024 = 143Mbps* | DBA | 
| 옵션 3: I/O 프로필을 사용합니다. | Oracle Database 12c의 AWR 보고서에는 모든 정보를 단일 테이블에 표시하고 데이터베이스 성능에 대한 보다 정확한 데이터를 제공하는 I/O 프로필 섹션이 포함되어 있습니다. 다음 표에서는 이 섹션의 예제를 보여줍니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)이 표는 처리량 및 총 IOPS에 대한 다음 값을 제공합니다.*   처리량 = 143MBPS(합계로 표시된 다섯 번째 행, 두 번째 열부터)**   IOPS = 4,367.4(총 요청 수로 표시된 첫 번째 행, 두 번째 열부터)* | DBA | 
| 옵션 4: AWR 보기를 사용합니다. | AWR 보기를 사용하여 동일한 IOPS 및 처리량 정보를 볼 수 있습니다. 이 정보를 확인하려면 다음 쿼리를 사용합니다. <pre>break on report<br /> compute sum of Value on report<br /> select METRIC_NAME,avg(AVERAGE) as "Value"<br /> from dba_hist_sysmetric_summary<br /> where METRIC_NAME in ('Physical Read Total IO Requests Per Sec','Physical Write Total IO Requests Per Sec')<br /> group by metric_name;</pre> | DBA | 
|   | 초당 | 트랜잭션당 GB | 실행당 | 호출당 | 
| --- |--- |--- |--- |--- |
| **DB 시간(들):** | 26.6 | 0.2 | 0.00 | 0.02 | 
| **DB CPU(들):** | 18.0 | 0.1 | 0.00 | 0.01 | 
| **배경 CPU(들):** | 0.2 | 0.0 | 0.00 | 0.00 | 
| **다시 실행 크기(바이트):** | 2,458,539.9 | 17,097.5 |   |   | 
| 로컬 블록 읽기 | 3,371,931.5 | 23,449.6 |   |   | 
| **블록 변경사항:** | 21,643.5 | 150.5 |   |   | 
| **물리적 읽기(블록):** | 13,575.1 | 94.4 |   |   | 
| **물리적 쓰기(블록):** | 3,467.3 | 24.1 |   |   | 
| **읽기 IO 요청:** | 3,586.8 | 24.9 |   |   | 
| **IO 요청 작성:** | 574.7 | 4.0 |   |   | 
| **읽기 IO(MB):** | 106.1 | 0.7 |   |   | 
| **쓰기 IO(MB):** | 27.1 | 0.2 |   |   | 
| **IM 스캔 행:** | 0.0 | 0.0 |   |   | 
| **세션 논리적 읽기 IM:** |   |   |   |   | 
| **사용자 호출** | 1,245.7 | 8.7 |   |   | 
| **구문 분석(SQL):** | 4,626.2 | 32.2 |   |   | 
| **하드 구문 분석(SQL):** | 8.9 | 0.1 |   |   | 
| **SQL 작업 영역(MB):** | 824.9 | 5.7 |   |   | 
| **로그온:** | 1.7 | 0.0 |   |   | 
| **실행(SQL):** | 136,656.5 | 950.4 |   |   | 
| **롤백** | 22.9 | 0.2 |   |   | 
| **트랜잭션:** | 143.8 |   |   |   | 
| 통계 | 합계 | 초당 | 전송당 | 
| --- |--- |--- |--- |
| **물리적 읽기 총 IO 요청** | 2,547,333,217 | 3,610.28 | 25.11 | 
| **물리적 읽기 총 바이트** | 80,776,296,124,928 | 114,482,426.26 | 796,149.98 | 
| **물리적 쓰기 총 IO 요청 수** | 534,198,208 | 757.11 | 5.27 | 
| **물리적 쓰기 총 바이트 수** | 25,517,678,849,024 | 36,165,631.84 | 251,508.18 | 
|   | 초당 읽기\$1쓰기 | 초당 읽기 | 초당 쓰기 | 
| --- |--- |--- |--- |
| **총 요청 수:** | 4,367.4 | 3,610.3 | 757.1 | 
| **데이터베이스 요청:** | 4,161.5 | 3,586.8 | 574.7 | 
| **최적화된 요청:** | 0.0 | 0.0 | 0.0 | 
| **다시 실행 요청:** | 179.3 | 2.8 | 176.6 | 
| **합계(MB):** | 143.7 | 109.2 | 34.5 | 
| **데이터베이스(MB):** | 133.1 | 106.1 | 27.1 | 
| **최적화된 합계(MB):** | 0.0 | 0.0 | 0.0 | 
| **다시 실행(MB):** | 7.6 | 2.7 | 4.9 | 
| **데이터베이스(블록):** | 17,042.4 | 13,575.1 | 3,467.3 | 
| **버퍼 캐시를 통해(블록):** | 5,898.5 | 5,360.9 | 537.6 | 
| **다이렉트(블록):** | 11,143.9 | 8,214.2 | 2,929.7 | 

### CPU 요구 사항 추정
<a name="estimate-cpu-requirements"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 방법을 선택합니다. | 다음 세 가지 방법으로 대상 데이터베이스에 필요한 CPU를 추정할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)코어를 사용하는 경우 OS 통계 대신 데이터베이스 지표 방법을 사용하는 것이 좋습니다. 마이그레이션하려는 데이터베이스에서만 사용하는 CPU를 기반으로 하기 때문입니다. (OS 통계에는 다른 프로세스의 CPU 사용량도 포함됩니다.) 또한 마이그레이션 후 성능을 개선하려면 ADDM 보고서에서 CPU 관련 권장 사항을 확인해야 합니다.CPU 생성량을 기반으로 요구 사항을 추정할 수도 있습니다. 여러 세대의 CPU를 사용하는 경우 [최적의 워크로드 성능을 위한 vCPU 수 설명](https://d1.awsstatic.com/whitepapers/Demystifying_vCPUs.df200b766578b75009ad8d15c72e493d6408c68a.pdf) 백서의 지침에 따라 대상 데이터베이스의 필요한 CPU를 추정할 수 있습니다. | DBA | 
| 옵션 1: 사용 가능한 코어를 기준으로 요구 사항을 추정합니다. | AWR 보고서:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)다음 두 가지 방법으로 사용 가능한 코어를 추정할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)**OS 명령을 사용하여 사용 가능한 코어를 추정하려면**다음 명령을 사용하여 프로세서의 코어 수를 계산합니다.<pre>$ cat /proc/cpuinfo |grep "cpu cores"|uniq<br />cpu cores    : 4<br />cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l </pre>다음 명령을 사용하여 프로세서의 소켓 수를 계산합니다.<pre>grep "physical id" /proc/cpuinfo | sort -u<br />  physical id     : 0<br />  physical id     : 1</pre>  참고: nmon, sar와 같은 OS 명령을 사용하여 CPU 사용률을 추출하는 것은 권장하지 않습니다. 이러한 계산에는 다른 프로세스의 CPU 사용률이 포함되며 데이터베이스에서 사용하는 실제 CPU가 반영되지 않을 수 있기 때문입니다.**AWR 보고서를 사용하여 사용 가능한 코어를 추정하려면**또한 AWR 보고서의 첫 번째 섹션에서 CPU 사용률을 도출할 수 있습니다. 다음은 보고서에서 발췌한 내용입니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)이 예제에서 CPU 개수는 80이며, 이는 논리적(가상) CPU임을 나타냅니다. 또한 이 구성에는 소켓 2개, 각 소켓에 물리적 프로세서 1개(물리적 프로세서 총 2개)가 있고 각 물리적 프로세서 또는 소켓에는 40개의 코어가 있다는 것도 알 수 있습니다.  | DBA | 
| 옵션 2: OS 통계를 사용하여 CPU 사용률을 추정합니다. | OS CPU 사용량 통계는 OS에서 직접 확인(**sar** 또는 다른 호스트 OS 유틸리티 사용)하거나 AWR 보고서의 운영 체제 통계 섹션에서 IDLE/(IDLE\$1BUSY) 값을 검토하여 확인할 수 있습니다. **v\$1osstat**에서 직접 CPU 사용 시간(초)을 확인할 수 있습니다. AWR 및 Statspack 보고서는 운영 체제 통계 섹션에서도 이 데이터를 표시합니다.동일한 상자에 여러 데이터베이스가 있는 경우 BUSY\$1TIME의 **v\$1osstat** 값은 모두 동일합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)시스템에 다른 주요 CPU 소비자가 없는 경우 다음 공식을 사용하여 CPU 사용률을 계산하세요.*   사용률 = 바쁜 시간 / 총 시간**   바쁜 시간 =요구 사항 = v\$1osstat.BUSY\$1TIME**   C = 총 시간(Busy \$1 Idle)**   C = 용량 = v\$1ostat.BUSY\$1TIME \$1 v\$1ostat.IDLE\$1TIME**   사용률 = BUSY\$1TIME / (BUSY\$1TIME \$1 IDLE\$1TIME)**      = -1,305,569,937 / (1,305,569,937 \$1 4,312,718,839 )**      = 23% 사용* | DBA | 
| 옵션 3: 데이터베이스 메트릭을 사용하여 CPU 사용률을 추정합니다. | 시스템에서 여러 데이터베이스가 실행 중인 경우 보고서 시작 부분에 나타나는 데이터베이스 지표를 사용할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)CPU 사용률 지표는 다음 공식을 사용하세요.*   데이터베이스 CPU 사용량(사용 가능한 CPU 성능의 비율(%)) = CPU 시간 / NUM\$1CPUS / 경과 시=간*여기서 CPU 사용량은 *CPU 시간*으로 설명되며 CPU를 기다리는 시간이 아니라 CPU에 소요된 시간을 나타냅니다. 이 계산 결과는 다음과 같습니다.*   = 312,625.40 / 11,759.64/80 = CPU의 33% 사용 중**   코어 수(33%) \$1 80 = 26.4코어**   총 코어 수 = 26.4 \$1 (120%) = 31.68코어*이 두 값 중 더 큰 값을 사용하여 Amazon RDS 또는 Aurora DB 인스턴스의 CPU 사용률을 계산할 수 있습니다.참고: IBM AIX에서는 계산된 사용률이 운영 체제 또는 데이터베이스의 값과 일치하지 않습니다. 이러한 값은 다른 운영 체제에서는 일치합니다. | DBA | 
| DB 이름 | DB Id | Instance | 인스턴스 번호 | 시작 시간 | 릴리스 | RAC | 
| --- |--- |--- |--- |--- |--- |--- |
| XXXX | <DB\$1ID> | XXXX | 1 | 05-Sep-20 23:09 | 12.1.0.2.0 | 아니요 | 
| **호스트 이름** | **플랫폼** | **CPU** | **코어** | **소켓** | **메모리(GB)** | 
| <host\$1name> | Linux x86 64비트 | 80 | 80 | 2 | 441.78 | 
| 통계 | 값 | 종료 값 | 
| --- |--- |--- |
| **FREE\$1MEMORY\$1BYTES** | 6,810,677,248 | 12,280,799,232 | 
| **INACTIVE\$1MEMORY\$1BYTES** | 175,627,333,632 | 160,380,653,568 | 
| **SWAP\$1FREE\$1BYTES** | 17,145,614,336 | 17,145,872,384 | 
| **BUSY\$1TIME** | 1,305,569,937 |   | 
| **IDLE\$1TIME** | 4,312,718,839 |   | 
| **IOWAIT\$1TIME** | 53,417,174 |   | 
| **NICE\$1TIME** | 29,815 |   | 
| **SYS\$1TIME** | 148,567,570 |   | 
| **USER\$1TIME** | 1,146,918,783 |   | 
| **LOAD** | 25 | 29 | 
| **VM\$1IN\$1BYTES** | 593,920 |   | 
| **VM\$1OUT\$1BYTES** | 327,680 |   | 
| **PHYSICAL\$1MEMORY\$1BYTES** | 474,362,417,152 |   | 
| **NUM\$1CPUS** | 80 |   | 
| **NUM\$1CPU\$1CORES** | 80 |   | 
| **NUM\$1CPU\$1SOCKETS** | 2 |   | 
| **GLOBAL\$1RECEIVE\$1SIZE\$1MAX** | 4,194,304 |   | 
| **GLOBAL\$1SEND\$1SIZE\$1MAX** | 2,097,152 |   | 
| **TCP\$1RECEIVE\$1SIZE\$1DEFAULT** | 87,380 |   | 
| **TCP\$1RECEIVE\$1SIZE\$1MAX** | 6,291,456 |   | 
| **TCP\$1RECEIVE\$1SIZE\$1MIN** | 4,096 |   | 
| **TCP\$1SEND\$1SIZE\$1DEFAULT** | 16,384 |   | 
| **TCP\$1SEND\$1SIZE\$1MAX** | 4,194,304 |   | 
| **TCP\$1SEND\$1SIZE\$1MIN** | 4,096 |   | 
|   | 스냅 ID | 스냅 시간 | 세션 | 커서/세션 | 
| --- |--- |--- |--- |--- |
| **시작 스냅:** | 184662 | 28-Sep-20 09:00:42 | 1226 | 35.8 | 
| **종료 스냅:** | 185446 | 06-Oct-20 13:00:20 | 1876 | 41.1 | 
| **경과:** |   | 11,759.64(분) |   |   | 
| **DB 시간:** |   | 312,625.40(분) |   |   | 

### 메모리 요구 사항 추정
<a name="estimate-memory-requirements"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 메모리 통계를 사용하여 메모리 요구 사항을 추정합니다. | AWR 보고서를 사용하여 원본 데이터베이스의 메모리를 계산하고 대상 데이터베이스와 일치시킬 수 있습니다. 또한 기존 데이터베이스의 성능을 확인하고 메모리 요구 사항을 줄여 비용을 절감하거나 요구 사항을 높여 성능을 향상시켜야 합니다. 이를 위해서는 AWR 응답 시간과 애플리케이션의 서비스 수준에 관한 계약(SLA)에 대한 상세한 분석이 필요합니다. Oracle 시스템 글로벌 영역(SGA)와 프로그램 글로벌 영역(PGA) 사용량의 합계를 Oracle에 대한 예상 메모리 사용률로 사용합니다. 대상 메모리의 크기 요구 사항을 결정하려면 OS에 20%를 추가합니다. Oracle RAC의 경우 공통 블록에 저장되므로 모든 RAC 노드의 예상 메모리 사용률 합계를 사용하고 총 메모리를 줄이세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)*   사용 중인 총 인스턴스 메모리 = SGA \$1 PGA = 220GB \$1 45GB  = 265GB*버퍼를 20% 추가하세요.*   총 인스턴스 메모리 = 1.2 \$1 265GB = 318GB *SGA와 PGA가 호스트 메모리의 70%를 차지하므로 총 메모리 요구 사항은 다음과 같습니다. *   총 호스트 메모리 = 318/0.7 = 464GB*참고: Amazon RDS for Oracle로 마이그레이션하는 경우 PGA와 SGA는 사전 정의된 공식을 기반으로 사전 계산됩니다. 사전 계산된 값이 추정치와 비슷한지 확인하세요. | DBA | 
| 버퍼 노웨이트 %: | 99.99 | 다시 실행 노웨이트 %: | 100.00 | 
| --- |--- |--- |--- |
| **버퍼 검색 결과 %:** | 99.84 | **인메모리 정렬 %:** | 100.00 | 
| **라이브러리 검색 결과 %:** | 748.77 | **소프트 구문 분석 %**: | 99.81 | 
| **구문 분석을 위한 실행 %:** | 96.61 | **래치 검색 결과 %:** | 100.00 | 
| **구문 분석 CPU에서 구문 분석 경과 %:** | 72.73 | **% 비 구문 분석 CPU:** | 99.21 | 
| **플래시 캐시 검색 결과 %:** | 0.00 |   |   | 
|   | 시작 | 종료 | 
| --- |--- |--- |
| **호스트 메모리(MB):** | 452,387.3 | 452,387.3 | 
| **SGA 사용량(MB):** | 220,544.0 | 220,544.0 | 
| **PGA 사용량(MB):** | 36,874.9 | 45,270.0 | 

### 대상 데이터베이스의 DB 인스턴스 유형 결정
<a name="determine-the-db-instance-type-of-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 디스크 I/O, CPU 및 메모리 추정치를 기반으로 DB 인스턴스 유형을 결정합니다. | 이전 단계의 추정치를 바탕으로 대상 Amazon RDS 또는 Aurora 데이터베이스의 용량은 다음과 같아야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.html)대상 Amazon RDS 또는 Aurora 데이터베이스에서 이러한 값을 32코어 용량, 512GB RAM, 13,600Mbps의 처리량을 갖춘 db.r5.16xlarge 인스턴스 유형에 매핑할 수 있습니다. 자세한 내용은 [Oracle 성능 지표를 기반으로 한 규모에 맞는 적절한 크기의 Amazon RDS 인스턴스](https://aws.amazon.com/blogs/database/right-sizing-amazon-rds-instances-at-scale-based-on-oracle-performance-metrics/) AWS Blog 게시물을 참조하세요. | DBA | 

## 관련 리소스
<a name="estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports-resources"></a>
+ [Aurora DB 인스턴스 클래스](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)(Amazon Aurora 설명서)
+ [Amazon RDS DB 인스턴스 스토리지](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)(Amazon RDS설명서)
+ [AWS Miner 도구](https://github.com/tmuth/AWR-Miner/blob/master/release/5.0.8/AWR-Miner-capture-5.0.8/awr_miner.sql)(GitHub 리포지토리)

# AWS DMS를 사용하여 Amazon RDS for SQL Server 테이블을 S3 버킷으로 내보내기
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms"></a>

*Subhani Shaik, Amazon Web Services*

## 요약
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms-summary"></a>

Amazon Relational Database Service(Amazon RDS) for SQL Server는 Amazon Web Services(AWS) 클라우드의 다른 DB 엔진 연결 서버에 데이터를 로드하는 것을 지원하지 않습니다. 대신 AWS Database Migration Service(AWS DMS)를 사용하여 Amazon RDS for SQL Server 테이블을 다른 DB 엔진에서 데이터를 사용할 수 있는 Amazon Simple Storage Service(S3) 버킷으로 내보낼 수 있습니다.

AWS DMS를 통해 데이터베이스를 AWS로 빠르고 안전하게 마이그레이션할 수 있습니다. 소스 데이터베이스는 마이그레이션 중에도 완전히 작동하여 해당 데이터베이스에를 사용하는 애플리케이션의 가동 중지 시간을 최소화합니다. AWS DMS는 광범위하게 사용되는 상용 및 오픈 소스 데이터베이스 간에 데이터를 마이그레이션할 수 있습니다.

이 패턴은 AWS DMS 엔드포인트를 구성할 때 AWS Secrets Manager를 사용합니다. Secrets Manager는 애플리케이션, 서비스, IT 리소스에 액세스하는 데 필요한 보안 암호를 지키도록 도와줍니다. 이 서비스를 사용하면 수명 주기 동안 데이터베이스 보안 인증 정보, API 키 및 기타 보안 암호를 손쉽게 교체, 관리 및 검색할 수 있습니다. 사용자와 애플리케이션은 Secrets Manager를 직접적으로 호출하여 보안 암호를 검색하므로 민감한 정보를 하드코딩할 필요가 없습니다. Secrets Manager는 Amazon RDS, Amazon Redshift 및 Amazon DocumentDB에 대한 통합 기능이 내장된 보안 로테이션을 제공합니다. 또한 이 서비스는 API 키 및 OAuth 토큰을 비롯한 다른 유형의 보안 암호로 확장할 수 있습니다. Secrets Manager를 사용하면 세분화된 권한을 사용하여 보안 암호에 대한 액세스를 제어하고 AWS 클라우드, 타사 서비스 및 온프레미스의 리소스에 대해 중앙에서 시크릿 로테이션을 감사할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ S3 버킷
+ Virtual Private Cloud(VPC)
+ DB 서브넷
+ Amazon RDS for SQL Server
+ Amazon RDS 인스턴스를 사용하여 S3 버킷에 대한 액세스(객체 나열, 가져오기 및 추가)가 있는 AWS Identity and Access Management(IAM) 역할.
+ RDS 인스턴스 보안 인증 정보를 저장할 Secrets Manager.

## 아키텍처
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms-architecture"></a>

**기술 스택**
+ Amazon RDS for SQL Server
+ AWS DMS
+ Amazon S3
+ AWS Secrets Manager

**대상 아키텍처**

다음 다이어그램은 AWS DMS를 사용하여 Amazon RDS 인스턴스에서 S3 버킷으로 데이터를 가져오는 아키텍처를 보여줍니다.

![\[설명은 다이어그램을 따릅니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7ba5756d-44a5-4aa3-97b6-fa3684ae6ce6/images/90f918e1-3ec2-4434-82b8-3ff4ad340fb9.png)


1. 소스 엔드포인트를 통해 소스 Amazon RDS 인스턴스에 연결하는 AWS DMS 마이그레이션 작업

1. 소스 Amazon RDS 인스턴스에서 데이터 복사

1. 대상 엔드포인트를 통해 대상 S3 버킷에 연결하는 AWS DMS 마이그레이션 작업

1. 복사된 데이터를 쉼표로 구분된 값(CSV) 형식으로 S3 버킷에 내보내기

## 도구
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms-tools"></a>

**서비스**
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 간에 데이터 스토어를 마이그레이션할 수 있습니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있습니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 사용하면 암호를 포함하여 코드에 하드코딩된 보안 인증을 Secrets Manager에 대한 API 호출로 대체하여 프로그래밍 방식으로 암호를 검색할 수 있습니다.

**기타 서비스**
+ [Microsoft SQL Server Management Studio(SSMS)](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16)는 SQL 서버 구성 요소에 대한 액세스, 구성 및 관리를 포함하여 SQL Server를 관리하기 위한 도구입니다.

## 에픽
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms-epics"></a>

### Amazon RDS for SQL Server 인스턴스 구성
<a name="configure-the-amazon-rds-for-sql-server-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS for SQL Server 인스턴스를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 
| 인스턴스의 보안 인증 정보를 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 
| 인스턴스 클래스, 스토리지, Auto Scaling, 가용성을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 
| VPC, 서브넷 그룹, 퍼블릭 액세스, 보안 그룹을 지정합니다. | Amazon RDS 인스턴스를 생성하는 데 필요한 **VPC**, **DB 서브넷 그룹** 및 **VPC 보안 그룹**을 선택합니다. 모범 사례를 따릅니다. 예를 들면 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 
| 모니터링, 백업 및 유지 관리를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 

### 데이터베이스 및 예제 데이터 설정
<a name="set-up-the-database-and-example-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테이블을 만들고 예제 데이터를 로드합니다. | 새 데이터베이스에서 테이블을 생성합니다. *추가 정보* 섹션의 예제 코드를 사용하여 데이터를 테이블에 로드합니다. | DBA, DevOps 엔지니어 | 

### 보안 인증 정보 설정
<a name="set-up-credentials"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 암호를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html)이 보안 암호는 AWS DMS 소스 엔드포인트에 사용됩니다. | DBA, DevOps 엔지니어 | 

### 데이터베이스와 S3 버킷 간 액세스 설정
<a name="set-up-access-between-the-database-and-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS에 액세스할 수 있도록 IAM 역할을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 

### S3 버킷을 생성합니다.
<a name="create-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | Amazon RDS for SQL Server의 데이터를 저장하려면 콘솔에서 **S3**를 선택한 다음 **버킷 생성**을 선택합니다. S3 버킷에 공개적으로 액세스할 수 없도록 합니다. | DBA, DevOps 엔지니어 | 

### AWS DMS와 S3 버킷 간 액세스를 설정합니다.
<a name="set-up-access-between-aws-dms-and-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS가 Amazon S3에 액세스를 하기 위한 IAM 역할을 생성합니다. | AWS DMS가 S3 버킷의 객체를 나열하고, 가져오고, 넣을 수 있는 IAM 역할을 생성합니다. | DBA, DevOps 엔지니어 | 

### AWS DMS 구성
<a name="configure-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 소스 엔드포인트를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 
| AWS DMS 대상 엔드포인트를 생성합니다. | Amazon S3를 **대상 엔진**으로 선택하여 **대상 엔드포인트**를 생성합니다.이전에 생성한 IAM 역할의 S3 버킷 이름과 폴더 이름을 제공합니다. | DBA, DevOps 엔지니어 | 
| AWS DMS 복제 인스턴스를 생성합니다. | 동일한 VPC 및 서브넷 그룹에서 AWS DMS 복제 인스턴스를 생성합니다. 인스턴스 클래스에 대한 자세한 내용은 [AWS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Types.html#CHAP_ReplicationInstance.Types.Deciding)를 참조하세요. | DBA, DevOps 엔지니어 | 
| AWS DMS 마이그레이션 작업을 생성합니다. | Amazon RDS for SQL Server에서 S3 버킷으로 데이터를 내보내려면 데이터베이스 마이그레이션 작업을 생성합니다. 마이그레이션 유형에서 **기존 데이터 마이그레이션**을 선택합니다. 생성한 AWS DMS 엔드포인트와 복제 인스턴스를 선택합니다. | DBA, DevOps 엔지니어 | 

### S3 버킷으로 데이터 내보내기
<a name="export-the-data-to-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 마이그레이션 작업을 실행합니다. | SQL Server 테이블 데이터를 내보내려면 데이터베이스 마이그레이션 작업을 시작합니다. 이 작업은 Amazon RDS for SQL Server에서 S3 버킷으로 데이터를 CSV 형식으로 내보냅니다. | DBA, DevOps 엔지니어 | 

### 리소스 정리
<a name="clean-up-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 삭제합니다. | 추가 비용이 발생하지 않도록 콘솔을 사용하여 다음 순서대로 리소스를 삭제합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.html) | DBA, DevOps 엔지니어 | 

## 관련 리소스
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms-resources"></a>
+ [AWS DMS](https://aws.amazon.com/dms/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [Amazon RDS for SQL Server](https://aws.amazon.com/rds/sqlserver/)
+ [Amazon S3 통합](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html)

## 추가 정보
<a name="export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms-additional"></a>

데이터베이스와 테이블을 만들고 예제 데이터를 로드하려면 다음 코드를 사용합니다.

```
--Step1: Database creation in RDS SQL Server
CREATE DATABASE [Test_DB]
 ON  PRIMARY
( NAME = N'Test_DB', FILENAME = N'D:\rdsdbdata\DATA\Test_DB.mdf' , SIZE = 5120KB , FILEGROWTH = 10%)
 LOG ON
( NAME = N'Test_DB_log', FILENAME = N'D:\rdsdbdata\DATA\Test_DB_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO

--Step2: Create Table
USE Test_DB
GO
Create Table Test_Table(ID int, Company Varchar(30), Location Varchar(20))

--Step3: Load sample data.
USE Test_DB
GO
Insert into Test_Table values(1,'AnyCompany','India')
Insert into Test_Table values(2,'AnyCompany','USA')
Insert into Test_Table values(3,'AnyCompany','UK')
Insert into Test_Table values(4,'AnyCompany','Hyderabad')
Insert into Test_Table values(5,'AnyCompany','Banglore')
```

# Aurora PostgreSQL의 동적 SQL 명령문에서 익명 블록 처리
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql"></a>

*anuradha chintha, Amazon Web Services*

## 요약
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-summary"></a>

참고: Amazon Cloud Directory는 더 이상 신규 고객에게 공개되지 않습니다. Cloud Directory의 대안은 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 및 [Amazon Neptune](https://aws.amazon.com/neptune/)을 참조하세요. 사용 사례에 적합한 대안을 선택하는 데 도움이 필요하거나 다른 질문이 있는 경우에 문의하세요[AWS Support](https://aws.amazon.com/support/).

이 패턴은 동적 SQL 명령문에서 익명 블록을 처리할 때 발생하는 오류를 방지하는 방법을 보여줍니다. AWS Schema Conversion Tool을 사용하여 Oracle 데이터베이스를 Aurora PostgreSQL 호환 버전 데이터베이스로 변환할 때 오류 메시지가 나타납니다. 오류를 방지하려면 `OUT` 바인드 변수의 값을 알아야 하지만 SQL 명령문을 실행하기 전까지 `OUT` 바인드 변수의 값을 알 수 없습니다. 이 오류는 AWS Schema Conversion Tool(AWS SCT)이 동적 SQL 명령문 내의 로직을 이해하지 못하기 때문에 발생합니다. AWS SCT는 PL/SQL 코드(즉, 함수, 프로시저, 패키지)의 동적 SQL 명령문을 변환할 수 없습니다.

## 사전 조건 및 제한 사항
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ [Aurora PostgreSQL 데이터베이스(DB) 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
+ [Oracle DB 인스턴스용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [PostgreSQL 인터랙티브 터미널 (psql)](https://www.postgresql.org/docs/current/app-psql.html)
+ [SQL \$1Plus](https://docs.oracle.com/cd/B14117_01/server.101/b12170/qstart.htm)
+ 대상 데이터베이스의 `AWS_ORACLE_EXT` 스키마([AWS SCT 확장 팩](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)의 일부)
+ 최신 버전의 [AWS Schema Conversion Tool(AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) 및 필수 드라이버

## 아키텍처
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle Database 버전 10g 이상

**대상 기술 스택**
+ Amazon Aurora PostgreSQL
+ Amazon RDS for PostgreSQL
+ AWS Schema Conversion Tool(AWS SCT)

**마이그레이션 아키텍처**

다음 다이어그램은 AWS SCT 및 Oracle `OUT` 바인드 변수를 사용하여 애플리케이션 코드에서 내장된 SQL 명령문을 스캔하고 코드를 Aurora 데이터베이스에서 사용할 수 있는 호환 가능한 형식으로 변환하는 방법을 보여줍니다.

![\[AWS SCT 및 Oracle OUT 바인드 변수를 사용하기 위한 아키텍처 다이어그램\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)


이 다이어그램은 다음 워크플로우를 보여줍니다.

1. Aurora PostgreSQL을 대상 데이터베이스로 사용하여 소스 데이터베이스에 대한 AWS SCT 보고서를 생성합니다.

1. 동적 SQL 코드 블록(AWS SCT가 오류를 야기한 블록)에서 익명 블록을 식별합니다.

1. 코드 블록을 수동으로 변환하고 대상 데이터베이스에 코드를 배포합니다.

## 도구
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-tools"></a>

**서비스**
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전관리형 관계형 데이터베이스 엔진입니다.
+ [Oracle용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/)은 소스 데이터베이스 스키마와 대부분의 데이터베이스 코드 객체를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 예측 가능하게 합니다.

**기타 도구**
+ [pgAdmin](https://www.pgadmin.org/)을 사용하면 데이터베이스 서버에 연결하고 상호 작용할 수 있습니다.
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/)는 Oracle Database에서 데이터베이스를 개발하고 관리하는 데 사용할 수 있는 통합 개발 환경입니다. 이 패턴에는 [SQL \$1Plus](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm) 또는 Oracle SQL Developer를 사용할 수 있습니다.

## 에픽
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-epics"></a>

### Oracle 소스 데이터베이스 구성
<a name="configure-the-oracle-source-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS 또는 Amazon EC2에서 Oracle 인스턴스를 생성합니다. | Amazon RDS에서 Oracle DB 인스턴스를 만들려면 Amazon RDS 설명서의 [Oracle DB 인스턴스 생성 및 Oracle DB 인스턴스의 데이터베이스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)을 참조하세요.Amazon Elastic Compute Cloud (Amazon EC2)에서 Oracle DB 인스턴스를 생성하려면 AWS Prescriptive Guidance 설명서의 [Oracle용 Amazon EC2](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html)를 참조하세요. | DBA | 
| 마이그레이션을 위한 데이터베이스 스키마와 객체를 생성합니다. | Amazon Cloud Directory를 사용하여 데이터베이스 스키마를 생성할 수 있습니다. 자세한 내용은 Cloud Directory 설명서의 [스키마 생성](https://docs.aws.amazon.com/clouddirectory/latest/developerguide/getting_started_create_schema.html)을 참조하세요. | DBA | 
| 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 보안 그룹을 생성하고 구성하려면 Amazon RDS 설명서의 [보안 그룹을 통한 액세스 제어](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)를 참조하세요. | DBA | 
| 데이터베이스가 실행 중인지 확인합니다. | 데이터베이스 상태를 확인하려면 Amazon RDS 설명서의 [Amazon RDS 이벤트 보기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ListEvents.html)를 참조하세요. | DBA | 

### 대상 Aurora PostgreSQL 데이터베이스 구성
<a name="configure-the-target-aurora-postgresql-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS에서 Aurora PostgreSQL 인스턴스를 생성합니다. | Aurora PostgreSQL 인스턴스를 생성하려면 Amazon RDS 설명서의 [DB 클러스터 생성 및 Aurora PostgreSQL DB 클러스터의 데이터베이스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)을 참조하세요. | DBA | 
| 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 보안 그룹을 생성 및 구성하려면 Aurora 설명서의 [보안 그룹을 생성하여 VPC 내의 DB 클러스터에 대한 액세스 제공](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html#CHAP_SettingUp_Aurora.SecurityGroup)을 참조하세요. | DBA | 
| Aurora PostgreSQL 데이터베이스가 실행 중인지 확인합니다. | 데이터베이스 상태를 확인하려면 Aurora 설명서의 [Amazon RDS 이벤트 보기](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/USER_ListEvents.html)를 참조하세요. | DBA | 

### AWS SCT 설정
<a name="set-up-aws-sct"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 소스 데이터베이스에 연결합니다. | AWS SCT를 소스 데이터베이스에 연결하려면 AWS SCT 설명서의 [PostgreSQL에 소스로 연결하기](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Connecting)를 참조하세요. | DBA | 
| AWS SCT를 대상 데이터베이스에 연결합니다. | AWS SCT를 대상 데이터베이스에 연결하려면 AWS Schema Conversion Tool 사용 설명서의 [AWS Schema Conversion Tool이란 무엇인가?](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참조하세요. | DBA | 
| AWS SCT에서 데이터베이스 스키마를 변환하고 자동으로 변환된 코드를 SQL 파일로 저장합니다. | AWS SCT로 변환된 파일을 저장하려면 AWS Schema Conversion Tool 사용 설명서의 [변환된 스키마를 AWS SCT에 저장 및 적용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html#CHAP_Converting.SaveAndApply)을 참조하세요. | DBA | 

### 코드 마이그레이션
<a name="migrate-the-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 수동 변환을 위한 SQL 파일을 가져옵니다. | AWS SCT로 변환된 파일에서 수동 변환이 필요한 SQL 파일을 가져옵니다. | DBA | 
| 스크립트를 업데이트합니다. | SQL 파일을 수동으로 업데이트합니다. | DBA | 

## 관련 리소스
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Amazon Aurora 기능](https://aws.amazon.com/rds/aurora/postgresql-features/)

## 추가 정보
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-additional"></a>

다음 예제 코드는 Oracle 소스 데이터베이스를 구성하는 방법을 보여줍니다.

```
CREATE or replace PROCEDURE calc_stats_new1 (
  a NUMBER,
  b NUMBER,
  result out NUMBER)
IS
BEGIN
result:=a+b;
END;
/
```

```
set serveroutput on ;
 
DECLARE
  a NUMBER := 4;
  b NUMBER := 7;
  plsql_block VARCHAR2(100);
  output number;
BEGIN
  plsql_block := 'BEGIN calc_stats_new1(:a, :b,:output); END;';
  EXECUTE IMMEDIATE plsql_block USING a, b,out output;  
  DBMS_OUTPUT.PUT_LINE('output:'||output);
 
END;
```

다음 예제 코드는 대상 Aurora PostgreSQL 데이터베이스를 구성하는 방법을 보여줍니다.

```
 w integer,
 x integer)
RETURNS integer
AS
$BODY$
DECLARE
begin
return w + x ;
end;
$BODY$
LANGUAGE  plpgsql;
 
 
CREATE OR REPLACE FUNCTION test_pg.init()
RETURNS void
AS
$BODY$
BEGIN
if aws_oracle_ext.is_package_initialized
      ('test_pg' ) then
      return;
    end if;
    perform aws_oracle_ext.set_package_initialized
      ('test_pg' );
 
PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_output', NULL::INTEGER);
PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_status', NULL::text);
END;
$BODY$
LANGUAGE  plpgsql;
 

DO $$ 
declare
v_sql text;
v_output_loc int; 
a integer :=1;
b integer :=2;
BEGIN 
perform  test_pg.init();
--raise notice 'v_sql %',v_sql;
execute 'do $a$ declare v_output_l int; begin select * from test_pg.calc_stats_new1('||a||','||b||') into v_output_l;
PERFORM aws_oracle_ext.set_package_variable(''test_pg'', ''v_output'', v_output_l) ; end; $a$'  ; 
v_output_loc := aws_oracle_ext.get_package_variable('test_pg', 'v_output');
raise notice 'v_output_loc %',v_output_loc; 
END ; 
$$
```

# DynamoDB 태깅 적용 지원
<a name="help-enforce-dynamodb-tagging"></a>

*Mansi Suratwala, Amazon Web Services*

## 요약
<a name="help-enforce-dynamodb-tagging-summary"></a>

이 패턴은 미리 정의된 Amazon DynamoDB 태그가 Amazon Web Services(AWS) 클라우드의 DynamoDB 리소스에서 누락되거나 제거될 때 자동 알림을 설정합니다. 

DynamoDB는 완전관리형 NoSQL 데이터베이스 서비스로서 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다. DynamoDB를 사용하면 분산 데이터베이스를 운영하고 규모를 조정하는 데 따르는 관리 부담을 덜 수 있습니다. DynamoDB 는 하드웨어 프로비저닝, 설정 및 구성, 복제, 소프트웨어 패치 또는 클러스터 규모 조정에 대해 걱정할 필요가 없게 합니다.

이 패턴은 Amazon CloudWatch Events 이벤트와 AWS Lambda 함수를 생성하는 AWS CloudFormation 템플릿을 사용합니다. 이벤트는 AWS CloudTrail을 사용하여 모든 신규 또는 기존 DynamoDB 태깅 정보를 감시합니다. 사전 정의된 태그가 누락되거나 제거되면 CloudWatch는 Lambda 함수를 트리거하여 위반 사실을 알리는 Amazon Simple Notification Service(SNS) 알림을 보냅니다. 

## 사전 조건 및 제한 사항
<a name="help-enforce-dynamodb-tagging-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Lambda 함수를 실행하는 Python 스크립트가 포함된 Lambda .zip 파일용 Amazon Simple Storage Service(S3) 버킷

**제한 사항 **
+ 솔루션은 `TagResource` 또는 `UntagResource` CloudTrail 이벤트가 발생할 때만 작동합니다. 다른 이벤트에 대한 알림은 생성되지 않습니다.

## 아키텍처
<a name="help-enforce-dynamodb-tagging-architecture"></a>

**대상 기술 스택  **
+ Amazon DynamoDB
+ AWS CloudTrail
+ Amazon CloudWatch()
+ AWS Lambda
+ Amazon S3
+ Amazon SNS

**대상 아키텍처 **

![\[DynamoDB 태그가 누락되면 CloudWatch 이벤트와 Lambda 함수가 트리거되어 Amazon SNS 알림을 보냅니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/638d2b87-e031-4a53-8677-2d62e563746b/images/acc448c5-c39b-40b7-94c0-3534d2e725d7.png)


**자동화 및 규모 조정**

여러 AWS 리전 및 계정에 대해 AWS CloudFormation 템플릿을 여러 번 사용할 수 있습니다. 템플릿은 각 리전 또는 계정에서 한 번만 실행하면 됩니다.

## 도구
<a name="help-enforce-dynamodb-tagging-tools"></a>

**도구**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) – DynamoDB는 완전관리형 NoSQL 데이터베이스 서비스로서 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다. 
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) – CloudTrail은 AWS 계정의 거버넌스, 규정 준수와 운영 및 위험 감사를 지원하는 AWS 서비스입니다. 사용자, 역할 또는 AWS 서비스가 수행하는 작업들은 CloudTrail에 이벤트로 기록됩니다. 
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) – Amazon CloudWatch Events는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다. 
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) - Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)-Amazon Simple Storage Service(S3)는 웹 사이트, 모바일 애플리케이션, 백업, 데이터 레이크 등 다양한 스토리지 솔루션에 사용할 수 있는 확장성이 뛰어난 객체 스토리지 서비스입니다.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) – Amazon Simple Notification Service(SNS)는 애플리케이션, 최종 사용자 및 디바이스가 클라우드에서 즉시 알림을 전송하고 수신할 수 있게 해 주는 웹 서비스입니다. 

**코드 **
+ 프로젝트의 .zip 파일은 첨부 파일로 제공됩니다.

## 에픽
<a name="help-enforce-dynamodb-tagging-epics"></a>

### S3 버킷 정의
<a name="define-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 정의합니다. | Amazon S3 콘솔에서 선행 슬래시를 포함하지 않는 고유한 이름을 가진 S3 버킷을 선택하거나 생성합니다. 이 S3 버킷은 Lambda 코드 .zip 파일을 호스팅합니다. S3 버킷은 모니터링 중인 DynamoDB 리소스와 동일한 AWS 리전에 있어야 합니다. | 클라우드 아키텍트 | 

### Lambda 코드를 S3 버킷에 업로드
<a name="upload-the-lambda-code-to-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 코드를 S3 버킷에 업로드합니다. | *첨부 파일* 섹션에 제공된 Lambda 코드 .zip 파일을 S3 버킷에 업로드합니다. S3 버킷은 모니터링되는 DynamoDB 리소스와 동일한 리전에 있어야 합니다. | 클라우드 아키텍트 | 

### AWS CloudFormation 템플릿 배포
<a name="deploy-the-aws-cloudformation-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS CloudFormation 템플릿을 배포합니다. | AWS CloudFormation 콘솔에서 *첨부 파일* 섹션에 제공된 AWS CloudFormation 템플릿을 배포합니다. 다음 에픽에서 파라미터에 대한 값을 입력합니다. | 클라우드 아키텍트  | 

### AWS CloudFormation 템플릿에서 파라미터 작성
<a name="complete-the-parameters-in-the-aws-cloudformation-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷에 이름을 지정합니다. | 첫 번째 에픽에서 생성하거나 선택한 S3 버킷의 이름을 입력합니다. | 클라우드 아키텍트 | 
| Amazon S3 키를 입력합니다. | S3 버킷의 Lambda 코드 .zip 파일 위치를 선행 슬래시 없이 입력합니다(예: `<folder>/<file-name>.zip`). | 클라우드 아키텍트 | 
| 이메일 주소 입력 | Amazon SNS 알림을 수신할 활성 이메일 주소를 입력합니다. | 클라우드 아키텍트  | 
| 로깅 수준을 정의합니다. | Lambda 함수의 로깅 수준 및 빈도를 정의합니다. `Info`는 애플리케이션 진행 상황에 대한 자세한 정보 메시지를 지정합니다. `Error`는 애플리케이션을 계속 실행할 수 있게 해주는 오류 이벤트를 지정합니다. `Warning`은 잠재적으로 유해한 상황을 지정합니다. | 클라우드 아키텍트 | 
| 필요한 DynamoDB 태그 키를 입력합니다. | 태그는 쉼표로 구분하고 태그 사이에 스페이스가 없어야 합니다 (예: `ApplicationId,CreatedBy,Environment,Organization`). CloudWatch Events 이벤트가 이러한 태그를 검색하고 찾을 수 없는 경우 알림을 보냅니다. | 클라우드 아키텍트 | 

### 구독을 확인합니다.
<a name="confirm-the-subscription"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 구독을 확인합니다. | 템플릿이 성공적으로 배포되면 입력한 이메일 주소로 구독 이메일이 전송됩니다. 위반 알림을 받으려면 이 이메일 구독을 확인해야 합니다. | 클라우드 아키텍트  | 

## 관련 리소스
<a name="help-enforce-dynamodb-tagging-resources"></a>
+ [S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)
+ [S3 버킷에 파일 업로드](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) 
+ [DynamoDB에서 리소스 태그 지정](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.Operations.html)
+ [AWS CloudTrail을 사용하여 API 직접 호출에서 트리거되는 CloudWatch Events 규칙 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-CloudTrail-Rule.html)

## 첨부
<a name="attachments-638d2b87-e031-4a53-8677-2d62e563746b"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/638d2b87-e031-4a53-8677-2d62e563746b/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWS DMS와 Amazon Aurora를 사용하여 지역 간 재해 복구 구현
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora"></a>

*Mark Hudson, Amazon Web Services*

## 요약
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-summary"></a>

자연재해나 사람에 의한 재해는 언제든지 발생할 수 있으며, 이는 특정 AWS 리전에서 실행되는 서비스 및 워크로드의 가용성에 영향을 미칠 수 있습니다. 위험을 완화하려면 AWS 서비스에 내장된 지역 간 기능을 통합하는 재해 복구(DR) 계획을 개발해야 합니다. 본질적으로 교차 리전 기능을 제공하지 않는 AWS 서비스의 경우, DR 플랜은 AWS 리전 전반의 장애 조치를 처리할 수 있는 솔루션도 제공해야 합니다.

이 패턴은 단일 지역에 있는 두 개의 Amazon Aurora MySQL Compatible Edition 데이터베이스 클러스터를 포함하는 재해 복구 설정을 안내합니다. DR 요구 사항을 충족하기 위해 데이터베이스 클러스터는 여러 AWS 리전에 걸친 단일 데이터베이스와 함께 Amazon Aurora Global Database 기능을 사용하도록 구성됩니다. AWS Database Migration Service(AWS DMS) 작업은 로컬 리전의 클러스터 간에 데이터를 복제합니다. 하지만 AWS DMS는 현재 리전 간 작업 장애 조치를 지원하지 않습니다. 이 패턴에는 이러한 제한을 해결하고 두 리전에서 AWS DMS를 독립적으로 구성하는 데 필요한 단계가 포함됩니다.

## 사전 조건 및 제한 사항
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-prereqs"></a>

**사전 조건 **
+ [Amazon Aurora Global Database](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase)를 지원하는 일부 기본 및 보조 AWS 리전.
+ 기본 리전의 단일 계정에 두 개의 독립적인 Amazon Aurora MySQL Compatible Edition 데이터베이스 클러스터를 사용합니다.
+ 데이터베이스 인스턴스 클래스 db.r5 이상(권장).
+ 기존 데이터베이스 클러스터 간에 지속적인 복제를 수행하는 기본 리전의 AWS DMS 작업입니다.
+ 데이터베이스 인스턴스 생성 요구 사항을 충족할 수 있는 DR 리전 리소스가 마련되어 있습니다. 자세한 내용은 [VPC에서 DB 인스턴스로 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html)을 참조하세요.

**제한 사항 **
+ Amazon Aurora Global Database 제한 사항의 전체 목록은 [Amazon Aurora 글로벌 데이터베이스의 제한 사항](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database.limitations)을 참조하세요.

**제품 버전**
+ Amazon Aurora MySQL-Compatible Edition 5.7 또는 8.0. 자세한 내용은 [Amazon Aurora 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.VersionPolicy.html)을 참조하세요.

## 아키텍처
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-architecture"></a>

**대상 기술 스택**
+ Amazon Aurora MySQL-Compatible Edition 글로벌 데이터베이스 클러스터
+ AWS DMS

**대상 아키텍처 **

다음 다이어그램은 2개의 AWS 리전에 대한 글로벌 데이터베이스를 보여줍니다. 하나는 기본 및 리포터 데이터베이스와 AWS DMS 복제를 포함하고 다른 하나는 보조 기본 및 리포터 데이터베이스를 포함합니다.

![\[리전 간 글로벌 데이터베이스의 아키텍처 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/b01f5043-fcb5-4b1e-b79f-999792e89bed/images/3785384c-ed01-454f-b58c-fa09d223d57b.png)


**자동화 및 규모 조정**

AWS CloudFormation을 사용하여 Virtual Private Cloud(VPC), 서브넷, 파라미터 그룹과 같은 사전 필수 인프라를 보조 리전에 생성할 수 있습니다. 또한 AWS CloudFormation을 사용하여 DR 지역에 보조 클러스터를 생성하고 글로벌 데이터베이스에 추가할 수 있습니다. CloudFormation 템플릿을 사용하여 기본 리전에 데이터베이스 클러스터를 생성한 경우, 추가 템플릿으로 데이터베이스 클러스터를 업데이트하거나 보강하여 글로벌 데이터베이스 리소스를 생성할 수 있습니다. 자세한 내용은 [두 개의 DB 인스턴스가 있는 Amazon Aurora DB 클러스터 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#aws-resource-rds-dbcluster--examples) 및 [Aurora MySQL용 글로벌 데이터베이스 클러스터 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-globalcluster.html#aws-resource-rds-globalcluster--examples)을 참조하세요.

마지막으로 장애 조치 및 페일백 이벤트가 발생한 후 CloudFormation을 사용하여 기본 및 보조 리전에서 AWS DMS 작업을 생성할 수 있습니다. 자세한 내용은 [AWS::DMS::ReplicationTask](https://docs.amazonaws.cn/en_us/AWSCloudFormation/latest/UserGuide/aws-resource-dms-replicationtask.html)를 참조하세요.

## 도구
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-tools"></a>
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다. 이 패턴은 Amazon Aurora MySQL Compatible Edition을 사용합니다.
+ [Amazon Aurora Global Database](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html)는 전 세계에 분산된 애플리케이션을 위해 설계되었습니다. Amazon Aurora Global Database의 여러 AWS 리전에 분산될 수 있습니다. 데이터베이스 성능에 영향을 주지 않고 데이터를 복제합니다. 또한 각 지역에서 지연 시간을 줄이면서 로컬 읽기를 빠르게 수행할 수 있으며, 지역 전체의 정전 발생 시 재해 복구 기능을 제공합니다.
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 일회성 마이그레이션 또는 지속적 복제를 제공합니다. 지속적인 복제 작업을 통해 원본 데이터베이스와 대상 데이터베이스를 동기화할 수 있습니다. 설정이 완료되면 진행 중인 복제 작업은 최소한의 지연 시간으로 소스 변경 사항을 대상에 지속적으로 적용합니다. 데이터 검증 및 변환과 같은 모든 AWS DMS 기능을 모든 복제 작업에 사용할 수 있습니다.

## 에픽
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-epics"></a>

### 기본 리전의 기존 데이터베이스 클러스터 준비
<a name="prepare-the-existing-database-clusters-in-the-primary-region"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 클러스터 파라미터 그룹을 수정합니다. | 기존 데이터베이스 클러스터 파라미터 그룹에서 `binlog_format` 파라미터를 **열** 값으로 설정하여 행 수준 바이너리 로깅을 활성화합니다.AWS DMS는 지속적인 복제 또는 변경 데이터 캡처(CDC)를 수행할 때 MySQL 호환 데이터베이스에 대한 행 수준 바이너리 로깅을 요구합니다. 자세한 내용은 [AWS 관리형 MySQL 호환 데이터베이스를 AWS DMS의 원본으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html#CHAP_Source.MySQL.AmazonManaged)을 참조하세요. | AWS 관리자 | 
| 데이터베이스 바이너리 로그 보존 기간을 업데이트합니다. | 최종 사용자 디바이스에 설치된 MySQL 클라이언트 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용하여 기본 데이터베이스 클러스터의 작성자 노드에서 Amazon Relational Database Service(RDS)에서 제공하는 다음과 같은 저장 프로시저를 실행합니다. 여기에서 `XX`란 로그를 보관하는 데 걸리는 시간입니다.<pre>call mysql.rds_set_configuration('binlog retention hours', XX)</pre>다음 명령을 실행하면 설정을 확인할 수 있습니다.<pre>call mysql.rds_show_configuration;</pre>AWS에서 관리하는 MySQL 호환 데이터베이스는 가능한 한 빨리 바이너리 로그를 제거합니다. 따라서 보존 기간은 AWS DMS 작업이 실행되기 전에 로그가 삭제되지 않도록 충분히 길어야 합니다. 일반적으로 24시간이면 충분하지만 DR 리전에서 AWS DMS 작업을 설정하는 데 필요한 시간을 기준으로 값을 정해야 합니다. | DBA | 

### 기본 리전의 기존 AWS DMS 작업 업데이트
<a name="update-the-existing-aws-dms-task-in-the-primary-region"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 태스크 ARN을 기록합니다. | Amazon 리소스 이름(ARN)을 사용하여 나중에 사용할 수 있도록 AWS DMS 작업 이름을 얻습니다. AWS DMS 작업 ARN을 검색하려면 콘솔에서 작업을 보거나 다음 명령을 실행하세요.<pre>aws dms describe-replication-tasks</pre>ARN의 모습은 다음과 같습니다.<pre>arn:aws:dms:us-east-1:<accountid>:task:AN6HFFMPM246XOZVEUHCNSOVF7MQCLTOZUIRAMY</pre>마지막 콜론 뒤의 문자는 이후 단계에서 사용된 작업 이름에 해당합니다. | AWS 관리자 | 
| 체크포인트를 기록하도록 기존 AWS DMS 작업을 수정합니다. | AWS DMS는 복제 엔진이 변경 스트림의 복구 지점을 알 수 있도록 정보가 포함된 체크포인트를 생성합니다. 체크포인트 정보를 기록하려면 콘솔에서 다음 단계를 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html) | AWS 관리자 | 
| 체크포인트 정보를 검증합니다. | 클러스터의 작성자 엔드포인트에 연결된 MySQL 클라이언트를 사용하여 리포터 데이터베이스 클러스터에서 새 메타데이터 테이블을 쿼리하여 해당 테이블이 존재하고 복제 상태 정보가 포함되어 있는지 확인합니다. 다음 명령을 실행합니다.<pre>select * from awsdms_control.awsdms_txn_state;</pre>ARN의 작업 이름은 이 표의 `Task_Name` 열에 있어야 합니다. | DBA | 

### 두 Amazon Aurora 클러스터를 모두 DR 지역으로 확장
<a name="expand-both-amazon-aurora-clusters-to-a-dr-region"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DR 리전에 기본 인프라를 생성합니다. | Amazon Aurora 클러스터를 생성하고 액세스하는 데 필요한 기본 구성 요소를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html)두 파라미터 그룹의 구성이 기본 지역의 구성과 일치하는지 확인합니다. | AWS 관리자 | 
| 두 Amazon Aurora 클러스터 모두에 DR 지역을 추가합니다. | 기본 및 리포터 Amazon Aurora 클러스터에 보조 리전(DR 리전)을 추가합니다. 자세한 내용은 [Amazon Aurora Global Database에 AWS 리전 추가](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-getting-started.html#aurora-global-database-attaching)를 참조하세요. | AWS 관리자 | 

### 장애 조치 수행
<a name="perform-failover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 작업을 중지합니다. | 장애 조치가 발생한 후에는 기본 리전의 AWS DMS 작업이 제대로 작동하지 않으므로 오류를 방지하려면 작업을 중지해야 합니다. | AWS 관리자 | 
| 관리형 장애 조치를 수행하세요. | 기본 데이터베이스 클러스터를 DR 지역으로 관리되는 장애 조치를 수행하세요. 자세한 내용은 [Amazon Aurora Global Database에 대한 관리형 계획 장애 조치 수행](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html#aurora-global-database-disaster-recovery.managed-failover)을 참조하세요. 기본 데이터베이스 클러스터에서 장애 조치가 완료된 후 리포터 데이터베이스 클러스터에서 동일한 작업을 수행합니다. | AWS 관리자, DBA | 
| 데이터를 기본 데이터베이스로 로드합니다. | DR 데이터베이스 클러스터에 있는 기본 데이터베이스의 작성자 노드에 테스트 데이터를 삽입합니다. 이 데이터는 복제가 제대로 작동하는지 검증하는 데 사용됩니다. | DBA | 
| AWS DMS 복제 인스턴스를 생성합니다. | DR 리전에서 AWS DMS 복제 인스턴스를 생성하려면 [복제 인스턴스 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html)을 참조하세요. | AWS 관리자, DBA | 
| AWS DMS 소스 및 대상 엔드포인트를 생성합니다. | DR 리전에서 AWS DMS 소스 및 대상 엔드포인트를 생성하려면 [소스 및 대상 엔드포인트 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)을 참조하세요. 원본은 기본 데이터베이스 클러스터의 작성자 인스턴스를 가리켜야 합니다. 대상은 보고자 데이터베이스 클러스터의 작성자 인스턴스를 가리켜야 합니다. | AWS 관리자, DBA | 
| 복제 체크포인트를 확보합니다. | 복제 체크포인트를 얻으려면 MySQL 클라이언트를 사용하여 DR 지역의 리포터 데이터베이스 클러스터에 있는 작성자 노드에 대해 다음을 실행하여 메타데이터 테이블을 쿼리하세요.<pre>select * from awsdms_control.awsdms_txn_state;</pre>표에서 두 번째 에픽에서 획득한 기본 리전에 있는 AWS DMS 작업의 ARN에 해당하는 task\$1name 값을 찾으세요. | DBA | 
| AWS DMS 작업을 생성합니다. | 콘솔을 사용하여 DR 지역에서 AWS DMS 작업을 생성합니다. 작업에서 **데이터 변경 사항만 복제**하는 마이그레이션 방법을 지정하세요. 자세한 내용은 [작업 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)을 참조하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html)AWS DMS 작업 **마이그레이션 작업 시작** 설정을 **생성 시 자동**으로 설정합니다. | AWS 관리자, DBA | 
| AWS DMS 태스크 ARN을 기록합니다. | ARN을 사용하여 나중에 사용할 수 있도록 AWS DMS 작업 이름을 확보합니다. AWS DMS 작업 ARN을 검색하려면 다음 명령을 실행하세요.<pre>aws dms describe-replication-tasks</pre> | AWS 관리자, DBA | 
| 복제된 데이터를 검증합니다. | DR 리전의 보고서 데이터베이스 클러스터를 쿼리하여 기본 데이터베이스 클러스터에 로드한 테스트 데이터가 복제되었는지 확인합니다. | DBA | 

### 페일백 수행
<a name="perform-failback"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 작업을 중지합니다. | 페일백 발생 후에는 DR 리전의 AWS DMS 작업이 제대로 작동하지 않으므로 오류를 방지하려면 작업을 중지해야 합니다. | AWS 관리자 | 
| 관리형 페일백을 수행하세요. | 기본 데이터베이스 클러스터를 기본 리전으로 페일백합니다. 자세한 내용은 [Amazon Aurora Global Database에 대한 관리형 계획 장애 조치 수행](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html#aurora-global-database-disaster-recovery.managed-failover)을 참조하세요. 기본 데이터베이스 클러스터의 페일백이 완료된 후 리포터 데이터베이스 클러스터에서 동일한 작업을 수행합니다. | AWS 관리자, DBA | 
| 복제 체크포인트를 확보합니다. | 복제 체크포인트를 얻으려면 MySQL 클라이언트를 사용하여 DR 지역의 리포터 데이터베이스 클러스터에 있는 작성자 노드에 대해 다음을 실행하여 메타데이터 테이블을 쿼리하세요.<pre>select * from awsdms_control.awsdms_txn_state;</pre>표에서 네 번째 에픽에서 획득한 DR 리전에 있는 AWS DMS 작업의 ARN에 해당하는 `task_name` 값을 찾으세요. | DBA | 
| AWS DMS 소스 및 대상 엔드포인트를 업데이트합니다. | 데이터베이스 클러스터가 페일백된 후에는 기본 지역의 클러스터를 확인하여 어느 노드가 작성기 인스턴스인지 확인합니다. 그런 다음 기본 리전의 기존 AWS DMS 소스 및 대상 엔드포인트가 작성자 인스턴스를 가리키는지 확인합니다. 그렇지 않은 경우 작성자 인스턴스 도메인 이름 시스템(DNS) 이름으로 엔드포인트를 업데이트하세요. | AWS 관리자 | 
| AWS DMS 작업을 생성합니다. | 콘솔을 사용하여 기본 리전에 AWS DMS 작업을 생성합니다. 작업에서 **데이터 변경 사항만 복제**하는 마이그레이션 방법을 지정하세요. 자세한 내용은 [작업 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)을 참조하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.html) | AWS 관리자, DBA | 
| AWS DMS 태스크 Amazon 리소스 이름(ARN)을 기록합니다. | ARN을 사용하여 나중에 사용할 수 있도록 AWS DMS 작업 이름을 확보합니다. AWS DMS 작업 ARN을 검색하려면 다음 명령을 실행하세요.<pre>aws dms describe-replication-tasks</pre>다른 관리형 장애 조치를 수행할 때 또는 DR 시나리오 중에 작업 이름이 필요합니다. | AWS 관리자, DBA | 
| AWS DMS 작업을 삭제합니다. | 기본 리전에서는 기존의 AWS DMS 작업(현재 중지됨)을 삭제하고 보조 리전에서는 기존 AWS DMS 작업(현재 중지됨)을 삭제합니다. | AWS 관리자 | 

## 관련 리소스
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-resources"></a>
+ [Amazon Aurora DB 클러스터 구성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraSettingUp.html)
+ [Amazon Aurora Global Database 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html)
+ [Amazon Aurora MySQL을 사용한 작업](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)
+ [AWS DMS 복제 인스턴스를 사용한 작업](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html)
+ [AWS DMS 엔드포인트를 사용한 작업](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html)
+ [AWS DMS 태스크를 사용한 작업](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)
+ [AWS CloudFormation이란 무엇인가요?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)

## 추가 정보
<a name="implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora-additional"></a>

Amazon Aurora Global Database는 1초의 Recovery Time Objective(RTO)와 1분 미만의 Recovery Point Objective(RPO)를 제공하여 기존 복제 솔루션보다 낮고 DR 시나리오에 이상적이기 때문에 이 예제에서 DR에 사용됩니다.

Amazon Aurora Global Database는 다음 사항을 비롯한 많은 다른 이점을 제공합니다.
+ 로컬 지연 시간을 이용한 글로벌 읽기 - 전 세계 소비자는 로컬 지연 시간을 두고 로컬 지역의 정보에 액세스할 수 있습니다.
+ 확장 가능한 보조 Amazon Aurora DB 클러스터 - 보조 클러스터는 독립적으로 확장하여 최대 16개의 읽기 전용 복제본을 추가할 수 있습니다.
+ 기본 DB클러스터에서 보조 Amazon Aurora DB 클러스터로의 빠른 복제 – 복제는 기본 클러스터의 성능에 거의 영향을 미치지 않습니다. 이는 스토리지 계층에서 발생하며 일반적인 지역 간 복제 지연 시간은 1초 미만입니다.

이 패턴은 복제에도 AWS DMS를 사용합니다. Amazon Aurora 데이터베이스는 읽기 전용 복제본을 생성하는 기능을 제공하므로 복제 프로세스와 DR 설정을 간소화할 수 있습니다. 그러나데이터 변환이 필요하거나 대상 데이터베이스에 원본 데이터베이스에 없는 추가 인덱스가 필요한 경우에는 AWS DMS를 복제하는 데 주로 사용됩니다.

# 100개 이상의 인수가 있는 Oracle 함수 및 프로시저를 PostgreSQL로 마이그레이션
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql"></a>

*Srinivas Potlachervoo, Amazon Web Services*

## 요약
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-summary"></a>

이 패턴은 100개 이상의 인수가 있는 Oracle Database 함수 및 프로시저를 PostgreSQL로 마이그레이션하는 방법을 보여줍니다. 예를 들어 이 패턴을 사용하여 Oracle 함수 및 프로시저를 다음 PostgreSQL 호환 AWS 데이터베이스 서비스 중 하나로 마이그레이션할 수 있습니다.
+ PostgreSQL용 Amazon Relational Database Service(Amazon RDS)
+ Amazon Aurora PostgreSQL 호환 에디션

PostgreSQL은 100개 이상의 인수가 있는 함수 또는 프로시저를 지원하지 않습니다. 해결 방법으로 소스 함수의 인수와 일치하는 형식 필드가 있는 새로운 데이터 유형을 정의할 수 있습니다. 그런 다음 사용자 지정 데이터 유형을 인수로 사용하는 PL/pgSQL 함수를 만들고 실행할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ [Amazon RDS Oracle 데이터베이스(DB) 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Amazon RDS for PostgreSQL DB 인스턴스](https://aws.amazon.com/getting-started/hands-on/create-connect-postgresql-db/) 또는 [Aurora PostgreSQL-Compatible DB 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)

**제품 버전**
+ Amazon RDS Oracle DB 인스턴스 버전 10.2 이상
+ Amazon RDS PostgreSQL DB 인스턴스 버전 9.4 이상 또는 Aurora PostgreSQL-Compatible DB 인스턴스 버전 9.4 이상
+ Oracle SQL Developer 버전 18 이상
+ pgAdmin 버전 4 이상

## 아키텍처
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-architecture"></a>

**소스 기술 스택  **
+ Amazon RDS Oracle DB 인스턴스 버전 10.2 이상

**대상 기술 스택  **
+ Amazon RDS PostgreSQL DB 인스턴스 버전 9.4 이상 또는 Aurora PostgreSQL-Compatible DB 인스턴스 버전 9.4 이상

## 도구
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-tools"></a>

**서비스**
+ [PostgreSQL용 Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)는 AWS Cloud에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 규모를 조정할 수 있는 완전관리형 ACID 준수 관계형 데이터베이스 엔진입니다.

**기타 서비스**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html)는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경입니다.
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

## 모범 사례
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-best-practices"></a>

생성하는 데이터 유형이 소스 Oracle 함수 또는 프로시저에 포함된 유형 필드와 일치하는지 확인합니다.

## 에픽
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-epics"></a>

### 100개 이상의 인수가 있는 Oracle 함수 또는 프로시저 실행
<a name="run-an-oracle-function-or-procedure-that-has-more-than-100-arguments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 100개 이상의 인수가 있는 기존 Oracle/PLSQL 함수 또는 프로시저를 생성 또는 식별합니다. | 100개 이상의 인수가 있는 Oracle/PLSQL 함수 또는 프로시저를 생성합니다.-또는-100개 이상의 인수가 있는 기존 Oracle/PLSQL 함수 또는 프로시저를 식별합니다.자세한 내용은 Oracle Database 설명서의 섹션 [14.7 CREATE FUNCTION Statement](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-FUNCTION-statement.html#GUID-B71BC5BD-B87C-4054-AAA5-213E856651F2) 및 [14.11 CREATE PROCEDURE Statement](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-PROCEDURE-statement.html#GUID-5F84DB47-B5BE-4292-848F-756BF365EC54)를 참조하세요. | Oracle/PLSQL 전문 지식 | 
| Oracle/PLSQL 함수 또는 프로시저를 컴파일합니다. | Oracle/PLSQL 함수 또는 프로시저를 컴파일합니다.자세한 내용은 Oracle Database 설명서의 [함수 컴파일](https://docs.oracle.com/cd/E37097_01/doc.42/e35128/GUID-6B7B6F82-616D-4915-82BE-D4AE7F59CF37.htm#AEUTL165)을 참조하세요. | Oracle/PLSQL 전문 지식 | 
| Oracle/PLSQL 함수를 실행합니다. | Oracle/PLSQL 함수 또는 프로시저를 실행합니다. 그런 다음 출력을 저장합니다. | Oracle/PLSQL 전문 지식 | 

### 소스 함수 또는 프로시저의 인수와 일치하는 새로운 데이터 유형 정의
<a name="define-a-new-data-type-that-matches-the-source-functionapos-s-or-procedureapos-s-arguments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PostgreSQL에서 새로운 데이터 유형을 정의합니다. | PostgreSQL에서 소스 Oracle 함수 또는 프로시저의 인수에 나타나는 것과 동일한 필드를 모두 포함하는 새로운 데이터 유형을 정의합니다.자세한 내용은 PostgreSQL 설명서의 [CREATE USER](https://www.postgresql.org/docs/current/sql-createtype.html)를 참조하세요. | PostgreSQL PL/pgSQL 지식 | 

### 새로운 TYPE 인수를 포함하는 PostgreSQL 함수 생성
<a name="create-a-postgresql-function-that-includes-the-new-type-argument"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 새로운 데이터 유형을 포함하는 PostgreSQL 함수를 생성합니다. | 새로운 `TYPE` 인수를 포함하는 PostgreSQL 함수를 생성합니다.예제 함수를 검토하려면 이 패턴의 **추가 정보** 섹션을 참조하세요. | PostgreSQL PL/pgSQL 지식 | 
| PostgreSQL 함수를 컴파일합니다. | PostgreSQL에서 함수를 컴파일합니다. 새로운 데이터 유형 필드가 소스 함수나 프로시저의 인수와 일치하면 함수가 성공적으로 컴파일됩니다. | PostgreSQL PL/pgSQL 지식 | 
| PostgreSQL 함수를 실행합니다. | PostgreSQL 함수를 실행합니다. | PostgreSQL PL/pgSQL 지식 | 

## 문제 해결
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 함수는 다음과 같은 오류를 반환합니다.**ERROR: ‘<statement>’ 근처의 구문 오류** | 함수의 명령문 모두가 세미콜론 (`;`)으로 끝나는지 확인합니다. | 
| 함수는 다음과 같은 오류를 반환합니다.**ERROR: ‘<variable>’은 알려진 변수가 아님** | 함수 본문에 사용된 변수가 함수 `DECLARE` 섹션 내에 나열되어 있는지 확인합니다. | 

## 관련 리소스
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-resources"></a>
+ [Amazon Aurora PostgreSQL을 사용한 작업](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) (*Aurora용 Amazon Aurora 사용 설명서*)
+ [CREATE TYPE](https://www.postgresql.org/docs/11/sql-createtype.html) (PostgreSQL 설명서)

## 추가 정보
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-additional"></a>

**TYPE 인수를 포함하는 PostgreSQL 함수의 예**

```
CREATE OR REPLACE FUNCTION test_proc_new
(
    IN p_rec type_test_proc_args
) 
RETURNS void
AS
$BODY$
BEGIN

    /*
    **************
    The body would contain code to process the input values.
    For our testing, we will display couple of values.
    ***************
    */
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_acct_id: ', p_rec.p_acct_id);
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_id: ', p_rec.p_ord_id);
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_date: ', p_rec.p_ord_date);
   
END;
$BODY$
LANGUAGE plpgsql 
COST 100;
```

# Redis 워크로드를 AWS의 Redis Enterprise Cloud로 마이그레이션
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws"></a>

*Antony Prasad Thevaraj, Amazon Web Services*

*Srinivas Pendyala, Redis*

## 요약
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-summary"></a>

이 패턴은 Amazon Web Services(AWS)의 Redis Enterprise Cloud로 Redis 워크로드를 마이그레이션하는 상위 수준의 프로세스를 설명합니다. 마이그레이션 단계를 설명하고, 사용 가능한 도구 선택에 대한 정보를 제공하며, 각 도구를 사용하기 위한 장점, 단점 및 단계를 설명합니다. 선택적으로 Redis에서 워크로드를 마이그레이션하는 데 추가 지원이 필요한 경우 Redis 전문 서비스에 문의할 수 있습니다.

온프레미스에서 Redis OSS 또는 Redis Enterprise Software를 실행하는 경우 데이터 센터에서 Redis 데이터베이스를 유지 관리하는 데 따르는 상당한 관리 오버헤드와 운영상의 복잡성에 익숙할 것입니다. 워크로드를 클라우드로 마이그레이션하면 이러한 운영 부담을 크게 줄이고 Redis에서 제공하는 완전히 호스팅되는 서비스형 데이터베이스(DBaaS)인 [Redis Enterprise Cloud](https://redis.com/redis-enterprise-cloud/overview/)를 활용할 수 있습니다. 이 마이그레이션을 통해 99.999% 가용성, 아키텍처 단순성, 확장성과 같은 최신 Redis Enterprise Cloud on AWS 기능에 액세스하면서 비즈니스 민첩성을 높이고, 애플리케이션 안정성을 개선하고, 전체 비용을 절감할 수 있습니다.

금융 서비스, 소매, 의료, 게임 부문은 물론 사기 탐지, 실시간 인벤토리, 청구 처리 및 세션 관리를 위한 솔루션이 필요한 사용 사례에서도 Redis Enterprise Cloud를 사용할 수 있는 잠재적 애플리케이션이 있습니다. Redis Enterprise Cloud를 사용하여 AWS 리소스를 예를 들어 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행되는 애플리케이션 서버 또는 AWS Lambda 서비스로 배포된 마이크로서비스에 연결할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-prereqs"></a>

**가정**
+ 현재 클라우드로 마이그레이션할 온프레미스 데이터베이스 시스템을 운영하고 있습니다.
+ 다음을 포함하여 워크로드에 대한 마이그레이션 요구 사항을 확인했습니다.
  + 데이터 일관성 요구 사항
  + 인프라 및 시스템 환경 요구 사항
  + 데이터 매핑 및 변환 요구 사항
  + 기능 테스트 요구 사항
  + 성능 테스트 요구 사항
  + 검증 요구 사항
  + 정의된 전환 전략
+ 마이그레이션에 필요한 일정과 예상 비용을 평가했습니다.
+ 요구 사항에는 작업 범위와 마이그레이션의 일부로 식별된 시스템 및 데이터베이스가 고려됩니다.
+ RACI(책임, 권한, 자문, 정보 제공) 매트릭스를 통해 이해 관계자를 역할 및 책임과 함께 식별했습니다.
+ 모든 이해 관계자로부터 필요한 계약 및 승인을 받았습니다.

**비용**

기존 소스 데이터베이스의 기술 사양(예: 메모리 크기, 처리량, 총 데이터 크기)에 따라 Redis 솔루션 아키텍트는 Redis Enterprise Cloud에서 대상 시스템의 크기를 조정할 수 있습니다.  일반 가격 정보는 Redis 웹사이트의 [Redis 요금](https://redis.com/redis-enterprise-cloud/pricing)을 참조하십시오.

**사람과 기술**

마이그레이션 프로세스에는 다음과 같은 역할과 책임이 포함됩니다.


| 
| 
| Role | 설명 | 필요한 기술 | 
| --- |--- |--- |
| **마이그레이션 솔루션 아키텍트** | 마이그레이션 전략의 정의, 계획 및 구현에 대한 전문 지식을 갖춘 기술 아키텍트 | 소스 및 대상 시스템에 대한 기술 및 애플리케이션 수준의 이해, 클라우드로 워크로드를 마이그레이션한 경험 | 
| **데이터 아키텍트** | 다양한 데이터베이스를 위한 데이터 솔루션을 정의, 구현 및 제공하는 데 폭넓은 경험을 갖춘 기술 아키텍트 | 정형 및 비정형 데이터를 위한 데이터 모델링, 기업용 데이터베이스 구현에 대한 깊은 이해와 경험 | 
| **Redis 솔루션 아키텍트** | 적절한 사용 사례에 맞게 최적의 크기의 Redis 클러스터를 설계하는 데 도움을 줄 수 있는 기술 아키텍트 | 다양한 사용 사례를 위한 Redis 솔루션 설계 및 배포에 대한 전문 지식 | 
| **클라우드 솔루션 아키텍트** | 클라우드 솔루션, 특히 AWS에 대해 더 깊이 이해하고 있는 기술 아키텍트 | 클라우드용 솔루션 설계 전문 지식, 워크로드 마이그레이션 및 애플리케이션 현대화 경험 | 
| **엔터프라이즈 아키텍트** | 조직의 기술 환경을 완벽하게 이해하고, 미래 로드맵에 대한 비전을 공유하고, 조직의 모든 팀 전반에서 표준화된 아키텍처 모범 사례를 실천하고 확립하는 기술 아키텍트 | TOGAF, 기본 소프트웨어 엔지니어링 기술, 솔루션 아키텍처 및 엔터프라이즈 아키텍처 전문 지식과 같은 소프트웨어 아키텍처 인증 | 
| **IT 또는 DevOps 엔지니어** | 인프라의 문제 모니터링, 유지 관리 작업 수행, 필요에 따른 업데이트 등 인프라 생성 및 유지 관리를 담당하는 엔지니어. | 운영 체제, 네트워킹, 클라우드 컴퓨팅을 비롯한 다양한 기술에 대한 깊은 이해도, Python, Bash, Ruby와 같은 프로그래밍 언어와 Docker, Kubernetes, Ansible과 같은 도구에 익숙함 | 

## 아키텍처
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-architecture"></a>

**마이그레이션 옵션  **

다음 다이어그램은 온프레미스(Redis 기반 또는 기타) 데이터 소스를 AWS로 마이그레이션하기 위한 옵션을 보여줍니다. Redis 데이터베이스(RDB) 파일을 Amazon Simple Storage Service(S3)로 내보내거나, Redis 복제 기능을 사용하거나, AWS DMS를 사용하는 등 선택할 수 있는 여러 마이그레이션 도구를 보여줍니다.

![\[온프레미스 데이터 소스를 AWS 기반 Redis 엔터프라이즈 클라우드로 마이그레이션하기 위한 옵션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/384309f6-7218-4a46-83a5-f37ff95c8832/images/4b242a29-d283-49a3-aaea-a970813db6be.png)


1. 온프레미스 데이터 소스: MySQL, PostgreSQL, Oracle, SQL Server 또는 MariaDB와 같이 Redis를 기반으로 하지 않는 데이터베이스 

1. 온프레미스 데이터 소스: Redis OSS 및 Redis Enterprise Software와 같은 Redis 프로토콜 기반 데이터베이스

1. Redis 기반 데이터베이스에서 데이터를 마이그레이션하는 가장 간단한 방법은 RDB 파일을 내보내 AWS의 대상 Redis Enterprise Cloud로 가져오는 것입니다.

1. 또는 Redis의 복제 기능(`ReplicaOf`)을 사용하여 소스에서 대상으로 데이터를 마이그레이션할 수 있습니다.

1. 데이터 마이그레이션 요구 사항에 데이터 변환이 포함되는 경우 Redis 입력/출력 도구(RIOT)를 사용하여 데이터를 마이그레이션할 수 있습니다.

1. 또는 AWS Data Migration Service(AWS DMS)를 사용하여 SQL 기반 데이터베이스의 데이터를 마이그레이션할 수 있습니다. 

1. 데이터를 AWS 기반 Redis Enterprise Cloud로 성공적으로 마이그레이션하려면 AWS DMS용 Virtual Private Cloud(VPC) 피어링을 사용해야 합니다.

**대상 아키텍처**

다음 다이어그램은 AWS 기반 Redis Enterprise Cloud의 일반적인 배포 아키텍처를 보여주고 주요 AWS 서비스와 함께 사용할 수 있는 방법을 보여줍니다.

![\[AWS의 Redis Enterprise Cloud용 배포 아키텍처 및 AWS 서비스와 함께 사용\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/384309f6-7218-4a46-83a5-f37ff95c8832/images/f1351537-e710-4a68-8768-89d44870150f.png)


1. AWS 기반 Redis Enterprise Cloud가 지원하는 비즈니스 애플리케이션에 연결할 수 있습니다.

1. 자신의 AWS 계정, 해당 계정 내 VPC에서 비즈니스 애플리케이션을 실행할 수 있습니다.

1. Redis Enterprise Cloud 데이터베이스 엔드포인트를 사용하여 애플리케이션에 연결할 수 있습니다. EC2 인스턴스에서 실행 중인 애플리케이션 서버, AWS Lambda 서비스로 배포된 마이크로서비스, Amazon Elastic Container Service(Amazon ECS) 애플리케이션 또는 Amazon Elastic Kubernetes Service(Amazon EKS) 애플리케이션이 그 예입니다.

1. VPC에서 실행되는 비즈니스 애플리케이션을 실행하려면 Redis Enterprise Cloud VPC에 대한 VPC 피어 연결이 필요합니다. 이를 통해 비즈니스 애플리케이션을 프라이빗 엔드포인트를 통해 안전하게 연결할 수 있습니다.

1. AWS 기반 Redis Enterprise Cloud는 AWS에서 DBaaS로 배포되는 인메모리 NoSQL 데이터베이스 플랫폼이며 Redis에서 완전히 관리합니다.

1. Redis Enterprise Cloud는 Redis에서 생성한 표준 AWS 계정의 VPC 내에 배포됩니다.

1. 보안상의 이유로 Redis Enterprise Cloud는 프라이빗 및 퍼블릭 엔드포인트 모두에서 액세스할 수 있는 프라이빗 서브넷에 배포됩니다. 클라이언트 애플리케이션을 프라이빗 엔드포인트의 Redis에 연결하는 것이 좋습니다. 퍼블릭 엔드포인트를 사용하려는 경우 [TLS를 사용](https://docs.redis.com/latest/rc/security/database-security/tls-ssl/)하여 클라이언트 애플리케이션과 Redis Enterprise Cloud 간의 데이터를 암호화하는 것이 좋습니다.

Redis 마이그레이션 방법론은 AWS 마이그레이션 방법론과 일치합니다. 이 방법론은 AWS 권장 가이드 웹사이트의 [대규모 마이그레이션을 가속화하기 위한 조직 동원](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-migration/overview.html)에 설명되어 있습니다.

**자동화 및 규모 조정 **

마이그레이션을 위한 환경 설정 작업은 자동화 및 규모 조정을 위한 AWS 랜딩 존 및 코드형 인프라(IaC) 템플릿을 통해 자동화할 수 있습니다. 이에 대해서는 이 패턴의 [에픽](#migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-epics) 섹션에서 설명합니다.

## 도구
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-tools"></a>

데이터 마이그레이션 요구 사항에 따라 다양한 기술 옵션 중에서 선택하여 데이터를 AWS의 Redis Enterprise Cloud로 마이그레이션할 수 있습니다. 다음 표는 이러한 도구를 설명하고 비교합니다.


| 
| 
| 도구 | 설명 | 장점 | 단점 | 
| --- |--- |--- |--- |
| [RDB 내보내기](https://docs.redis.com/latest/rc/api/examples/back-up-and-import-data/) 및 [가져오기](https://docs.redis.com/latest/rc/databases/import-data/) | 소스(예: Redis OSS 또는 Redis Enterprise Software) 데이터베이스에서 RDB 파일 형식으로 데이터를 내보냅니다. Redis OSS 클러스터를 통해 데이터베이스를 제공하는 경우 각 마스터 샤드를 RDB로 내보냅니다.그런 다음 모든 RDB 파일을 한 번에 가져옵니다. 소스 데이터베이스가 OSS 클러스터를 기반으로 하지만 대상 데이터베이스가 OSS 클러스터 API를 사용하지 않는 경우 표준 Redis 클라이언트 라이브러리를 사용하도록 애플리케이션 소스 코드를 변경해야 합니다.데이터 변환 요구 사항이나 논리적 데이터베이스 병합에는 더 복잡한 프로세스가 필요하며, 이에 대해서는 이 표 뒷부분의 *논리적 데이터베이스 병합*에 설명되어 있습니다. | 간편함.RDB 형식의 데이터를 소스로 내보낼 수 있는 모든 Redis 기반 솔루션(Redis OSS 및 Redis Enterprise Software 포함)과 함께 작동합니다.간단한 프로세스로 데이터 일관성을 유지합니다. | 데이터 변환 요구 사항을 해결하거나 논리적 데이터베이스 병합을 지원하지 않습니다.대규모 데이터 세트의 경우 시간이 많이 걸립니다.델타 마이그레이션이 지원되지 않으면 다운타임이 길어질 수 있습니다. | 
| [Redis 복제 기능](https://docs.redis.com/latest/rs/databases/import-export/replica-of/)(액티브-패시브) | Redis OSS, Enterprise Software 또는 Enterprise Cloud 데이터베이스의 데이터를 Redis Enterprise Cloud 데이터베이스로 지속적으로 복제할 수 있습니다. 초기 동기화 후에는 Redis 복제 기능(`ReplicaOf`)이 델타 마이그레이션을 수행하므로 애플리케이션 다운타임이 거의 발생하지 않습니다.Redis 복제 기능은 액티브-패시브 방식으로 사용하기 위한 것입니다. 대상은 패시브로 간주되며 완전히 재동기화(소스 데이터베이스에서 플러시 및 동기화)됩니다. 따라서 소스와 대상 간의 전환은 다소 복잡합니다.OSS 클러스터의 모든 마스터 샤드를 소스로 지정하여 Redis OSS 클러스터에서 표준 클러스터 Redis Enterprise Cloud 데이터베이스로 복제할 수 있습니다. 하지만 Redis 복제 기능을 사용하면 최대 32개의 소스 데이터베이스를 사용할 수 있습니다. | 연속 복제(초기 데이터 로드 후 델타)를 지원합니다.다운타임이 거의 없습니다(복제 지연에 따라 다름).데이터 일관성을 유지합니다. | 한 사이트만 활성화되도록 설계되었으므로 사이트 간 전환이 더 복잡합니다.OSS 클러스터에서 마이그레이션할 때 최대 32개의 마스터 샤드를 지원합니다. | 
| [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) | AWS DMS를 사용하여 지원되는 모든 소스 데이터베이스의 데이터를 가동 중지 시간을 최소화하면서 대상 Redis 데이터 스토어로 마이그레이션할 수 있습니다. 자세한 내용은 AWS DMS 설명서에서 [Redis를 AWS DMS의 대상으로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redis.html) 섹션을 참조하십시오. | NoSQL 및 SQL 데이터 소스의 마이그레이션을 모두 지원합니다.다른 AWS 서비스와 잘 작동합니다.라이브 마이그레이션 및 변경 데이터 캡쳐(CDC) 사용 사례를 지원합니다. | Redis 키 값에는 %와 같은 특수 문자가 포함될 수 없습니다.열 또는 필드 이름에 특수 문자가 있는 데이터는 마이그레이션할 수 없습니다.대형 바이너리 객체(LOB) 모드를 지원하지 않습니다. | 
| 논리적 데이터베이스 병합 | 특별한 데이터베이스 병합 요구 사항에는 맞춤형 데이터 마이그레이션 솔루션이 필요할 수 있습니다. 예를 들어 Redis OSS에 4개의 논리적 데이터베이스(`SELECT 0..3`)가 있지만 데이터를 여러 Redis Enterprise Cloud 데이터베이스로 이동하는 대신 단일 데이터베이스 엔드포인트를 사용하는 것이 좋을 수 있습니다. Redis Enterprise는 선택 가능한 논리적 데이터베이스를 지원하지 않으므로 소스 데이터베이스의 물리적 데이터 모델을 변환해야 합니다. 예를 들어 각 데이터베이스 인덱스를 접두사에 매핑한 다음(`0`은 `usr`로, `1`은 `cmp`로 등) 마이그레이션 스크립트 또는 추출, 전환, 적재(ETL) 도구를 사용하여 RDB 파일을 출력한 다음 대상 데이터베이스로 가져올 수 있습니다. | 사용자 지정 스크립트를 사용하여 대상 시스템으로 마이그레이션하는 동안 데이터 세이핑을 세밀하게 제어할 수 있습니다.  | 마이그레이션을 완료하지 않기로 결정하면 롤백이 매우 어려울 수 있습니다. 특히 최신 데이터를 소스 시스템으로 롤백해야 하는 경우에는 더욱 그렇습니다.일회성 마이그레이션을 위한 일회성 솔루션을 구축하는 것이 목표인 경우 구축 비용이 높을 수 있습니다.마이그레이션 요구 사항이 자주 변경되면 코드, 인프라, 개발 시간 및 기타 영역에 대한 유지 관리 비용이 높을 수 있습니다.  | 

또한 AWS에서 제공하는 다음 도구 및 서비스를 사용할 수 있습니다.

평가 및 검색 도구:
+ [마이그레이션 평가자](https://aws.amazon.com/migration-evaluator/)

애플리케이션 및 서버 마이그레이션 도구:
+ [AWS Application Migration Service](https://aws.amazon.com/application-migration-service/)

[데이터베이스 마이그레이션 도구](https://aws.amazon.com/solutions/database-migrations/):
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [AWS Database Migration Service(AWS DMS)](https://aws.amazon.com/dms/)

[데이터 마이그레이션 도구](https://aws.amazon.com/cloud-data-migration/):
+ [AWS Storage Gateway](https://aws.amazon.com/storagegateway/)
+ [AWS DataSync](https://aws.amazon.com/datasync/)
+ [AWS Direct Connect](https://aws.amazon.com/directconnect/)
+ [AWS Snowball](https://aws.amazon.com/snowball/)
+ [Amazon Data Firehose](https://aws.amazon.com/kinesis/data-firehose/)

AWS 파트너 솔루션:
+ [AWS 마이그레이션 컴피턴시 파트너](https://aws.amazon.com/migration/partner-solutions/)

## 에픽
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-epics"></a>

### 검색 및 평가 작업 완료
<a name="complete-discovery-and-assessment-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 워크로드를 식별합니다. | 마이그레이션하려는 적합한 후보 워크로드를 식별합니다. 마이그레이션할 워크로드를 선택하기 전에 다음 사항을 고려하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html)비즈니스에 미치는 영향은 극대화하면서 관련된 위험은 최소화하는 워크로드를 선택하는 것이 가장 좋습니다. 전체 프로세스를 반복해서 진행하고 조금씩 마이그레이션하십시오. | 데이터 아키텍트, 비즈니스 챔피언, 마이그레이션 프로젝트 스폰서 | 
| 데이터 소스 및 요구 사항 파악, 데이터 모델 설계. | Redis는 검색을 가속화하고 프로젝트의 마이그레이션 계획을 정의하기 위한 워크숍을 운영합니다. 이 워크숍의 일환으로 Redis 팀은 데이터 소스 및 소스 데이터 모델 요구 사항을 식별하고 Redis Enterprise Cloud에서 이러한 요구 사항을 어떻게 리모델링할 수 있는지 분석합니다.Redis 마이그레이션 팀(전문 서비스)은 조직과 함께 상세한 데이터 모델 설계 연습을 수행합니다. 이 연습의 일환으로 Redis 팀은 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html) | Redis 솔루션 아키텍트 | 
| 소스 데이터베이스의 특성을 식별합니다. | 소스 및 대상 환경에서 사용되는 Redis 제품을 식별합니다. 예제:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html) | 데이터 아키텍트 | 
| 현재 시스템 SLA 및 기타 크기 측정 지표를 수집합니다. | 처리량(초당 작업 수), 지연 시간, 데이터베이스당 전체 메모리 크기, 고가용성(HA) 요구 사항 등으로 표현된 현재 서비스 수준에 관한 계약(SLA)을 결정합니다. | 데이터 아키텍트 | 
| 대상 시스템의 특성을 식별합니다. | 다음 질문에 대한 답을 결정하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html) | 데이터 아키텍트, Redis 솔루션 아키텍트(선택 사항) | 
| 종속성을 파악합니다. | 마이그레이션할 현재 시스템의 업스트림 및 다운스트림 종속성을 식별합니다. 마이그레이션 작업이 다른 종속 시스템 마이그레이션과 일치하는지 확인하십시오. 예를 들어, 다른 비즈니스 애플리케이션을 온프레미스에서 AWS 클라우드로 마이그레이션할 계획이라면 이러한 애플리케이션을 식별하고 프로젝트 목표, 일정 및 이해 관계자에 따라 조정합니다. | 데이터 아키텍트, 엔터프라이즈 아키텍트 | 
| 마이그레이션 도구를 식별합니다. | 데이터 마이그레이션 요구 사항(예: 소스 데이터 또는 다운타임 요구 사항)에 따라 앞서 [도구](#migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-tools) 섹션에서 설명한 도구 중 하나를 사용할 수 있습니다. 또한 다음을 사용할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html) | 마이그레이션 솔루션 아키텍트, Redis 솔루션 아키텍트 | 
| 비상 계획을 세웁니다. | 마이그레이션 중에 문제가 발생할 경우를 대비하여 롤백할 비상 계획을 수립하십시오. | 프로젝트 관리, 기술팀(아키텍트 포함) | 

### 보안 및 규정 준수 작업 완료
<a name="complete-security-and-compliance-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Redis 관리 콘솔을 보호합니다. | 관리 콘솔을 보호하려면 [Redis 설명서](https://redis.io/docs/latest/operate/oss_and_stack/management/security/)의 지침을 따르십시오. | IT 인프라 관리자 | 
| Redis 데이터베이스를 보호합니다. | 자세한 내용은 Redis 설명서의 다음 페이지를 참조하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html) |  | 
| 안전한 Redis Cloud API. | [API를 활성화](https://docs.redis.com/latest/rc/api/get-started/enable-the-api/)하면 Redis Cloud 계정의 모든 소유자에 대한 [API 키를 관리](https://docs.redis.com/latest/rc/api/get-started/manage-api-keys/)할 수 있습니다. API의 보안 기능에 대한 개요는 Redis 웹사이트의 [API 인증 설명서](https://docs.redis.com/latest/rc/api/get-started/)를 참조하십시오. | IT 인프라 관리자 | 

### 새 환경 설정
<a name="set-up-the-new-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS에 새 환경을 설정합니다. | 이 작업에는 다음이 포함됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html) | IT 또는 DevOps 엔지니어 | 
| 마이그레이션 아키텍처를 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html)이제 실제 데이터 마이그레이션 파이프라인을 실행하고 테스트할 준비가 되었습니다. | IT 또는 DevOps 엔지니어 | 

### 네트워킹 설정
<a name="set-up-networking"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 연결성 설정. | 온프레미스 인프라와 AWS 클라우드 리소스 간의 연결을 설정합니다. 보안 그룹, AWS Direct Connect 및 기타 리소스를 사용하여 이 기능을 구현합니다. 자세한 내용은 AWS 웹사이트에서 [데이터 센터를 AWS에 연결](https://aws.amazon.com/getting-started/hands-on/connect-data-center-to-aws/)을 참조하십시오. | IT 또는 DevOps 엔지니어 | 
| VPC 피어링을 설정합니다. | 비즈니스 애플리케이션을 실행하는 VPC(또는 마이그레이션 도구나 AWS DMS 복제 서버를 실행하는 EC2인스턴스)와 Redis Enterprise Cloud를 실행하는 VPC 간에 VPC 피어링을 설정합니다. 지침은 Amazon VPC 설명서의 [Amazon VPC 시작하기](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html) 및 Redis 설명서의 [VPC 피어링 활성화](https://docs.redis.com/latest/rc/security/vpc-peering/)를 참조하십시오. | IT 또는 DevOps 엔지니어 | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 마이그레이션 도구를 선택합니다. | [도구](#migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-tools) 섹션의 테이블을 검토하여 이러한 도구에 대한 설명, 장점 및 단점을 확인하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html)다음 열은 각 도구와 관련된 데이터 마이그레이션 작업을 설명합니다. | 마이그레이션 솔루션 아키텍트 | 
| 옵션 1: RDB 내보내기 및 가져오기 사용. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html)자세한 내용은 [Redis 설명서](https://docs.redis.com/latest/rc/databases/import-data/)를 참조하십시오. | 마이그레이션 솔루션 아키텍트, Redis 솔루션 아키텍트 | 
| 옵션 2: Redis 복제 기능(액티브-패시브) 사용. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html)자세한 내용은 [Redis 설명서](https://docs.redis.com/latest/rs/databases/import-export/replica-of/)를 참조하십시오. | 마이그레이션 솔루션 아키텍트, Redis 솔루션 아키텍트 | 
| 옵션 3: AWS DMS 사용. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.html) | 마이그레이션 솔루션 아키텍트, Redis 솔루션 아키텍트 | 
| 옵션 4: 논리적 데이터베이스 병합 사용. | 이 옵션에는 소스 데이터베이스의 물리적 데이터 모델을 변환하고 RDB 파일을 생성할 수 있는 마이그레이션 스크립트 또는 ETL 도구를 사용하는 것이 포함됩니다. 필요한 경우 Redis 전문 서비스가 이 단계를 도와드릴 수 있습니다. | 마이그레이션 솔루션 아키텍트, Redis 솔루션 아키텍트 | 

### 애플리케이션 마이그레이션
<a name="migrate-your-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프로젝트 관리 일정과 목표를 조정합니다. | 응용 계층의 마이그레이션 프로젝트 목표, 마일스톤, 일정을 Redis 데이터 마이그레이션 프로젝트의 목표와 일치시킵니다. | 프로젝트 관리 | 
| 테스트 활동을 조정합니다. | 응용 계층을 AWS 클라우드로 마이그레이션 및 현대화한 후에는 새로 마이그레이션된 AWS 기반 Redis Enterprise Cloud에 응용 계층을 연결하여 테스트하십시오. | 테스트 | 

### 테스트
<a name="test"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테스트 계획을 구현합니다. | 구현 단계에서 개발된 데이터 마이그레이션 루틴과 스크립트를 테스트 요구 사항에 따라 사이트의 테스트 환경에서 실행합니다. | 테스트 | 
| 데이터 품질을 테스트합니다. | 데이터를 마이그레이션한 후 데이터 품질을 테스트합니다. | 테스트 | 
| 기능을 테스트합니다. | 데이터 쿼리와 응용 계층을 테스트하여 애플리케이션이 소스 시스템에서와 동일한 수준에서 작동하는지 확인합니다. | 테스트 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전환 결정을 내립니다. | 모든 애플리케이션 수준 및 데이터베이스 수준 테스트를 완료한 후 경영진과 이해 관계자는 테스트 팀에서 확인한 최종 결과에 따라 AWS의 새 환경으로 전환할지 여부에 대한 최종 결정을 내립니다. | 프로젝트 관리, 비즈니스 챔피언 | 
| AWS 클라우드로 전환합니다. | 모든 것이 제자리에 있는지 확인했으면 애플리케이션 계층은 새로 마이그레이션된 데이터를 가리키고 클라이언트는 AWS의 새로운 Redis Enterprise Cloud 시스템을 기반으로 실행되는 새 애플리케이션 계층을 가리킵니다. | IT 또는 DevOps 엔지니어, 데이터 아키텍트, 마이그레이션 솔루션 아키텍트, Redis 솔루션 아키텍트 | 

## 관련 리소스
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-resources"></a>

**Redis 리소스**
+ [Redis Enterprise Cloud 설명서](https://docs.redis.com/latest/rc/)
+ [RIOT](https://github.com/redis-developer/riot) 도구(GitHub 리포지토리)
+ [Terraform Provider(다운로드)](https://registry.terraform.io/providers/RedisLabs/rediscloud/latest)

**AWS 리소스**
+ [데모 마이그레이션](https://aws.amazon.com/getting-started/tutorials/)
+ [AWS 파트너 솔루션](https://aws.amazon.com/quickstart/)
+ [설명서](https://docs.aws.amazon.com/index.html)
+ [블로그 게시물](https://aws.amazon.com/blogs/database/category/migration/)
+ [백서](https://aws.amazon.com/whitepapers/)
+ [튜토리얼 및 동영상](https://aws.amazon.com/getting-started/tutorials/)
+ [AWS 클라우드 마이그레이션](https://aws.amazon.com/cloud-migration/)
+ [AWS 권장 가이드](https://aws.amazon.com/prescriptive-guidance/)

## 추가 정보
<a name="migrate-redis-workloads-to-redis-enterprise-cloud-on-aws-additional"></a>

Redis 워크로드를 AWS 클라우드로 마이그레이션하기 위한 표준 보안 요구 사항은 AWS 웹사이트의 [보안, ID 및 규정 준수에 대한 모범 사례](https://aws.amazon.com/architecture/security-identity-compliance/)와 Redis 웹사이트의 [Redis Trust Center](https://trust.redis.io/)를 참조하십시오.

# 동일한 호스트 이름을 가진 SAP HSR을 사용하여 SAP HANA를 AWS로 마이그레이션
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname"></a>

*Pradeep Puliyampatta, Amazon Web Services*

## 요약
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname-summary"></a>

백업 및 복원, 내보내기 및 가져오기, SAP HANA 시스템 복제(HSR)를 비롯한 다양한 옵션을 사용하여 Amazon Web Services(AWS)로 SAP HANA를 마이그레이션할 수 있습니다. 특정 옵션의 선택은 소스 및 대상 SAP HANA 데이터베이스 간의 네트워크 연결, 소스 데이터베이스의 크기, 다운타임 고려 사항 및 기타 요인에 따라 달라집니다. 

SAP HANA 워크로드를 AWS로 마이그레이션하기 위한 SAP HSR 옵션은 소스 시스템과 대상 시스템 사이에 안정적인 네트워크가 있고 SAP HSR의 네트워크 처리량 요구 사항에 대해 SAP에서 규정한 대로 전체 데이터베이스(SAP HANA DB 복제 스냅샷)를 1일 이내에 완전히 복제할 수 있을 때 잘 작동합니다. 이 접근 방식의 가동 중지 시간 요구 사항은 대상 AWS 환경, SAP HANA DB 백업 및 마이그레이션 후 작업에 대한 인수 수행으로 제한됩니다.

SAP HSR은 기본 또는 소스 시스템과 보조 또는 대상 시스템 간의 복제 트래픽에 대해 서로 다른 호스트 이름(다른 IP 주소에 매핑된 호스트 이름)을 사용할 수 있도록 지원합니다. `global.ini`의 `[system_replication_hostname_resolution]` 섹션에서 특정 호스트 이름 세트를 정의하여 이 작업을 수행할 수 있습니다. 이 섹션에서는 기본 및 보조 사이트의 모든 호스트를 각 호스트에 정의해야 합니다. 자세한 구성 단계는 [SAP 설명서](https://help.sap.com/viewer/eb3777d5495d46c5b2fa773206bbfb46/1.0.12/en-US/c0cba1cb2ba34ec89f45b48b2157ec7b.html)를 참조하세요.

이 설정에서 얻을 수 있는 한 가지 중요한 점은 기본 시스템의 호스트 이름이 보조 시스템의 호스트 이름과 달라야 한다는 것입니다. 그렇지 않으면 다음과 같은 오류가 발생할 수 있습니다.
+ `"each site must have a unique set of logical hostnames"`
+ `"remoteHost does not match with any host of the source site. All hosts of source and target site must be able to resolve all hostnames of both sites correctly"`

그러나 대상 AWS 환경에서 동일한 SAP HANA DB 호스트 이름을 사용하여 마이그레이션 후 단계 수를 줄일 수 있습니다. 

이 패턴은 SAP HSR 옵션을 사용할 때 원본 및 대상 환경에서 동일한 호스트 이름을 사용하기 위한 해결 방법을 제공합니다. 이 패턴을 사용하면 SAP HANA 호스트 이름 바꾸기 옵션을 사용할 수 있습니다. 대상 SAP HANA DB에 임시 호스트 이름을 할당하여 SAP HSR의 호스트 이름 고유성을 용이하게 합니다. 대상 SAP HANA 환경의 테이크오버 마일스톤이 마이그레이션을 완료한 후 대상 시스템 호스트 이름을 소스 시스템의 호스트 이름으로 되돌릴 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ 가상 프라이빗 네트워크(VPN) 엔드포인트 또는 라우터가 있는Virtual Private Cloud(VPC)입니다.
+ AWS Client VPN 소스에서 대상으로 파일을 전송하도록 AWS Direct Connect 구성된 또는 입니다.
+ 소스 및 대상 환경 모두의 SAP HANA 데이터베이스. 대상 SAP HANA DB 패치 수준은 동일한 SAP HANA 플랫폼 에디션 내에서 소스 SAP HANA DB 패치 수준과 같거나 그 이상이어야 합니다. 예를 들어 HANA 1.0과 HANA 2.0 시스템 간에는 복제를 설정할 수 없습니다. 자세한 내용은 SAP 노트: 1999880 - FAQ: SAP HANA 시스템 복제의 질문 15를 참조하세요.
+ 대상 환경의 SAP 애플리케이션 서버.
+ 대상 환경의 Amazon Elastic Block Store(Amazon EBS) 볼륨.

**제한 사항 **

다음 SAP 문서 목록은 SAP HANA 동적 계층화 및 스케일 아웃 마이그레이션과 관련된 제약 조건을 포함하여 이 해결 방법과 관련된 알려진 문제를 다룹니다.
+ 2956397 - SAP HANA 데이터베이스 시스템의 이름을 바꾸지 못했습니다
+ 2222694 - HANA 시스템의 이름을 바꾸려고 할 때 다음과 같은 오류가 나타납니다. “원본 sidadm 사용자가 소스 파일을 소유하지 않았습니다(uid = xxxx)”
+ 2607227 - hdblcm: register\$1rename\$1system: SAP HANA 인스턴스 이름 변경 실패
+ 2630562 - HANA 호스트 이름 변경에 실패하여 HANA가 시작되지 않음
+ 2935639 - sr\$1register가 global.ini 섹션의 system\$1replication\$1hostname\$1resolution에 지정된 호스트 이름을 사용하지 않습니다
+ 2710211 - 오류: 소스 시스템과 타겟 시스템의 논리적 호스트 이름이 겹칩니다
+ 2693441 - 오류로 인해 SAP HANA 시스템의 이름을 바꾸지 못했습니다
+ 2519672 - HANA 기본 및 보조 시스템의 PKI, SSFS 데이터 및 키가 다르거나 확인할 수 없습니다
+ 2457129 - 동적 계층화가 랜드스케이프의 일부인 경우 SAP HANA 시스템 호스트 이름 변경이 허용되지 않습니다
+ 2473002 - HANA 시스템 복제를 사용하여 스케일 아웃 시스템을 마이그레이션합니다(스케일 아웃 SAP HANA 시스템에 이 호스트 이름 변경 접근 방식을 사용할 때는 SAP에서 제공하는 제한이 없습니다. 하지만 각 개별 호스트에서 이 절차를 반복해야 합니다. 이 접근 방식에는 다른 스케일 아웃 마이그레이션 제한 사항도 적용됩니다.)

**제품 버전**
+ 이 솔루션은 SAP HANA DB 플랫폼 에디션 1.0 및 2.0에 적용됩니다.

## 아키텍처
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname-architecture"></a>

**소스 설정**

SAP HANA 데이터베이스는 소스 환경에 설치됩니다. 모든 SAP 애플리케이션 서버 연결 및 DB 인터페이스는 클라이언트 연결에 동일한 호스트 이름을 사용합니다. 다음 다이어그램은 예제 소스 호스트인 `hdbhost`와 해당 IP 주소를 보여줍니다.

![\[IP 주소가 10.1.2.1인 기업 데이터 센터의 SAP HANA DB 소스 hdbhost.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/004781c1-96df-43dd-a52e-ed1db5bdf9ef/images/a1b28c3a-93b7-4f82-a5da-81008b74c9ae.png)


**타겟 설정**

 AWS 클라우드 대상 환경은 동일한 호스트 이름을 사용하여 SAP HANA 데이터베이스를 실행합니다. AWS의 대상 환경에는 다음 사항이 포함됩니다.
+ SAP HANA 데이터베이스
+ SAP 애플리케이션 서버
+ EBS 볼륨

![\[IP 주소가 172.16.2.1인 AWS 클라우드의 SAP HANA DB 대상 hdbhost.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/004781c1-96df-43dd-a52e-ed1db5bdf9ef/images/7f45d7aa-9b80-4413-bec9-1616492b650c.png)


**중간 구성**

다음 다이어그램에서는 소스 및 AWS 대상의 호스트 이름이 고유`temp-host`하도록 대상 환경의 호스트 이름이 일시적으로 로 변경됩니다. 대상 환경의 테이크오버 마일스톤이 마이그레이션을 완료하면 대상 시스템 가상 호스트 이름이 원래 이름인 `hdbhost`를 사용하여 변경됩니다.

중간 구성에는 다음 옵션 중 하나가 포함됩니다.
+ AWS Client VPN Client VPN 엔드포인트 사용
+ Direct Connect 라우터에 연결

![\[임시 호스트 IP 주소 172.31.5.10로 AWS 클라우드 시스템을 대상으로 하는 소스 시스템.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/004781c1-96df-43dd-a52e-ed1db5bdf9ef/images/e2794477-2e8f-4974-bca3-2275f6809fce.png)


 AWS 대상 환경의 SAP 애플리케이션 서버는 복제 설정 전 또는 인수 후에 설치할 수 있습니다. 그러나 복제 설정 전에 애플리케이션 서버를 설치하면 설치 중 가동 중지 시간을 줄이고 고가용성을 구성하고 백업하는 데 도움이 될 수 있습니다.

## 도구
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname-tools"></a>

**AWS 서비스**
+ [AWS Client VPN](https://docs.aws.amazon.com/vpn/latest/clientvpn-user/client-vpn-user-what-is.html)는 온프레미스 네트워크의 AWS 리소스와 리소스에 안전하게 액세스할 수 있는 관리형 클라이언트 기반 VPN 서비스입니다.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 이 연결을 사용하면 네트워크 경로에서 인터넷 서비스 공급자를 AWS 서비스우회하여 퍼블릭에 직접 가상 인터페이스를 생성할 수 있습니다.
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 함께 사용할 수 있는 블록 스토리지 볼륨을 제공합니다. EBS 볼륨은 형식이 지정되지 않은 원시 블록 디바이스처럼 동작합니다. 이러한 볼륨을 인스턴스에 디바이스로 마운트할 수 있습니다.

**기타 도구**
+ [SAP 애플리케이션 서버](https://help.sap.com/doc/saphelp_nw73ehp1/7.31.19/en-US/47/a032c0305e0b3ae10000000a42189d/content.htm?no_cache=true) - SAP 애플리케이션 서버는 프로그래머에게 비즈니스 로직을 표현할 수 있는 방법을 제공합니다. SAP 애플리케이션 서버는 비즈니스 로직을 기반으로 데이터 처리를 수행합니다. 실제 데이터는 별도의 구성 요소인 데이터베이스에 저장됩니다. 
+ [SAP HANA 콕핏](https://help.sap.com/viewer/6b94445c94ae495c83a19646e7c3fd56/2.0.03/en-US/da25cad976064dc0a24a1b0ee9b62525.html) 및 [SAP HANA 스튜디오](https://help.sap.com/viewer/a2a49126a5c546a9864aae22c05c3d0e/2.0.00/en-US/c831c3bbbb571014901199718bf7edc5.html) - SAP HANA 콕핏과 SAP HANA 스튜디오 모두 SAP HANA 데이터베이스에 대한 관리 인터페이스를 제공합니다. SAP HANA 스튜디오에서 SAP HANA 관리 콘솔은 SAP HANA 데이터베이스 관리와 관련된 콘텐츠를 제공하는 시스템 뷰입니다. 
+ [SAP HANA 시스템 복제](https://help.sap.com/viewer/4e9b18c116aa42fc84c7dbfd02111aba/2.0.04/en-US) - SAP HANA 시스템 복제(SAP HSR)는 SAP HANA 데이터베이스를 복제하기 위해 SAP에서 제공하는 표준 절차입니다. SAP HSR에 필요한 실행 파일은 SAP HANA 서버 커널 자체의 일부입니다.

## 에픽
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname-epics"></a>

### 원본 및 대상 환경 준비
<a name="prepare-the-source-and-target-environments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SAP HANA 데이터베이스를 설치하고 구성합니다. | 소스 및 대상 환경에서 SAP HANA 모범 사례에 따라 SAP HANA DB를 설치하고 구성해야 합니다. 자세한 내용은 [SAP HANA on AWS](https://docs.aws.amazon.com/sap/latest/sap-hana/sap-hana.pdf)을 참조하세요. | SAP Basis 관리 | 
| IP 주소를 매핑합니다. | 대상 환경에서 임시 호스트 이름이 내부 IP 주소에 할당되었는지 확인합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname.html) | AWS 관리 | 
| 대상 호스트 이름을 확인합니다. | 보조 SAP HANA DB에서 `/etc/hosts` 파일의 관련 호스트 이름을 업데이트하여 SAP HANA 복제 네트워크의 호스트 이름(`hdbhost` 및 `temp-host`)이 모두 확인되었는지 확인합니다. | Linux 관리 | 
| 원본 및 대상 SAP HANA 데이터베이스를 백업합니다. | SAP HANA 스튜디오 또는 SAP HANA 콕핏을 사용하여 SAP HANA 데이터베이스에서 백업을 수행할 수 있습니다. | SAP Basis 관리 | 
| 교환 시스템 PKI 인증서. | (SAP HANA 2.0 이상에만 적용) 기본 데이터베이스와 보조 데이터베이스 간 파일 시스템(SSFS) 저장소의 시스템 공개 키 인프라(PKI) 보안 저장소에 있는 인증서를 교환합니다. 자세한 내용은 SAP 참고 2369981 - SAP HANA 시스템 복제를 사용한 인증에 필요한 구성 단계를 참조하세요. | SAP Basis 관리 | 

### 대상 SAP HANA DB의 이름을 변경합니다.
<a name="rename-the-target-sap-hana-db"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 클라이언트 연결을 중지합니다. | 대상 환경에서 SAP 애플리케이션 서버 및 기타 클라이언트 연결을 종료합니다. | SAP Basis 관리 | 
| 대상 SAP HANA DB의 이름을 임시 호스트 이름으로 변경합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname.html)`hdblcm`에서 SAP HANA DB 중지 및 시작을 제어합니다.  | SAP Basis 관리 | 
| 복제 네트워크를 할당합니다. | 소스 시스템의 `global.ini` 파일에서 `[system_replication_hostname_resolution]` 헤더 아래에 소스 및 타겟 복제 네트워크 세부 정보를 제공합니다. 그런 다음 대상 시스템의 `global.ini` 파일에 항목을 복사합니다. | SAP Basis 관리 | 
| 기본에서 복제를 활성화합니다. | 원본 SAP HANA DB에서 복제를 활성화하려면 다음 명령을 실행하세요. <pre>hdbnsutil -sr_enable --name=siteA</pre> | SAP Basis 관리 | 
| 대상 SAP HANA DB를 보조 시스템으로 등록합니다. | 대상 SAP HANA DB를 SAP HSR 소스의 보조 시스템으로 등록하려면 **비동기** 복제를 선택합니다. <pre>(sid)adm $> HDB stop<br />(sid)adm $> hdbnsutil -sr_register –name=siteB –remotehost=hdbhost /<br />--remoteInstance=00 –replicationMode=async –operationMode=logreplay<br />(sid)adm $> HDB start</pre>또는 등록하기 위해 `–online` 옵션을 선택해도 됩니다. 이 경우 SAP HANA DB를 중지하고 시작할 필요가 없습니다. | SAP Basis 관리 | 
| 동기화를 검증합니다. | (비동기식 복제이므로) 소스 SAP HANA DB에서 모든 로그가 대상 시스템에 적용되었는지 확인합니다.복제를 확인하려면 소스에서 다음 명령을 실행합니다.<pre>(sid)adm $> cdpy<br />(sidadm $> python systemReplicationStatus.py</pre> | SAP Basis 관리 | 
| 소스 SAP 애플리케이션과 SAP HANA DB를 종료합니다. | 마이그레이션 전환 중에 소스 시스템(SAP 애플리케이션 및 SAP HANA 데이터베이스)을 종료합니다. | SAP Basis 관리 | 
| 타겟에서 테이크오버를 수행하세요. | AWS의 타겟에서 테이크오버를 수행하려면 `hdbnsutil -sr_takeover` 명령을 실행하세요. | SAP Basis 관리 | 
| 대상 SAP HANA DB에서 복제를 해제합니다. | 복제 메타데이터를 지우려면 `hdbnsutil -sr_disable` 명령을 실행하여 대상 시스템에서 복제를 중지하세요. 이는 SAP 노트 2693441에 따른 것입니다. 오류로 인해 SAP HANA 시스템의 이름을 바꾸지 못했습니다. | SAP Basis 관리 | 
| 대상 SAP HANA DB를 백업합니다. | 인계가 성공하면 전체 SAP HANA DB 백업을 수행하는 것이 좋습니다. | SAP Basis 관리 | 

### 대상 시스템의 원래 호스트 이름으로 되돌립니다.
<a name="revert-to-the-original-hostname-in-the-target-system"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 SAP HANA DB 호스트 이름을 원래대로 되돌립니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname.html)필요에 따라 다른 옵션을 검증할 수 있습니다. 그러나 호스트 이름 변경을 SID 변경과 혼동하지 않도록 주의하세요(SAP 참고 2598814 - hdblcm: SID 이름 바꾸기 실패). | SAP Basis 관리 | 
| hdbuserstore를 조정합니다. | 소스 `hdbuserstore` 세부 정보를 가리키는 `schema/user` 세부 정보를 조정하세요. 자세한 단계는 [SAP 설명서](https://help.sap.com/viewer/b3ee5778bc2e4a089d3299b82ec762a7/2.0.02/en-US/ddbdd66b632d4fe7b3c2e0e6e341e222.html?q=hdbuserstore)를 참조하세요. 이 단계를 확인하려면 `R3trans -d` 명령을 실행합니다. 결과는 SAP HANA 데이터베이스에 성공적으로 연결되었음을 반영해야 합니다. | SAP Basis 관리 | 
| 클라이언트 연결을 시작합니다. | 대상 환경에서 SAP 애플리케이션 서버 및 기타 클라이언트 연결을 시작합니다. | SAP Basis 관리 | 

## 관련 리소스
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname-resources"></a>

**SAP 참조**

SAP 설명서 참조는 SAP에서 자주 업데이트합니다. 최신 정보를 확인하려면 SAP Note 2407186 - SAP HANA 고가용성을 위한 사용 방법 가이드 및 백서를 참조하세요.

*추가 SAP 참고 사항*
+ 2550327 - SAP HANA 시스템의 이름을 바꾸는 방법
+ 1999880 - 자주 묻는 질문: SAP HANA 시스템 복제
+ 2078425 - SAP HANA 플랫폼 수명 주기 관리 도구 hdblcm에 대한 문제 해결 노트
+ 2592227 - HANA 시스템의 FQDN 접미사 변경
+ 2048681 - SSH 또는 루트 보안 인증 없이 다중 호스트 시스템에서 SAP HANA 플랫폼 수명 주기 관리 작업 수행

*SAP 설명서*
+ [시스템 복제 네트워크 연결](https://help.sap.com/docs/SAP_HANA_PLATFORM/4e9b18c116aa42fc84c7dbfd02111aba/47190b425eb1433697b026ecd46ff5f9.html)
+ [시스템 복제를 위한 호스트 이름 확인](https://help.sap.com/viewer/eb3777d5495d46c5b2fa773206bbfb46/1.0.12/en-US/c0cba1cb2ba34ec89f45b48b2157ec7b.html)

**AWS 참조**
+ [SAP HANA를 다른 플랫폼에서 로 마이그레이션 AWS](https://docs.aws.amazon.com/sap/latest/sap-hana/migrating-hana-hana-to-aws.html)

## 추가 정보
<a name="migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname-additional"></a>

호스트 이름 변경 활동의 일환으로 `hdblcm`에서 수행한 변경 사항은 다음 세부 로그에 통합되어 있습니다.

![\[hdbhost에서 시작하여 temp-host에서 중지된 프로세스를 보여주는 코드이며 SAP HANA DB 시스템의 이름이 변경되었습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/004781c1-96df-43dd-a52e-ed1db5bdf9ef/images/9e0c11ca-6555-484f-9639-107f60f725f5.png)


# 를 사용하여 Microsoft SQL Server Always On 가용성 그룹 마이그레이션 AWS Application Migration Service
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn"></a>

*Sreenivas Nettem, Bharath Kumar Pammi Ramesh, Anantharaman Seshadri, Gireesh Sreekantan, Amazon Web Services*

## 요약
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-summary"></a>

AWS Application Migration Service (AWS MGN)은에서 기존 환경을 리호스팅하는 데 선호되는 도구로 AWS 클라우드, 이를 통해 고객은 온프레미스 데이터 센터에서 벗어날 수 있습니다. 이 패턴은 AWS MGN을 사용하여 Microsoft SQL Server Always On 가용성 그룹을 사용하여 Windows 클러스터를 마이그레이션하는 프로세스를 간략하게 설명합니다.

## 사전 조건 및 제한 사항
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+  AWS MGN 오케스트레이션을 위한 AWS Identity and Access Management (IAM) 역할입니다.
+ 소스 데이터베이스 서버에 대한 액세스(SQL Server Always On 가용성 그룹).
+ DNS 이름을 유지하기 위한 AWS 랜딩 존의 Active Directory.
+ Active Directory와의 네트워크 통신이 닫힌 스테이징 서브넷입니다.
+ Active Directory와 통신할 수 있는 대상 서브넷입니다.
+ 대상 서브넷에 있는 Windows 클러스터의 예약 IP 주소 2개(각 가용 영역에 하나씩).
+ 대상 서브넷의 SQL Always On 리스너에 대해 예약된 IP 주소 2개(각 가용 영역에 하나씩).

**제품 버전**
+ Windows Server 2012 이상
+ SQL Server 2012 이상

## 아키텍처
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-architecture"></a>

**소스 기술 스택  **

Microsoft Windows 클러스터(온프레미스 물리적 또는 가상 머신) Microsoft SQL Server Always On 가용성 그룹

**대상 기술 스택**

Amazon EC2 Windows 인스턴스

**대상 아키텍처 **

![\[AWS MGN을 사용하여 SQL Server Always On 가용성을 마이그레이션하기 위한 AWS 아키텍처입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/aa94040b-5ecf-42f9-90e3-929d0fa5e715/images/0b85c613-51df-475b-9598-3da3f9cd47c6.png)


## 도구
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-tools"></a>

*AWS 서비스*
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)를 사용하면 변경 AWS 클라우드 없이 가동 중지 시간을 최소화하면서 애플리케이션을 로 리호스팅(리프트 앤 시프트)할 수 있습니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.

*기타 도구*
+ [Microsoft SQL Server Management Studio(SSMS)](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms)는 SQL 서버 구성 요소에 대한 액세스, 구성 및 관리를 포함하여 SQL Server를 관리하기 위한 도구입니다.

## 모범 사례
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-best-practices"></a>

 AWS MGN의 경우 [모범 사례를 참조하세요 AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/best_practices_mgn.html).

## 에픽
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-epics"></a>

### 대상 계정 준비
<a name="prepare-the-target-account"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS MGN을 초기화합니다. | 대상에서 AWS MGN을 초기화합니다 AWS 리전. 이렇게 하면 필요한 IAM 역할 및 정책이 생성됩니다. 자세한 내용은 [콘솔을 사용하여 Application Migration Service 초기화](https://docs.aws.amazon.com/mgn/latest/ug/mgn-initialize-console.html)를 참조하세요. | 클라우드 관리자 | 
| 복제 및 시작 템플릿을 생성합니다. |  AWS MGN과 함께 사용할 복제 및 시작 템플릿을 구성합니다. 자세한 내용은 AWS 설명서[의 템플릿 구성을](https://docs.aws.amazon.com/mgn/latest/ug/mgn-initialization-templates.html) 참조하세요. | 클라우드 관리자 | 
| 통신 포트를 허용합니다. |  AWS MGN에 대한 네트워크 통신을 활성화하려면 TCP 포트 443 및 1500을 통한 트래픽을 허용합니다. 자세한 내용은 AWS 설명서의 [Application Migration Service에 대한 네트워크 요구 사항을](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html) 참조하세요. | 클라우드 관리자, 네트워크 관리자 | 

### 소스 서버 준비
<a name="prepare-the-source-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS MGN 사전 조건을 확인합니다. | 소스 서버가 AWS MGN 에이전트 설치를 위한 사전 조건을 충족하는지 확인합니다. 자세한 내용은 AWS 설명서의 [설치 요구 사항을](https://docs.aws.amazon.com/mgn/latest/ug/installation-requirements.html) 참조하세요. | 마이그레이션 엔지니어 | 
|  AWS MGN 에이전트를 설치합니다. | 소스 서버에 AWS MGN 에이전트를 설치합니다. 설치하는 동안 서버를 마이그레이션할 AWS 리전 를 선택합니다. 설치 후 에이전트는 서비스와 통신하고 복제를 시작합니다. 자세한 내용은 [Windows 서버에 AWS 복제 에이전트 설치를 참조하세요](https://docs.aws.amazon.com/mgn/latest/ug/windows-agent.html). | 마이그레이션 엔지니어 | 
| 소스 서버 상태를 확인합니다. |  AWS MGN 콘솔에서 소스 서버의 상태를 확인합니다. 복제가 시작되면 서버에 **테스트 준비가** 표시됩니다.오류가 발생하면 AWS MGN 설명서의 [통신 오류 문제 해결을 참조하세요](https://docs.aws.amazon.com/mgn/latest/ug/Troubleshooting-Communication-Errors.html). | 클라우드 관리자, 마이그레이션 엔지니어 | 
| 복제 설정을 최적화합니다. | SQL Always On 클러스터는 기본 서버에서 보조 서버로 높은 I/O 동기식 복제를 사용합니다. 복제를 최적화하고 지연을 방지하려면 각 SQL Always On [서버에 전용 복제](https://docs.aws.amazon.com/mgn/latest/ug/replication-settings-template.html) 서버를 사용합니다.데이터베이스가 5TB보다 큰 경우 기본 **t3****.small 대신 m5.large**와 같은 더 큰 복제 서버 인스턴스 크기를 선택하는 것이 좋습니다. | 클라우드 관리자, 마이그레이션 엔지니어 | 
| 시작 템플릿 업데이트 | [시작 설정을](https://docs.aws.amazon.com/mgn/latest/ug/launch-settings.html) 업데이트하고 SQL Always On 서버의 서브넷을 선택합니다. SQL Always On 클러스터 서버는 고가용성을 AWS 가용 영역 위해 서로 다른에 분산되어 있습니다. | 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 시작 설정을 업데이트합니다. | 크기 및 성능 요구 사항에 따라 시작 설정에서 인스턴스 유형 및 초당 입/출력 작업(IOPS)을 업데이트합니다.(선택 사항) 시작 설정에서 기존 탄력적 네트워크 인터페이스를 선택합니다. | 마이그레이션 엔지니어, 마이그레이션 책임자 | 

### 테스트 전환
<a name="test-cutover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 서버를 확인합니다. |  AWS MGN 콘솔에서 소스 서버 상태가 **테스트 준비 완료**인지 확인합니다. | 클라우드 관리자, 마이그레이션 엔지니어 | 
| 테스트 인스턴스를 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-always-on-group-using-mgn.html) | 클라우드 관리자, 마이그레이션 엔지니어 | 
| 연결 및 데이터베이스 무결성을 테스트합니다. | 테스트 인스턴스의 연결 및 데이터베이스 무결성을 테스트합니다. 그런 다음 AWS MGN 콘솔에서 소스 서버를 **전환 준비** 완료로 표시합니다. | 클라우드 관리자, 마이그레이션 엔지니어 | 

### 사전 마이그레이션 작업
<a name="pre-migration-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 무결성을 테스트합니다. | 이렇게 하면 마이그레이션 전에 소스에 데이터베이스 무결성 문제가 없는지 확인할 수 있습니다. 를 실행`DBCC CHECKDB`하고를 지정합니다`WITH_PHYSICAL_ONLY`. 없이이 검사를 실행하면 소스에서 성능 문제가 발생할 `WITH_PHYSICAL_ONLY` 수 있습니다. 데이터베이스 무결성을 유지하려면 데이터베이스의 주간 전체 검사를 실행합니다.이러한 명령은 잠재적 손상 문제를 감지하여 데이터베이스의 논리적 및 물리적 무결성을 확인합니다. 검사는 페이지, 행, 인덱스 및 시스템 테이블과 같은 데이터베이스의 구조를 확인합니다. | 데이터 엔지니어, DBA | 
| 연결된 서버에 대한 연결을 테스트합니다. | 모든 기존 서버 간의 연결을 테스트하고 상태를 문서화합니다. 이렇게 하면 연결된 서버가 마이그레이션 후 의도한 대로 작동하는지 확인할 수 있습니다. | 데이터 엔지니어, DBA | 
| 백업을 확인합니다. | 소스 백업의 무결성을 확인합니다. | 데이터 엔지니어, DBA | 

### AWS MGN 전환
<a name="aws-mgn-cutover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SQL Server 및 클러스터 서비스를 중지합니다. | 모든 SQL 클러스터 노드에서 SQL Server 및 Microsoft 클러스터 서비스를 중지합니다. | DBA, 마이그레이션 엔지니어 | 
| 서버를 확인합니다. |  AWS MGN 콘솔에서 소스 서버의 상태가 **전환 준비** 완료이고 데이터 복제 상태가 **정상**인지 확인합니다. | 마이그레이션 엔지니어 | 
| 전환을 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-always-on-group-using-mgn.html)자세한 내용은 AWS MGN 설명서의 [전환 인스턴스 시작](https://docs.aws.amazon.com/mgn/latest/ug/launch-cutover-gs.html)을 참조하세요. | 마이그레이션 엔지니어 | 
| 시작된 서버를 테스트합니다. | 시작된 Amazon EC2 인스턴스에 로그인하고 클러스터의 상태를 확인합니다. 서버가 올바른 서브넷에 있고, 인스턴스 크기 및 IOPS 설정이 올바르며, 감시 서버에 액세스할 수 있는지 확인합니다. | DBA, 마이그레이션 엔지니어 | 

### 데이터베이스 전환 후 작업
<a name="database-post-cutover-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클러스터 IP 주소를 업데이트합니다. | 대상 서브넷의 두 예약 IP 주소를 사용하여 Windows 클러스터의 클러스터 IP 주소를 업데이트합니다. 자세한 내용은 [장애 조치 클러스터 인스턴스의 IP 주소 변경](https://learn.microsoft.com/en-us/sql/sql-server/failover-clusters/windows/change-the-ip-address-of-a-failover-cluster-instance?view=sql-server-2016)을 참조하세요. | DBA, 마이그레이션 엔지니어 | 
| Always On 가용성 그룹 리스너 IP를 업데이트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-always-on-group-using-mgn.html) | DBA, 마이그레이션 엔지니어 | 
| 연결을 확인합니다. | SSMS를 사용하여 Always On 가용성 그룹 리스너에 연결하고 연결이 성공하는지 확인합니다. | DBA, 마이그레이션 엔지니어 | 
| Always On 가용성 그룹의 상태를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-always-on-group-using-mgn.html) | DBA, 마이그레이션 엔지니어 | 
| 오류 로그를 확인합니다. | 오류 로그를 열고 SQL Server 인스턴스에 대해 보고된 오류를 확인합니다. 모든 데이터베이스에 대해 복구가 완료되었는지 확인합니다. | DBA, 마이그레이션 엔지니어 | 
| 연결된 서버를 테스트합니다. | 연결된 서버의 연결을 테스트합니다. 연결 문제가 발생하는 경우 대상 서버와 포트에 액세스할 수 있는지 확인합니다. | DBA, 마이그레이션 엔지니어 | 

### 전환 마무리
<a name="finalize-the-cutover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전환을 마무리합니다. | 대상 SQL Always On 클러스터를 검증한 후 AWS MGN 콘솔을 통해 전환을 [완료합니다](https://docs.aws.amazon.com/mgn/latest/ug/launch-cutover-gs.html#revert-finalize-cutover-gs). 이렇게 하면 소스 서버에서 데이터 복제가 중지되고 복제 서버에서 데이터가 삭제됩니다. 또한 복제 서버와 관련 리소스도 제거합니다. | 클라우드 관리자, 마이그레이션 엔지니어 | 

## 문제 해결
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| AWS MGN 문제 해결 | 일반적인 문제 및 해결 방법은 AWS MGN 설명서의 [문제 해결](https://docs.aws.amazon.com/mgn/latest/ug/troubleshooting.html) 및 [FAQ](https://docs.aws.amazon.com/mgn/latest/ug/FAQ.html) 섹션을 참조하세요. | 

## 관련 리소스
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-resources"></a>

*AWS resources*
+ [Option-1 리호스팅 - AWS Application Migration Service (AWS)](https://catalog.us-east-1.prod.workshops.aws/workshops/c6bdf8dc-d2b2-4dbd-b673-90836e954745/en-US/04-application-migration/01-mgn)
+ [란 무엇입니까 AWS Application Migration Service?](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)

SQL Server 리소스
+ [SQL Server Management Studio(SSMS)란 무엇인가요?](https://learn.microsoft.com/en-us/ssms/sql-server-management-studio-ssms)

## 추가 정보
<a name="migrate-microsoft-sql-server-always-on-group-using-mgn-additional"></a>

워크로드를 로 마이그레이션하기 위한 표준 보안 요구 사항은 AWS 웹 사이트의 [보안, 자격 증명 및 규정 준수 모범 사례를](https://aws.amazon.com/architecture/security-identity-compliance/) AWS 클라우드참조하세요.

# 분산된 가용성 그룹을 사용하여 SQL Server를 AWS로 마이그레이션
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups"></a>

*Praveen Marthala, Amazon Web Services*

## 요약
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-summary"></a>

Microsoft SQL Server 올웨이즈 온 가용성 그룹은 SQL Server를 위한 고가용성(HA) 및 재해 복구(DR) 솔루션을 제공합니다. 가용성 그룹은 읽기/쓰기 트래픽을 허용하는 기본 복제본과 읽기 트래픽을 허용하는 최대 8개의 보조 복제본으로 구성됩니다. 가용성 그룹은 두 개 이상의 노드가 있는 Windows Server 장애 조치 클러스터(WSFC)에 구성됩니다.

Microsoft SQL Server 올웨이즈 온 분산 가용성 그룹은 두 개의 독립적인 WFSC 간에 두 개의 개별 가용성 그룹을 구성하는 솔루션을 제공합니다. 분산 가용성 그룹에 속하는 가용성 그룹은 같은 데이터 센터에 있지 않아도 됩니다. 가용성 그룹 하나는 온프레미스에 있을 수 있고, 다른 가용성 그룹은 다른 도메인의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 있는 Amazon Web Services(AWS) 클라우드에 있을 수 있습니다. 

이 패턴은 분산 가용성 그룹을 사용하여 Amazon EC2에 가용성 그룹을 설정한 상태에서 기존 가용성 그룹에 속하는 온프레미스 SQL Server 데이터베이스를 SQL Server로 마이그레이션하는 단계를 설명합니다. 이 패턴을 따르면 전환 중에 가동 중지 시간을 최소화하면서 데이터베이스를 AWS 클라우드로 마이그레이션할 수 있습니다. 데이터베이스는 전환 후 즉시 AWS에서 고가용성을 제공합니다. 또한 이 패턴을 사용하여 SQL 서버의 동일한 버전을 유지하면서 기본 운영 체제를 온프레미스에서 AWS로 변경할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ AWS Direct Connect 또는 AWS Site-to-Site VPN
+ 온프레미스와 AWS의 두 노드에 설치된 동일한 버전의 SQL 서버

**제품 버전**
+ SQL Server 버전 2016 이상
+ SQL Server Enterprise Edition

## 아키텍처
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-architecture"></a>

**소스 기술 스택**
+ 온프레미스 상시 가동 가용성 그룹을 지원하는 Microsoft SQL Server 데이터베이스

**대상 기술 스택**
+ AWS 클라우드의 Amazon EC2에 올웨이즈 온 가용성 그룹이 있는 Microsoft SQL Server 데이터베이스

**마이그레이션 아키텍처**

![\[온프레미스 및 AWS의 가용성 그룹에서 동기식 복제를 사용하는 SQL Server.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6e229e30-9b11-4ccb-bccd-cbe6601139c0/images/79ee7911-d68f-4db7-9b94-113dcf09c28b.png)


*용어*
+ WSFC 1 - WSFC 온프레미스
+ WSFC 2 - AWS 클라우드의 WSFC
+ AG 1 - WSFC 1에 속하는 첫 번째 가용성 그룹
+ AG 2 - WSFC 2에 속하는 두 번째 가용성 그룹
+ SQL Server 기본 복제본 - 모든 쓰기의 글로벌 기본 복제본으로 간주되는 AG 1의 노드
+ SQL Server 전달자 - SQL Server 기본 복제본에서 비동기적으로 데이터를 수신하는 AG 2의 노드
+ SQL Server 보조 복제본 - 기본 복제본 또는 전달자로부터 데이터를 동기적으로 수신하는 AG 1 또는 AG 2의 노드

## 도구
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-tools"></a>
+ [AWS Direct Connect는](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 AWS Direct Connect에 연결합니다. 이 연결을 통해 네트워크 경로의 인터넷 서비스 공급자를 우회하여 퍼블릭 AWS 서비스에 직접 *가상 인터페이스*를 생성할 수 있습니다.
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/concepts.html) – Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하여 필요에 따라 많거나 적은 수의 가상 서버를 시작하고 스케일 아웃 또는 스케일 인할 수 있습니다.
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) - AWS Site-to-Site VPN은 Site-to-Site 가상 프라이빗 네트워크(VPN) 생성을 지원합니다. AWS에서 시작하는 인스턴스와 자체 원격 네트워크 간에 트래픽을 전달하도록 VPN을 구성할 수 있습니다.
+ [마이크로소프트 SQL 서버 관리 스튜디오](https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms?view=sql-server-ver15) - 마이크로소프트 SQL 서버 관리 스튜디오(SSMS)는 SQL 서버 인프라를 관리하기 위한 통합 환경입니다. SQL Server와 상호 작용하는 다양한 스크립트 편집기와 함께 사용자 인터페이스와 도구 그룹을 제공합니다.

## 에픽
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-epics"></a>

### AWS에 두 번째 가용성 그룹 설정
<a name="set-up-a-second-availability-group-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS에서 WSFC를 생성합니다. | HA용 노드 2개가 있는 Amazon EC2 인스턴스에서 WSFC 2를 생성합니다. 이 장애 조치 클러스터를 사용하여 AWS에 두 번째 가용성 그룹(AG 2)을 생성합니다. | 시스템 관리자, SysOps 관리자 | 
| WSFC 2에 두 번째 가용성 그룹을 생성합니다. | SSMS를 사용하여 WSFC 2의 두 노드에 AG 2를 생성합니다. WSFC 2의 첫 번째 노드가 전달자 역할을 합니다. WSFC 2의 두 번째 노드는 AG 2의 보조 복제본 역할을 합니다.이 단계에서는 AG 2에서 사용할 수 있는 데이터베이스가 없습니다. 분산 가용성 그룹을 설정하기 위한 출발점입니다. | DBA, 개발자 | 
| AG 2에서 복구 옵션 없이 데이터베이스를 생성합니다. | 온프레미스 가용성 그룹(AG 1)에 데이터베이스를 백업합니다. 복구 옵션 없이 데이터베이스를 전달자와 AG 2의 보조 복제본 모두에 복원합니다. 데이터베이스를 복원하는 동안 데이터베이스 데이터 파일과 로그 파일을 위한 충분한 디스크 공간이 있는 위치를 지정하세요.이 단계에서는 데이터베이스가 복원 상태에 있습니다. AG 2 또는 분산 가용성 그룹에 속하지 않으며 동기화되지도 않습니다. | DBA, 개발자 | 

### 분산 가용성 그룹 구성
<a name="configure-the-distributed-availability-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AG 1에 분산 가용성 그룹을 생성합니다. | AG 1에 분산 가용성 그룹을 생성하려면 `DISTRIBUTED` 옵션이 있는 `CREATE AVAILABILITY GROUP`을 사용하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html) | DBA, 개발자 | 
| AG 2에 분산 가용성 그룹을 생성합니다. | AG 2에 분산 가용성 그룹을 생성하려면 `DISTRIBUTED` 옵션이 있는 `ALTER AVAILABILITY GROUP`을 사용하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html)분산 가용성 그룹은 AG 1과 AG 2 사이에 생성됩니다.AG 2의 데이터베이스는 아직 AG 1에서 AG 2로의 데이터 흐름에 참여하도록 구성되지 않았습니다. | DBA, 개발자 | 
| AG 2의 전달자 및 보조 복제본에 데이터베이스를 추가합니다. | AG 2의 `ALTER DATABASE` 전달자와 보조 복제본 모두에서 `SET HADR` `AVAILABILITY GROUP` 옵션을 사용하여 데이터베이스를 분산 가용성 그룹에 추가합니다. 그러면 AG 1과 AG 2의 데이터베이스 간에 비동기 데이터 흐름이 시작됩니다. 글로벌 기본 복제본은 쓰기 작업을 수행하고 AG 1의 보조 복제본에 동기적으로 데이터를 전송하고 AG 2의 전달자에 비동기적으로 데이터를 전송합니다. AG 2의 전달자는 AG 2의 보조 복제본에 동기적으로 데이터를 전송합니다. | DBA, 개발자 | 

### AG 1과 AG 2 간의 비동기 데이터 흐름을 모니터링합니다.
<a name="monitor-asynchronous-data-flow-between-ag-1-and-ag-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DMV 및 SQL 서버 로그를 사용합니다. | 동적 관리 보기(DMV)와 SQL Server 로그를 사용하여 두 가용성 그룹 간의 데이터 흐름 상태를 모니터링합니다. 모니터링 대상 DMV에는 `sys.dm_hadr_availability_replica_states` 및 `sys.dm_hadr_automatic_seeding`이 포함됩니다.전달자 동기화 상태를 확인하려면 전달자의 SQL Server 로그에서 *동기화 상태*를 모니터링하세요. | DBA, 개발자 | 

### 최종 마이그레이션을 위한 전환 활동 수행
<a name="perform-cutover-activities-for-final-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 복제본에 대한 모든 트래픽을 중지합니다. | AG 1의 기본 복제본으로 들어오는 트래픽을 중지하여 데이터베이스에서 쓰기 작업이 발생하지 않고 데이터베이스를 마이그레이션할 준비가 되도록 하세요. | 앱 소유자, 개발자 | 
| AG 1의 분산 가용성 그룹의 가용성 모드를 변경합니다. | 기본 복제본에서 분산 가용성 그룹의 가용성 모드를 동기로 설정합니다. 가용성 모드를 동기로 변경하면 데이터가 AG 1의 기본 복제본에서 AG 2의 전달자로 동기적으로 전송됩니다. | DBA, 개발자 | 
| 두 가용성 그룹의 LSN을 확인하세요. | AG 1과 AG 2 모두에서 마지막 로그 시퀀스 번호(LSN)를 확인합니다. AG 1의 기본 복제본에서는 쓰기가 수행되지 않으므로 데이터가 동기화되고 두 가용성 그룹의 마지막 LSN이 일치해야 합니다. | DBA, 개발자 | 
| AG 1을 보조 역할로 업데이트합니다. | AG 1을 보조 역할로 업데이트하면 AG 1은 기본 복제 역할을 잃고 쓰기를 허용하지 않으며 두 가용성 그룹 간의 데이터 흐름이 중지됩니다. | DBA, 개발자 | 

### 두 번째 가용성 그룹으로 페일오버
<a name="fail-over-to-the-second-availability-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AG 2로 수동 페일오버합니다. | AG 2의 전달자에서 데이터 손실을 허용하도록 분산 가용성 그룹을 변경하세요. AG 1과 AG 2의 마지막 LSN이 일치하는지 이미 확인하고 확인했으므로 데이터 손실은 걱정할 필요가 없습니다.AG 2에서 전달자의 데이터 손실을 허용하면 AG 1과 AG 2의 역할이 변경됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html) | DBA, 개발자 | 
| AG 2의 분산 가용성 그룹의 가용성 모드를 변경합니다. | AG 2의 기본 복제본에서 가용성 모드를 비동기로 변경합니다.이렇게 하면 데이터 이동이 AG 2에서 AG 1로, 즉 동기식에서 비동기식으로 변경됩니다. 이 단계는 AG 2와 AG 1 사이의 네트워크 지연 시간(있는 경우)을 방지하기 위해 필요하며 데이터베이스 성능에는 영향을 미치지 않습니다. | DBA, 개발자 | 
| 새 기본 복제본으로 트래픽 전송을 시작합니다. | AG 2의 리스너 URL 엔드포인트를 사용하여 데이터베이스로 트래픽을 전송하도록 연결 문자열을 업데이트합니다.이제 AG 2는 쓰기를 수락하고 AG 1의 전달자에게 데이터를 전송하며, AG 2의 자체 보조 복제본에도 데이터를 전송합니다. 데이터는 AG 2에서 AG 1로 비동기적으로 이동합니다. | 앱 소유자, 개발자 | 

### 전환 이후 활동 수행
<a name="perform-post-cutover-activities"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 분산 가용성 그룹을 AG 2에 삭제합니다. | 계획된 시간에 마이그레이션을 모니터링합니다. 그런 다음 AG 2에 분산 가용성 그룹을 삭제하여 AG 2와 AG 1 사이의 분산 가용성 그룹 설정을 제거합니다. 이렇게 하면 분산 가용성 그룹 구성이 제거되고 AG 2에서 AG 1로 이동하는 데이터 흐름이 중지됩니다. 현재 AG 2는 쓰기 작업을 수행하는 기본 복제본과 동일한 가용성 그룹 내에 보조 복제본이 있어 AWS에서 가용성이 높습니다. | DBA, 개발자 | 
| 온프레미스 서버를 서비스 해제합니다. | AG 1에 속하는 WSFC 1의 온프레미스 서버를 서비스 해제합니다. | 시스템 관리자, SysOps 관리자 | 

## 관련 리소스
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-resources"></a>
+ [분산 가용성 그룹](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/distributed-groups.html)
+ [SQL 문서: 분산 가용성 그룹](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/distributed-availability-groups?view=sql-server-ver15)
+ [SQL Docs: Always On 가용성 그룹: 고가용성 및 재해 복구 솔루션](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server?view=sql-server-ver15)

# 에서 관계형 데이터베이스를 MongoDB Atlas로 마이그레이션 AWS
<a name="migrate-relational-database-to-mongodb-atlas"></a>

*Battulga Purevragchaa 및 Igor Alekseev, Amazon Web Services*

*Babu Srinivasan, MongoDB*

## 요약
<a name="migrate-relational-database-to-mongodb-atlas-summary"></a>

이 패턴에서는 SQL Server, MySQL 또는 PostgreSQL과 같은 관계형 데이터베이스에서 AWS 클라우드의 MongoDB Atlas로 마이그레이션하는 단계를 설명합니다. 이 패턴은 [MongoDB 관계형 Migrator](https://www.mongodb.com/products/relational-migrator)를 사용하여 관계형 데이터베이스에서 MongoDB Atlas로 데이터 마이그레이션을 가속화합니다.

이 패턴은 AWS 권장 가이드 웹 사이트의 [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/) 가이드와 함께 제공됩니다. 이 가이드에서 설명하는 마이그레이션 시나리오 중 하나에 대한 구현 단계를 제공합니다. 추가 마이그레이션 시나리오는 AWS 권장 가이드 웹 사이트에서 다음 패턴을 참조하세요.
+ [에서 자체 호스팅된 MongoDB 환경을 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud.html)
+ [IBM Db2, SAP, Sybase 및 기타 데이터베이스에서의 MongoDB Atlas로 데이터 스트리밍 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/stream-data-from-ibm-db2-to-mongodb-atlas.html)

이 패턴은 [AWS System Integrator(SI) 파트너](https://aws.amazon.com/managed-services/partners/) 및 AWS 사용자를 위한 것입니다.

## 사전 조건 및 제한 사항
<a name="migrate-relational-database-to-mongodb-atlas-prereqs"></a>

**사전 조건 **
+ MongoDB Atlas로 마이그레이션할 소스 관계형 데이터베이스(Oracle Database, SQL Server, PostgreSQL, MySQL, SAP/Sybase ASE 등).
+ 관계형 데이터베이스, MongoDB Atlas 및에 대한 지식 AWS 서비스. 이 패턴은 몇 가지 마이그레이션 단계를 개략적으로 설명합니다. 향후 버전에서 추가 세부 정보가 추가됩니다.

**제품 버전**
+ MongoDB 버전 5.0 이상

## 아키텍처
<a name="migrate-relational-database-to-mongodb-atlas-architecture"></a>

다음 다이어그램은 관계형 데이터베이스 관리 시스템(RDBMS) 데이터베이스에서 AWS의 MongoDB Atlas로의 마이그레이션을 보여줍니다.

![\[RDBMS에서 AWS의 MongoDB Atlas로 마이그레이션하기 위한 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4e3ea0f1-21e8-4641-a9ee-732355f20baf/images/8eacf3ec-f480-4912-9002-6a50800fe9bf.png)


다양한 사용 시나리오를 지원하는 MongoDB Atlas 참조 아키텍처는 AWS 권장 가이드 웹 사이트의[에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/architecture.html)을 참조하세요.

## 도구
<a name="migrate-relational-database-to-mongodb-atlas-tools"></a>
+ [MongoDB Atlas](https://www.mongodb.com/atlas)는 클라우드에서 MongoDB 데이터베이스를 배포하고 관리하기 위한 완전관리형 서비스형 데이터베이스(DbaaS).
+ [MongoDB 관계형 Migrator](https://www.mongodb.com/products/relational-migrator)는 기존 관계형 데이터베이스에서 MongoDB로 데이터를 원활하게 전환합니다. 변환 프로세스를 자동화하고 관계형 데이터베이스의 정형 데이터 모델을 MongoDB에서 제공하는 유연한 문서 형식으로 변환하는 데 도움이 됩니다. 관계형 마이그레이션기는 데이터 무결성과 관계를 보존하여 마이그레이션을 간소화합니다. 조직은 MongoDB가 제공하는 확장성, 성능 및 다양성 이점을 활용하면서 기존 데이터에 대한 숙련도를 유지할 수 있습니다.

## 모범 사례
<a name="migrate-relational-database-to-mongodb-atlas-best-practices"></a>

에서 MongoDB를 사용하는 모범 사례는 [AWS 파트너 네트워크 블로그](https://aws.amazon.com/blogs/apn/tag/mongodb-atlas/)의 게시물을 AWS참조하세요.

## 에픽
<a name="migrate-relational-database-to-mongodb-atlas-epics"></a>

### 검색 및 평가
<a name="discovery-and-assessment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 관계형 데이터베이스의 파라미터와 크기를 결정합니다. | 총 인덱스 공간에 대한 Relational Migrator 권장 사항 및 `db.stats()`의 정보를 사용하여 작업 세트 크기를 추정합니다. 데이터 공간 중 일정 비율에 자주 액세스한다고 가정합니다. 이 작업은 약 1주일 정도 소요됩니다. 이 스토리와 이 에픽에 실린 다른 스토리에 대한 자세한 내용과 예제를 보려면 [관련 리소스](#migrate-relational-database-to-mongodb-atlas-resources) 섹션을 참조하세요. | 앱 소유자, DBA | 
| 네트워크 대역폭 요구 사항을 추정합니다. | 네트워크 대역폭 요구 사항을 추정하려면 평균 문서 크기에 초당 제공되는 문서 수를 곱하세요. 클러스터의 모든 노드가 부담하는 최대 트래픽을 기준으로 고려하세요. 클러스터에서 클라이언트 애플리케이션으로의 다운스트림 데이터 전송 속도를 계산하려면 일정 기간 동안 반환된 총 문서의 합계를 사용하세요. 애플리케이션이 보조 노드에서 읽는 경우, 이 전체 문서 수를 읽기 작업을 수행할 수 있는 노드 수로 나누세요. 데이터베이스의 평균 문서 크기를 찾으려면 `db.stats().avgObjSize` 명령을 사용하시기 바랍니다. 이 작업은 일반적으로 하루가 소요됩니다. | DBA | 
| Atlas 티어를 선택합니다. | [MongoDB 설명서](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)의 지침에 따라 올바른 Atlas 클러스터 티어를 선택하세요. | DBA | 
| 전환을 계획합니다. | 애플리케이션 전환을 계획합니다. | DBA, 앱 소유자 | 

### 에서 새 MongoDB Atlas 환경 설정 AWS
<a name="set-up-a-new-mongodb-atlas-environment-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 에서 새 MongoDB Atlas 클러스터를 생성합니다 AWS. | MongoDB Atlas에서 **클러스터 빌드**를 선택합니다. **새 클러스터 생성** 대화 상자에서 클라우드 공급자 AWS 로를 선택합니다. | DBA | 
|  AWS 리전 및 글로벌 클러스터 구성을 선택합니다. | Atlas 클러스터에 AWS 리전 사용할 수 있는 목록에서를 선택합니다. 필요한 경우 글로벌 클러스터를 구성하세요. | DBA | 
| 클러스터 티어를 선택합니다. | 선호하는 클러스터 티어를 선택합니다. 티어 선택에 따라 메모리, 스토리지, IOPS 사양과 같은 요소가 결정됩니다. | DBA | 
| ​추가 클러스터 설정을 구성합니다. | MongoDB 버전, 백업 및 암호화 옵션과 같은 추가 클러스터 설정을 구성합니다. 이러한 옵션에 대한 자세한 내용은 [관련 리소스](#migrate-relational-database-to-mongodb-atlas-resources) 섹션을 참조하세요. | DBA | 

### 보안 및 규정 준수를 구성합니다.
<a name="configure-security-and-compliance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 액세스 목록을 구성합니다. | Atlas 클러스터에 연결하려면 프로젝트의 액세스 목록에 항목을 추가해야 합니다. Atlas는 TLS/SSL를 사용하여 데이터베이스의 가상 프라이빗 클라우드(VPC) 연결을 암호화합니다. 프로젝트에 대한 액세스 목록을 설정하고 이 에픽의 스토리에 대한 자세한 내용을 확인하려면 [관련 리소스](#migrate-relational-database-to-mongodb-atlas-resources) 섹션을 참조하세요. | DBA | 
| 사용자를 인증하고 권한을 부여합니다. | MongoDB Atlas 클러스터에 액세스할 데이터베이스 사용자를 생성하고 인증해야 합니다. 프로젝트의 클러스터에 액세스하려면 사용자는 해당 프로젝트에 속해야 하며 여러 프로젝트에 속할 수 있습니다. | DBA | 
| 사용자 지정 역할을 생성합니다. | (선택 사항) Atlas는 내장된 Atlas 데이터베이스 사용자 권한이 원하는 권한 세트를 지원하지 않는 경우 활용할 수 있는 사용자 지정 역할 생성을 지원합니다. | DBA | 
| VPC 피어링을 설정합니다. | (선택 사항) Atlas는 다른 [VPC와의 VPC 피어링](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)VPCs을 지원합니다 AWS. | 관리자 | 
|  AWS PrivateLink 엔드포인트를 설정합니다. | (선택 사항)를 사용하여에서 프라이빗 엔드포인트 AWS 를 설정할 수 있습니다 AWS PrivateLink. 자세한 내용은 [Amazon VPC 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)를 참조하세요. | 관리자 | 
| 2단계 인증을 활성화합니다. | (선택 사항)Atlas는 사용자가 Atlas 계정에 대한 액세스를 제어할 수 있도록 2단계 인증(2FA)을 지원합니다. | 관리자 | 
| LDAP을 사용하여 사용자 인증 및 권한 부여를 설정합니다. | (선택 사항)Atlas는 Lightweight Directory Access Protocol(LDAP)을 통한 사용자 인증 및 권한 부여를 지원합니다. | DBA | 
| 통합 AWS 액세스를 설정합니다. | (선택 사항) Atlas Data Lake 및 고객 키 관리를 사용한 저장 데이터 암호화를 포함한 일부 Atlas 기능은 인증에 AWS Identity and Access Management (IAM) 역할을 사용합니다. | 관리자 | 
| 를 사용하여 저장 시 암호화를 설정합니다 AWS KMS. | (선택 사항) Atlas는 AWS Key Management Service (AWS KMS)를 사용하여 스토리지 엔진 및 클라우드 공급자 백업을 암호화할 수 있습니다. | 관리자 | 
| 클라이언트 측 필드 수준 암호화를 설정합니다. | (선택 사항)Atlas는 필드 자동 암호화를 비롯한 클라이언트 측 필드 수준 암호화를 지원합니다. | 관리자 | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| MongoDB 관계형 마이그레이션레이터를 액세스 목록에 추가합니다. | 소스 데이터베이스의 액세스 목록에 Relational Migrator를 추가합니다. 이렇게 하면 소스 환경을 준비하여 대상 Atlas 클러스터에 연결할 수 있습니다. | DBA | 
| 관계형 데이터베이스 객체를 평가합니다. | MongoDB Relational Migrator를 시작하고 관계형 데이터베이스에 연결합니다. 평가를 시작합니다. | DBA | 
| 마이그레이션 패턴을 수락하거나 비즈니스 니즈에 따라 변경하도록 선택합니다. | 초기 평가 및 성능 파라미터를 기반으로 Relational Migrator에서 권장하는 데이터베이스 패턴을 수락하거나 비즈니스 요구 사항에 따라 변경하도록 선택합니다. | DBA | 
| MongoDB Atlas에서 대상 복제본 세트를 시작합니다. | MongoDB Atlas에서 대상 복제본 세트를 시작합니다. 관계형 마이그레이션기에서 **마이그레이션할 준비가 되었음을** 선택합니다. | DBA | 

### 운영 통합 구성
<a name="configure-operational-integration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| MongoDB Atlas 클러스터에 연결합니다. | MongoDB Atlas 클러스터 연결이 예상대로 작동하는지 확인합니다. | 앱 소유자 | 
| 클러스터 데이터와 상호 작용합니다. | 클러스터 데이터를 확인합니다. | DBA | 
| 클러스터를 모니터링합니다. | 클러스터가 올바르게 설정되었는지 확인합니다. | DBA | 
| 클러스터 데이터를 백업하고 복원합니다. | 클러스터 데이터에 대해 정기적으로 백업을 예약합니다. | DBA | 

## 관련 리소스
<a name="migrate-relational-database-to-mongodb-atlas-resources"></a>

다음 모든 링크는 달리 명시되지 않는 한 MongoDB 설명서의 웹 페이지로 이동합니다.

**마이그레이션 가이드**
+ [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/)(AWS 권고 가이드)

**검색 및 평가**
+ [메모리](https://docs.atlas.mongodb.com/sizing-tier-selection/#memory)
+ [Atlas 샘플 데이터 세트를 사용한 크기 조정 예제](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--the-service-sample-data-sets)
+ [모바일 애플리케이션의 크기 조정 예제](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--mobile-app)
+ [네트워크 트래픽](https://docs.atlas.mongodb.com/sizing-tier-selection/#network-traffic)
+ [클러스터 Auto Scaling](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#cluster-auto-scaling)
+ [Atlas 크기 조정 템플릿](https://view.highspot.com/viewer/5f438f47a4dfa042e97130c5)

**보안 및 규정 준수 구성**
+ [IP 액세스 목록 항목 구성](https://docs.atlas.mongodb.com/security/ip-access-list/)
+ [데이터베이스 사용자 구성](https://docs.atlas.mongodb.com/security-add-mongodb-users/)
+ [Atlas UI에 대한 액세스 구성](https://docs.atlas.mongodb.com/organizations-projects/)
+ [사용자 지정 데이터베이스 역할 구성](https://docs.atlas.mongodb.com/security-add-mongodb-roles)
+ [데이터베이스 사용자 구성](https://docs.atlas.mongodb.com/security-add-mongodb-users/#atlas-user-privileges)
+ [네트워크 피어링 연결 설정](https://docs.atlas.mongodb.com/security-vpc-peering/)
+ [Atlas의 프라이빗 엔드포인트에 대해 알아보기](https://docs.atlas.mongodb.com/security-private-endpoint/)
+ [다중 인증 옵션 관리](https://docs.atlas.mongodb.com/security-two-factor-authentication/)
+ [LDAP을 통한 사용자 인증 및 권한 부여 설정](https://docs.atlas.mongodb.com/security-ldaps/)
+ [Atlas 데이터 레이크](https://docs.mongodb.com/datalake/)
+ [고객 키 관리를 사용한 저장 중 암호화](https://docs.atlas.mongodb.com/security-kms-encryption/)
+ [역할을 수임하는 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)(IAM 설명서)
+ [클라이언트측 필드 수준 암호화](https://docs.mongodb.com/manual/core/security-client-side-encryption)
+ [자동 암호화](https://docs.mongodb.com/manual/core/security-automatic-client-side-encryption) 
+ [MongoDB Atlas 보안 제어](https://webassets.mongodb.com/_com_assets/cms/MongoDB_Atlas_Security_Controls-v7k3rbhi3p.pdf)
+ [MongoDB 신뢰 센터](https://www.mongodb.com/cloud/trust)
+ [클러스터의 보안 기능 구성](https://docs.atlas.mongodb.com/setup-cluster-security/)

**AWS****에 새로운 MongoDB Atlas 환경 설정**
+ [클라우드 공급자 및 리전](https://docs.atlas.mongodb.com/cloud-providers-regions/)
+ [글로벌 클러스터 관리](https://docs.atlas.mongodb.com/global-clusters/)
+ [클러스터 티어 선택](https://www.mongodb.com/docs/atlas/manage-clusters/#select-cluster-tier)
+ [추가 설정 구성](https://docs.atlas.mongodb.com/cluster-additional-settings/)
+ [Atlas로 시작](https://docs.atlas.mongodb.com/getting-started/)
+ [Atlas UI에 대한 액세스 구성](https://docs.atlas.mongodb.com/organizations-projects/)

**데이터 마이그레이션**
+ [데이터 마이그레이션 또는 가져오기](https://www.mongodb.com/docs/atlas/import/)

**클러스터 모니터링**
+ [클러스터 모니터링](https://docs.atlas.mongodb.com/monitoring-alerts/)

**운영 통합**
+ [클러스터에 연결](https://docs.atlas.mongodb.com/connect-to-cluster/)
+ [데이터와의 상호 작용](https://docs.atlas.mongodb.com/data-explorer/)
+ [클러스터 모니터링](https://docs.atlas.mongodb.com/monitoring-alerts/)
+ [데이터 백업, 복원 및 아카이브](https://docs.atlas.mongodb.com/backup-restore-cluster/)

# 에서 자체 호스팅된 MongoDB 환경을 MongoDB Atlas로 마이그레이션 AWS
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud"></a>

*Battulga Purevragchaa 및 Igor Alekseev, Amazon Web Services*

*Babu Srinivasan, MongoDB*

## 요약
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-summary"></a>

이 패턴은 자체 관리형 MongoDB 환경(MongoDB 커뮤니티 서버, 엔터프라이즈 서버, 엔터프라이즈 어드밴스드, mLab 또는 기타 관리형 MongoDB 클러스터 포함)에서 AWS 클라우드의 MongoDB Atlas로 마이그레이션하는 단계를 설명합니다. [Atlas Live Migration Service](https://www.mongodb.com/cloud/atlas/migrate)를 사용하여 MongoDB에서 MongoDB Atlas로 데이터를 더욱 빠르게 마이그레이션합니다.

이 패턴은 AWS 권장 가이드 웹 사이트의 [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/) 가이드와 함께 제공됩니다. 이 가이드에서 설명하는 마이그레이션 시나리오 중 하나에 대한 구현 단계를 제공합니다. 추가 마이그레이션 시나리오는 AWS 권장 가이드 웹 사이트에서 다음 패턴을 참조하세요.
+ [에서 관계형 데이터베이스를 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-relational-database-to-mongodb-atlas.html)
+ [IBM Db2, SAP, Sybase 및 기타 데이터베이스에서의 MongoDB Atlas로 데이터 스트리밍 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/stream-data-from-ibm-db2-to-mongodb-atlas.html)

패턴은 [AWS Systems Integrator(SI) 파트너](https://aws.amazon.com/managed-services/partners/) 및 AWS 사용자를 위한 것입니다.

## 사전 조건 및 제한 사항
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-prereqs"></a>

**사전 조건 **
+ MongoDB Atlas로 마이그레이션하기 위한 소스 MongoDB Enterprise Advanced, Community Server 또는 기타 자체 관리형 MongoDB 환경입니다.
+ MongoDB, MongoDB Atlas 및에 익숙합니다 AWS 서비스. 이 패턴은 몇 가지 마이그레이션 단계를 개략적으로 설명합니다. 향후 버전에서 추가 세부 정보가 추가됩니다.

**제품 버전**
+ MongoDB 버전 6.0.13 이상

## 아키텍처
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-architecture"></a>

다음 다이어그램은 MongoDB Enterprise Advanced 데이터베이스 및 MongoDB MongoDB 커뮤니티 데이터베이스에서의 MongoDB Atlas로 데이터를 마이그레이션하는 데 사용되는 Atlas Live Migration Service를 보여줍니다 AWS. 가동 중지 시간을 최소화하고 지속적인 데이터 동기화를 통해 복잡한 대규모 데이터베이스를 MongoDB Atlas로 마이그레이션해야 하는 경우이 서비스를 사용합니다. 이 패턴은 Atlas Live Migration Service를 사용합니다.

![\[MongoDB Atlas Live Migration Service를 사용한 데이터 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/52cdb923-64ff-4ee2-b129-93b9a139e24b/images/372134c4-ba47-4e48-bd0d-8b43017773b8.png)


다음 다이어그램은 보안 [AWS PrivateLink](https://aws.amazon.com/privatelink/) 연결을 AWS 통해 MongoDB Enterprise Advanced 데이터베이스 및 MongoDB 커뮤니티 데이터베이스에서 MongoDB Atlas로 데이터를 마이그레이션하는 데 사용할 수도 있는 MongoDB 미러 서비스(`mongomirror`)를 보여줍니다. 온프레미스 MongoDB와 MongoDB Atlas 간의 지속적인 데이터 복제`mongomirror`에 사용합니다. 이 도구는 재해 복구 또는 단계별 마이그레이션에 적합하지만이 패턴의 범위를 벗어납니다.

![\[mongomirror 도구를 사용하여 데이터 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/52cdb923-64ff-4ee2-b129-93b9a139e24b/images/53488a9b-2210-4b3d-b517-b618c1e0182c.png)


다양한 사용 시나리오를 지원하는 MongoDB Atlas 참조 아키텍처에 대한 자세한 내용은 AWS 권장 가이드 웹 사이트의 [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/architecture.html)을 참조하세요.

## 도구
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-tools"></a>
+ [MongoDB Atlas](https://www.mongodb.com/atlas)는 클라우드에서 MongoDB 데이터베이스를 배포하고 관리하기 위한 완전관리형 서비스형 데이터베이스(DbaaS)입니다.
+ [Atlas Live Migration Service](https://www.mongodb.com/cloud/atlas/migrate)는 데이터베이스를 Atlas로 마이그레이션하는 데 도움이 되는 무료 MongoDB 유틸리티입니다. 이 서비스는 전환이 완료될 때까지 소스 데이터베이스를 대상 데이터베이스와 동기화된 상태로 유지합니다. 전환할 준비가 되면 애플리케이션 인스턴스를 중지하고 대상 Atlas 클러스터를 가리킨 다음 다시 시작합니다. 이 서비스에 액세스하려면 MongoDB Atlas 클러스터에서 **데이터베이스 옵션을** 선택합니다.
+ [mongomirror](https://www.mongodb.com/docs/atlas/import/mongomirror/)는 기존 MongoDB 복제본 세트에서 MongoDB Atlas 복제본 세트로 데이터를 수동으로 마이그레이션하는 도구입니다. `mongomirror`는 기존 복제본 세트 또는 애플리케이션을 종료할 필요가 없으며 사용자 또는 역할 데이터를 가져오거나 구성 데이터베이스를 복사하지 않습니다. [MongoDB 설명서](https://www.mongodb.com/docs/atlas/import/mongomirror/#download-mongomirror)`mongomirror`에서를 다운로드할 수 있습니다.

## 모범 사례
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-best-practices"></a>

에서 MongoDB를 사용하는 모범 사례는 [AWS 파트너 네트워크 블로그](https://aws.amazon.com/blogs/apn/tag/mongodb-atlas/)의 게시물을 AWS참조하세요.

## 에픽
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-epics"></a>

### 검색 및 평가
<a name="discovery-and-assessment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클러스터 크기를 결정합니다. | 전체 인덱스 공간에 대한 `db.stats()`의 정보를 사용하여 작업 집합 크기를 추정합니다 데이터 공간 중 일정 비율에 자주 액세스한다고 가정합니다. 또는 자체 가정을 기반으로 메모리 요구량을 추정할 수도 있습니다. 이 작업은 약 1주일 정도 소요됩니다. 이 스토리와 이 에픽에 실린 다른 스토리에 대한 자세한 내용과 예제를 보려면 [관련 리소스](#migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-resources) 섹션을 참조하세요. | DBA, 앱 소유자 | 
| 네트워크 대역폭 요구 사항을 추정합니다. | 네트워크 대역폭 요구 사항을 추정하려면 평균 문서 크기에 초당 제공되는 문서 수를 곱하세요. 클러스터의 모든 노드가 부담하는 최대 트래픽을 기준으로 고려하세요. 클러스터에서 클라이언트 애플리케이션으로의 다운스트림 데이터 전송 속도를 계산하려면 일정 기간 동안 반환된 총 문서의 합계를 사용하세요. 애플리케이션이 보조 노드에서 읽는 경우, 이 전체 문서 수를 읽기 작업을 수행할 수 있는 노드 수로 나누세요. 데이터베이스의 평균 문서 크기를 찾으려면 `db.stats().avgObjSize` 명령을 사용하시기 바랍니다. 이 작업은 일반적으로 하루가 소요됩니다. | DBA | 
| Atlas 티어를 선택합니다. | [MongoDB 설명서](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)의 지침에 따라 올바른 Atlas 클러스터 티어를 선택하세요. | DBA | 
| 전환을 계획합니다. | 애플리케이션 전환을 계획합니다. | DBA, 앱 소유자 | 

### AWS에 새로운 MongoDB Atlas 환경 설정
<a name="set-up-a-new-mongodb-atlas-environment-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 에서 새 MongoDB Atlas 클러스터를 생성합니다 AWS. | Atlas에 로그인하고 프로젝트의 **개요** 페이지를 엽니다. **클러스터 생성** 버튼을 선택하여 클러스터를 생성합니다. 자세한 내용은 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/tutorial/deploy-free-tier-cluster/)를 참조하세요. | DBA | 
|  AWS 리전 및 글로벌 클러스터 구성을 선택합니다. | Atlas 클러스터에 AWS 리전 사용할 수 있는 목록에서를 선택합니다. 필요한 경우 글로벌 클러스터를 구성하세요. 자세한 내용은 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/tutorial/deploy-free-tier-cluster/#select-your-preferred-region.)를 참조하세요. | DBA | 
| 클러스터 티어를 선택합니다. | 선호하는 클러스터 티어를 선택합니다. 티어 선택에 따라 메모리, 스토리지, IOPS 사양과 같은 요소가 결정됩니다. | DBA | 
| ​추가 클러스터 설정을 구성합니다. | MongoDB 버전, 백업 및 암호화 옵션과 같은 추가 클러스터 설정을 구성합니다. 이러한 옵션에 대한 자세한 내용은 [관련 리소스](#migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-resources) 섹션을 참조하세요. | DBA | 

### 보안 및 규정 준수를 구성합니다.
<a name="configure-security-and-compliance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자를 인증하고 권한을 부여합니다. | MongoDB Atlas 클러스터에 액세스할 데이터베이스 사용자를 생성하고 인증해야 합니다. 프로젝트의 클러스터에 액세스하려면 사용자가 해당 프로젝트에 속해야 하며 여러 프로젝트에 속할 수 있습니다. Atlas는 AWS Identity and Access Management (IAM) 기반 인증도 지원합니다. 자세한 내용은 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/security/aws-iam-authentication/#set-up-authentication-with-aws-iam)를 참조하세요. | DBA | 
| 사용자 지정 역할을 생성합니다. | (선택 사항) Atlas는 내장된 Atlas 데이터베이스 사용자 권한이 원하는 권한 세트를 지원하지 않는 경우 활용할 수 있는 사용자 지정 역할 생성을 지원합니다. | DBA | 
| VPC 피어링을 설정합니다. | (선택 사항) Atlas는 다른 VPCs [Virtual Private Cloud(VPC) 피어링](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)을 지원합니다 AWS. | 관리자 | 
|  AWS PrivateLink 엔드포인트를 설정합니다. | (선택 사항)를 사용하여에서 프라이빗 엔드포인트 AWS 를 설정할 수 있습니다 AWS PrivateLink. 자세한 내용은 [Amazon VPC 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)를 참조하세요. | 관리자 | 
| 2단계 인증을 활성화합니다. | (선택 사항)Atlas는 사용자가 Atlas 계정에 대한 액세스를 제어할 수 있도록 2단계 인증(2FA)을 지원합니다. | 관리자 | 
| LDAP을 사용하여 사용자 인증 및 권한 부여를 설정합니다. | (선택 사항)Atlas는 Lightweight Directory Access Protocol(LDAP)을 통한 사용자 인증 및 권한 부여를 지원합니다. | 관리자 | 
| 통합 AWS 액세스를 설정합니다. | (선택 사항) Atlas Data Lake 및 고객 키 관리를 사용한 저장 중 암호화를 비롯한 일부 Atlas 기능은 IAM 역할을 인증에 사용합니다. | 관리자 | 
| 를 사용하여 저장 시 암호화를 설정합니다 AWS KMS. | (선택 사항) Atlas는 AWS Key Management Service (AWS KMS)를 사용하여 스토리지 엔진 및 클라우드 공급자 백업을 암호화할 수 있습니다. | 관리자 | 
| 클라이언트 측 필드 수준 암호화를 설정합니다. | (선택 사항)Atlas는 필드 자동 암호화를 비롯한 클라이언트 측 필드 수준 암호화를 지원합니다. | 관리자 | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| MongoDB Atlas에서 대상 복제본 세트를 선택합니다. | 대상 Atlas 클러스터로 이동하여 줄임표(...) 버튼을 선택합니다. 클러스터 목록에서이 버튼은 클러스터 이름 아래에 나타납니다. 클러스터 세부 정보에서 **연결** 및 **구성** 버튼 옆의 오른쪽에 버튼이 나타납니다. 자세한 내용은 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/import/c2c-pull-live-migration/#procedure)를 참조하세요. | DBA | 
| Atlas Live Migration Service를 액세스 목록에 추가합니다. | Atlas Live Migration Service를 AWS 소스 클러스터의 액세스 목록에 추가합니다. 이렇게 하면 소스 환경을 준비하여 대상 Atlas 클러스터에 연결할 수 있습니다. | DBA | 
| Atlas Live Migration Service를 사용하여 마이그레이션을 수행합니다. | **마이그레이션 시작**을 선택합니다. **전환 준비** 버튼이 녹색으로 바뀌면 전환을 수행합니다. Atlas 클러스터 성능 지표를 검토하세요. 새 데이터베이스를 가리키도록 모든 애플리케이션 계층에서 데이터베이스 연결을 업데이트하는 것이 좋습니다. | DBA | 

### 운영 통합 구성
<a name="configure-operational-integration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| MongoDB Atlas 클러스터에 연결합니다. | MongoDB Atlas 클러스터 연결이 예상대로 작동하는지 확인합니다. | 앱 소유자 | 
| 클러스터 데이터와 상호 작용합니다. | 클러스터 데이터를 테스트합니다. | DBA | 
| 클러스터를 모니터링합니다. | 클러스터가 올바르게 설정되었는지 확인합니다. | DBA | 
| 클러스터 데이터를 백업하고 복원합니다. | 클러스터 데이터에 대해 정기적으로 백업을 예약합니다. | DBA | 

## 문제 해결
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 오류: 지정된 소스에 도달할 수 없음 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud.html) | 
| 오류: 호스트 이름을 확인할 수 없음 | 지정된 호스트 이름에 대한 IP 주소를 찾을 수 없습니다. 지정된 호스트 이름이 올바르고 공개적으로 액세스할 수 있는지 확인합니다. | 
| 기타 오류 | 다른 오류가 발생하면 MongoDB 설명서의 [라이브 마이그레이션 문제 해결(Pull)](https://www.mongodb.com/docs/atlas/import/live-import-troubleshooting/)을 참조하세요. | 

## 관련 리소스
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-resources"></a>

다음 모든 링크는 달리 명시되지 않는 한 MongoDB 설명서의 웹 페이지로 이동합니다.

**마이그레이션 가이드**
+ [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/)(AWS 권고 가이드)

**레거시 마이그레이션**
+ [이전 버전의 MongoDB 마이그레이션](https://www.mongodb.com/docs/atlas/legacy-migration/)

**검색 및 평가**
+ [메모리](https://docs.atlas.mongodb.com/sizing-tier-selection/#memory)
+ [Atlas 샘플 데이터 세트를 사용한 크기 조정 예제](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--the-service-sample-data-sets)
+ [모바일 애플리케이션의 크기 조정 예제](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--mobile-app)
+ [네트워크 트래픽](https://docs.atlas.mongodb.com/sizing-tier-selection/#network-traffic)
+ [클러스터 Auto Scaling](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#cluster-auto-scaling)
+ [Atlas 크기 조정 템플릿](https://view.highspot.com/viewer/5f438f47a4dfa042e97130c5)

**보안 및 규정 준수 구성**
+ [IP 액세스 목록 항목 구성](https://docs.atlas.mongodb.com/security/ip-access-list/)
+ [데이터베이스 사용자 구성](https://docs.atlas.mongodb.com/security-add-mongodb-users/)
+ [Atlas UI에 대한 액세스 구성](https://docs.atlas.mongodb.com/organizations-projects/)
+ [사용자 지정 데이터베이스 역할 구성](https://docs.atlas.mongodb.com/security-add-mongodb-roles)
+ [데이터베이스 사용자 구성](https://docs.atlas.mongodb.com/security-add-mongodb-users/#atlas-user-privileges)
+ [네트워크 피어링 연결 설정](https://docs.atlas.mongodb.com/security-vpc-peering/)
+ [Atlas의 프라이빗 엔드포인트에 대해 알아보기](https://docs.atlas.mongodb.com/security-private-endpoint/)
+ [다중 인증 옵션 관리](https://docs.atlas.mongodb.com/security-two-factor-authentication/)
+ [LDAP을 통한 사용자 인증 및 권한 부여 설정](https://docs.atlas.mongodb.com/security-ldaps/)
+ [Atlas 데이터 레이크](https://docs.mongodb.com/datalake/)
+ [고객 키 관리를 사용한 저장 중 암호화](https://docs.atlas.mongodb.com/security-kms-encryption/)
+ [역할을 수임하는 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)(IAM 설명서)
+ [클라이언트측 필드 수준 암호화](https://docs.mongodb.com/manual/core/security-client-side-encryption)
+ [자동 암호화](https://docs.mongodb.com/manual/core/security-automatic-client-side-encryption) 
+ [MongoDB Atlas 보안 제어](https://webassets.mongodb.com/_com_assets/cms/MongoDB_Atlas_Security_Controls-v7k3rbhi3p.pdf)
+ [MongoDB 신뢰 센터](https://www.mongodb.com/cloud/trust)
+ [클러스터의 보안 기능 구성](https://docs.atlas.mongodb.com/setup-cluster-security/)

**AWS****에 새로운 MongoDB Atlas 환경 설정**
+ [클라우드 공급자 및 리전](https://docs.atlas.mongodb.com/cloud-providers-regions/)
+ [글로벌 클러스터 관리](https://docs.atlas.mongodb.com/global-clusters/)
+ [클러스터 티어 선택](https://www.mongodb.com/docs/atlas/manage-clusters/#select-cluster-tier)
+ [추가 설정 구성](https://docs.atlas.mongodb.com/cluster-additional-settings/)
+ [Atlas로 시작](https://docs.atlas.mongodb.com/getting-started/)
+ [Atlas UI에 대한 액세스 구성](https://docs.atlas.mongodb.com/organizations-projects/)

**데이터 마이그레이션**
+ [데이터 마이그레이션 또는 가져오기](https://www.mongodb.com/docs/atlas/import/)

**클러스터 모니터링**
+ [클러스터 모니터링](https://docs.atlas.mongodb.com/monitoring-alerts/)

**운영 통합**
+ [클러스터에 연결](https://docs.atlas.mongodb.com/connect-to-cluster/)
+ [데이터와의 상호 작용](https://docs.atlas.mongodb.com/data-explorer/)
+ [클러스터 모니터링](https://docs.atlas.mongodb.com/monitoring-alerts/)
+ [데이터 백업, 복원 및 아카이브](https://docs.atlas.mongodb.com/backup-restore-cluster/)

**훈련**
+ [MongoDB Atlas를 사용한 라이브 마이그레이션](https://learn.mongodb.com/courses/live-migration-with-mongodb-atlas)

## 추가 정보
<a name="migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud-additional"></a>

자세한 내용은 MongoDB 설명서에서 다음 주제를 참조하세요.
+ 데이터를 서버리스 인스턴스로 이동하려면 [Compass를 사용하여 데이터를 내보내고 가져오](https://www.mongodb.com/docs/compass/current/import-export/)거나 자체 관리형 도구를 사용하여 데이터를 마이그레이션합니다. 자세한 내용은 [서버리스 인스턴스 제한](https://www.mongodb.com/docs/atlas/reference/serverless-instance-limitations/)을 참조하세요.
+ Atlas의 새 클러스터에 데이터를 로드하려면 [Atlas에 데이터 로드](https://www.mongodb.com/docs/atlas/sample-data/#std-label-sample-data)를 참조하세요.
+ 테스트 목적으로 클러스터를 복사하려면 [자체 관리형 배포를 위한 백업 방법을](https://www.mongodb.com/docs/manual/core/backups/) 참조하세요.
+ 마이그레이션하려는 애플리케이션에 거의 지속적인 가동 시간이 필요한 경우 [MongoDB Support](https://www.mongodb.com/docs/atlas/support/#std-label-request-support)에 문의하여 가동 시간 요구 사항과 클러스터 구성을 공유하세요.
+ 자세한 내용은 [데이터 마이그레이션 또는 가져오기](https://www.mongodb.com/docs/atlas/import/)를 참조하세요.

# AWS DMS를 사용하여 Amazon DynamoDB로 Oracle 데이터베이스 마이그레이션
<a name="migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms"></a>

*Rambabu Karnena, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms-summary"></a>

이 패턴은 AWS Database Migration Service([AWS DMS](https://aws.amazon.com/dms/))를 사용하여 Oracle 데이터베이스를 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)로 마이그레이션하는 단계를 안내합니다. 여기에는 다음과 같은 세 가지 유형의 소스 데이터베이스를 포함합니다.
+ 온프레미스 Oracle 데이터베이스
+ Amazon Elastic Compute Cloud([Amazon EC2](https://aws.amazon.com/ec2/)) 기반 Oracle 데이터베이스
+ Amazon Relational Database Service([RDS](https://aws.amazon.com/rds/)) for Oracle DB 인스턴스

이 개념 증명에서 이 패턴은 Amazon RDS for Oracle DB 인스턴스로부터 마이그레이션하는 데 중점을 둡니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Amazon RDS for Oracle 데이터베이스에 연결하는 애플리케이션
+ 프라이머리 키 및 샘플 데이터를 사용하여 소스 Amazon RDS for Oracle 데이터베이스에 생성된 테이블

**제한 사항 **
+ Amazon DynamoDB는 이러한 데이터베이스 객체를 지원하지 않으므로 프로시저, 함수, 패키지, 트리거와 같은 Oracle 데이터베이스 객체는 마이그레이션 대상으로 고려하지 않습니다.

**제품 버전**
+ 이 패턴은 AWS DMS에서 지원하는 Oracle 데이터베이스의 모든 에디션 및 버전에 적용됩니다. 자세한 내용은 [Oracle 데이터베이스를 AWS DMS용 소스로](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 사용 및 [Amazon DynamoDB 데이터베이스를 AWS DMS의 대상으로](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html) 사용을 참조하세요. 가장 포괄적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것이 좋습니다.

## 아키텍처
<a name="migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms-architecture"></a>

**소스 기술 스택**
+ Amazon RDS for Oracle DB 인스턴스, Amazon EC2 기반 Oracle 또는 온프레미스 Oracle 데이터베이스

**대상 기술 스택**
+ Amazon DynamoDB

**AWS 데이터 마이그레이션 아키텍처**

![\[데이터는 Oracle DB에서 AWS DMS를 거쳐 Amazon DynamoDB로 이동합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/463fc7d4-ec8d-473b-8c7f-1df31800ee03/images/180e7340-3887-455d-a591-b5850e22770a.png)


## 도구
<a name="migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms-tools"></a>
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 데이터 스토어를 마이그레이션할 수 있습니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스(DB)를 설정, 운영 및 조정하는 데 도움이 됩니다. 이 패턴은 Amazon RDS for Oracle을 사용합니다.

## 에픽
<a name="migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| VPC를 생성합니다. | AWS 계정에서 Virtual Private Cloud(VPC) 및 프라이빗 서브넷을 생성합니다. | 시스템 관리자 | 
| 보안 그룹 및 네트워크 액세스 제어 목록을 생성합니다. | 자세한 내용은 [AWS 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)를 참조하세요. | 시스템 관리자 | 
| Amazon RDS for Oracle DB 인스턴스를 구성하고 시작합니다. | 자세한 내용은 [AWS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)를 참조하세요. | DBA, 시스템 관리자 | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DynamoDB 액세스를 위한 IAM 역할을 생성합니다. | AWS Identity and Access Management(IAM) 콘솔에서 역할을 생성하고 `AmazonDynamoDBFullAccess to it` 정책을 연결한 다음 AWS DMS를 서비스로 선택합니다. | 시스템 관리자 | 
| 마이그레이션을 위한 AWS DMS 복제 인스턴스를 생성합니다. | 복제 인스턴스는 소스 데이터베이스와 동일한 가용 영역 및 VPC에 있어야 합니다. | 시스템 관리자 | 
| AWS DMS에 소스 및 대상 DB 엔드포인트를 생성합니다. | 소스 데이터베이스 엔드포인트를 생성하는 데에는 다음의 두 가지 옵션이 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms.html)대상 데이터베이스 엔드포인트를 생성하려면 DynamoDB에 액세스하는 이전 작업에서 Amazon 리소스 이름(ARN) 역할을 선택합니다. | 시스템 관리자 | 
| 소스 Oracle 데이터베이스 테이블을 DynamoDB에 로드하는 AWS DMS 작업을 생성합니다. | 이전 단계에서 소스 및 대상 엔드포인트 이름과 복제 인스턴스를 선택합니다. 유형은 전체 로드일 수 있습니다. Oracle 스키마를 선택하고 **%**를 지정하여 모든 테이블을 선택합니다. | 시스템 관리자 | 
| DynamoDB의 테이블을 검증합니다. | 마이그레이션 결과를 보려면 DynamoDB 콘솔의 왼쪽 탐색 창에서 **테이블**을 선택합니다. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 코드를 수정합니다. | DynamoDB에서 데이터에 연결하고 데이터를 검색하려면 애플리케이션 코드를 업데이트합니다. | 앱 소유자, DBA, 시스템 관리자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DynamoDB를 사용하도록 애플리케이션 클라이언트를 전환합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS 리소스를 종료합니다. | 예를 들어 Amazon RDS for Oracle 인스턴스, DynamoDB 및 AWS DMS 복제 인스턴스를 종료합니다. | DBA, 시스템 관리자 | 
| 지표를 수집합니다. | 지표에는 마이그레이션 시간, 수동 작업 및 도구로 수행한 작업의 비율, 비용 절감 등이 포함됩니다. | DBA, 앱 소유자, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms-resources"></a>
+ [AWS Database Migration Service and Amazon DynamoDB: What You Need to Know](https://aws.amazon.com/blogs/database/aws-database-migration-service-and-amazon-dynamodb-what-you-need-to-know/)(블로그 게시물)
+ [Oracle 데이터베이스를 AWS DMS의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [Amazon DynamoDB 데이터베이스를 AWS Database Migration Service의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html)
+ [RDBMS에서 Amazon DynamoDB로 마이그레이션하기 위한 모범 사례](https://docs.aws.amazon.com/whitepapers/latest/best-practices-for-migrating-from-rdbms-to-dynamodb/welcome.html)(백서)

# SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for Oracle로 마이그레이션
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms"></a>

*Ramu Jagini, Amazon Web Services*

## 요약
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms-summary"></a>

이 패턴은 온프레미스 Oracle 8i 또는 9i 데이터베이스를 Oracle 데이터베이스용 Amazon Relational Database Service(RDS)로 마이그레이션하는 방법을 설명합니다. 이 패턴을 이용하면 Quest SharePlex를 동기식 복제에 사용하여 가동 중지 시간을 줄이고 마이그레이션을 완료할 수 있습니다.

AWS Database Migration Service(AWS DMS)는 Oracle 8i 또는 9i를 소스 환경으로 지원하지 않으므로 마이그레이션에 중간 Oracle 데이터베이스 인스턴스를 사용해야 합니다. [SharePlex 7.6.3](https://www.quest.com/community/shareplex/f/forum/20700/where-can-download-7-6-3-or-support-9i-shareplex)을 사용하여 이전 Oracle 데이터베이스 버전에서 이후 Oracle 데이터베이스 버전으로 복제할 수 있습니다. 중간 Oracle 데이터베이스 인스턴스는 SharePlex 7.6.3의 대상으로 호환 가능하며 AWS DMS용 소스 또는 SharePlex 최신 릴리스로 지원됩니다. 이 지원을 통해 Amazon RDS for Oracle 대상 환경으로 데이터를 추후에 복제할 수 있습니다.

사용 중단된 여러 데이터 유형 및 기능이 Oracle 8i 또는 9i에서 최신 버전의 Oracle 데이터베이스로의 마이그레이션에 영향을 미칠 수 있다는 점을 고려하세요. 이 패턴은 이러한 영향을 완화하기 위해 Oracle 11.2.0.4를 중간 데이터베이스 버전으로 사용하여 Amazon RDS for Oracle 대상 환경으로 마이그레이션하기 전에 스키마 코드를 최적화하도록 지원합니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 환경의 소스 Oracle 8i 또는 9i 데이터베이스
+ Amazon Elastic Compute Cloud(Amazon EC2)에서 스테이지하기 위한 [Oracle Database 12c 릴리스 2](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/index.html)(12CR2)
+ Quest SharePlex 7.6.3(상용 등급)

**제한 사항 **
+ [RDS for Oracle 제한 사항](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Concepts.limitations.html)

**제품 버전**
+ 소스 데이터베이스: Oracle 8i 또는 9i
+ 스테이징 데이터베이스용 Oracle 12CR2(Amazon RDS for Oracle 버전과 일치해야 함)
+ 대상 데이터베이스의 경우 Oracle 12CR2 이상(Amazon RDS for Oracle)

## 아키텍처
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms-architecture"></a>

**소스 기술 스택  **
+ Oracle 8i 또는 9i 데이터베이스
+ SharePlex

**대상 기술 스택**
+ Amazon RDS for Oracle

**마이그레이션 아키텍처**

다음 다이어그램은 온프레미스 환경에서 AWS 클라우드의 Amazon RDS for Oracle DB 인스턴스로 Oracle 8i 또는 9i 데이터베이스를 마이그레이션하는 방법을 보여줍니다.

![\[온프레미스 Oracle 데이터베이스를 AWS의 Amazon RDS로 마이그레이션하는 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6e07d586-fd74-4f3d-8e81-79dd55c445c3/images/36e1a5ff-908b-4cb7-96f7-997eb105f1d6.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 아카이브 로그 모드, 강제 로깅 및 추가 로깅으로 Oracle 원본 데이터베이스를 활성화합니다.

1. 복구 관리자(RMAN) 특정 시점으로 복구 및 [FLASHBACK\$1SCN](https://docs.oracle.com/database/121/SUTIL/GUID-D408B112-1A81-4F68-BEFF-7403A9588DDB.htm#SUTIL849)을 사용하여 Oracle 원본 데이터베이스에서 Oracle 스테이징 데이터베이스를 복원합니다.

1. (RMAN에서 사용된) `FLASHBACK_SCN`을 사용하여 Oracle 원본 데이터베이스에서 리두 로그를 읽도록 SharePlex를 구성합니다.

1. SharePlex 복제를 시작하여 Oracle 원본 데이터베이스의 데이터를 Oracle 스테이징 데이터베이스와 동기화합니다.

1. `FLASHBACK_SCN`과 함께 EXPDP 및 IMPDP를 사용하여 Amazon RDS for Oracle 대상 데이터베이스를 복원합니다.

1. (EXPDP에서 사용한) `FLASHBACK_SCN`을 사용하여 AWS DMS와 해당 소스 작업을 Oracle 스테이징 데이터베이스로 구성하고, Amazon RDS for Oracle을을 대상 데이터베이스로 구성합니다.

1. AWS DMS 작업을 시작하여 Oracle 스테이징 데이터베이스의 데이터를 Oracle 대상 데이터베이스로 동기화합니다.

## 도구
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms-tools"></a>
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스(DB)를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 데이터 스토어를 마이그레이션할 수 있습니다.
+ [Quest SharePlex](https://support.quest.com/shareplex/11.0/technical-documents)는 가동 중지 시간을 최소화하고 데이터 손실 없이 데이터를 이동할 수 있는 Oracle 간 데이터 복제 도구입니다.
+ [복구 관리자(RMAN)](https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmquick.htm)는 데이터베이스에서 백업 및 복구 작업을 수행하는 Oracle Database 클라이언트입니다. 데이터베이스 파일의 백업, 복원 및 복구를 대폭 단순화합니다.
+ [데이터 펌프 내보내기](https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#SUTIL823)를 이용하면 데이터와 메타데이터를 덤프 파일 모음이라는 운영 체제 파일 모음에 업로드할 수 있습니다. 덤프 파일 세트는 [데이터 펌프 가져오기](https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300) 유틸리티 또는 [DBMS\$1DATAPUMP](https://docs.oracle.com/database/121/ARPLS/d_datpmp.htm#ARPLS356) 패키지를 통해서만 가져올 수 있습니다.

## 에픽
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms-epics"></a>

### Amazon EC2에 SharePlex 및 Oracle 스테이징 데이터베이스를 설정합니다.
<a name="set-up-shareplex-and-the-oracle-staging-database-on-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.html) | Oracle 관리 | 
| 스테이징 데이터베이스를 준비합니다. | Oracle 8i 또는 9i 데이터베이스 소스 환경에서 RMAN 백업을 가져와 Oracle 12CR2 업그레이드로 복원할 수 있도록 Oracle 스테이징 데이터베이스를 준비합니다.자세한 내용은 Oracle 설명서의 [Oracle 9i 복구 관리자 사용 설명서](https://docs.oracle.com/cd/B10500_01/server.920/a96566/toc.htm) 및 [데이터베이스 백업 및 복구 사용](https://docs.oracle.com/database/121/BRADV/rcmcomre.htm#BRADV8005) 설명서를 참조하세요. | Oracle 관리 | 
| 셰어플렉스를 구성합니다. | SharePlex 소스를 온프레미스 Oracle 8i 또는 9i 데이터베이스로 구성하고, 대상을 Amazon EC2에서 호스팅되는 Oracle 12CR2 스테이징 데이터베이스로 구성합니다. | SharePlex, Oracle 관리 | 

### Amazon RDS for Oracle을 대상 환경으로 설정합니다.
<a name="set-up-amazon-rds-for-oracle-as-your-target-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle DB 인스턴스를 생성합니다. | Amazon RDS for Oracle 데이터베이스를 생성한 다음 Oracle 12CR2를 데이터베이스에 연결합니다.자세한 내용은 Amazon RDS 설명서의 [Oracle DB 인스턴스 생성 및 Oracle DB 인스턴스의 데이터베이스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)을 참조하세요. | DBA | 
| 스테이징 데이터베이스에서 Amazon RDS for Oracle을 복원합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.html)자세한 내용은 Oracle 설명서의 [54 DBMS\$1DATAPUMP](https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/DBMS_DATAPUMP.html#GUID-AEA7ED80-DB4A-4A70-B199-592287206348)를 참조하세요. | DBA | 

### AWS DMS 설정
<a name="set-up-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스의 엔드포인트를 생성합니다. | Oracle 스테이징 데이터베이스의 소스 엔드포인트와 Amazon RDS for Oracle 데이터베이스의 대상 엔드포인트를 생성합니다.자세한 내용은 AWS 지식 센터에서 [AWS DMS를 사용하여 소스 또는 대상 엔드포인트를 생성하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/create-source-target-endpoints-aws-dms/)를 참조하세요. | DBA | 
| 복제 인스턴스를 생성합니다. | AWS DMS를 사용하여 Oracle 스테이징 데이터베이스의 복제 인스턴스를 Amazon RDS for Oracle 데이터베이스로 시작합니다.자세한 내용은 AWS 지식 센터에서 [AWS DMS 복제 인스턴스를 생성하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/create-aws-dms-replication-instance/)를 참조하세요. | DBA | 
| 복제 태스크를 생성하고 시작합니다. | (EXPDP를 통해 전체 로드가 이미 발생했으므로) EXPDP에서 `FLASHBACK_SCN`을 사용하여 변경 데이터 캡처 (CDC)를 위한 AWS DMS 복제 태스크를 생성합니다.[태스크 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)에 대한 자세한 내용은 AWS DMS 설명서를 참조하세요. | DBA | 

### Amazon RDS for Oracle로 전환
<a name="cut-over-to-amazon-rds-for-oracle"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 워크로드를 중지하세요. | 계획된 전환 기간 동안 애플리케이션 서버와 해당 애플리케이션을 중지하세요. | 앱 개발자, DBA | 
| 온프레미스 Oracle 스테이징 데이터베이스와 EC2 인스턴스의 동기화를 확인합니다. | 온프레미스 원본 데이터베이스에서 몇 번의 로그 전환을 수행하여 SharePlex 복제 인스턴스에서 Amazon EC2의 Oracle 스테이징 데이터베이스로 복제 작업에 대한 모든 메시지가 게시되었는지 확인합니다.자세한 내용은 Oracle 설명서의 [6.4.2 로그 파일 전환](https://docs.oracle.com/database/121/ADMQS/GUID-E30B4C65-2AC7-4A44-A58C-D3C121EB152F.htm#ADMQS12075)을 참조하세요. | DBA | 
| Oracle 스테이징 데이터베이스와 Amazon RDS for Oracle 데이터베이스의 동기화를 확인합니다. | 모든 AWS DMS 태스크에 지연 및 오류가 없는지 확인한 다음 태스크의 검증 상태를 확인합니다. | DBA | 
| SharePlex와 Amazon RDS의 복제를 중지하세요. | SharePlex와 AWS DMS 복제 모두에서 오류가 표시되지 않는 경우 두 복제를 모두 중지하세요. | DBA | 
| Amazon RDS에 애플리케이션을 다시 매핑합니다. | Amazon RDS for Oracle 엔드포인트 세부 정보를 애플리케이션 서버 및 해당 애플리케이션과 공유한 다음 애플리케이션을 시작하여 비즈니스 운영을 재개합니다. | 앱 개발자, DBA | 

### AWS 대상 환경 테스트
<a name="test-the-aws-target-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS에서 Oracle 스테이징 데이터베이스 환경을 테스트하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.html) | SharePlex, Oracle 관리 | 
| 아마존 RDS 환경을 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.html)자세한 내용은 Amazon RDS 설명서의 [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)에서 참조하세요. | Oracle 관리 | 

## 관련 리소스
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms-resources"></a>
+ [확신을 갖고 마이그레이션하세요.](https://aws.amazon.com/cloud-migration/)
+ [Amazon EC2](https://aws.amazon.com/ec2/)
+ [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/)
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)
+ [AWS DMS 마이그레이션 디버깅: 문제가 발생했을 때 대처 방법(1부)](https://aws.amazon.com/blogs/database/debugging-your-aws-dms-migrations-what-to-do-when-things-go-wrong-part-1/)
+ [AWS DMS 마이그레이션 디버깅: 문제가 발생했을 때 대처 방법(2부)](https://aws.amazon.com/blogs/database/debugging-your-aws-dms-migrations-what-to-do-when-things-go-wrong-part-2/)
+ [AWS DMS 마이그레이션 디버깅: 문제가 발생했을 때 대처 방법 (3부)](https://aws.amazon.com/blogs/database/debugging-your-aws-dms-migrations-what-to-do-when-things-go-wrong-part-3/)
+ [데이터베이스 복제를 위한 SharePlex](https://aws.amazon.com/marketplace/pp/B07943W4MJ)
+ [SharePlex: 모든 환경을 위한 데이터베이스 복제](https://www.youtube.com/watch?v=ygS_ouUaNus)

# 온프레미스 MySQL 데이터베이스를 Amazon EC2로 마이그레이션
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2"></a>

*Lorenzo Mota, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-summary"></a>

이 패턴은 온프레미스 MySQL 데이터베이스를 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 MySQL 데이터베이스로 마이그레이션하기 위한 지침을 제공합니다. 이 패턴은 마이그레이션에 AWS Database Migration Service (AWS DMS) 또는 **mysqldump**와 같은 기본 MySQL 도구를 사용하는 방법을 설명합니다. MySQL DB 인스턴스로의 전체 데이터베이스 마이그레이션에 중점을 둡니다.

이 패턴은 주로 DBA와 솔루션스 아키텍트를 위한 것입니다. 소규모 또는 대규모 프로젝트, 테스트 또는 최종 마이그레이션 단계에서 사용할 수 있습니다. 프로덕션 환경에서이 패턴을 사용하기 전에 테스트 주기를 하나 이상 실행하는 것이 좋습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 MySQL 소스 데이터베이스 

**제품 버전**
+ MySQL 버전 5.5 이상
+ Amazon EC2에서 지원하는 대상 운영 체제는 [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)를 참조하세요.

## 아키텍처
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 MySQL 데이터베이스

**대상 기술 스택 **
+ Amazon EC2의 MySQL 데이터베이스 인스턴스

**데이터 마이그레이션 방법**
+ AWS DMS
+ [mysqldump](https://dev.mysql.com/doc/refman/en/mysqldump.html)와 같은 기본 MySQL 도구 또는 [Percona XtraBackup](https://www.percona.com/mysql/software/percona-xtrabackup)과 같은 서드 파티 도구

**대상 아키텍처 **

다음 다이어그램은 전환 후 대상 Amazon EC2 구현을 보여줍니다.

![\[대기 MySQL DB 인스턴스로 복제되는 Amazon EC2의 MySQL DB 인스턴스입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d22b3e25-4d3b-4bd7-ad07-501748d67752/images/34cab6f9-9107-4c3b-98ec-a6d7fa9f298a.png)


 

**AWS 데이터 마이그레이션 아키텍처**

*DMS 사용:*

다음 다이어그램은 전환까지 대상 MySQL 데이터베이스에 전체 및 증분 변경 사항을 전송하기 AWS DMS 위한를 기반으로 하는 데이터 마이그레이션 워크플로를 보여줍니다. 온프레미스에서 로의 네트워크 연결은 SQL 클라이언트의 요구 사항에 AWS 따라 달라지며이 패턴의 범위를 벗어납니다.

![\[AWS DMS를 사용하여 Amazon EC2의 대상 MySQL DB로 데이터를 전송합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d22b3e25-4d3b-4bd7-ad07-501748d67752/images/c906c45d-fac5-4bb9-b8c8-55e2f9f05fd8.png)


*다른 MySQL 도구 사용:*

다음 다이어그램은 MySQL 도구를 사용하여 온프레미스 데이터베이스에서 내보내기 덤프 파일을 생성하는 것을 기반으로 하는 데이터 마이그레이션 워크플로를 보여줍니다. 이러한 파일은 Amazon Simple Storage Service(Amazon S3)로 이동하여 전환 전에 대상 MySQL 데이터베이스로 가져옵니다. 온프레미스에서 로의 네트워크 연결은 SQL 클라이언트의 요구 사항에 AWS 따라 달라지며이 패턴의 범위를 벗어납니다.

![\[네이티브 MySQL 도구를 사용하여 Amazon EC2의 대상 MySQL DB로 데이터를 전송합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d22b3e25-4d3b-4bd7-ad07-501748d67752/images/18e88877-7879-4a99-b985-25c56bf7c35f.png)


참고:
+ 중단 시간 고려 사항 및 최종 전환을 위한 데이터베이스 크기에 따라 AWS DMS 또는 다른 변경 데이터 캡처(CDC) 도구를 사용하여 전환 시간을 최소화할 수 있습니다. 와 같은 CDC 도구를 사용하는 경우 AWS DMS몇 분 만에 대상 데이터베이스로 마이그레이션할 수 있습니다. 
+ 데이터베이스 크기와 네트워크 지연 시간으로 인해 짧은 전환 마이그레이션 기간이 허용되는 경우 **mysqldump**를 사용하는 오프라인 전략으로 충분할 수 있습니다. (대략적인 시간을 확인하려면 테스트를 수행하는 것이 좋습니다.)
+ 일반적으로를 통한 CDC 전략에는 오프라인 옵션보다 더 많은 모니터링과 복잡성이 AWS DMS 필요합니다.

## 도구
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-tools"></a>

**AWS 서비스**
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 여러 소스 및 대상 데이터베이스를 지원합니다. 에서 지원하는 MySQL 소스 및 대상 데이터베이스에 대한 자세한 내용은 [ MySQL 호환 데이터베이스를의 소스로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html) 및 MySQL 호환 데이터베이스를의 대상으로 사용을 AWS DMS참조하세요. [ MySQL AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html) 소스 데이터베이스가에서 지원되지 않는 경우 데이터를 마이그레이션할 다른 방법을 선택해야 AWS DMS합니다.

**기타 도구**
+ [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)는 백업 또는 마이그레이션을 위해 MySQL 데이터베이스에서 덤프 파일을 생성하는 MySQL 유틸리티입니다.
+ [Percona XtraBackup](https://www.percona.com/mysql/software/percona-xtrabackup)은 MySQL 데이터베이스의 논블로킹 백업을 수행하기 위한 오픈 소스 유틸리티입니다.

## 에픽
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 버전을 검증합니다. | 소스 및 대상 데이터베이스의 버전을 확인합니다. 에서 지원하는 MySQL 버전에 대한 자세한 내용은 AWS DMS 설명서의 [소스 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html) 및 [대상 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)을 AWS DMS참조하세요. | DBA | 
| 대상 운영 체제를 식별합니다. | 대상 운영 체제의 버전을 결정합니다. Amazon EC2에서 지원하는 대상 운영 체제 목록은 [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)를 참조하세요. | DBA, 시스템 관리자 | 
| 하드웨어 요구 사항을 식별합니다. | MySQL 호환성 목록 및 용량 요구 사항을 기반으로 대상 서버 인스턴스의 하드웨어 요구 사항을 결정합니다. | DBA, 시스템 관리자 | 
| 스토리지 요구 사항을 식별합니다. | 대상 데이터베이스의 스토리지 유형과 용량을 결정합니다. | DBA, 시스템 관리자 | 
| 네트워크 요구 사항을 확인합니다. | 지연 시간 및 대역폭과 같은 네트워크 요구 사항을 결정합니다. | DBA, 시스템 관리자 | 
| 대상 인스턴스 유형을 선택합니다. | 용량, 스토리지 특성, 네트워킹 특성에 따라 [대상 인스턴스 유형](https://aws.amazon.com/rds/instance-types/)을 선택합니다. | DBA, 시스템 관리자 | 
| 보안 요구 사항을 식별합니다. | 소스 및 대상 데이터베이스의 네트워크 또는 호스트 액세스 보안 요구 사항을 결정합니다. | DBA, 시스템 관리자 | 
| 사용자를 식별합니다. | MySQL 소프트웨어 설치에 필요한 운영 체제 사용자의 목록을 결정합니다. 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/mysql-security-excerpt/en/access-control.html)를 참조하세요. | DBA, 시스템 관리자 | 
| 백업 전략을 결정합니다. |  | DBA | 
| 가용성 요구 사항을 결정합니다. |  | DBA | 
| 애플리케이션 마이그레이션 또는 전환 전략을 식별합니다. |  | DBA, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서브넷이 있는 Virtual Private Cloud(VPC)를 생성합니다. | 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이, 서브넷을 구성합니다. 자세한 내용은 Amazon VPC 설명서의 [VPC 구성 옵션](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc-options.html)을 참조하세요. | 시스템 관리자 | 
| 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 생성합니다. | 요구 사항에 따라 포트(MySQL의 기본값은 3306) 및 CIDR 범위 또는 특정 IP를 구성합니다. | 시스템 관리자 | 
| EC2 인스턴스를 구성하고 시작합니다. | 지침은 Amazon EC2 설명서의 [EC2 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)을 참조하세요. | 시스템 관리자 | 

### MySQL 소프트웨어 설치
<a name="install-mysql-software"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자와 그룹을 생성합니다. | 서버 및 데이터베이스에 액세스해야 하는 운영 체제 사용자 및 그룹을 생성합니다. 자세한 내용은 MySQL 설명서의 [ 액세스 제어 및 계정 관리](https://dev.mysql.com/doc/refman/en/access-control.html) 단원을 참조하십시오. | DBA, 시스템 관리자 | 
| MySQL을 다운로드합니다. | MySQL 소프트웨어를 다운로드합니다. 지침 및 바이너리는 MySQL 설명서의 [MySQL 설치](https://dev.mysql.com/doc/refman/en/installing.html)를 참조하세요. | DBA, 시스템 관리자 | 
| EC2 인스턴스에 MySQL을 설치하고 서버를 구성합니다. | EC2 인스턴스에 연결하고 MySQL 소프트웨어를 설치합니다. 자세한 내용은 Amazon EC2 설명서의 [EC2 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)을 참조하세요. | DBA, 시스템 관리자 | 

### 데이터 마이그레이션 - 옵션 1
<a name="migrate-data-option-1"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 네이티브 MySQL 또는 서드 파티 도구를 사용하여 데이터를 마이그레이션합니다. | 이 옵션은 네이티브 MySQL 도구 또는 서드 파티 도구를 사용하여 데이터베이스 객체 및 데이터를 마이그레이션합니다. 지침은 [mysqldump](https://dev.mysql.com/doc/refman/en/mysqldump.html) 또는 [Percona XtraBackup](https://docs.percona.com/percona-xtrabackup/2.4/index.html)(물리적 마이그레이션용)에 대한 설명서를 참조하세요. 이러한 도구 사용에 대한 자세한 내용은 AWS 블로그 게시물 [Migration options for MySQL to Amazon RDS for MySQL 또는 Amazon Aurora MySQL](https://aws.amazon.com/blogs/database/migration-options-for-mysql-to-amazon-rds-for-mysql-or-amazon-aurora-mysql/)을 참조하세요. | DBA | 

### 데이터 마이그레이션 - 옵션 2
<a name="migrate-data-option-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 를 사용하여 데이터를 마이그레이션합니다 AWS DMS. | 자세한 내용은 AWS DMS 설명서의 [의 상위 수준 보기를 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.HighLevelView.html) 참조하세요. | DBA | 

### 전환 준비
<a name="prepare-for-cutover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 객체 수를 수집합니다. | 소스 데이터베이스와 새 대상 데이터베이스에서 객체 수를 수집합니다. 대상 데이터베이스에서 불일치를 모두 수정합니다. | DBA | 
| 종속성을 확인합니다. | 다른 데이터베이스와의 종속성(링크)이 여전히 유효하고 올바르게 작동하는지 확인합니다. | DBA | 
| 테스트합니다. | 이것이 테스트 주기인 경우 쿼리 테스트를 수행하고, 지표를 수집하며, 문제가 있으면 해결합니다. | DBA | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클라이언트를 이동합니다. | 애플리케이션 클라이언트를 새 인프라로 전환합니다. | DBA, 앱 소유자, 시스템 관리자 | 
| 지원을 제공합니다. | 기능적 애플리케이션 테스트 중에 지원을 제공합니다. | DBA | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 종료합니다. |  AWS DMS 복제 인스턴스 및 기타 임시 AWS 리소스를 종료합니다. | DBA, 시스템 관리자 | 
| 프로젝트 문서를 검토합니다. | 프로젝트 문서를 검토하고 검증하세요. | DBA, 앱 소유자, 시스템 관리자 | 
| 지표를 수집합니다. | 마이그레이션 시간, 도구 지원 변경과 비교한 수동 변경 비율, 비용 절감 등의 지표를 수집합니다. | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 닫습니다. | 마이그레이션 프로젝트를 종료하고 피드백을 제공합니다. | DBA, 앱 소유자, 시스템 관리자 | 
| 소스 데이터베이스를 폐기합니다. | 온프레미스 MySQL 데이터베이스를 폐기합니다. | DBA, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-resources"></a>

**참조**
+ [Amazon EC2 설명서](https://docs.aws.amazon.com/ec2/)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/)
+ [Amazon EC2 요금](https://aws.amazon.com/ec2/pricing/)
+ [AWS DMS Step-by-Step 연습](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
+ [Percona XtraBackup](https://www.percona.com/mysql/software/percona-xtrabackup)

**자습서 및 동영상**
+ [시작하기 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon EC2 소개 - AWS를 사용한 탄력적 클라우드 서버 및 호스팅](https://www.youtube.com/watch?v=TsRBftzZsQo)(동영상)

# 암호화를 사용하지 않는 인스턴스가 있는지 Amazon Aurora를 모니터링
<a name="monitor-amazon-aurora-for-instances-without-encryption"></a>

*Mansi Suratwala, Amazon Web Services*

## 요약
<a name="monitor-amazon-aurora-for-instances-without-encryption-summary"></a>

이 패턴은 암호화를 켜지 않고 Amazon Aurora 인스턴스가 생성될 때 자동 알림을 설정하도록 배포할 수 있는 Amazon Web Services(AWS) CloudFormation 템플릿을 제공합니다.

Aurora는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다. 일부 워크로드의 경우 Aurora은 기존 애플리케이션을 거의 변경하지 않고도 MySQL의 처리량을 최대 5배, PostgreSQL의 처리량을 최대 3배 제공할 수 있습니다.

CloudFormation 템플릿은 Amazon CloudWatch Events 이벤트 및 AWS Lambda 함수를 만듭니다. 이 이벤트는 AWS CloudTrail을 사용하여 Aurora 인스턴스 생성 또는 기존 인스턴스의 특정 시점 복원을 모니터링합니다. Cloudwatch Events 이벤트는 암호화의 활성화 여부를 확인하는 Lambda 함수를 시작합니다. 암호화가 켜져 있지 않은 경우, Lambda 함수는 Amazon Simple Notification Service(SNS) 알림을 전송하여 위반 사실을 알립니다. 

## 사전 조건 및 제한 사항
<a name="monitor-amazon-aurora-for-instances-without-encryption-prereqs"></a>

**필수 조건******
+ 활성 상태의 AWS 계정

**제한 사항 **
+ 이 서비스 제어는 Amazon Aurora 인스턴스에서만 작동합니다. 다른 Amazon Relational Database Service(RDS) 인스턴스는 지원하지 않습니다.
+ CloudFormation 템플릿은 `CreateDBInstance`** **및 `RestoreDBClusterToPointInTim`** **작업에 대해서만 배포해야 합니다. 

**제품 버전**
+ Amazon Aurora에서 지원되는 PostgreSQL 버전
+ Amazon Aurora에서 지원되는 MySQL 버전

## 아키텍처
<a name="monitor-amazon-aurora-for-instances-without-encryption-architecture"></a>

**대상 기술 스택  **
+ Amazon Aurora
+ AWS CloudTrail
+ Amazon CloudWatch()
+ AWS Lambda
+ Amazon Simple Storage Service (S3)
+ Amazon SNS

**대상 아키텍처 **

![\[CloudTrail, CloudWatch CloudWatch Events, Lambda 및 SNS 메시지를 간접 호출하여 암호화 없이 Aurora 시작.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/de1528b8-a5a4-4c66-8ab3-7d9863572cbc/images/7dcab41a-d805-4bb0-99d1-1dcef37c4e55.png)


**자동화 및 규모 조정**

리전 및 계정별로 CloudFormation 템플릿을 여러 번 사용할 수 있습니다. 각 리전 또는 계정에서 한 번만 실행해야 합니다.

## 도구
<a name="monitor-amazon-aurora-for-instances-without-encryption-tools"></a>

**도구**
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) – Amazon Aurora는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) – AWS CloudTrail은 AWS 계정의 거버넌스, 규정 준수, 운영 및 위험 감사 관리를 지원합니다. 사용자, 역할 또는 AWS 서비스가 수행하는 작업은 CloudTrail에 이벤트로 기록됩니다. 
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) – Amazon CloudWatch Events는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다. 
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)-AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) – Amazon Simple Storage Service(S3)는 웹 사이트, 모바일 애플리케이션, 백업 및 데이터 레이크를 포함하여 다양한 스토리지 솔루션에 사용할 수 있는 확장성이 뛰어난 객체 스토리지 서비스입니다.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)-Amazon Simple Notification Service(SNS)은 Lambda, HTTP, 이메일, 모바일 푸시 알림 및 모바일 문자 메시지(SMS)를 사용하여 메시지를 전송하는 관리형 서비스입니다. 

**코드 **

프로젝트의 .zip 파일은 첨부 파일로 제공됩니다.

## 에픽
<a name="monitor-amazon-aurora-for-instances-without-encryption-epics"></a>

### Lambda 스크립트용 S3 버킷을 생성
<a name="create-the-s3-bucket-for-the-lambda-script"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 정의합니다. | Amazon S3 콘솔을 열고 S3 버킷을 선택하거나 생성합니다. 이 S3 버킷은 Lambda 코드 .zip 파일을 호스팅합니다. S3 버킷은 Aurora와 같은 리전에 있어야 합니다. S3 버킷 이름에는 선행 슬래시를 포함할 수 없습니다. | 클라우드 아키텍트 | 

### Lambda 코드를 S3 버킷에 업로드
<a name="upload-the-lambda-code-to-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 코드를 업로드합니다. | *첨부 파일* 섹션에 제공된 Lambda 코드 .zip 파일을 사용자가 정의한 S3 버킷에 업로드합니다. | 클라우드 아키텍트 | 

### CloudFormation 템플릿 배포
<a name="deploy-the-cloudformation-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CloudFormation 템플릿을 배포합니다. | CloudFormation 콘솔에서 이 패턴의 첨부 파일로 제공된 `RDS_Aurora_Encryption_At_Rest.yml` CloudFormation 템플릿을 배포합니다. 다음 에픽에서 템플릿 파라미터에 대한 값을 입력합니다. | 클라우드 아키텍트 | 

### CloudFormation 템플릿에서 파라미터 작성
<a name="complete-the-parameters-in-the-cloudformation-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷 이름을 제공합니다. | 첫 번째 에픽에서 생성하거나 선택한 S3 버킷의 이름을 입력합니다. | 클라우드 아키텍트  | 
| S3 키를 입력합니다. | S3 버킷의 Lambda 코드 .zip 파일 위치를 선행 슬래시 없이 입력합니다(예: `<directory>/<file-name>.zip`). | 클라우드 아키텍트  | 
| 이메일 주소를 입력합니다. | Amazon SNS 알림을 수신할 활성 이메일 주소를 입력합니다. | 클라우드 아키텍트  | 
| 로깅 수준을 정의합니다. | Lambda 함수의 로깅 수준 및 빈도를 정의합니다. `Info`는 애플리케이션 진행 상황에 대한 자세한 정보 메시지를 지정합니다. `Error`는 애플리케이션을 계속 실행할 수 있게 해주는 오류 이벤트를 지정합니다. `Warning`은 잠재적으로 유해한 상황을 지정합니다. | 클라우드 아키텍트 | 

### 구독 확인
<a name="confirm-the-subscription"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 구독을 확인합니다. | 템플릿이 성공적으로 배포되면 입력한 이메일 주소로 구독 이메일 메시지가 전송됩니다. 알림을 받으려면 이 이메일 구독을 확인해야 합니다.  | 클라우드 아키텍트 | 

## 관련 리소스
<a name="monitor-amazon-aurora-for-instances-without-encryption-resources"></a>
+ [S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)
+ [S3 버킷에 파일 업로드](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) 
+ [Amazon Aurora DB 클러스터 생성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html)
+ [AWS CloudTrail을 사용하여 AWS API 직접 호출에서 트리거되는 CloudWatch Events 규칙 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-CloudTrail-Rule.html)

## 첨부
<a name="attachments-de1528b8-a5a4-4c66-8ab3-7d9863572cbc"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/de1528b8-a5a4-4c66-8ab3-7d9863572cbc/attachments/attachment.zip) 파일의 압축을 풉니다.

# Amazon CloudWatch를 사용하여 Oracle GoldenGate 로그를 모니터링
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch"></a>

*Chithra Krishnamurthy, Amazon Web Services*

## 요약
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch-summary"></a>

Oracle GoldenGate는 Oracle 데이터베이스를 위한 Amazon Relational Database Service(RDS) 간 또는 Amazon Elastic Compute Cloud(Amazon EC2)에 호스팅된 Oracle 데이터베이스 간에 실시간 복제를 제공합니다. 단방향 복제와 양방향 복제를 모두 지원합니다.

Oracle GoldenGate를 복제에 사용하는 경우 Oracle GoldenGate 프로세스가 실행 중이고 소스 및 대상 데이터베이스가 동기화되었는지 확인하세요.

이 패턴은 GoldenGate 오류 로그에 대한 Amazon CloudWatch 모니터링을 구현하는 단계와 특정 이벤트(예: `STOP` 또는 `ABEND`) 발생 시 복제를 신속하게 재개하기 위한 적절한 조치를 취할 수 있도록 알림을 보내는 경보를 설정하는 방법을 설명합니다.

## 사전 조건 및 제한 사항
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch-prereqs"></a>

**사전 조건**
+ GoldenGate는 EC2 인스턴스에 설치 및 구성되었으므로 해당 EC2 인스턴스에 CloudWatch 모니터링을 설정할 수 있습니다. 양방향 복제를 위해 AWS 리전 전체에서 GoldenGate를 모니터링하려면 GoldenGate 프로세스가 실행 중인 각 EC2 인스턴스에 CloudWatch 에이전트를 설치해야 합니다.

**제한 사항**
+ 이 패턴은 CloudWatch를 사용하여 GoldenGate 프로세스를 모니터링하는 방법을 설명합니다. CloudWatch는 복제 중에 발생하는 복제 지연 또는 데이터 동기화 문제를 모니터링하지 않습니다. [GoldenGate 설명서](https://docs.oracle.com/en/middleware/goldengate/core/19.1/index.html)에 설명된 대로 별도의 SQL 쿼리를 실행하여 복제 지연 또는 데이터 관련 오류를 모니터링해야 합니다.

**제품 버전**
+ 이 문서는 Linux x86-64에서 Oracle용 Oracle GoldenGate 19.1.0.0.4의 구현을 기반으로 합니다. 그러나 이 솔루션은 GoldenGate의 모든 주요 버전에 적용할 수 있습니다.

## 아키텍처
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch-architecture"></a>

**대상 기술 스택**
+ EC2 인스턴스에 설치된 Oracle용 GoldenGate 바이너리
+ Amazon CloudWatch
+ Amazon Simple Notification Service(SNS)

**대상 아키텍처**

![\[AWS의 GoldenGate 로그를 모니터링하기 위한 대상 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/973a71d5-b6b3-4a2b-813e-cb4d8fd51ba5/images/1781aa9b-77b3-40c4-bc54-3cb91400899c.png)


## 도구
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch-tools"></a>

**서비스**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)는 GoldenGate 오류 로그를 모니터링하는 데 이 패턴으로 사용되는 모니터링 서비스입니다.
+ [Amazon SNS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)는 이메일 알림을 보내는 데 이 패턴으로 사용되는 메시지 알림 서비스입니다.

**기타 도구**
+ [Oracle GoldenGate](https://docs.oracle.com/en/middleware/goldengate/core/19.1/index.html)는 Amazon RDS for Oracle 데이터베이스 또는 Amazon EC2에 호스팅된 Oracle 데이터베이스에 사용할 수 있는 데이터 복제 도구입니다.

**높은 수준의 구현 단계**

1. CloudWatch 에이전트를 위한 AWS Identity and Access Management(IAM) 역할을 생성합니다.

1. IAM 역할을 GoldenGate 오류 로그가 생성되는 EC2 인스턴스에 추가합니다.

1. EC2 인스턴스에 CloudWatch 에이전트를 설치합니다.

1. CloudWatch 에이전트 구성 파일 구성: `awscli.conf` 및 `awslogs.conf`.

1. CloudWatch 에이전트를 시작합니다.

1. 로그 그룹에서 지표 필터를 생성합니다.

1. Amazon SNS을 설정합니다.

1. 지표 필터에 대한 경보를 생성합니다. Amazon SNS는 해당 필터가 이벤트를 포착하면 이메일 경보를 보냅니다.

자세한 지침은 다음 섹션을 참조하세요.

## 에픽
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch-epics"></a>

### 1단계. CloudWatch 에이전트에 대한 IAM 역할을 생성
<a name="step-1-create-an-iam-role-for-the-cloudwatch-agent"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IAM 역할을 생성합니다. | AWS 리소스에 액세스하려면 권한이 필요하므로 각 서버에서 CloudWatch 에이전트를 실행하는 데 필요한 권한을 포함하도록 IAM 역할을 생성합니다.IAM 역할을 생성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html) | AWS 일반 | 

### 2단계. IAM 역할을 GoldenGate EC2 인스턴스에 첨부
<a name="step-2-attach-the-iam-role-to-the-goldengate-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IAM 역할을 GoldenGate 오류 로그가 생성되는 EC2 인스턴스에 추가합니다. | GoldenGate에서 생성된 오류 로그는 CloudWatch에 채워지고 모니터링되어야 하므로, 1단계에서 생성한 IAM 역할을 GoldenGate가 실행 중인 EC2 인스턴스에 연결해야 합니다.IAM 역할을 인스턴스에 연결하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html) | AWS 일반 | 

### 3\$15단계. 기존 EC2 인스턴스에 CloudWatch Logs 에이전트를 설치 및 구성
<a name="steps-3-5-install-and-configure-the-cloudwatch-agent-on-the-goldengate-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| GoldenGate EC2 인스턴스에 CloudWatch 에이전트를 설치합니다. | 에이전트를 설치하려면 다음 명령을 실행합니다.<pre>sudo yum install -y awslogs</pre> | AWS 일반 | 
| 에이전트 구성 파일을 편집합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html) | AWS 일반 | 
| CloudWatch 에이전트를 시작합니다. | 에이전트를 시작하려면 다음 명령을 실행합니다.<pre>$ sudo service awslogsd start</pre>에이전트를 시작한 후 CloudWatch 콘솔에서 로그 그룹을 볼 수 있습니다. 로그 스트림에 파일 내용이 포함되어 있습니다. | AWS 일반 | 

### 6단계. 로그 그룹에서 지표 필터를 생성
<a name="step-6-create-metric-filters-for-the-log-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| ABEND 및 STOPTED 키워드에 대한 지표 필터를 생성하세요. | 로그 그룹에 대한 지표 필터를 생성하면 필터가 오류 로그를 식별할 때마다 경보가 시작되고 Amazon SNS 구성을 기반으로 이메일 알림이 전송됩니다.지표 필터를 생성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html) | CloudWatch | 

### 7단계. Amazon SNS 설정
<a name="step-7-set-up-amazon-sns"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SNS 주제를 생성합니다. | 이 단계에서는 지표 필터에 대한 경보를 생성하도록 Amazon SNS를 구성합니다.SNS 주제를 생성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html) | Amazon SNS | 
| 구독을 생성합니다. | 주제 구독을 생성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html)Amazon SNS가 웹 브라우저를 열고 구독 ID와 함께 구독 확인을 표시합니다. | Amazon SNS | 

### 8단계. 경보를 생성하여 지표 필터에 대한 알림을 전송
<a name="step-8-create-an-alarm-to-send-notifications-for-the-metric-filters"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SNS 주제에 대한 경보를 생성하세요. | 로그 그룹 지표 필터를 기반으로 경보 생성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html)이 단계를 완료하고 나면 모니터링 중인 GoldenGate 오류 로그 파일(`ggserr.log`)에서 이러한 패턴이 탐지될 때마다 이메일 알림을 받게 됩니다. | CloudWatch | 

## 문제 해결
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| GoldenGate 오류 로그의 로그 스트림은 CloudWatch로 유입되지 않습니다. | `/etc/awslogs/awslogs.conf` 파일을 확인하여 파일 이름, 로그 그룹 이름 및 날짜/시간 형식을 확인하세요. `ggserror.log`의 날짜 형식과 일치하도록 날짜/시간을 지정해야 합니다. 그렇지 않으면 로그 스트림이 CloudWatch로 유입되지 않습니다. | 

## 관련 리소스
<a name="monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch-resources"></a>
+ [Amazon CloudWatch 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [CloudWatch 에이전트를 사용하여 지표 및 로그 수집](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)
+ [Amazon SNS 설명서](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)

# Amazon RDS for Oracle에서 Oracle Database Enterprise Edition을 Standard Edition 2로 리플랫포밍
<a name="replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle"></a>

*Lanre(Lan-Ray) showunmi, Tarun Chawla, Amazon Web Services*

## 요약
<a name="replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle-summary"></a>

Oracle Database Enterprise Edition(EE)은 많은 기업에서 애플리케이션을 실행하는 데 널리 사용되고 있습니다. 그러나 애플리케이션에서 Oracle Database EE 기능을 거의 또는 전혀 사용하지 않는 경우도 있기 때문에 막대한 라이선스 비용이 발생한다는 근거가 부족합니다. Amazon RDS로 마이그레이션할 때 이러한 데이터베이스를 Oracle Database Standard Edition 2(SE2)로 다운그레이드하면 비용을 절감할 수 있습니다.

이 패턴은 온프레미스에서 [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/)로 마이그레이션할 때 Oracle Database EE에서 Oracle Database SE2로 다운그레이드하는 방법을 설명합니다. 이 패턴에 제시된 절차는 EE Oracle 데이터베이스가 이미 Amazon RDS 또는 [Amazon Elastic Compute Cloud](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)(Amazon EC2) 인스턴스에서 실행 중인 경우에도 적용됩니다.

자세한 내용은 [Oracle 데이터베이스를 Standard Edition 2로 다운그레이드하는 것을 평가](https://docs.aws.amazon.com/prescriptive-guidance/latest/evaluate-downgrading-oracle-edition/welcome.html)하는 방법에 대한 AWS Prescriptive Guidance 가이드를 참조하십시오.

## 사전 조건 및 제한 사항
<a name="replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Oracle Database Enterprise Edition
+ Oracle 데이터베이스에서 SQL 명령에 연결되거나 실해하기 위한 [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/) 또는 SQL\$1Plus과 같은 클라이언트 도구
+ 평가를 수행하기 위한 데이터베이스 사용자의 예는 다음 중 하나입니다.
  + [Schema Conversion Tool(SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 평가를 실행하기 위한 충분한 [권한](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Permissions)을 가진 사용자
  + Oracle 데이터베이스 딕셔너리 테이블에서 SQL 쿼리를 실행하기 위한 충분한 권한을 가진 사용자
+ 데이터베이스 마이그레이션을 수행하기 위한 사용자의 예는 다음 중 하나입니다.
  + [AWS Database Migration Service(DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 실행하기 위한 충분한 [권한](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Self-Managed)을 가진 사용자
  + [Oracle Data Pump 내보내기 및 가져오기를 수행하기 위한 충분한 권한](https://docs.oracle.com/database/121/SUTIL/GUID-8B6975D3-3BEC-4584-B416-280125EEC57E.htm#SUTIL807)을 가진 사용자
  + [Oracle GoldenGate를 실행하기 위한 충분한 권한](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/user_assignment.htm#GIORA546)을 가진 사용자

**제한 사항 **
+ Amazon RDS for Oracle은 최대 데이터베이스 크기를 가집니다. 자세한 내용은 [Amazon RDS DB 인스턴스 스토리지](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)를 참조하세요.

**제품 버전**

이 문서에 설명된 일반 로직은 9i 이상의 Oracle 버전에 적용됩니다. Oracle 데이터베이스용 자체 관리형 데이터베이스 및 Amazon RDS for Oracle 의 지원되는 버전은 [DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)를 참조하십시오.

SCT가 지원되지 않는 경우 기능 사용을 식별하려면 소스 데이터베이스에서 SQL 쿼리를 실행합니다. DMS 및 Oracle Data Pump가 지원되지 않는 이전 버전의 Oracle에서 마이그레이션하려면 [Oracle 내보내기 및 가져오기 유틸리티](https://docs.oracle.com/cd/B19306_01/server.102/b14215/exp_imp.htm)를 사용합니다.

지원되는 버전과 에디션의 현재 목록은 설명서의 [Amazon RDS에서의 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)을 참조하세요. 요금과 지원되는 인스턴스 클래스에 대한 자세한 내용은 [Amazon RDS for Oracle 요금](https://aws.amazon.com/rds/oracle/pricing/)을 참조하세요.

## 아키텍처
<a name="replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle-architecture"></a>

**소스 기술 스택  **
+ 온프레미스 또는 Amazon EC2에서 실행되는 Oracle Database Enterprise Edition

**네이티브 Oracle 도구를 사용한 대상 기술 스택 **
+ Oracle Database SE2를 실행하는 Amazon RDS for Oracle

![\[온프레미스 Oracle DB에서 Amazon RDS로 마이그레이션하는 3단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a1b28050-9bab-4de6-b2a9-b97b3e5070bd/images/bf765c5b-4b12-4a8c-b27c-c5e0bd605dd1.png)


 

1. Oracle Data Pump를 사용하여 데이터를 내보냅니다.

1. 데이터베이스 링크를 통해 Amazon RDS에 덤프 파일을 복사합니다.

1. Oracle Data Pump를 사용하여 Amazon RDS로 덤프 파일을 가져옵니다.

**AWS DMS를 사용한 대상 기술 스택 **
+ Oracle Database SE2를 실행하는 Amazon RDS for Oracle
+ AWS DMS

![\[AWS DMS를 사용하여 온프레미스 Oracle DB에서 Amazon RDS로 마이그레이션하는 4단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a1b28050-9bab-4de6-b2a9-b97b3e5070bd/images/fef4eced-1acb-4303-baaa-5c1c29650935.png)


1. FLASHBACK\$1SCN를 가진 Oracle Data Pump를 사용하여 데이터를 내보냅니다.

1. 데이터베이스 링크를 통해 Amazon RDS에 덤프 파일을 복사합니다.

1. Oracle Data Pump를 사용하여 Amazon RDS로 덤프 파일을 가져옵니다.

1. DMS [변경 데이터 캡쳐(CDC)](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html)를 사용합니다.

## 도구
<a name="replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle-tools"></a>

**서비스**
+ [AWS Database Migration Service(DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 간에 데이터 스토어를 마이그레이션할 수 있습니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 규모를 조정하는 데 도움이 됩니다. 이 패턴은 Amazon RDS for Oracle을 사용합니다.
+ [ SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)** **는 소스 Oracle 데이터베이스의 데이터베이스 스키마를 Amazon RDS for Oracle과 호환되는 형식으로 평가, 변환 및 복사하기 위한 프로젝트 기반 사용자 인터페이스를 제공합니다. SCT를 사용하면 사용자의 라이선스 유형을 Oracle의 Enterprise 에디션에서 Standard 에디션으로 변경함으로써 얻을 수 있는 잠재적인 비용 절감을 분석할 수 있습니다. SCT 보고서의 **라이선스 평가 및 클라우드 지원** 섹션에서는 사용 중인 Oracle 기능에 대한 자세한 정보를 제공하므로 Amazon RDS for Oracle로 마이그레이션하는 동안 정보에 입각한 결정을 내릴 수 있습니다.

**기타 도구**
+ Native Oracle 가져오기 및 내보내기 유틸리티는 Oracle 데이터를 Oracle 데이터베이스의 내부 및 외부로 이동할 수 있습니다. Oracle은 [Original Export and Import](https://docs.oracle.com/cd/B19306_01/server.102/b14215/exp_imp.htm)(이전 릴리스의 경우)와 [Oracle Data Pump Export and Import](https://docs.oracle.com/cd/B19306_01/server.102/b14215/part_dp.htm#CEGJCCHC)(Oracle Database 10g 릴리스 1 이상에서 사용 가능)라는 두 가지 유형의 데이터베이스 가져오기 및 내보내기 유틸리티를 제공합니다.
+ [Oracle GoldenGate](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleGoldenGate.html)는 실시간 복제 기능을 제공하므로 초기 로드 후 대상 데이터베이스를 동기화할 수 있습니다. 이 옵션은 가동 중 애플리케이션 가동 중지 시간을 줄이는 데 도움이 될 수 있습니다.

## 에픽
<a name="replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle-epics"></a>

### 마이그레이션 전 평가하기
<a name="make-a-pre-migration-assessment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션의 데이터베이스 요구 사항을 검증합니다. | 애플리케이션이 Oracle Database SE2에서 실행되도록 인증되었는지 확인합니다. 소프트웨어 공급업체, 개발자 또는 설명서를 확인하세요. | 앱 개발자, DBA, 앱 소유자 | 
| 데이터베이스에서 직접 EE 기능의 사용을 조사합니다. | EE 기능 사용을 결정하려면 다음 중 하나를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle.html) | 앱 소유자, DBA, 앱 개발자 | 
| 운영 활동을 위한 EE 기능의 사용을 식별합니다. | 데이터베이스 또는 애플리케이션 관리자는 운영 활동을 위해 EE 전용 기능을 사용하는 경우가 있습니다. 일반적인 예로는 온라인 유지 관리 활동(인덱스 재빌드, 테이블 이동) 및 배치 작업에 의한 병렬 처리 사용이 있습니다.가능한 경우 작업을 수정하여 이러한 종속성을 완화할 수 있습니다. 이러한 기능의 사용을 식별하고 비용과 이점을 비교하여 결정을 내립니다.[Oracle Database EE와 SE2 기능 비교](https://docs.aws.amazon.com/prescriptive-guidance/latest/evaluate-downgrading-oracle-edition/compare-features.html) 표를 가이드로서 사용하여 Oracle Database SE2에서 사용할 수 있는 기능을 식별합니다. | 앱 개발자, DBA, 앱 소유자 | 
| EE Oracle 데이터베이스의 워크로드 패턴을 검토합니다. | Oracle Database SE2는 언제든지 최대 16개의 CPU 스레드까지 사용을 자동으로 제한합니다.Oracle EE 데이터베이스에 Oracle Diagnostic Pack을 사용할 수 있는 라이선스가 부여된 경우, Automatic Workload Repository(AWR) 도구 또는 DBA\$1HIST\$1\$1 보기를 사용하여 데이터베이스 워크로드 패턴을 분석해서 SE2로 다운그레이드할 때 최대 제한인 16개의 CPU 스레드가 서비스 수준에 악영향을 미치는지 여부를 판단합니다.평가가 하루, 월말 또는 연말 처리와 같이 활동이 가장 많은 기간을 포함하는지 확인합니다. | 앱 소유자, DBA, 앱 개발자 | 

### 대상 인프라 준비
<a name="prepare-the-target-infrastructure-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 네트워킹 인프라를 배포하고 구성합니다. | [Virtual Private Cloud(VPC) 및 서브넷](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html), [보안 그룹](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) 및 [네트워크 액세스 제어 목록](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)을 생성합니다. | 관리자, 클라우드 아키텍트, 네트워크 관리자, DevOps 엔지니어 | 
| Amazon RDS for Oracle SE2 데이터베이스를 프로비저닝합니다. | 대상 [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html) SE2 데이터베이스를 프로비저닝하여 애플리케이션의 성능, 가용성 및 보안 요구 사항을 충족합니다. 프로덕션 워크로드에는 Multi-AZ를 권장합니다. 하지만 마이그레이션 성능을 개선하기 위해 [Multi-AZ 활성화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/create-multi-az-db-cluster.html)를 데이터 마이그레이션 이후까지 연기할 수 있습니다. | 클라우드 관리자, 클라우드 아키텍트, DBA, DevOps 엔지니어, AWS 관리자 | 
| Amazon RDS 환경을 사용자 지정합니다. | 사용자 지정 [파라미터](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html) 및 [옵션](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithOptionGroups.html)을 구성하고 추가 [모니터링](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MonitoringOverview.html)을 활성화합니다. 더 자세한 내용은, [Amazon RDS for Oracle로 마이그레이션하기 위한 모범 사례](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/best-practices.html)를 참조하십시오. | AWS 관리자, AWS 시스템 관리자, Cloud 관리자, DBA, Cloud 아키텍트 | 

### 마이그레이션 예행 연습 및 애플리케이션 테스트 수행
<a name="perform-the-migration-dry-run-and-application-testing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테이터를 마이그레이션합니다(예행 연습). | 특정 환경에 가장 적합한 접근 방식을 사용하여 소스 Oracle EE 데이터베이스에서 Amazon RDS for Oracle SE2 데이터베이스 인스턴스로 데이터를 마이그레이션합니다. 크기, 복잡성, 이용 가능한 가동 중지 기간 등의 요인을 기반으로 마이그레이션 전략을 선택합니다. 다음 중 하나 또는 조합을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle.html) | DBA | 
| 대상 데이터베이스의 개수를 검사합니다. | 데이터베이스 스토리지 및 코드 객체의 마이그레이션 후 검증을 수행합니다. 마이그레이션 로그를 검토하고 식별된 문제를 모두 수정합니다. 자세한 내용은 [Oracle 데이터베이스를 클라우드로 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/best-practices.html#post-import) 가이드를 참조하십시오. | DBA | 
| 애플리케이션을 테스트합니다. | 애플리케이션 및 데이터베이스 관리자는 적합한 경우 기능, 성능, 운영 테스트를 수행해야 합니다. 더 자세한 내용은, [Amazon RDS for Oracle로 마이그레이션하기 위한 모범 사례](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/best-practices.html#test-migration)를 참조하십시오.마지막으로, 이해관계자로부터 테스트 결과에 대한 승인을 받습니다. | 앱 개발자, 앱 소유자, DBA, 마이그레이션 엔지니어, 마이그레이션 책임자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle Database EE에서 데이터를 새로 고칩니다. | 애플리케이션 가용성 요구 사항에 따라 데이터 새로 고침 방식을 선택합니다. 자세한 내용은 백서 [Strategies for Migrating Oracle Database에서 AWS로의 마이그레이션을 위한 전략](https://docs.aws.amazon.com/whitepapers/latest/strategies-migrating-oracle-db-to-aws/data-migration-methods.html)을 참조하십시오.예를 들어, Oracle GoldenGate 또는 DMS와 같은 도구를 지속적인 복제와 함께 사용함으로서 가동 중지 시간을 거의 제로에 가깝게 달성할 수 있습니다. 가동 중지 기간이 허용하는 경우 Oracle Data Pump 또는 Original Export-Import 유틸리티와 같은 오프라인 방법을 사용하여 최종 데이터 전환을 수행할 수 있습니다. | 앱 소유자, 전환 리드, DBA, 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 애플리케이션이 대상 데이터베이스 인스턴스를 가리키도록 합니다. | Amazon RDS for Oracle SE2 데이터베이스를 가리키도록 애플리케이션 및 기타 클라이언트의 연결 파라미터를 업데이트합니다. | 앱 개발자, 앱 소유자, 마이그레이션 엔지니어, 마이그레이션 책임자, 전환 리드 | 
| 마이그레이션 후 작업을 수행합니다. | Multi-AZ 활성화, 데이터 검증 및 기타 검사와 같은 데이터 마이그레이션 사후 작업을 수행합니다. | DBA, 마이그레이션 엔지니어 | 
| 전환 후 모니터링을 수행합니다. | [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/monitoring-cloudwatch.html) 및 Amazon [RDS Performance Insights](https://aws.amazon.com/rds/performance-insights/)와 같은 도구를 사용하여 Amazon RDS for Oracle SE2 데이터베이스를 모니터링합니다. | 앱 소유자, 앱 소유자, AWS 관리자, DBA, 앱 개발자 | 

## 관련 리소스
<a name="replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle-resources"></a>

**AWS 권장 가이드**
+ [Oracle 데이터베이스를 AWS 클라우드로 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)(가이드)
+ [Evaluate downgrading Oracle 데이터베이스에서 AWS 상에서 표준 에디션 2로의 다운로딩 평가](https://docs.aws.amazon.com/prescriptive-guidance/latest/evaluate-downgrading-oracle-edition/welcome.html)(가이드)
+ [Oracle Data Pump를 사용한 온프레미스 Oracle 데이터베이스에서 Amazon RDS for Oracle로의 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html?did=pg_card&trk=pg_card)(패턴)
+ [Oracle Data Pump를 사용한 온프레미스 Oracle 데이터베이스에서 Amazon RDS for Oracle로의 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump.html?did=pg_card&trk=pg_card)(패턴)

**블로그 게시물**
+ [AWS DMS를 사용하여 가동 중지 시간이 거의 없이 Oracle 데이터베이스를 마이그레이션하기](https://aws.amazon.com/blogs/database/migrating-oracle-databases-with-near-zero-downtime-using-aws-dms/)
+ [Amazon RDS for Oracle을 사용하여 Oracle SE에서의 성능 관리 분석](https://aws.amazon.com/blogs/database/analyzing-performance-management-in-oracle-se-using-amazon-rds-for-oracle/)
+ [Amazon RDS for Oracle을 가지고 Oracle SE에서의 SQL 계획 관리](https://aws.amazon.com/blogs/database/managing-your-sql-plan-in-oracle-se-with-amazon-rds-for-oracle/)
+ [Oracle Standard Edition에서 테이블 파티셔닝 구현: 파트 1](https://aws.amazon.com/blogs/database/implementing-table-partitioning-in-oracle-standard-edition-part-1/)

# Precisely Connect를 사용하여 메인프레임 데이터베이스를 AWS에 복제하기
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect"></a>

*Lucio Pereira, Sayantan Giri, Balaji Mohan, Amazon Web Services*

## 요약
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect-summary"></a>

이 패턴은 Precisely Connect를 사용하여 거의 실시간으로 데이터를 메인프레임 데이터베이스에서 Amazon 데이터 스토어에 복제하는 절차를 개략적으로 설명합니다. 이 패턴은 Amazon Managed Streaming for Apache Kafka(Amazon MSK)와 함께 이벤트 기반 아키텍처와 클라우드의 사용자 지정 데이터베이스 커넥터를 구현하여 확장성, 복원력, 성능을 개선합니다.

Precisely Connect는 레거시 메인프레임 시스템에서 데이터를 캡처하여 클라우드 환경에 통합하는 복제 도구입니다. 지연 시간이 짧고 처리량이 많은 이기종 데이터 파이프라인을 갖춘 거의 실시간 메시지 흐름을 사용하여 변경 데이터 캡처(CDC)를 통해 데이터를 메인프레임에서 AWS에 복제합니다. 

또한 이 패턴에는 다중 리전 데이터 복제 및 장애 조치 라우팅을 사용하는 복원력 있는 데이터 파이프라인을 위한 재해 복구 전략도 포함됩니다.

## 사전 조건 및 제한 사항
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect-prereqs"></a>

**사전 조건 **
+ AWS 클라우드에 복제하려는 기존 메인프레임 데이터베이스(예: IBM DB2, IBM 정보 관리 시스템(IMS) 또는 가상 스토리지 액세스 방법(VSAM))
+ 활성화된 [계정](https://aws.amazon.com/account/)
+ 기업 환경에서 AWS로 연결되는 [Direct Connect](https://aws.amazon.com/directconnect/) 또는 [Virtual Private Network(VPN](https://aws.amazon.com/vpn/))
+ 기존 플랫폼에서 연결할 수 있는 서브넷이 있는 [가상 프라이빗 클라우드](https://aws.amazon.com/vpc/)

## 아키텍처
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect-architecture"></a>

**소스 기술 스택**

다음 데이터베이스 중 하나 이상을 포함하는 메인프레임 환경:
+ IBM IMS 데이터베이스
+ IBM DB2 데이터베이스
+ VSAM 파일

**대상 기술 스택**
+ Amazon MSK
+ Amazon Elastic Kubernetes Service(Amazon EKS) 및 Amazon EKS Anywhere
+ Docker
+ 다음과 같은 AWS 관계형 또는 NoSQL 데이터베이스:
  + Amazon DynamoDB
  + Oracle용 Amazon Relational Database Service(RDS), Amazon RDS for PostgreSQL 또는 Amazon Aurora
  + Amazon ElastiCache for Redis
  + Amazon Keyspaces(Apache Cassandra용)

**대상 아키텍처**

*메인프레임 데이터를 AWS 데이터베이스에 복제*

다음 다이어그램은 DynamoDB, Amazon RDS, Amazon ElastiCache 또는 Amazon Keyspaces와 같은 AWS 데이터베이스로 메인프레임 데이터의 복제를 보여줍니다. 복제는 온프레미스 메인프레임 환경에서 Precisely Capture 및 게시자를 사용하고, 온프레미스 분산 환경에서 Amazon EKS Anywhere의 Precisely Dispatcher를 사용하며, AWS 클라우드에서 Precisely Apply Engine 및 데이터베이스 커넥터를 사용하여 거의 실시간으로 발생합니다. 

![\[메인프레임 데이터를 AWS 데이터베이스에 복제\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/17ac53b7-86d5-4a8c-a55f-56b6338a1af3/images/777dd7da-48ed-4510-b8fa-9041be042671.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. Precisely Capture는 CDC 로그에서 메인프레임 데이터를 가져와 내부 임시 스토리지에 그 데이터를 보관합니다.

1. Precisely Publisher는 내부 데이터 스토리지의 변경 사항을 수신 대기하고 TCP/IP 연결을 통해 Precisely Dispatcher로 CDC 레코드를 전송합니다.

1. Precisely Dispatcher는 게시자로부터 CDC 레코드를 수신하여 Amazon MSK로 전송합니다. Dispatcher는 사용자 구성 및 여러 작업자 작업을 기반으로 Kafka 키를 생성하여 데이터를 병렬로 푸시합니다. 레코드가 Amazon MSK에 저장되면 Dispatcher는 게시자에게 확인 메시지를 회송합니다.

1. Amazon MSK는 클라우드 환경에서 CDC 레코드를 보관합니다. 주제의 파티션 크기는 처리량에 대한 트랜잭션 처리 시스템(TPS) 요구 사항에 따라 달라집니다. Kafka 키는 추가 변환 및 트랜잭션 순서 지정을 위해 필수입니다.

1. Precisely Apply Engine은 Amazon MSK로부터 CDC 레코드를 수신하고 대상 데이터베이스 요구 사항에 따라 데이터를 변환합니다(예: 필터링 또는 매핑을 활용하여 변환합니다). Precise SQD 스크립트에 사용자 지정 로직을 추가할 수 있습니다. (SQD는 Precisely의 독점 언어입니다.) Precisely Apply Engine은 각 CDC 레코드를 Apache Avro 또는 JSON 형식으로 변환하고 요구 사항에 따라 다양한 주제에 배포합니다.

1. 대상 Kafka 주제는 대상 데이터베이스를 기반으로 여러 주제에 CDC 레코드를 보관하고 Kafka는 정의된 Kafka키를 기반으로 트랜잭션 순서 지정을 용이하게 합니다. 파티션 키는 해당 파티션에 맞게 정렬되어 순차적 프로세스를 지원합니다. 

1. 데이터베이스 커넥터(사용자 지정 Java 애플리케이션)는 Amazon MSK로부터 CDC 레코드를 수신하여 대상 데이터베이스에 저장합니다.

1. 요구 사항에 따라 대상 데이터베이스를 선택할 수 있습니다. 이 패턴은 NoSQL 및 관계형 데이터베이스를 모두 지원합니다.

*재해 복구*

비즈니스 연속성은 조직 성공을 위한 핵심입니다. AWS 클라우드는 고가용성(HA) 및 재해 복구(DR) 기능을 제공하고 조직의 장애 조치 및 폴백 계획을 지원합니다. 이 패턴은 액티브/패시브 DR 전략을 따르며 RTO 및 RPO 요구 사항을 충족하는 DR 전략을 구현하기 위한 높은 수준의 지침을 제공합니다.

다음 다이어그램은 DR 워크플로를 보여 줍니다.

![\[AWS에서 메인프레임 데이터를 복제하기 위한 재해 복구 워크플로\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/17ac53b7-86d5-4a8c-a55f-56b6338a1af3/images/9cccba7a-7a25-411e-829f-7cd5a7a20ab4.png)


이 다이어그램은 다음을 보여 줍니다.

1. AWS 리전 1에서 장애가 발생할 경우 반자동 장애 조치가 필요합니다. 리전 1에서 장애가 발생하는 경우 시스템은 Precisely Dispatcher를 리전 2에 연결하기 위해 라우팅 변경을 시작해야 합니다. 

1. Amazon MSK는 리전 간 미러링을 통해 데이터를 복제합니다. 따라서 장애 조치 중에는 리전 2의 Amazon MSK 클러스터를 주요 리더로 승격해야 합니다. 

1. Precisely Apply Engine과 데이터베이스 커넥터는 어느 리전에서나 작동할 수 있는 상태 비저장 애플리케이션입니다. 

1. 데이터베이스 동기화는 대상 데이터베이스에 따라 달라집니다. 예를 들어 DynamoDB는 글로벌 테이블을 사용할 수 있고 ElastiCache는 글로벌 데이터 스토어를 사용할 수 있습니다.

*데이터베이스 커넥터를 통한 짧은 지연 시간 및 높은 처리량의 프로세싱*

데이터베이스 커넥터는 이 패턴의 중요한 구성 요소입니다. 커넥터는 리스너 기반 접근 방식을 따라 Amazon MSK에서 데이터를 수집하고 미션 크리티컬 애플리케이션(계층 0 및 1)을 위한 높은 처리량과 짧은 지연 시간의 프로세싱을 통해 데이터베이스로 트랜잭션을 전송합니다. 다음 다이어그램에서 이 프로세스를 보여 줍니다.

![\[데이터베이스 커넥터를 사용하여 AWS에서 메인프레임 데이터를 복제하기\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/17ac53b7-86d5-4a8c-a55f-56b6338a1af3/images/79479634-becb-4212-bbfc-1a3b17ae1bed.png)


이 패턴은 멀티스레드 처리 엔진을 통해 단일 스레드를 사용하는 사용자 지정 애플리케이션 개발을 지원합니다.

1. 커넥터 기본 스레드는 Amazon MSK의 CDC 레코드를 사용하고 스레드 풀로 전송하여 처리합니다.

1. 스레드 풀의 스레드는 CDC 레코드를 처리하여 대상 데이터베이스로 보냅니다.

1. 모든 스레드가 사용 중이면 스레드 대기열에 의해 CDC 레코드가 보류 상태로 유지됩니다.

1. 기본 스레드는 스레드 대기열에서 모든 레코드가 지워질 때까지 기다렸다가 오프셋을 Amazon MSK에 커밋합니다.

1. 하위 스레드는 실패를 처리합니다. 처리 중에 실패가 발생하면 실패한 메시지가 DLQ(Dead Letter Queue) 주제로 전송됩니다.

1. 하위 스레드는 데이터베이스에서 중복이나 잘못된 업데이트를 방지하기 위해 메인프레임 타임스탬프를 기반으로 조건부 업데이트 (DynamoDB 설명서에서 [조건식](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html) 참조)를 시작합니다.

멀티스레딩 기능을 갖춘 Kafka 소비자 애플리케이션을 구현하는 방법에 대한 내용은 Confluent 웹 사이트의 [Apache Kafka Consumer를 사용한 멀티스레드 메시지 사용](https://www.confluent.io/blog/kafka-consumer-multi-threaded-messaging/) 블로그 게시물을 참조하십시오.

## 도구
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect-tools"></a>

**서비스**
+ [Amazon Managed Streaming for Apache Kafka(Amazon MSK)](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html)는 Apache Kafka를 사용하여 스트리밍 데이터를 처리하는 애플리케이션의 구축 및 실행에 도움이 되는 완전 관리형 서비스입니다.
+ [Amazon Elastic Kubernetes Service(Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)는 자체 Kubernetes 컨트롤 플레인이나 노드를 설치하거나 유지 관리할 필요 없이 AWS에서 Kubernetes를 실행할 수 있도록 도와줍니다.
+ [Amazon EKS Anywhere](https://anywhere.eks.amazonaws.com/docs/)를 사용하면 자체 데이터 센터에서 실행되는 Kubernetes 클러스터를 배포, 사용, 관리할 수 있습니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon ElastiCache](https://docs.aws.amazon.com/elasticache/)는 AWS Cloud에서 분산 인 메모리 캐시 환경을 설정 및 관리하고 규모를 조정할 수 있습니다.
+ [Amazon Keyspaces(Apache Cassandra용)](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html)는 AWS 클라우드에서 Cassandra 워크로드를 마이그레이션, 실행, 확장할 수 있도록 지원하는 관리형 데이터베이스 서비스입니다.

**기타 도구**
+ [Precisely Connect](https://www.precisely.com/product/precisely-connect/connect)는 VSAM 데이터 세트 또는 IBM 메인프레임 데이터베이스와 같은 레거시 메인프레임 시스템의 데이터를 차세대 클라우드 및 데이터 플랫폼에 통합합니다.

## 모범 사례
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect-best-practices"></a>
+ 최적의 성능과 비용 균형을 맞출 수 있는 Kafka 파티션과 멀티스레드 커넥터의 최적 조합을 찾습니다. Precisely Capture 및 Dispatcher 인스턴스를 여러 개 사용하면 MIPS(초당 백만 개의 명령) 사용량이 높아져 비용이 증가할 수 있습니다.
+ 데이터베이스 커넥터에 데이터 조작 및 변환 로직을 추가하지 마십시오. 이를 위해 마이크로초 단위로 처리 시간을 제공하는 Precisely Apply Engine을 사용합니다.
+ 데이터베이스 커넥터에서 데이터베이스에 대한 요청 또는 상태 확인 호출(*하트비트*)을 정기적으로 생성하여 연결을 자주 워밍업하고 지연 시간을 줄입니다.
+ 스레드 풀 검증 로직을 구현하여 스레드 큐에서 보류 중인 작업을 이해하고, 다음 Kafka 폴링 전에 모든 스레드가 완료될 때까지 기다립니다. 이렇게 하면 노드, 컨테이너 또는 프로세스가 충돌하는 경우 데이터 손실을 방지할 수 있습니다.
+ 상태 엔드포인트를 통해 지연 시간 지표를 노출하여 대시보드 및 추적 메커니즘을 통해 관찰성 기능을 개선합니다.

## 에픽
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect-epics"></a>

### 소스 환경(온프레미스) 준비
<a name="prepare-the-source-environment-on-premises"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 메인프레임 프로세스(배치 또는 온라인 유틸리티)를 설정하여 메인프레임 데이터베이스에서 CDC 프로세스를 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 메인프레임 엔지니어 | 
| 메인프레임 데이터베이스 로그 스트림을 활성화합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 메인프레임 DB 전문가 | 
| 캡처 구성 요소를 사용하여 CDC 레코드를 캡처합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 메인프레임 엔지니어, Precisely Connect SME | 
| 캡처 구성 요소를 수신하도록 게시자 구성 요소를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 메인프레임 엔지니어, Precisely Connect SME | 
| 온프레미스 분산 환경에서 Amazon EKS Anywhere를 프로비저닝합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | DevOps 엔지니어 | 
| 분산 환경에서 Dispatcher 구성 요소를 배포 및 구성하여 AWS 클라우드에 주제를 게시합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | DevOps 엔지니어, Precisely Connect SME | 

### 대상 환경(AWS) 준비
<a name="prepare-the-target-environment-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 지정된 AWS 리전에 Amazon EKS 클러스터를 프로비저닝합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | DevOps 엔지니어, 네트워크 관리자 | 
| MSK 클러스터를 프로비저닝하고 해당하는 Kafka 주제를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | DevOps 엔지니어, 네트워크 관리자 | 
| 복제된 Kafka 주제를 수신하도록 Apply Engine 구성 요소를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | Precisely Connect SME | 
| AWS 클라우드에 DB 인스턴스를 프로비저닝합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 데이터 엔지니어, DevOps 엔지니어 | 
| Apply Engine에서 게시한 주제를 수신하도록 데이터베이스 커넥터를 구성하고 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 앱 개발자, 클라우드 아키텍트, 데이터 엔지니어 | 

### 비즈니스 연속성 및 재해 복구 설정
<a name="set-up-business-continuity-and-disaster-recovery"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 비즈니스 애플리케이션의 재해 복구 목표를 정의합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 클라우드 아키텍트, 데이터 엔지니어, 앱 소유자 | 
| 정의된 RTO/RPO를 기반으로 재해 복구 전략을 설계합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 클라우드 아키텍트, 데이터 엔지니어 | 
| 재해 복구 클러스터 및 구성을 프로비저닝합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | DevOps 엔지니어, 네트워크 관리자, 클라우드 아키텍트 | 
| 재해 복구를 위한 CDC 파이프라인을 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/replicate-mainframe-databases-to-aws-by-using-precisely-connect.html) | 앱 소유자, 데이터 엔지니어, 클라우드 아키텍트 | 

## 관련 리소스
<a name="replicate-mainframe-databases-to-aws-by-using-precisely-connect-resources"></a>

**AWS 리소스**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)
+ [Amazon DynamoDB를 사용한 조건식](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/index.html)
+ [Amazon EKS Anywhere](https://anywhere.eks.amazonaws.com/docs/)
+ [Amazon ElasticCache](https://docs.aws.amazon.com/elasticache/index.html)
+ [Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/?icmpid=docs_homepage_databases)
+ [Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html)
+ [Amazon RDS 및 Amazon Aurora](https://docs.aws.amazon.com/rds/index.html)
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/index.html)

**Precisely Connect 리소스**
+ [Precisely Connect 개요](https://www.precisely.com/product/precisely-connect/connect)
+ [Precisely Connect를 사용한 데이터 캡처 변경](https://help.precisely.com/r/Connect-CDC-SQData/4.1/en-US/Connect-CDC-SQData-Installation/Connect-CDC-SQData-Architecture)

**Confluent 리소스**
+ [Apache Kafka Consumer를 사용한 멀티스레드 메시지 사용](https://www.confluent.io/blog/kafka-consumer-multi-threaded-messaging/)

# Lambda와 Secrets Manager를 사용하여 Amazon RDS for PostgreSQL 및 Aurora PostgreSQL 작업 예약하기
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager"></a>

*Yaser Raja, Amazon Web Services*

## 요약
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-summary"></a>

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 호스팅되는 데이터베이스 및 온프레미스 데이터베이스의 경우 데이터베이스 관리자가 **cron** 유틸리티를 사용하여 작업 예약을 하는 경우가 많습니다.

예를 들어, 데이터 추출 작업이나 데이터 제거 작업은 **cron**을 사용하여 쉽게 예약할 수 있습니다. 이러한 작업의 경우 데이터베이스 보안 인증 정보는 일반적으로 하드 코딩되거나 속성 파일에 저장됩니다. 하지만 Amazon Relational Database Service(Amazon RDS) 또는 Amazon Aurora PostgreSQL-Compatible Edition으로 마이그레이션하면 호스트 인스턴스에 로그인하여 **cron** 작업을 예약할 수 없게 됩니다. 

이 패턴은 마이그레이션 후 AWS Lambda 및 AWS Secrets Manager 를 사용하여 Amazon RDS for PostgreSQL 및 Aurora PostgreSQL 호환 데이터베이스에 대한 작업을 예약하는 방법을 설명합니다. 

## 사전 조건 및 제한 사항
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스

**제한 사항 **
+ 작업은 Lambda 함수 제한 시간인 15분 이내에 완료되어야 합니다. 다른 한도는 [AWS Lambda 설명서](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)를 참조하세요.
+ 작업 코드는 [Lambda에서 지원하는 언어](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)로 작성해야 합니다.

## 아키텍처
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-architecture"></a>

**소스 기술 스택**

이 스택의 특징은 Bash, Python, Java와 같은 언어로 작성된 작업입니다. 데이터베이스 보안 인증 정보는 속성 파일에 저장되며 작업은 Linux **cron**을 사용하여 예약됩니다.

**대상 기술 스택**

이 스택에는 Secrets Manager에 저장된 보안 인증 정보를 사용하여 데이터베이스에 연결하고 활동을 수행하는 Lambda 함수가 있습니다. Lambda 함수는 Amazon CloudWatch Events를 사용하여 예약된 간격에 따라 시작됩니다.

**대상 아키텍처**

![\[RDS DB 인스턴스의 작업을 예약하는 Lambda 함수를 시작하는 CloudWatch 이벤트입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8e0d1c90-0599-4909-a800-26a89b87f686/images/61f9ca34-9157-4565-96ba-5234d389ac2a.png)


## 도구
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다. 신속하게 설정할 수 있는 단순 규칙을 사용하여 일치하는 이벤트를 검색하고 하나 이상의 대상 함수 또는 스트림으로 이를 라우팅할 수 있습니다. CloudWatch Events는 운영 변경 사항이 발생할 때 이를 인식하게 됩니다. 또한 환경에 응답하기 위한 메시지를 전송하고 함수를 활성화하고 변경을 수행하고 상태 정보를 기록하는 등 이러한 운영 변경 사항에 응답하고 필요에 따라 시정 조치를 취합니다. 또한 CloudWatch Events를 사용하여 **cron** 또는 **rate** 표현식을 통해 특정 시간에 자체 시작되는 자동 작업을 예약할 수 있습니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)은(는) 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 사용한 컴퓨팅 시간에 대해서만 요금을 지불하면 되고 코드가 실행되지 않을 때는 요금이 부과되지 않습니다. Lambda에서는 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있습니다. Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 코드 모니터링 및 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. [Lambda가 지원하는 언어](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) 중 하나로 코드를 공급하기만 하면 됩니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)는 애플리케이션, 서비스, IT 리소스에 액세스하는 데 필요한 보안 암호를 보호하도록 도와줍니다. 수명 주기 동안 데이터베이스 자격 증명, API 키 및 기타 보안 암호를 손쉽게 교체, 관리 및 검색할 수 있습니다. 사용자와 애플리케이션은 Secrets Manager API를 호출하여 보안 암호를 검색하면 되므로 중요한 정보를 일반 텍스트로 하드 코딩할 필요가 없습니다. Secrets Manager는 Amazon RDS, Amazon Redshift 및 Amazon DocumentDB에 대한 통합 기능이 내장된 보안 로테이션을 제공합니다. 이 서비스는 API 키 및 OAuth 토큰을 비롯한 다른 유형의 보안 암호로 확장할 수 있습니다. Secrets Manager를 사용하면 세분화된 권한을 사용하여 보안 암호에 대한 액세스를 제어하고 AWS 클라우드, 타사 서비스 및 온프레미스의 리소스에 대한 보안 암호 교체를 중앙에서 감사할 수 있습니다.

## 에픽
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-epics"></a>

### Secrets Manager에 데이터터베이스 보안 인증 정보 저장
<a name="store-database-credentials-in-asm"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 함수에 대해 데이터베이스 사용자를 생성합니다. | 애플리케이션의 각 부분에 별도의 데이터베이스 사용자를 사용하는 것이 좋습니다. cron 작업에 별도의 데이터베이스 사용자가 이미 있는 경우 해당 사용자를 사용하십시오. 그렇지 않은 경우에는 새 데이터베이스 사용자를 생성하십시오. 자세한 내용은 [ PostgreSQL 사용자 및 역할 관리](https://aws.amazon.com/blogs/database/managing-postgresql-users-and-roles/)(AWS 블로그 게시물)를 참조하세요. | DBA | 
| DB 보안 인증 정보를 Secrets Manager에 저장합니다. | [데이터베이스 보안 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html) 지침(Secrets Manager 설명서)을 따릅니다. | DBA, DevOps | 

### Lambda 함수의 코드 작성
<a name="author-the-code-for-the-lam-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda에서 지원하는 프로그래밍 언어를 선택합니다. | 지원 언어의 목록은 [Lambda 런타임](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)(Lambda 설명서)을 참고하십시오. | 개발자 | 
| Secrets Manager에서 데이터베이스 보안 인증 정보를 가져오는 로직을 작성합니다. | 샘플 코드는 (AWS 블로그 게시물)[을 사용하여 Lambda 함수에 데이터베이스 자격 증명을 안전하게 제공하는 방법을 참조하세요 AWS Secrets Manager](https://aws.amazon.com/blogs/security/how-to-securely-provide-database-credentials-to-lambda-functions-by-using-aws-secrets-manager/). | 개발자 | 
| 예약된 데이터베이스 활동을 수행하는 로직을 작성합니다. | 온프레미스에서 사용 중인 예약 작업의 기존 코드를 Lambda 함수로 마이그레이션합니다. 자세한 내용은 [Python을 사용하여 Lambda 함수 빌드](https://docs.aws.amazon.com/lambda/latest/dg/lambda-deploy-functions.html) (Lambda 설명서) 를 참조하세요. | 개발자 | 

### 코드를 배포하고 Lambda 함수를 생성합니다.
<a name="deploy-the-code-and-create-the-lam-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 함수 배포 패키지를 생성합니다. | 이 패키지에는 코드와 해당 종속 항목을 포함되어 있습니다. 자세한 내용은 [배포 패키지](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html)(Lambda 설명서)를 참고하십시오. | 개발자 | 
| Lambda 함수를 생성합니다. | Lambda 콘솔에서 **함수 생성**을 선택하고, 함수 이름을 입력하고, 런타임 환경을 선택한 다음, **함수 생성**을 선택합니다. | DevOps | 
| 배포 패키지를 업로드합니다. | 생성한 Lambda 함수를 선택하여 해당 구성을 엽니다. 코드 섹션에서 직접 코드를 작성하거나 배포 패키지를 업로드할 수 있습니다. 패키지를 업로드하려면 **함수 코드** 섹션으로 이동합니다. 그리고 **코드 입력 유형**을 선택하여 .zip 파일을 업로드한 다음 패키지를 선택합니다. | DevOps | 
| 요구 사항에 따라 Lambda 함수를 구성합니다. | 예를 들어 **제한 시간** 파라미터를 Lambda 함수가 걸릴 것으로 예상되는 지속 시간으로 설정할 수 있습니다. 자세한 내용은 [함수 옵션 구성](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html)(Lambda 설명서)을 참조하세요. | DevOps | 
| Lambda 함수 역할에 대해 Secrets Manager에 액세스할 수 있는 권한을 설정합니다. | 지침은 [AWS Lambda 함수에서 보안 암호 사용](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_lambda.html)(Secrets Manager 설명서)을 참조하세요. | DevOps | 
| Lambda 함수 테스트. | Lambda 함수를 수동으로 시작하여 예상대로 작동하는지 확인하십시오. | DevOps | 

### CloudWatch 이벤트를 사용하여 Lambda 함수를 예약합니다.
<a name="schedule-the-lam-function-by-using-cwe"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 예약된 일정에 따라 Lambda 함수를 실행하도록 규칙을 생성합니다. | CloudWatch 이벤트를 사용하여 Lambda 함수를 예약합니다. 지침은 [CloudWatch 이벤트를 사용한 Lambda 함수 예약](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html)(CloudWatch 이벤트 자습서)을 참고하십시오. | DevOps | 

## 관련 리소스
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-resources"></a>
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [Lambda 시작하기](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [이벤트에서 트리거되는 CloudWatch Events 규칙 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html)
+ [AWS Lambda Limits](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)
+ [서버리스 애플리케이션에서 AWS 데이터베이스 쿼리](https://aws.amazon.com/blogs/database/query-your-aws-database-from-your-serverless-application/)(블로그 게시물)

# 온프레미스 SMTP 서버 및 Database Mail을 사용하여 Amazon RDS for SQL Server 데이터베이스 인스턴스에 대한 알림 전송하기
<a name="send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail"></a>

*Nishad Mankar, Amazon Web Services*

## 요약
<a name="send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail-summary"></a>

[Database Mail](https://learn.microsoft.com/en-us/sql/relational-databases/database-mail/database-mail?view=sql-server-ver16)(Microsoft 설명서)은 SMTP(단순 메일 전송 프로토콜) 서버를 사용하여 Microsoft SQL Server 데이터베이스에서 알림 또는 경고와 같은 이메일 메시지를 보냅니다. Microsoft SQL Server용 Amazon Relational Database Service(Amazon RDS) 설명서에는 Amazon Simple Email Service(Amazon SES)를 Database Mail용 SMTP 서버로 사용하는 방법에 대한 지침이 나와 있습니다. 자세한 내용은 [Amazon RDS for SQL Server에 Database Mail 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.DBMail.html) 섹션을 참조하세요. 다른 구성으로서, 이 패턴은 온프레미스 SMTP 서버를 메일 서버로 사용하여 Amazon RDS for SQL Server 데이터베이스(DB) 인스턴스에서 이메일을 보내도록 Database Mail을 구성하는 방법을 설명합니다.

## 사전 조건 및 제한 사항
<a name="send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 표준 또는 엔터프라이즈 버전의 SQL Server를 실행하는 Amazon RDS DB 인스턴스
+ 온프레미스 SMTP 서버의 IP 주소 또는 호스트 이름
+ SMTP 서버의 IP 주소에서 Amazon RDS for SQL Server DB 인스턴스로의 연결을 허용하는 인바운드 [보안 그룹 규칙](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html#working-with-security-group-rules)
+ 온프레미스 네트워크와 Amazon RDS DB 인스턴스가 포함된 가상 사설 클라우드(VPC) 간의 연결(예: [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 연결)

**제한 사항 **
+ Express 버전의 SQL Server는 지원되지 않습니다.
+ 제한 사항에 대한 자세한 내용은 Amazon RDS 설명서의 [Amazon RDS for SQL Server에 Database Mail 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport.Limits) *제한* 섹션을 참고하십시오.

**제품 버전**
+ [RDS에서 지원되는 SQL Server 버전](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.VersionSupport)의 스탠다드 및 엔터프라이즈 에디션

## 아키텍처
<a name="send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail-architecture"></a>

**대상 기술 스택**
+ Amazon RDS for SQL Server 데이터베이스 인스턴스
+ Amazon Rou53 전달 규칙
+ 데이터베이스 메일
+ 온프레미스 SMTP 서버
+ Microsoft SQL Server Management Studio(SSMS)

**대상 아키텍처**

다음 이미지는 이 패턴의 대상 아키텍처를 보여줍니다. 데이터베이스 인스턴스와 관련된 알림 또는 경고를 시작하는 이벤트 또는 작업이 발생하면 Amazon RDS for SQL Server는 Database Mail을 사용하여 이메일 알림을 보냅니다. Database Mail은 온프레미스 SMTP 서버를 사용하여 이메일을 전송합니다.

![\[온프레미스 SMTP 서버를 사용하여 Amazon RDS for SQL Server에서 사용자에게 이메일 알림을 전송합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/e5599724-43cf-4fe1-8c5a-8fca1a424993/images/47efb12f-3505-4a60-ac43-194a176e71c8.png)


## 도구
<a name="send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail-tools"></a>

**서비스**
+ [Microsoft SQL Server용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html)를 사용하여 AWS 클라우드에서 SQL Server 관계형 데이터베이스를 설정, 운영 및 확장할 수 있습니다.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html)은 가용성과 확장성이 뛰어난 DNS 웹 서비스입니다.

**기타 도구**
+ [Database Mail](https://learn.microsoft.com/en-us/sql/relational-databases/database-mail/database-mail)은 SQL Server 데이터베이스 엔진에서 사용자에게 알림 및 경고와 같은 이메일 메시지를 보내는 도구입니다.
+ [Microsoft SQL Server Management Studio(SSMS)](https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms)는 SQL 서버 구성 요소에 대한 액세스, 구성 및 관리를 포함하여 SQL Server를 관리하기 위한 도구입니다. 이 패턴에서는 SSMS를 사용하여 SQL 명령을 실행하는 방법으로 Amazon RDS for SQL Server DB 인스턴스에서 Database Mail을 설정합니다. 

## 에픽
<a name="send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail-epics"></a>

### 온프레미스 SMTP 서버와의 네트워크 연결 활성화
<a name="enable-network-connectivity-with-the-on-premises-smtp-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| RDS DB 인스턴스에서 다중 AZ를 제거합니다. | 다중 영역 RDS DB 인스턴스를 사용하는 경우 다중 AZ 인스턴스를 단일 AZ 인스턴스로 변환합니다. Database Mail 구성을 마치면 DB 인스턴스가 다시 다중 AZ 배포로 변환됩니다. 그러면 Database Mail 구성이 기본 노드와 보조 노드에서 모두 작동합니다. 지침은 [Microsoft SQL Server DB 인스턴스에서 다중 AZ 제거하기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServerMultiAZ.html#USER_SQLServerMultiAZ.Removing)를 참조하세요. | DBA | 
| 온프레미스 SMTP 서버의 Amazon RDS 엔드포인트 또는 IP 주소에 대한 허용 목록을 생성합니다. | SMTP 서버는 AWS 네트워크 외부에 있습니다. 온프레미스 SMTP 서버에서 서버가 Amazon RDS에서 호스팅되는 Amazon RDS 인스턴스 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 아웃바운드 엔드포인트 또는 IP 주소와 통신할 수 있도록 허용하는 허용 목록을 생성합니다. 이 절차는 조직마다 다릅니다. DB 인스턴스 엔드포인트에 대한 자세한 내용은 [DB 인스턴스 엔드포인트 및 포트 번호 찾기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToMicrosoftSQLServerInstance.html#sqlserver-endpoint)를 참고하십시오. | DBA | 
| 포트 25 제한을 제거합니다. | 기본적으로 AWS는 EC2 인스턴스에서 포트 25를 제한합니다. 포트 25 제한을 제거하려면 다음 작업을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.html) | 일반 AWS | 
| Route 53 규칙을 추가하여 SMTP 서버에 대한 DNS 쿼리를 해결합니다. | Route 53을 사용하여 AWS 리소스와 온프레미스 SMTP 서버 간의 DNS 쿼리를 해결할 수 있습니다. DNS 쿼리를 SMTP 서버 도메인으로 전달하는 규칙(예: `example.com`)을 생성해야 합니다. 지침은 Route 53 설명서의 [전달 규칙 생성](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing.html#resolver-rules-managing-creating-rules)을 참고하십시오. | 네트워크 관리자 | 

### Amazon RDS for SQL Server DB 인스턴스에서 Database Mail 설정하기
<a name="set-up-database-mail-on-the-amazon-rds-for-sql-server-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Database Mail을 활성화합니다. | Database Mail용 매개변수 그룹을 만들고 `database mail xps` 매개변수를 `1`로 설정한 다음 Database Mail 매개변수 그룹을 대상 RDS DB 인스턴스와 연결합니다. 지침은 Amazon RDS 설명서의 [Database Mail 활성화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.DBMail.html#SQLServer.DBMail.Enable)를 참고하십시오. 이 지침의 *Database Mail 구성* 섹션으로 진행하지 마십시오. 온프레미스 SMTP 서버의 구성은 Amazon SES와 다릅니다. | DBA | 
| DB 인스턴스에 연결합니다. | 배스천 호스트에서 Microsoft SQL Server Management Studio(SSMS)를 사용하여 Amazon RDS for SQL Server 데이터베이스 인스턴스에 연결합니다. 지침은 [Microsoft SQL Server 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결하기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToMicrosoftSQLServerInstance.html)를 참조하세요. 오류가 발생하는 경우 [관련 리소스](#send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail-resources) 섹션의 연결 문제 해결 참조를 참고하십시오. | DBA | 
| 프로필을 생성합니다. | SSMS에 다음 SQL 문을 입력하여 Database Mail 프로필을 생성합니다. 다음 값을 교체합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.html)저장된 이 프로시저와 해당 인수에 대한 자세한 내용은 Microsoft 설명서의 [sysmail\$1add\$1profile\$1sp](https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profile-sp-transact-sql)를 참고하십시오.<pre>EXECUTE msdb.dbo.sysmail_add_profile_sp<br /> @profile_name = 'SQL Alerts profile',<br /> @description = 'Profile used for sending outgoing notifications using OM SMTP Server.';</pre> | DBA | 
| 프로필에 보안 주체를 추가합니다. | 다음과 같은 SQL 문을 입력하여 Database Mail 프로필에 공용 또는 개인 보안 주체를 추가합니다. *보안 주체*는 SQL Server 리소스를 요청할 수 있는 엔터티입니다. 다음 값을 교체합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.html)이 저장 프로시저와 해당 인수에 대한 자세한 내용은 Microsoft 설명서의 [sysmail\$1add\$1principalprofile\$1sp](https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-principalprofile-sp-transact-sql)를 참조하세요.<pre>EXECUTE msdb.dbo.sysmail_add_principalprofile_sp<br /> @profile_name = 'SQL Alerts profile',<br /> @principal_name = 'public',<br /> @is_default = 1 ;</pre> | DBA | 
| 계정을 생성합니다. | 다음 SQL 문을 입력하여 Database Mail 계정을 생성합니다. 다음 값을 교체합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.html)이 저장 프로시저와 해당 인수에 대한 자세한 내용은 Microsoft 설명서의 [sysmail\$1add\$1account\$1sp](https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-account-sp-transact-sql)를 참조하세요.<pre>EXECUTE msdb.dbo.sysmail_add_account_sp<br /> @account_name = 'SQL Alerts account',<br /> @description = 'Database Mail account for sending outgoing notifications.',<br /> @email_address = 'xyz@example.com',<br /> @display_name = 'xyz@example.com',<br /> @mailserver_name = 'test_smtp.example.com',<br /> @port = 25,<br /> @enable_ssl = 1,<br /> @username = 'SMTP-username',<br /> @password = 'SMTP-password';</pre> | DBA | 
| 프로필에 계정을 추가합니다. | 다음과 같은 SQL 문을 입력하여 Database Mail 계정을 Database Mail 프로필에 추가합니다. 다음 값을 교체합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.html)이 저장 프로시저와 해당 인수에 대한 자세한 내용은 Microsoft 설명서의 [sysmail\$1add\$1profileaccount\$1sp](https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profileaccount-sp-transact-sql)를 참조하세요.<pre>EXECUTE msdb.dbo.sysmail_add_profileaccount_sp<br /> @profile_name = 'SQL Alerts profile',<br /> @account_name = 'SQL Alerts account',<br /> @sequence_number = 1;</pre> | DBA | 
| (선택 사항) RDS DB 인스턴스에 다중 AZ를 추가합니다. | Database Mirroring(DBM) 또는 Always On 가용 그룹(AG)을 이용한 다중 AZ를 추가하려면 [Microsoft SQL Server DB 인스턴스에 다중 AZ 추가](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServerMultiAZ.html#USER_SQLServerMultiAZ.Adding)에 있는 지침을 참고하십시오. | DBA | 

## 관련 리소스
<a name="send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail-resources"></a>
+ [Amazon RDS for SQL Server에서 Database Mail 사용하기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.DBMail.html) (Amazon RDS 설명서)
+ [파일 첨부 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.DBMail.html#SQLServer.DBMail.MAZ) (Amazon RDS 설명서)
+ [SQL Server DB 인스턴스에 대한 연결 문제 해결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToMicrosoftSQLServerInstance.html#USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting)(Amazon RDS 설명서)
+ [Amazon RDS DB 인스턴스에 연결할 수 없음](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.Connecting) (Amazon RDS 설명서)

# AWS 기반 IBM Db2에서 SAP를 위한 재해 복구 설정
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws"></a>

*Ambarish Satarkar, Debasis Sahoo, Amazon Web Services*

## 요약
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-summary"></a>

이 패턴은 데이터베이스 플랫폼으로 IBM Db2를 사용하여 Amazon Web Services(AWS) 클라우드에서 실행되는 SAP 워크로드용 재해 복구(DR) 시스템을 설정하는 단계를 설명합니다. 목표는 정전 발생 시 비즈니스 연속성을 제공하는 저비용 솔루션을 제공하는 것입니다.

이 패턴은 [파일럿 라이트 접근 방식](https://aws.amazon.com/blogs/architecture/disaster-recovery-dr-architecture-on-aws-part-iii-pilot-light-and-warm-standby/)을 사용합니다. AWS에서 파일럿 라이트 DR을 구현하여 다운타임을 줄이고 비즈니스 연속성을 유지할 수 있습니다. 파일럿 라이트 접근 방식은 프로덕션 환경과 동기화된 SAP 시스템 및 스탠바이 Db2 데이터베이스를 포함하여 AWS에서 최소 DR 환경을 설정하는 데 중점을 둡니다.

이 솔루션은 확장이 가능합니다. 필요에 따라 전체 규모 재해 복구 환경으로 확장할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-prereqs"></a>

**사전 조건 **
+ Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행되는 SAP 인스턴스
+ IBM Db2 데이터베이스
+ SAP 제품 가용성 매트릭스(PAM)에서 지원하는 운영 체제
+ 운영 및 스탠바이 데이터베이스 호스트의 서로 다른 물리적 데이터베이스 호스트 이름
+ [교차 리전 복제(CRR)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)를 지원하는 각 AWS 리전의 Amazon Simple Storage Service(S3) 버킷

**제품 버전**
+ IBM Db2 데이터베이스 버전 11.5.7 이상

## 아키텍처
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-architecture"></a>

**대상 기술 스택**
+ Amazon EC2
+ Amazon Simple Storage Service(Amazon S3)
+ Amazon Virtual Private Cloud(VPC 피어링)
+ Amazon Route 53
+ IBM Db2 고가용성 재해 복구(HADR)

**대상 아키텍처**

이 아키텍처는 Db2를 데이터베이스 플랫폼으로 사용하여 SAP 워크로드용 DR 솔루션을 구현합니다. 프로덕션 데이터베이스는 AWS 리전 1에 배포되고 스탠바이 데이터베이스는 두 번째 리전에 배포됩니다. 스탠바이 데이터베이스를 DR 시스템이라고 합니다. Db2 데이터베이스는 다중 스탠바이 데이터베이스(최대 3개)를 지원합니다. Db2 HADR을 사용하여 DR 데이터베이스를 설정하고 프로덕션 및 스탠바이 데이터베이스 간의 로그 전달을 자동화합니다.

리전 1을 사용할 수 없게 될 정도의 재해가 발생하는 경우 DR 리전의 스탠바이 데이터베이스가 프로덕션 데이터베이스 역할을 대신합니다. Recovery Time Objective(RTO) 요구 사항을 충족하기 위해 SAP 애플리케이션 서버를 미리 구축하거나 [AWS Elastic Disaster Recovery](https://aws.amazon.com/disaster-recovery/) 또는 Amazon Machine Image(AMI)를 사용하여 구축할 수 있습니다. 이 패턴은 AMI를 사용합니다.

Db2 HADR은 프로덕션-스탠바이 설정을 구현합니다. 이 경우 프로덕션이 기본 서버 역할을 하고 모든 사용자가 이 서버에 연결됩니다. 모든 트랜잭션은 TCP/IP를 사용하여 스탠바이 서버로 전송되는 로그 파일에 기록됩니다. 스탠바이 서버는 전송된 로그 레코드를 롤포워드하여 로컬 데이터베이스를 업데이트하므로 프로덕션 서버와 동기화된 상태를 유지하는 데 도움이 됩니다.

VPC 피어링은 프로덕션 지역과 DR 지역의 인스턴스가 서로 통신할 수 있도록 하는 데 사용됩니다. Amazon Route 53은 최종 사용자를 인터넷 애플리케이션으로 라우팅합니다.

![\[리전 간 복제 기능을 갖춘 AWS상의 Db2\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/06edfa4c-0827-4d05-95cf-2d2651e74323/images/e77c1e4e-36f3-4af4-89d0-8eec72348f0a.png)


1. 리전 1에 애플리케이션 서버의 [AMI를 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami)하고 리전 2에 [AMI를 복사](https://repost.aws/knowledge-center/copy-ami-region)합니다. 재해 발생 시 AMI를 사용하여 리전 2에서 서버를 시작합니다.

1. 프로덕션 데이터베이스(리전 1)와 스탠바이 데이터베이스(리전 2) 간에 Db2 HADR 복제를 설정합니다.

1. 재해 발생 시 프로덕션 인스턴스와 일치하도록 EC2 인스턴스 유형을 변경합니다.

1. 리전 1에서는 `LOGARCHMETH1`이 `db2remote: S3 path`로 설정됩니다.

1. 리전 2에서는 `LOGARCHMETH1`이 `db2remote: S3 path`로 설정됩니다.

1. 교차 리전 복제는 S3 버킷 간에 수행됩니다.

## 도구
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-tools"></a>

**서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html)는 가용성과 확장성이 뛰어난 DNS 웹 서비스입니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Amazon Virtual Private Cloud(VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 사용자의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사하며 AWS의 확장 가능한 인프라를 사용한다는 이점이 있습니다. 이 패턴은 [VPC 피어링](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-peering.html)을 사용합니다.

## 모범 사례
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-best-practices"></a>
+ 네트워크는 HADR 복제 모드를 결정하는 데 중요한 역할을 합니다. AWS 리전 전반의 DR의 경우 Db2 HADR ASYNC 또는 SUPERASYNC 모드를 사용하는 것이 좋습니다. 
+ Db2 HADR의 복제 모드에 대한 자세한 내용은 [IBM 설명서](https://ibm.github.io/db2-hadr-wiki/hadrSyncMode.html#Description_of_the_Modes)를 참조십시오.
+ AWS Management Console 또는 AWS Command Line Interface(AWS CLI)를 사용하여 기존 SAP 시스템의 [새로운 AMI를 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami)할 수 있습니다. 그런 다음 AMI를 사용하여 기존 SAP 시스템을 복구하거나 클론을 생성할 수 있습니다.
+ [AWS Systems Manager Automation](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html)은 EC2 인스턴스 및 기타 AWS 리소스의 일반적인 유지 관리 및 배포 작업에 도움을 줄 수 있습니다.
+ AWS는 AWS의 인프라 및 애플리케이션을 모니터링하고 관리할 수 있는 여러 기본 서비스를 제공합니다. Amazon CloudWatch 및 AWS CloudTrail과 같은 서비스를 사용하여 각각 기본 인프라 및 API 작업을 모니터링할 수 있습니다. 자세한 내용은 [SAP on AWS-Pacemaker가 포함된 IBM Db2 HADR](https://docs.aws.amazon.com/sap/latest/sap-AnyDB/sap-ibm-pacemaker.html)을 참조하십시오.

## 에픽
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-epics"></a>

### 환경 준비
<a name="prepare-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 시스템과 로그를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | AWS 관리자, SAP Basis 관리자 | 

### 서버 및 복제 설정
<a name="set-up-the-servers-and-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SAP 및 데이터베이스 서버를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html)롤포워드 보류 상태는 전체 백업이 복원된 후에 기본적으로 설정됩니다. 롤포워드 보류 상태는 데이터베이스를 복원하는 중이며 일부 변경 사항을 적용해야 할 수 있음을 나타냅니다. 자세한 내용은 [IBM 설명서](https://www.ibm.com/docs/en/db2/11.5?topic=commands-rollforward-database)를 참조하십시오. | SAP Basis 관리자 | 
| 구성을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | AWS 관리자, SAP Basis 관리자 | 
| 프로덕션 DB에서 DR DB로의 복제를 설정합니다(ASYNC 모드 사용). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | SAP Basis 관리자 | 

### DR 장애 조치 작업 테스트
<a name="test-dr-failover-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DR 테스트를 위한 프로덕션 비즈니스 다운타임을 계획합니다. | DR 장애 조치 시나리오를 테스트하려면 프로덕션 환경에서 필요한 비즈니스 다운타임을 계획해야 합니다. | SAP Basis 관리자 | 
| 테스트 사용자를 생성합니다. | DR 호스트에서 검증할 수 있는 테스트 사용자(또는 모든 테스트 변경 사항)를 생성하여 DR 장애 조치 후 로그 복제를 확인합니다. | SAP Basis 관리자 | 
| 콘솔에서 프로덕션 EC2 인스턴스를 중지합니다. | 이 단계에서는 재해 시나리오를 모방하기 위해 비정상 종료가 시작됩니다. | AWS 시스템 관리자 | 
| 요구 사항에 맞게 DR EC2 인스턴스를 스케일 업합니다. | EC2 콘솔에서 DR 리전의 인스턴스 유형을 변경합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | SAP Basis 관리자 | 
| 인계를 시작합니다. | DR 시스템(`host2`)에서 인계 프로세스를 시작하고 DR 데이터베이스를 기본 데이터베이스로 불러옵니다.<pre>db2 takeover hadr on database <SID> by force</pre>선택적으로 다음 파라미터를 설정하여 인스턴스 유형에 따라 데이터베이스 메모리 할당을 자동으로 조정할 수 있습니다. Db2 데이터베이스에 할당할 메모리 전용 부분에 따라 `INSTANCE_MEMORY` 값을 결정할 수 있습니다.<pre>db2 update db cfg for <SID> using INSTANCE_MEMORY <FIXED VALUE> IMMEDIATE;<br />db2 get db cfg for <SID> | grep -i DATABASE_MEMORY AUTOMATIC IMMEDIATE; <br />db2 update db cfg for <SID> using self_tuning_mem ON IMMEDIATE;</pre>다음 명령을 사용하여 문제를 확인합니다.<pre>db2 get db cfg for <SID> | grep -i MEMORY<br />db2 get db cfg for <SID> | grep -i self_tuning_mem</pre> | SAP Basis 관리자 | 
| DR 리전에서 SAP용 애플리케이션 서버를 시작합니다. | 프로덕션 시스템에서 만든 AMI를 사용하여 DR 리전에서 [새로운 추가 애플리케이션 서버를 시작합니다](https://aws.amazon.com/premiumsupport/knowledge-center/launch-instance-custom-ami/). | SAP Basis 관리자 | 
| SAP 애플리케이션을 시작하기 전에 검증을 수행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | AWS 관리자, SAP Basis 관리자 | 
| DR 시스템에서 SAP 애플리케이션을 시작합니다. | `<sid>adm` 사용자를 사용하여 DR 시스템에서 SAP 애플리케이션을 시작합니다. `XX`가 SAP ABAP SAP Central Services(ASCS) 서버의 인스턴스 번호를 나타내는 다음의 코드를 사용하십시오. `YY`는 SAP 애플리케이션 서버의 인스턴스 번호를 나타냅니다.<pre>sapconrol -nr XX -function StartService <SID><br />sapconrol -nr XX -function StartSystem<br />sapconrol -nr YY -function StartService <SID><br />sapconrol -nr YY -function StartSystem</pre> | SAP Basis 관리자 | 
| SAP 검증을 수행합니다. | 이는 증거를 제공하거나 DR 리전으로의 데이터 복제 성공 여부를 확인하기 위한 DR 테스트로 수행됩니다. | 테스트 엔지니어 | 

### DR 페일백 작업 수행
<a name="perform-dr-failback-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 운영 SAP 및 데이터베이스 서버를 시작합니다. | 콘솔에서 프로덕션 시스템의 SAP와 데이터베이스를 호스팅하는 EC2 인스턴스를 시작합니다. | SAP Basis 관리자 | 
| 프로덕션 데이터베이스를 시작하고 HADR을 설정합니다. | 프로덕션 시스템(`host1`)에 로그인하고 다음 명령을 사용하여 DB가 복구 모드에 있는지 확인합니다.<pre>db2start<br />db2 start HADR on db P3V as standby<br />db2 connect to <SID></pre>HADR 상태가 `connected`인지 확인합니다. 복제 상태는 `peer`여야 합니다.<pre>db2pd -d <SID> -hadr</pre>데이터베이스가 일관되지 않고 `connected` 및 `peer` 상태가 아닌 경우 (`host1`의) 데이터베이스를 (`host2` DR 리전의) 현재 활성 데이터베이스와 동기화하려면 백업 및 복원이 필요할 수 있습니다. 이 경우 `host2` DR 리전의 데이터베이스에서 `host1` 프로덕션 리전의 데이터베이스로 DB 백업을 복원합니다. | SAP Basis 관리자 | 
| 데이터베이스를 프로덕션 리전으로 페일백합니다. | 일반적인 업무 시나리오에서 이 단계는 예정된 가동 중지 시간에 수행됩니다. DR 시스템에서 실행 중인 애플리케이션이 중지되고 데이터베이스가 프로덕션 리전(리전 1)으로 페일백되어 프로덕션 리전에서 작업이 재개됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | SAP Basis 관리자 | 
| SAP 애플리케이션을 시작하기 전에 검증을 수행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | AWS 관리자, SAP Basis 관리자 | 
| SAP 애플리케이션을 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | SAP Basis 관리자 | 

## 문제 해결
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| HADR 관련 문제를 해결하기 위한 주요 로그 파일 및 명령 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.html) | 
| Db2 UDB의 HADR 문제 해결을 위한 SAP 노트 | SAP [Note 1154013-DB6: HADR 환경에서의 DB 문제](https://service.sap.com/sap/support/notes/1154013)를 참조하십시오. (이 노트에 액세스하려면 SAP 포털 보안 인증 정보가 필요합니다.) | 

## 관련 리소스
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-resources"></a>
+ [AWS의 Db2 데이터베이스에 대한 재해 복구 접근 방식](https://aws.amazon.com/blogs/architecture/disaster-recovery-approaches-for-db2-databases-on-aws/)(블로그 게시물)
+ [SAP on AWS-Pacemaker를 포함한 IBM Db2 HADR](https://docs.aws.amazon.com/sap/latest/sap-AnyDB/sap-ibm-pacemaker.html)
+ [DB2 데이터베이스 간 HADR 복제를 설정하는 단계별 절차](https://www.ibm.com/support/pages/step-step-procedure-set-hadr-replication-between-db2-databases)
+ [Db2 HADR Wiki](https://ibm.github.io/db2-hadr-wiki/index.html)

## 추가 정보
<a name="set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws-additional"></a>

이 패턴을 사용하여 Db2 데이터베이스에서 실행되는 SAP 시스템에 대한 재해 복구 시스템을 설정할 수 있습니다. 재해 상황에서 비즈니스는 정의된 Recovery Time Objective(RTO) 및 Recovery Point Objective(RPO) 요구 사항 내에서 업무를 계속할 수 있어야 합니다.
+ **RTO**는 서비스 중단과 서비스 복원 사이의 허용 가능한 최대 지연 시간입니다. 이는 서비스를 이용할 수 없을 때 허용 가능한 기간으로 간주되는 기간을 결정합니다.
+ **RPO**는 마지막 데이터 복구 시점 이후 허용되는 최대 시간입니다. 이에 따라 마지막 복구 시점과 서비스 중단 사이에 허용되는 데이터 손실로 간주되는 범위가 결정됩니다.

HADR과 관련된 자주 묻는 질문은 [SAP note \$11612105-DB6: Db2 고가용성 재해 복구(HADR)에 대한 자주 묻는 질문](https://launchpad.support.sap.com/#/notes/1612105)을 참조하십시오. (이 노트에 액세스하려면 SAP 포털 보안 인증 정보가 필요합니다.)

# Terraform을 사용하여 데이터베이스 마이그레이션을 위한 CI/CD 파이프라인 설정
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform"></a>

*Dr. Rahul Sharad Gaikwad, Ashish Bhatt, Aniket Dekate, Ruchika Modi, Tamilselvan P, Nadeem Rahaman, Aarti Rajput, Naveen Suthar, Amazon Web Services*

## 요약
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-summary"></a>

이 패턴은 안정적이고 자동화된 방식으로 데이터베이스 마이그레이션을 관리하기 위한 지속적 통합 및 지속적 배포(CI/CD) 파이프라인을 구축하는 것입니다. 필요한 인프라를 프로비저닝하고, 데이터를 마이그레이션하고, 코드형 인프라(IaC) 도구인 Terraform을 사용하여 스키마 변경을 사용자 지정하는 프로세스를 다룹니다.

특히이 패턴은 온프레미스 Microsoft SQL Server 데이터베이스를의 Amazon Relational Database Service(RDS)로 마이그레이션하도록 CI/CD 파이프라인을 설정합니다 AWS. 이 패턴을 사용하여 가상 머신(VM) 또는 다른 클라우드 환경에 있는 SQL Server 데이터베이스를 Amazon RDS로 마이그레이션할 수도 있습니다.

이 패턴은 데이터베이스 관리 및 배포와 관련된 다음 문제를 해결합니다.
+ 수동 데이터베이스 배포는 시간이 많이 걸리고 오류가 발생하기 쉬우며 환경 간에 일관성이 부족합니다.
+ 인프라 프로비저닝, 데이터 마이그레이션 및 스키마 변경을 조정하는 것은 복잡하고 관리하기 어려울 수 있습니다.
+ 데이터베이스 업데이트 중에 데이터 무결성을 보장하고 가동 중지 시간을 최소화하는 것은 프로덕션 시스템에 매우 중요합니다.

이 패턴은 다음과 같은 이점을 제공합니다.
+ 데이터베이스 마이그레이션을 위한 CI/CD 파이프라인을 구현하여 데이터베이스 변경 사항을 업데이트하고 배포하는 프로세스를 간소화합니다. 이렇게 하면 오류가 발생할 리스크가 줄어들고, 환경 간 일관성을 보장하며, 가동 중지 시간을 최소화할 수 있습니다.
+ 신뢰성, 효율성 및 협업을 개선하는 데 도움이 됩니다. 데이터베이스 업데이트 중에 출시 시간을 단축하고 가동 중지 시간을 줄일 수 있습니다.
+ 데이터베이스 관리를 위한 최신 DevOps 사례를 채택하여 소프트웨어 제공 프로세스의 민첩성, 신뢰성 및 효율성을 높일 수 있습니다.

## 사전 조건 및 제한 사항
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 로컬 시스템에 설치된 Terraform 0.12 이상(지침은 [Terraform 설명서](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) 참조)
+ HashiCorp의 Terraform AWS Provider 버전 3.0.0 이상(이 공급자의 [GitHub 리포지토리](https://github.com/hashicorp/terraform-provider-aws) 참조)
+ 최소 권한 AWS Identity and Access Management (IAM) 정책([최소 권한 IAM 정책 작성은 블로그 게시물 Techniques](https://aws.amazon.com/blogs/security/techniques-for-writing-least-privilege-iam-policies/) 참조)

## 아키텍처
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-architecture"></a>

이 패턴은 데이터베이스 마이그레이션 프로세스를 위한 전체 인프라를 제공하는 다음 아키텍처를 구현합니다.

![\[온프레미스 SQL Server 데이터베이스를 AWS의 Amazon RDS로 마이그레이션하기 위한 CI/CD 파이프라인 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/87845d9f-8e6e-4c51-b9ee-9e7833671d05/images/a1e95458-419a-4de9-85ef-b17d8340700a.png)


이 아키텍처에서,
+ 소스 데이터베이스는 온프레미스, 가상 머신(VM) 또는 다른 클라우드 공급자가 호스팅하는 SQL Server 데이터베이스입니다. 다이어그램은 소스 데이터베이스가 온프레미스 데이터 센터에 있다고 가정합니다.
+ 온프레미스 데이터 센터 및는 VPN 또는 AWS Direct Connect 연결을 통해 AWS 연결됩니다. 이렇게 하면 소스 데이터베이스와 AWS 인프라 간에 안전한 통신이 가능합니다.
+ 대상 데이터베이스는 데이터베이스 프로비저닝 파이프라인의 AWS 도움을 받아의 Virtual Private Cloud(VPC) 내에서 호스팅되는 Amazon RDS 데이터베이스입니다.
+ AWS Database Migration Service (AWS DMS)는 온프레미스 데이터베이스를에 복제합니다 AWS. 소스 데이터베이스를 대상 데이터베이스로 복제하도록 구성하는 데 사용됩니다.

다음 다이어그램은 프로비저닝, 설정 AWS DMS 및 검증과 관련된 다양한 수준의 데이터베이스 마이그레이션 프로세스로 설정된 인프라를 보여줍니다.

![\[온프레미스에서 AWS로의 마이그레이션 프로세스에 대한 CI/CD 파이프라인 세부 정보입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/87845d9f-8e6e-4c51-b9ee-9e7833671d05/images/3aca17e5-6fd7-4317-b578-ab5e485c6efb.png)


이 프로세스에서 다음을 수행합니다.
+ 검증 파이프라인은 모든 검사를 검증합니다. 필요한 모든 검증이 완료되면 통합 파이프라인이 다음 단계로 이동합니다.
+ DB 프로비저닝 파이프라인은 데이터베이스에 제공된 Terraform 코드에서 Terraform 작업을 수행하는 다양한 AWS CodeBuild 단계로 구성됩니다. 이러한 단계가 완료되면 대상에 리소스를 배포합니다 AWS 계정.
+  AWS DMS 파이프라인은 테스트를 수행한 다음 IaC를 사용하여 마이그레이션을 수행하기 위한 AWS DMS 인프라를 프로비저닝하는 다양한 CodeBuild 단계로 구성됩니다.

## 도구
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-tools"></a>

**AWS 서비스 및 도구**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)은 소스 코드를 컴파일하고 테스트를 실행하며 배포 준비가 완료된 소프트웨어 패키지를 생성하는 완전관리형 지속 통합 서비스입니다.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)은 빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위해 릴리스 파이프라인을 자동화하는 데 사용할 수 있는 완전관리형 지속적 제공 서비스입니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다.
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 로 마이그레이션 AWS 클라우드 하거나 클라우드와 온프레미스 설정의 조합 간에 마이그레이션할 수 있습니다.

**기타 서비스**
+ [Terraform](https://www.terraform.io/)은 HashiCorp의 IaC 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다.

**코드 리포지토리**

이 패턴의 코드는 Terraform 샘플 리포지토리를 사용하는 GitHub 데이터베이스 마이그레이션 DevOps 프레임워크에서 사용할 수 있습니다. [ DevOps ](https://github.com/aws-samples/aws-terraform-db-migration-framework-samples) 

## 모범 사례
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-best-practices"></a>
+ 데이터베이스 마이그레이션을 위한 자동 테스트를 구현하여 스키마 변경 사항의 정확성과 데이터 무결성을 확인합니다. 여기에는 단위 테스트, 통합 테스트 및 엔드 투 엔드 테스트가 포함됩니다.
+ 특히 마이그레이션 전에 데이터베이스에 대한 강력한 백업 및 복원 전략을 구현합니다. 이렇게 하면 데이터 무결성이 보장되고 장애 발생 시 대체 옵션이 제공됩니다.
+ 마이그레이션 중에 장애나 문제가 발생할 경우 데이터베이스 변경 사항을 되돌릴 수 있는 강력한 롤백 전략을 구현합니다. 여기에는 이전 데이터베이스 상태로 롤백하거나 개별 마이그레이션 스크립트를 되돌리는 작업이 포함될 수 있습니다.
+ 모니터링 및 로깅 메커니즘을 설정하여 데이터베이스 마이그레이션의 진행 상황과 상태를 추적합니다. 이를 통해 문제를 신속하게 식별하고 해결할 수 있습니다.

## 에픽
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-epics"></a>

### 로컬 워크스테이션 설정
<a name="set-up-your-local-workstation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 로컬 워크스테이션에 Git을 설정하고 구성합니다. | Git [설명서의 지침에 따라 로컬 워크스테이션에 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)을 설치하고 구성합니다. | DevOps 엔지니어 | 
| 프로젝트 폴더를 생성하고 GitHub 리포지토리에서 파일을 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps 엔지니어 | 

### 대상 아키텍처 프로비저닝
<a name="provision-the-target-architecture"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필수 파라미터를 업데이트합니다. | `ssm-parameters.sh` 파일은 필요한 모든 AWS Systems Manager 파라미터를 저장합니다. 프로젝트의 사용자 지정 값으로 이러한 파라미터를 구성할 수 있습니다.로컬 워크스테이션의 `setup/db-ssm-params` 폴더에서 CI/CD 파이프라인을 실행하기 전에 `ssm-parameters.sh` 파일을 열고 이러한 파라미터를 설정합니다. | DevOps 엔지니어 | 
| Terraform 구성을 초기화합니다. | `db-cicd-integration` 폴더에서 다음 명령을 입력하여 Terraform 구성 파일이 포함된 작업 디렉토리를 초기화합니다.<pre>terraform init</pre> | DevOps 엔지니어 | 
| Terraform 계획을 미리 보기합니다. | Terraform 계획을 생성하려면 다음 명령을 입력합니다.<pre>terraform plan -var-file="terraform.sample"  </pre>Terraform은 구성 파일을 평가하여 선언된 리소스의 목표 상태를 결정합니다. 그런 다음 목표 상태를 현재 상태와 비교하고 계획을 구성합니다. | DevOps 엔지니어 | 
| 계획을 확인합니다. | 계획을 검토하고 대상 AWS 계정에 필요한 아키텍처가 구성되어 있는지 확인합니다. | DevOps 엔지니어 | 
| 솔루션을 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps 엔지니어 | 

### 배포 확인
<a name="verify-the-deployment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 배포를 검증합니다. | `db-cicd-integration` 파이프라인의 상태를 확인하여 데이터베이스 마이그레이션이 완료되었는지 확인합니다.1. 에 로그인 AWS Management Console한 다음 [AWS CodePipeline 콘솔](https://console.aws.amazon.com/codesuite/codepipeline/home)을 엽니다.2. 탐색 창에서 **파이프라인**을 클릭합니다.3. `db-cicd-integration` 파이프라인을 선택합니다.4. 파이프라인 실행이 성공적으로 완료되었지 검증합니다. | DevOps 엔지니어 | 

### 사용 후 인프라 정리
<a name="clean-up-infrastructure-after-use"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인프라를 정리합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-ci-cd-pipeline-for-db-migration-with-terraform.html) | DevOps 엔지니어 | 

## 관련 리소스
<a name="set-up-ci-cd-pipeline-for-db-migration-with-terraform-resources"></a>

**AWS 설명서**
+ [Terraform 제품 시작하기](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Terraform 설명서**
+ [Terraform 설치](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Terraform 백엔드 구성](https://developer.hashicorp.com/terraform/language/backend)
+ [Terraform AWS 공급자 설명서](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

# FSx for Windows File Server를 사용하여 Amazon EC2에서 Microsoft SQL Server 장애 조치 클러스터 설정
<a name="microsoft-sql-failover-cluster-on-amazon-ec2"></a>

*Sweta Krishna, Ramesh Babu Donti, Amazon Web Services*

## 요약
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-summary"></a>

장애 조치 클러스터 인스턴스(FCI)가 있는 Microsoft SQL Server Standard 에디션은 SQL Server Enterprise에 대한 보다 비용 효율적인 대안을 제공할 수 있습니다. SQL FCI를 설정하려면 노드 간에 공유 파일 스토리지가 필요하며 [Amazon FSx for Windows File Server](https://aws.amazon.com/fsx/windows/)는 가용 영역 간에 동기식으로 자동 복제되는 완전관리형 스토리지를 제공합니다. Amazon FSx는 범용 파일 공유에 내장된 데이터 중복 제거를 사용하여 스토리지 비용을 절감하므로 서드 파티 솔루션을 유지할 필요가 없습니다. Amazon FSx는 다음 기능도 지원합니다.
+ 요금은 사용량에 대해서만 지불하며, 선수금 또는 약정은 없습니다.
+ FSx를 공유 스토리지로 사용하여 FCI를 수동으로 설정합니다.
+ FSx를 SQL 클러스터의 파일 공유 감시로 사용합니다.
+ Amazon FSx for Windows File Server는 지속적으로 사용 가능한 파일 공유에 대해 Server Message Block(SMB) 3.0을 지원하므로 SQL Server FCI 배포에 적합합니다.

## 사전 조건 및 제한 사항
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-prereqs"></a>

**사전 조건 **
+ 활성 [AWS 계정](https://aws.amazon.com/account/).
+ Amazon Virtual Private Cloud(VPC) 리소스, Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, 보안 그룹 및 AWS Identity and Access Management (IAM) 역할을 생성하고 관리할 수 있는 권한.
+ AWS Managed Microsoft AD 또는 자체 온프레미스 Active Directory.
+ 장애 조치 클러스터를 설정하는 데 [필요한 권한이](https://learn.microsoft.com/en-us/windows-server/failover-clustering/configure-failover-cluster-accounts) 있는 Active Directory 도메인 사용자.
+ 보안 하이브리드 연결을 위한 SQL Server FCI 및 [Microsoft Active Directory 포트에](https://docs.aws.amazon.com/whitepapers/latest/access-workspaces-with-access-cards/ip-address-and-port-requirements.html) 대한 보안 그룹 규칙.
+ SQL 노드 간에 적절한 권한으로 구성된 SQL Server용 Active Directory의 [서비스 계정](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions?view=sql-server-ver16#sql-server-failover-cluster-instance).
+ 장애 조치 클러스터의 Amazon FSx for Windows File Server.
+ SQL Server 설치 바이너리.

**제한 사항 **
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ Windows Server 2012 R2 이상용 Amazon EC2 R2 
+ 모든 현재 Windows Server 버전이 있는 Amazon FSx for Windows File Server
+ 공유 스토리지의 대안으로서 Amazon FSx for NetApp ONTAP
+ SQL Server 2012/2016/2019/2022

## 아키텍처
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-architecture"></a>

**기술 스택**
+ Amazon EC2
+ Amazon FSx for Windows File Server
+ Amazon VPC
+ AWS Directory Service
+ AWS Systems Manager
+ IAM

**대상 아키텍처 **

다음 다이어그램은 Amazon FSx for Windows File Server를 사용하는 Amazon EC2 기반 Microsoft SQL Server FCI의 상위 수준 아키텍처를 보여줍니다.

![\[Amazon FSx for Windows File Server를 사용하는 Amazon EC2의 Microsoft Server FCI에 대한 아키텍처 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/208bf64a-8fef-4019-944a-723372450885/images/ba0c9169-9536-41c3-ae8e-7264dcc3e1ad.png)


**네트워크 인프라**
+ Amazon VPC는 세 개의 가용 영역에 걸쳐 있는 네트워크 컨테이너를 제공합니다.
+ 프라이빗 서브넷은 리소스를 배포하기 위해 각 가용 영역에 격리된 서브넷을 제공합니다.

**컴퓨팅 계층**
+ Amazon EC2에는 Windows Server 장애 조치 클러스터(WSFC)의 일부로 가용 영역 1에 배포된 SQL Server 클러스터 노드 1이 포함되어 있습니다.
+ Amazon EC2에는 WSFC의 일부로 가용 영역 2에 배포된 SQL Server 클러스터 노드 2가 포함되어 있습니다.
+ WSFC 클러스터는 장애 조치 기능을 위해 두 SQL Server 노드를 모두 연결합니다.

**Amazon FSx for Windows File Server의 스토리지 계층**

**다중 AZ FSx 배포(가용 영역 1 및 2 확장)**
+ 가용 영역 1의 기본 FSx 파일 시스템은 활성 SQL Server 데이터 및 로그 파일을 호스팅합니다.
+ 가용 영역 2의 보조 FSx 파일 시스템은 자동 장애 조치 기능을 제공합니다.
+ SQL Server 데이터베이스의 두 클러스터 노드 모두에서 액세스할 수 있는 공유 SMB 파일 공유(\$1\$1fsx.domain\$1sqlshare).

**단일 AZ FSx 배포(AZ3)**
+ 가용 영역 3의 Amazon FSx 파일 서버 감시는 클러스터 쿼럼 감시 역할을 합니다.
+ 파일 공유 감시(`\\fsx.domain\witness`)는 클러스터 쿼럼을 유지하고 브레인 분할 시나리오를 방지합니다.

**디렉터리 서비스**
+ AWS Managed Microsoft AD 는 클러스터 기능에 필요한 Windows 인증 및 도메인 서비스를 제공합니다.

**고가용성 기능**
+ 다중 AZ 구성 요소는 가용 영역 전체에서 내결함성을 제공합니다.
+ FSx 대기 파일 서버는 기본 서버에 장애가 발생할 경우 자동 장애 조치를 제공합니다.
+ 파일 공유 감시는 장애 발생 시 적절한 클러스터 작업을 보장하는 데 도움이 되도록 가용 영역 3에서 클러스터 쿼럼 관리를 제공합니다.
+ 도메인은 원활한 Windows 인증을 AWS Managed Microsoft AD 위해와 통합됩니다.

## 도구
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-tools"></a>

**AWS 서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon FSx](https://docs.aws.amazon.com/fsx/?id=docs_gateway)는 업계 표준 연결 프로토콜을 지원하고 AWS 리전전반에 걸쳐 고가용성 및 복제를 제공하는 파일 시스템을 제공합니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)를 사용하면 디렉터리 인식 워크로드 및 AWS 리소스가에서 Microsoft Active Directory를 사용할 수 있습니다 AWS 클라우드.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)은 AWS 클라우드에서 실행되는 애플리케이션 및 인프라를 관리하는 데 도움을 줍니다. 애플리케이션 및 리소스 관리를 간소화하고, 운영 문제를 감지 및 해결하는 시간을 단축하며, AWS 리소스를 대규모로 안전하게 관리하는 데 도움이 됩니다.

## 모범 사례
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-best-practices"></a>
+ 프라이빗 서브넷에 데이터베이스 인스턴스를 배치하여 인터넷에서 공개적으로 액세스할 수 없도록 하는 동시에에 연결하고 업데이트를 AWS 서비스 수행할 수 있습니다.
+ 모범 사례는 [Amazon EC2 Microsoft SQL Server 배포의 모범 사례](https://docs.aws.amazon.com/prescriptive-guidance/latest/sql-server-ec2-best-practices/welcome.html)를 참조하세요.
+ PowerShell을 사용하여 Amazon FSx for Windows File Server를 관리하려면 [FSx for Windows 파일 시스템 관리](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/administering-file-systems.html)를 참조하세요.

## 에픽
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-epics"></a>

### SQL Server용 Amazon EC2 노드 생성 및 구성
<a name="create-and-configure-ec2-nodes-for-sql-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 이름과 태그를 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| Windows AMI를 선택합니다. | SQL Server 요구 사항을 충족하는 Windows용 Amazon Machine Image(AMI)를 선택합니다. | DBA | 
| 인스턴스 유형을 선택합니다. | 요구 사항에 맞는 Amazon EC2 인스턴스 유형을 선택합니다. | DBA | 
| 키 페어를 사용합니다. | 키 페어를 사용하여 인스턴스에 안전하게 연결할 수 있습니다. 인스턴스를 시작하기 전에 선택한 키 페어에 액세스할 수 있는지 확인합니다. | DBA | 
| 네트워크 설정 구성 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| 고급 네트워크 설정을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| 스토리지를 구성합니다. | 필요한 총 스토리지를 구성하고 필요한 스토리지 유형을 선택합니다. | DBA | 
| 고급 세부 정보를 구성하고 인스턴스를 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| 노드 2를 생성합니다. | 이 단계를 반복하여 노드 2를 생성하고 구성합니다. | DBA | 

### 노드 1 및 2에 Windows Server 장애 조치 클러스터 설치 및 구성
<a name="install-and-configure-windows-server-failover-cluster-on-nodes-1-and-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 노드 1에 로그인합니다. | Windows Amazon EC2 인스턴스에 관리자로 로그인합니다. | DBA | 
| 노드 1에 FCI 기능을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html)<pre>Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools</pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| 노드 2에 로그인합니다. | Windows Amazon EC2 인스턴스에 관리자로 로그인합니다. | DBA | 
| 노드 2에 FCI 기능을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html)<pre>Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools</pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| 클러스터에 노드를 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| 클러스터를 온라인 상태로 전환합니다. | 클러스터를 온라인 상태로 전환하려면 두 노드의 고정 IP 주소를 업데이트합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| 클러스터를 검증합니다. | **장애 조치 클러스터 관리자**로 이동하여 클러스터 코어 리소스가 온라인 상태인지 확인합니다. | DBA | 

### 노드 1 및 2에 SQL Server 설치
<a name="install-sql-server-on-nodes-1-and-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서버에 로그인합니다. | Amazon EC2 인스턴스에 관리자로 로그인합니다. | DBA | 
| SQL 바이너리를 탑재합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) |  | 
| 장애 조치 클러스터에 노드 2를 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 

### Amazon FSx 파일 공유 감시 구성
<a name="configure-the-fsx-file-share-witness"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 쿼럼 설정을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/microsoft-sql-failover-cluster-on-amazon-ec2.html) | DBA | 
| DNS 세부 정보를 검색합니다. | Amazon FSx 콘솔에서 **Managed AD**를 선택한 다음 **연결**을 선택합니다. DNS는 다음과 같은 형식이어야 합니다. `\\example.example.net\share`  | DBA | 
| 파일 공유 감시를 구성합니다. | **Amazon FSx 파일 공유 경로**를 선택한 다음 **완료**를 선택합니다. | DBA | 

## 관련 리소스
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-resources"></a>

**AWS resources**
+ [Amazon FSx for Windows File Server](https://www.youtube.com/watch?v=IMDWTIShlyI)(동영상)
+ [Amazon FSx for Windows File Server에 대한 심층 분석](https://www.youtube.com/watch?v=_x_Geur93oc)(동영상)
+ [Windows Server에서 Amazon EBS Multi-Attach를 사용하여 SQL Server 장애 조치 클러스터를 배포하는 방법](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-deploy-a-sql-server-failover-cluster-with-amazon-ebs-multi-attach-on-windows-server/)(AWS 블로그 게시물)
+ [Amazon FSx for Windows File Server를 사용하여 Microsoft SQL Server 고가용성 배포 간소화](https://aws.amazon.com/blogs/storage/simplify-your-microsoft-sql-server-high-availability-deployments-using-amazon-fsx-for-windows-file-server/)(AWS 블로그 게시물)
+ [Amazon FSx for NetApp ONTAP을 사용한 SQL Server 고가용성 배포](https://aws.amazon.com/blogs/modernizing-with-aws/sql-server-high-availability-amazon-fsx-for-netapp-ontap/)(AWS 블로그 게시물)
+ [Microsoft SQL Server가 포함된 FSx for Windows File Server 사용](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/sql-server.html)
+ [FSx for Windows File Server란 무엇입니까?](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html)

**기타 리소스**
+ [장애 조치 클러스터 생성](https://learn.microsoft.com/en-us/windows-server/failover-clustering/create-failover-cluster?pivots=windows-admin-center)

## 추가 정보
<a name="microsoft-sql-failover-cluster-on-amazon-ec2-additional"></a>

**파일 공유 감시 구성**

인바운드 연결을 허용하는 Amazon FSx 보안 그룹에 규칙을 추가하여 두 노드 모두에서 파일 시스템에 연결되어 있는지 확인합니다. SMB 포트가 허용되어야 합니다. 예를 들어 DNS 이름이 `\\example.example.com\share`인 경우 `\\example.example.com\share`를 사용합니다. Always On 가용성 클러스터에서 파일 공유 감시에 동일한 값을 사용합니다. 다음 단계를 완료하여 파일 공유 감시를 구성합니다.

1. RDP를 사용하여 Amazon EC2 인스턴스에 연결합니다.

1. **장애 조치 클러스터 관리자**로 이동합니다.

1. 컨텍스트 메뉴를 열고(마우스 오른쪽 버튼 클릭) **추가 작업**을 선택합니다.

1. **클러스터 쿼럼 설정 구성**을 선택합니다.

1. **다음**을 선택합니다.

1. **쿼럼 구성**을 선택하고 파일 공유 감시를 구성합니다.

1. DNS 이름을 입력합니다.

1. 요약을 검토한 다음 **마침**을 선택합니다. 파일 공유 감시는 **클러스터 코어** 리소스 섹션에서 온라인 상태여야 합니다.

# 활성 대기 데이터베이스를 사용하여 Amazon RDS Custom에서 Oracle E-Business Suite를 위한 HA/DR 아키텍처를 설정합니다.
<a name="set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database"></a>

*Simon Cunningham, Jaydeep Nandy, Nitin Saxena, Amazon Web Services*

## 요약
<a name="set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-summary"></a>

이 패턴은 다른 Amazon Web Services(AWS) 가용 영역에 Amazon RDS Custom 읽기 전용 복제본 데이터베이스를 설정하고 이를 활성 대기 데이터베이스로 변환하여 Amazon Relational Database Service(RDS) 사용자 정의 고가용성(HA) 및 재해 복구(DR)를 기반으로 Oracle E-Business 솔루션을 설계하는 방법을 설명합니다. Amazon RDS Custom 읽기 전용 복제본의 생성은 AWS Management Console을 통해 완전히 자동화됩니다.

이 패턴에서는 HA/DR 아키텍처의 일부일 수도 있는 추가 애플리케이션 티어와 공유 파일 시스템을 추가하는 단계를 설명하지 않습니다. 이러한 항목에 대한 자세한 내용은 Oracle 지원 노트 1375769.1, 1375670.1 및 1383621.1(섹션 5, *고급 클로닝 옵션*)을 참조하세요. (액세스하려면 [Oracle Support](https://support.oracle.com/portal/) 계정이 필요합니다.)

Amazon Web Services(AWS)에서 E-Business Suite 시스템을 단일 계층, 단일 AZ 아키텍처로 마이그레이션하려면 [Oracle E-Business Suite를 Amazon RDS Custom으로 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-oracle-e-business-suite-to-amazon-rds-custom.html)하는 패턴을 참조하세요.

Oracle E-Business Suite는 재무, 인사, 공급망, 제조 등 전사적 프로세스를 자동화하기 위한 전사적 자원 계획(ERP) 솔루션입니다. 클라이언트, 애플리케이션, 데이터베이스의 3계층 아키텍처를 갖추고 있습니다. 이전에는 자체 관리형 [Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스](https://aws.amazon.com/ec2/)에서 E-Business Suite 데이터베이스를 실행해야 했지만 이제는 [Amazon RDS Custom](https://aws.amazon.com/rds/custom/)의 이점을 활용할 수 있습니다. 

## 사전 조건 및 제한 사항
<a name="set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-prereqs"></a>

**사전 조건 **
+ Amazon RDS Custom에 설치된 기존 E-Business Suite, [Oracle E-Business Suite를 Amazon RDS Custom으로 마이그레이션하는](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-oracle-e-business-suite-to-amazon-rds-custom.html) 패턴 참조
+ 읽기 전용 복제본을 읽기 전용으로 변경하고 이를 사용하여 보고 기능을 예비 복제본으로 오프로드하려는 경우, [Oracle Active Data Guard 데이터베이스 라이선스](https://www.oracle.com/corporate/pricing/)(*Oracle Technology 상용 가격 목록* 참조)

**제한 사항 **
+ [Amazon RDS Custom의 Oracle 데이터베이스](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/UserGuide/custom-reqs-limits.html#custom-reqs-limits.limits)에 대한 제한 사항 및 지원되지 않는 구성
+ [Amazon RDS Custom for Oracle 읽기 전용 복제본](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-rr.html#custom-rr.limitations)에 대한 제한 사항

**제품 버전**

Amazon RDS Custom에서 지원하는 Oracle Database 버전 및 인스턴스 클래스에 대한 자세한 내용은 [Oracle용 Amazon RDS Custom의 요구 사항 및 제한 사항을](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/UserGuide/custom-reqs-limits.html) 참조하십시오.

## 아키텍처
<a name="set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-architecture"></a>

다음 다이어그램은 액티브/패시브 설정에 여러 가용 영역 및 애플리케이션 티어를 포함하는 AWS 기반 E-Business Suite의 대표적인 아키텍처를 보여줍니다. 데이터베이스는 Amazon RDS Custom DB 인스턴스와 Amazon RDS Custom 읽기 전용 복제본을 사용합니다. 읽기 전용 복제본은 Active Data Guard를 사용하여 다른 가용 영역으로 복제합니다. 또한 읽기 전용 복제본을 사용하여 기본 데이터베이스의 읽기 트래픽을 오프로드하고 보고 목적으로 사용할 수 있습니다.

![\[AWS 기반 Oracle E-Business Suite를 위한 다중 AZ 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a17947e8-56b1-4d92-91df-096c02ff4c19/images/ffdaa2d4-123b-44a0-8d52-b1352a4eee44.png)


자세한 내용은 Amazon RDS 문서의 [Amazon RDS Custom for Oracle의 읽기 적용 복제본 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-rr.html)을 참조하세요. 

Amazon RDS Custom 읽기 전용 복제본은 마운트된 상태로 기본적으로 생성됩니다. 하지만 일부 읽기 전용 워크로드를 대기 데이터베이스로 오프로드하여 기본 데이터베이스의 부하를 줄이려면 [에픽](#set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-epics) 섹션의 단계에 따라 마운트된 복제본의 모드를 읽기 전용으로 수동으로 변경할 수 있습니다. 일반적인 사용 사례는 대기 데이터베이스에서 보고서를 실행하는 것입니다. 읽기 전용으로 변경하려면 활성 대기 데이터베이스 라이선스가 필요합니다. 

AWS에서 읽기 전용 복제본을 생성하면 시스템은 기본적으로 Oracle Data Guard 브로커를 사용합니다.  이 구성은 다음과 같이 최대 성능 모드에서 자동으로 생성되고 설정됩니다.

```
DGMGRL> show configuration
Configuration - rds_dg
  Protection Mode: MaxPerformance
  Members:
  vis_a - Primary database
    vis_b - Physical standby database 
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS   (status updated 58 seconds ago)
```

## 도구
<a name="set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-tools"></a>

**서비스**
+ [Amazon RDS Custom for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-custom-oracle.html)은 기본 운영 체제 및 데이터베이스 환경에 액세스해야 하는 레거시, 커스텀 및 패키지 애플리케이션을 위한 관리형 데이터베이스 서비스입니다. 이는 데이터베이스 관리 작업과 운영을 자동화하는 동시에 데이터베이스 관리자로서 데이터베이스 환경과 운영 체제에 액세스하고 사용자 정의할 수 있도록 해줍니다. 

**기타 도구**
+ Oracle Data Guard는 Oracle 대기 데이터베이스를 생성하고 관리하는 데 도움이 되는 도구입니다. 이 패턴은 Oracle Data Guard를 사용하여 Amazon RDS Custom에 활성 대기 데이터베이스를 설정합니다.

## 에픽
<a name="set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-epics"></a>

### 읽기 전용 복제본 생성
<a name="create-a-read-replica"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS Custom DB 인스턴스의 읽기 전용 복제본을 생성합니다. | 읽기 전용 복제본을 생성하려면 [Amazon RDS 문서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Create)의 지침에 따라 생성한 Amazon RDS Custom DB 인스턴스([사전 요구 사항](#set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-prereqs) 섹션 참조)를 원본 데이터베이스로 사용하세요.기본적으로 Amazon RDS Custom 읽기 전용 복제본은 물리적 예비 복제본으로 생성되며 마운트된 상태입니다. 이는 Oracle Active Data Guard 라이선스 규정 준수를 보장하기 위한 것입니다. 읽기 전용 복제본을 읽기 전용 모드로 전환하려면 다음 단계를 따르세요. | DBA | 

### 읽기 전용 복제본을 읽기 전용 액티브 스탠바이로 변경
<a name="change-the-read-replica-to-a-read-only-active-standby"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS Custom 읽기 전용 복제본에 연결합니다. | 다음 명령을 사용하여 물리적 대기 데이터베이스를 활성 대기 데이터베이스로 변환합니다. 이 명령에는 Oracle 액티브 스탠바이 라이선스가 필요합니다. 라이선스를 받으려면 Oracle 담당자에게 문의하세요.<pre>$ sudo su - rdsdb<br />-bash-4.2$ sql<br />SQL> select process,status,sequence# from v$managed_standby;<br /><br />PROCESS    STATUS        SEQUENCE#<br />--------- ------------ ----------<br />ARCH       CLOSING            3956<br />ARCH       CONNECTED             0<br />ARCH       CLOSING            3955<br />ARCH       CLOSING            3957<br />RFS        IDLE                  0<br />RFS        IDLE               3958<br />MRP0       APPLYING_LOG       3958<br />SQL> select name, database_role, open_mode from v$database;<br /><br />NAME       DATABASE_ROLE    OPEN_MODE<br />--------- ---------------- --------------------<br />VIS        PHYSICAL STANDBY MOUNTED<br />SQL> alter database recover managed standby database cancel;<br />Database altered.<br />Open the standby database<br />SQL> alter database open;<br />Database altered.<br />SQL> select name, database_role, open_mode from v$database;<br /><br />NAME       DATABASE_ROLE    OPEN_MODE<br />--------- ---------------- --------------------<br />VIS        PHYSICAL STANDBY READ ONLY</pre> | DBA | 
| 실시간 로그 적용으로 미디어 복구를 시작합니다. | 실시간 로그 적용 기능을 활성화하려면 다음 명령을 사용합니다. 이는 대기 데이터베이스(읽기 전용 복제본)를 활성 대기 데이터베이스로 변환하고 유효성을 검사하므로 읽기 전용 쿼리를 연결하고 실행할 수 있습니다.<pre>SQL>   alter database recover managed standby database using current logfile disconnect from session;<br />Database altered</pre> | DBA | 
| 데이터베이스 상태를 확인하세요. | 데이터베이스 상태를 확인하려면 다음 명령을 사용하세요.<pre>SQL> select name, database_role, open_mode from v$database;<br />NAME      DATABASE_ROLE    OPEN_MODE<br />--------- ---------------- --------------------<br />VIS       PHYSICAL STANDBY READ ONLY WITH APPLY</pre> | DBA | 
| 재실행 적용 모드를 확인하세요. | 재실행두 적용 모드를 점검하세요.<pre>SQL> select process,status,sequence# from v$managed_standby;<br />PROCESS    STATUS        SEQUENCE#<br />--------- ------------ ----------<br />ARCH       CLOSING            3956<br />ARCH       CONNECTED             0<br />ARCH       CLOSING            3955<br />ARCH       CLOSING            3957<br />RFS        IDLE                  0<br />RFS        IDLE               3958<br />MRP0       APPLYING_LOG       3958<br /> <br />SQL> select open_mode from v$database;<br />OPEN_MODE<br />--------------------<br />READ ONLY WITH APPLY</pre> | DBA | 

## 관련 리소스
<a name="set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database-resources"></a>
+ [Oracle E-Business Suite를 Amazon RDS Custom으로 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-oracle-e-business-suite-to-amazon-rds-custom.html)(AWS 권장 가이드)
+ [Amazon RDS Custom 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-custom.html)(Amazon RDS 설명서)
+ [Amazon RDS Custom for Oracle의 읽기 전용 복제본으로 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-rr.html)(Amazon RDS 문서)
+ [Amazon RDS Custom for Oracle - 데이터베이스 환경의 새로운 제어 기능](https://aws.amazon.com/blogs/aws/amazon-rds-custom-for-oracle-new-control-capabilities-in-database-environment/)(AWS 뉴스 블로그)
+ [AWS 기반 Oracle E-Business Suite 마이그레이션](https://d1.awsstatic.com/whitepapers/migrate-oracle-e-business-suite.pdf)(AWS 백서)
+ [AWS 기반 Oracle E-Business Suite 아키텍처](https://docs.aws.amazon.com/whitepapers/latest/overview-oracle-e-business-suite/oracle-e-business-suite-architecture-on-aws.html)(AWS 백서)

# IBM Db2, SAP, Sybase 및 기타 데이터베이스에서의 MongoDB Atlas로 데이터 스트리밍 AWS
<a name="stream-data-from-ibm-db2-to-mongodb-atlas"></a>

*Battulga Purevragchaa 및 Igor Alekseev, Amazon Web Services*

*Babu Srinivasan, MongoDB*

## 요약
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-summary"></a>

이 패턴은 IBM Db2 및 메인프레임 데이터베이스 및 Sybase와 같은 기타 데이터베이스에서의 MongoDB Atlas로 데이터를 마이그레이션하는 단계를 설명합니다 AWS 클라우드. [AWS Glue](https://aws.amazon.com/glue/)를 사용하여 MongoDB Atlas로의 데이터 마이그레이션을 가속화합니다.

이 패턴은 AWS 권장 가이드 웹 사이트의 [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/) 가이드와 함께 제공됩니다. 이 가이드에서 설명하는 마이그레이션 시나리오 중 하나에 대한 구현 단계를 제공합니다. 추가 마이그레이션 시나리오는 AWS 권장 가이드 웹 사이트에서 다음 패턴을 참조하세요.
+ [에서 자체 호스팅된 MongoDB 환경을 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-a-self-hosted-mongodb-environment-to-mongodb-atlas-on-the-aws-cloud.html)
+ [에서 관계형 데이터베이스를 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-relational-database-to-mongodb-atlas.html)

패턴은 [AWS 관리형 서비스 파트너](https://aws.amazon.com/managed-services/partners/) 및 AWS 사용자를 위한 것입니다.

## 사전 조건 및 제한 사항
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-prereqs"></a>

**사전 조건 **
+ MongoDB Atlas로 마이그레이션하기 위한 SAP, Sybase, IBM Db2 등과 같은 소스 데이터베이스입니다.
+ SAP, Sybase, IBM Db2, MongoDB Atlas, 등의 데이터베이스에 익숙합니다 AWS 서비스.

**제품 버전**
+ MongoDB 버전 5.0 이상의 경우

## 아키텍처
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-architecture"></a>

다음 다이어그램은 AWS Glue Studio Amazon Kinesis Data Streams 및 MongoDB Atlas를 사용하여 배치 데이터 로드 및 데이터 스트리밍을 보여줍니다.

이 참조 아키텍처는 AWS Glue Studio 를 사용하여 추출, 변환 및 로드(ETL) 파이프라인을 생성하여 데이터를 MongoDB Atlas로 마이그레이션합니다. 는 MongoDB Atlas와 AWS Glue 크롤러 통합되어 데이터 거버넌스를 용이하게 합니다. Amazon Kinesis Data Streams를 사용하여 데이터를 배치로 포팅하거나 MongoDB Atlas로 스트리밍할 수 있습니다.

**배치 데이터 로드**

![\[배치 모드에서 MongoDB Atlas로 데이터 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/805a376f-35f4-44cc-b4b0-8bf4d95c1e5d/images/68d87202-95ba-4e2a-9b3b-27dd6db6165e.png)


배치 데이터 마이그레이션에 대한 자세한 내용은 AWS 블로그 게시물 [Compose your ETL jobs for MongoDB Atlas with AWS Glue](https://aws.amazon.com/blogs/big-data/compose-your-etl-jobs-for-mongodb-atlas-with-aws-glue/)를 참조하세요.

**데이터 스트리밍**

![\[데이터 스트리밍 모드에서 MongoDB Atlas로 데이터 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/805a376f-35f4-44cc-b4b0-8bf4d95c1e5d/images/b007a116-f463-418f-9721-647d80177e3b.png)


다양한 사용 시나리오를 지원하는 MongoDB Atlas 참조 아키텍처는 AWS 권장 가이드 웹 사이트의 [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/architecture.html)을 참조하세요.

## 도구
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-tools"></a>

●      [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)는 완전관리형 ETL 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다.

●      [Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/)를 사용하여 대규모 데이터 레코드 스트림을 실시간으로 수집하고 처리할 수 있습니다.

• [MongoDB Atlas](https://www.mongodb.com/atlas)는 클라우드에서 MongoDB 데이터베이스를 배포하고 관리하기 위한 완전관리형 서비스형 데이터베이스(DbaaS)입니다.

## 모범 사례
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-best-practices"></a>

지침은 [ MongoDB GitHub 리포지토리의 MongoDB 모범 사례 가이드를](https://github.com/mongodb-partners/mongodb_atlas_as_aws_bedrock_knowledge_base/blob/main/data/MongoDB_Best_Practices_Guide.pdf) 참조하세요. MongoDB GitHub 

## 에픽
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-epics"></a>

### 검색 및 평가
<a name="discovery-and-assessment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클러스터 크기를 결정합니다. | 전체 인덱스 공간에 대한 `db.stats()`의 정보를 사용하여 작업 집합 크기를 추정합니다 데이터 공간 중 일정 비율에 자주 액세스한다고 가정합니다. 또는 가정을 기반으로 메모리 요구량을 추정할 수도 있습니다. 이 작업은 약 1주일 정도 소요됩니다. 이 스토리와 이 에픽에 실린 다른 스토리에 대한 자세한 내용과 예제를 보려면 [관련 리소스](#stream-data-from-ibm-db2-to-mongodb-atlas-resources) 섹션의 링크를 참조하세요. | MongoDB DBA, 애플리케이션 아키텍트 | 
| 네트워크 대역폭 요구 사항을 추정합니다. | 네트워크 대역폭 요구 사항을 추정하려면 평균 문서 크기에 초당 제공되는 문서 수를 곱하세요. 클러스터의 모든 노드가 부담하는 최대 트래픽을 기준으로 고려하세요. 클러스터에서 클라이언트 애플리케이션으로의 다운스트림 데이터 전송 속도를 계산하려면 일정 기간 동안 반환된 총 문서의 합계를 사용하세요. 애플리케이션이 보조 노드에서 읽는 경우, 이 전체 문서 수를 읽기 작업을 수행할 수 있는 노드 수로 나누세요. 데이터베이스의 평균 문서 크기를 찾으려면 `db.stats().avgObjSize` 명령을 사용하시기 바랍니다. 이 작업은 일반적으로 하루가 소요됩니다. | MongoDB DBA | 
| Atlas 티어를 선택합니다. | [MongoDB 설명서](https://www.mongodb.com/docs/atlas/manage-clusters/)의 지침에 따라 올바른 Atlas 클러스터 티어를 선택하세요.  | MongoDB DBA | 
| 전환을 계획합니다. | 애플리케이션 전환을 계획합니다. | MongoDB DBA, 애플리케이션 아키텍트 | 

### AWS에 새로운 MongoDB Atlas 환경 설정
<a name="set-up-a-new-mongodb-atlas-environment-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 에서 새 MongoDB Atlas 클러스터를 생성합니다 AWS. | MongoDB Atlas에서 **클러스터 빌드를** 선택하고 클라우드 공급자 AWS 로를 선택합니다. | MongoDB DBA | 
|  AWS 리전 및 글로벌 클러스터 구성을 선택합니다. | Atlas 클러스터에 AWS 리전 사용할 수 있는 목록에서를 선택합니다. 필요한 경우 글로벌 클러스터를 구성하세요. | MongoDB DBA | 
| 클러스터 티어를 선택합니다. | 선호하는 클러스터 티어를 선택합니다. 티어 선택에 따라 메모리, 스토리지, IOPS 사양과 같은 요소가 결정됩니다. | MongoDB DBA | 
| ​추가 클러스터 설정을 구성합니다. | MongoDB 버전, 백업 및 암호화 옵션과 같은 추가 클러스터 설정을 구성합니다. 이러한 옵션에 대한 자세한 내용은 [관련 리소스](#stream-data-from-ibm-db2-to-mongodb-atlas-resources) 섹션을 참조하세요. | MongoDB DBA | 

### 보안 및 규정 준수를 구성합니다.
<a name="configure-security-and-compliance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 액세스 목록을 구성합니다. | Atlas 클러스터에 연결하려면 [프로젝트의 액세스 목록](https://www.mongodb.com/docs/atlas/setup-cluster-security/#configure-security-features-for-clusters)에 항목을 추가해야 합니다. Atlas는 전송 계층 보안(TLS)/Secure Sockets Layer(SSL)를 사용하여 데이터베이스의 Virtual Private Cloud(VPC) 연결을 암호화합니다. 프로젝트에 대한 액세스 목록을 설정하고 이 에픽의 스토리에 대한 자세한 내용을 확인하려면 [관련 리소스](#stream-data-from-ibm-db2-to-mongodb-atlas-resources) 섹션의 링크를 참조하세요.  | MongoDB DBA | 
| 사용자를 인증하고 권한을 부여합니다. | MongoDB Atlas 클러스터에 액세스할 데이터베이스 사용자를 생성하고 인증해야 합니다. 프로젝트의 클러스터에 액세스하려면 사용자가 해당 프로젝트에 속해야 하며 여러 프로젝트에 속할 수 있습니다. AWS Identity and Access Management (IAM)을 사용하여 권한 부여를 활성화 할 수도 있습니다. 자세한 내용은 MongoDB 설명서에서 [IAM을 사용한 인증 설정](https://www.mongodb.com/docs/atlas/security/aws-iam-authentication/#set-up-authentication-with-aws-iam)을 참조하세요. | MongoDB DBA | 
| 사용자 지정 역할을 생성합니다. | (선택 사항) Atlas는 내장된 Atlas 데이터베이스 사용자 권한이 원하는 권한 세트를 지원하지 않는 경우 활용할 수 있는 [사용자 지정 역할](https://www.mongodb.com/docs/atlas/reference/custom-role-actions/) 생성을 지원합니다. | MongoDB DBA | 
| VPC 피어링을 설정합니다. | (선택 사항) Atlas는 다른 AWS [VPC와의 VPC 피어링](https://www.mongodb.com/docs/atlas/security-vpc-peering/#set-up-a-network-peering-connection)을 지원합니다. VPCs | MongoDB DBA | 
|  AWS PrivateLink 엔드포인트를 설정합니다. | (선택 사항)를 사용하여에서 프라이빗 엔드포인트 AWS 를 설정할 수 있습니다[AWS PrivateLink](https://www.mongodb.com/docs/atlas/security-private-endpoint/). | MongoDB DBA | 
| 2단계 인증을 활성화합니다. | (선택 사항)Atlas는 사용자가 Atlas 계정에 대한 액세스를 제어할 수 있도록 2단계 인증(2FA)을 지원합니다. | MongoDB DBA | 
| LDAP을 사용하여 사용자 인증 및 권한 부여를 설정합니다. | (선택 사항)Atlas는 Lightweight Directory Access Protocol(LDAP)을 통한 사용자 인증 및 권한 부여를 지원합니다. | MongoDB DBA | 
| 통합 AWS 액세스를 설정합니다. | (선택 사항) Atlas Data Lake 및 고객 키 관리를 사용한 저장 중 암호화를 비롯한 일부 Atlas 기능은 IAM 역할을 인증에 사용합니다. | MongoDB DBA | 
| 를 사용하여 저장 데이터 암호화를 설정합니다 AWS KMS. | (선택 사항) Atlas는 AWS Key Management Service (AWS KMS)를 사용하여 스토리지 엔진 및 클라우드 공급자 백업을 암호화할 수 있도록 지원합니다. | MongoDB DBA | 
| CSFLE을 설정합니다. | (선택 사항) Atlas는 필드 자동 암호화를 비롯한 [클라이언트 측 필드 수준 암호화(CSFLE)](https://www.mongodb.com/docs/upcoming/core/csfle/#client-side-field-level-encryption)를 지원합니다.  | MongoDB DBA | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| MongoDB Atlas에서 대상 복제본 세트를 시작합니다. | MongoDB Atlas에서 대상 복제본 세트를 시작합니다. Atlas Live Migration Service에서 **마이그레이션 준비 완료**를 선택합니다. | MongoDB DBA | 
| MongoDB Atlas AWS Glue 와의 연결을 설정합니다. |  AWS Glue 크롤러 를 사용하여 MongoDB Atlas(대상 데이터베이스) AWS Glue 에 연결합니다. 이 단계는 마이그레이션을 위한 대상 환경을 준비하는 데 도움이 됩니다. 자세한 내용은 [AWS Glue 설명서](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html)를 참조하세요. | MongoDB DBA | 
| 소스 데이터베이스 또는 소스 스트림 AWS Glue 과의 연결을 설정합니다. | 이렇게 하면 마이그레이션을 위한 대상 환경을 준비하는 데 도움이 됩니다. | MongoDB DBA | 
| 데이터 변환을 설정합니다. | 기존 구조화된 스키마에서 MongoDB의 유연한 스키마로 데이터를 마이그레이션하도록 변환 로직을 구성합니다. | MongoDB DBA | 
| 데이터를 마이그레이션하십시오. |  AWS Glue Studio에서 마이그레이션을 예약합니다. | MongoDB DBA | 

### 운영 통합 구성
<a name="configure-operational-integration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클러스터에 연결합니다. | MongoDB Atlas 클러스터에 연결합니다. | 앱 개발자 | 
| 데이터와 상호 작용합니다. | 클러스터 데이터와 상호 작용합니다. | 앱 개발자 | 
| 클러스터를 모니터링합니다. | MongoDB Atlas 클러스터를 모니터링합니다. | MongoDB DBA | 
| 데이터를 백업 및 복원합니다. | 클러스터 데이터를 백업하고 복원합니다. | MongoDB DBA | 

## 문제 해결
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 문제가 발생하는 경우 | MongoDB Atlas CloudFormation 리소스 리포지토리의 [문제 해결을](https://github.com/mongodb/mongodbatlas-cloudformation-resources/tree/master#troubleshooting) 참조하세요. | 

## 관련 리소스
<a name="stream-data-from-ibm-db2-to-mongodb-atlas-resources"></a>

다음 모든 링크는 달리 명시되지 않는 한 MongoDB 설명서의 웹 페이지로 이동합니다.

**마이그레이션 가이드**
+ [에서 MongoDB Atlas로 마이그레이션 AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-mongodb-atlas/)(AWS 권장 가이드)

**검색 및 평가**
+ [메모리](https://docs.atlas.mongodb.com/sizing-tier-selection/#memory)
+ [Atlas 샘플 데이터 세트를 사용한 크기 조정 예제](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--the-service-sample-data-sets)
+ [모바일 애플리케이션의 크기 조정 예제](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#example--mobile-app)
+ [네트워크 트래픽](https://docs.atlas.mongodb.com/sizing-tier-selection/#network-traffic)
+ [클러스터 Auto Scaling](https://www.mongodb.com/docs/atlas/sizing-tier-selection/#cluster-auto-scaling)
+ [Atlas 크기 조정 템플릿](https://view.highspot.com/viewer/5f438f47a4dfa042e97130c5)

**보안 및 규정 준수 구성**
+ [IP 액세스 목록 항목 구성](https://docs.atlas.mongodb.com/security/ip-access-list/)
+ [데이터베이스 사용자 구성](https://docs.atlas.mongodb.com/security-add-mongodb-users/)
+ [Atlas UI에 대한 액세스 구성](https://docs.atlas.mongodb.com/organizations-projects/)
+ [사용자 지정 데이터베이스 역할 구성](https://docs.atlas.mongodb.com/security-add-mongodb-roles)
+ [데이터베이스 사용자 구성](https://docs.atlas.mongodb.com/security-add-mongodb-users/#atlas-user-privileges)
+ [네트워크 피어링 연결 설정](https://docs.atlas.mongodb.com/security-vpc-peering/)
+ [Atlas의 프라이빗 엔드포인트에 대해 알아보기](https://docs.atlas.mongodb.com/security-private-endpoint/)
+ [다중 인증 옵션 관리](https://docs.atlas.mongodb.com/security-two-factor-authentication/)
+ [LDAP을 통한 사용자 인증 및 권한 부여 설정](https://docs.atlas.mongodb.com/security-ldaps/)
+ [Atlas 데이터 레이크](https://docs.mongodb.com/datalake/)
+ [고객 키 관리를 사용한 저장 중 암호화](https://docs.atlas.mongodb.com/security-kms-encryption/)
+ [역할을 수임하는 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)(IAM 설명서)
+ [클라이언트측 필드 수준 암호화](https://docs.mongodb.com/manual/core/security-client-side-encryption)
+ [자동 암호화](https://docs.mongodb.com/manual/core/security-automatic-client-side-encryption) 
+ [MongoDB Atlas 보안 제어](https://webassets.mongodb.com/_com_assets/cms/MongoDB_Atlas_Security_Controls-v7k3rbhi3p.pdf)
+ [MongoDB 신뢰 센터](https://www.mongodb.com/cloud/trust)
+ [클러스터의 보안 기능 구성](https://docs.atlas.mongodb.com/setup-cluster-security/)

**AWS****에 새로운 MongoDB Atlas 환경 설정**
+ [클라우드 공급자 및 리전](https://docs.atlas.mongodb.com/cloud-providers-regions/)
+ [글로벌 클러스터 관리](https://docs.atlas.mongodb.com/global-clusters/)
+ [클러스터 티어 선택](https://www.mongodb.com/docs/atlas/manage-clusters/#select-cluster-tier)
+ [추가 설정 구성](https://docs.atlas.mongodb.com/cluster-additional-settings/)
+ [Atlas로 시작](https://docs.atlas.mongodb.com/getting-started/)
+ [Atlas UI에 대한 액세스 구성](https://docs.atlas.mongodb.com/organizations-projects/)

**데이터 마이그레이션**
+ [데이터 마이그레이션 또는 가져오기](https://www.mongodb.com/docs/atlas/import/)

**클러스터 모니터링**
+ [클러스터 모니터링](https://docs.atlas.mongodb.com/monitoring-alerts/)

**운영 통합**
+ [클러스터에 연결](https://docs.atlas.mongodb.com/connect-to-cluster/)
+ [데이터와의 상호 작용](https://docs.atlas.mongodb.com/data-explorer/)
+ [클러스터 모니터링](https://docs.atlas.mongodb.com/monitoring-alerts/)
+ [데이터 백업, 복원 및 아카이브](https://docs.atlas.mongodb.com/backup-restore-cluster/)

**GitHub 리포지토리**
+ [를 사용하여 MongoDB Atlas로 데이터 스트리밍 AWS Glue](https://github.com/mongodb-partners/Stream_Data_into_MongoDB_AWS_Glue?tab=readme-ov-file#troubleshooting)

# Oracle용 Amazon RDS Custom의 Oracle PeopleSoft 애플리케이션에 대한 전환 역할
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle"></a>

*sampath kathirvel, Amazon Web Services*

## 요약
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle-summary"></a>

Amazon Web Services(AWS)에서 [Oracle PeopleSoft](https://www.oracle.com/applications/peoplesoft/) 전사적 자원 관리(ERP) 솔루션을 실행하려면 기본 운영 체제(OS) 및 데이터베이스 환경에 액세스해야 하는 레거시, 사용자 지정 및 패키지 애플리케이션을 지원하는 [Amazon Relational Database Service(Amazon RDS)](https://aws.amazon.com/rds/) 또는 [Oracle용 Amazon RDS Custom](https://aws.amazon.com/rds/custom/)을 사용할 수 있습니다. 마이그레이션을 계획할 때 고려해야 할 주요 요소는 AWS 권장 가이드의 [Oracle 데이터베이스 마이그레이션 전략](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)을 참조하세요.

이 패턴은 Amazon RDS Custom에서 읽기 전용 복제본 데이터베이스가 있는 기본 데이터베이스로 실행되고 있는 PeopleSoft 애플리케이션 데이터베이스에 대해 Oracle Data Guard 전환 또는 역할 전환을 수행하는 단계를 중점적으로 다룹니다. 패턴에는 [패스트 스타트 장애 조치(FSFO)](https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/using-data-guard-broker-to-manage-switchovers-failovers.html#GUID-D26D79F2-0093-4C0E-98CD-224A5C8CBFA4)를 구성하는 단계가 포함됩니다. 이 프로세스 중에도 Oracle Data Guard 구성의 데이터베이스는 새로운 역할로 계속 작동합니다. Oracle Data Guard 전환의 일반적인 사용 사례로는 재해 복구(DR) 훈련, 데이터베이스의 예정된 유지 관리 작업, 그리고 [Standby-First Patch Apply](https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/upgrading-patching-downgrading-oracle-data-guard-configuration.html#GUID-A5226768-DB6B-4714-BB9A-0A3EF17A01C8) 롤링 패치가 있습니다. 자세한 내용은 블로그 게시물, [Amazon RDS Custom에서 데이터베이스 패치 작업 중단 시간 단축](https://aws.amazon.com/blogs/database/reduce-database-patching-downtime-in-amazon-rds-custom-for-oracle-using-oracle-data-guard-standby-first-patch-apply/)을 참조하세요.

## 사전 조건 및 제한 사항
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle-prereqs"></a>

**사전 조건 **
+ [읽기 전용 복제본 패턴을 사용하여 Amazon RDS Custom에서 Oracle PeopleSoft에 HA 추가](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica.html)를 완료했습니다.

**제한 사항 **
+ [Oracle용 RDS Custom의 제한 사항 및 지원되지 않는 구성](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/UserGuide/custom-reqs-limits.html#custom-reqs-limits.limits)
+ [Amazon RDS Custom for Oracle 읽기 전용 복제본](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-rr.html#custom-rr.limitations)에 대한 제한 사항

**제품 버전**
+ Amazon RDS Custom에서 지원하는 Oracle Database 버전에 대해서는 [Oracle용 RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.html#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.ora)을 참조하세요.
+ Amazon RDS Custom에서 지원하는 Oracle Database 인스턴스 클래스에 대해서는 [Oracle용 RDS Custom에 대한 DB 인스턴스 클래스 지원](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits.html#custom-reqs-limits.instances)을 참조하세요.

## 아키텍처
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle-architecture"></a>

**기술 스택**
+ Amazon RDS Custom for Oracle

**대상 아키텍처**

다음 다이어그램에서는 Amazon RDS Custom DB 인스턴스와 Amazon RDS 사용자 지정 읽기 전용 복제본을 보여줍니다. Oracle Data Guard는 DR에 대한 장애 조치 중에 역할 전환을 제공합니다.

![\[읽기 전용 복제본 데이터베이스가 있는 기본 RDS Custom DB 인스턴스의 Oracle Data Guard 전환.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/da3b011c-1668-4de4-9079-0982888a74b4/images/4e2a2f3b-b5bd-44b7-9b5a-13a663ee3be6.png)


AWS에서 Oracle PeopleSoft를 사용하는 대표적인 아키텍처에 대해서는 AWS에서 [가용성이 높은 PeopleSoft 아키텍처 설정](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html)을 참조하세요.

## 도구
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle-tools"></a>

**서비스**
+ [Oracle용 Amazon RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-custom-oracle.html)은 기본 운영 체제 및 데이터베이스 환경에 액세스해야 하는 레거시, 커스텀 및 패키지 애플리케이션을 위한 관리형 데이터베이스 서비스입니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 사용하면 암호를 포함하여 코드에 하드코딩된 보안 인증을 Secrets Manager에 대한 API 호출로 대체하여 프로그래밍 방식으로 암호를 검색할 수 있습니다. 이 패턴에서는 Secrets Manager에서 암호 이름 `do-not-delete-rds-custom-+<<RDS Resource ID>>+-dg`를 사용하여 `RDS_DATAGUARD`에 대한 데이터베이스 사용자 암호를 검색합니다.

**기타 서비스**
+ [Oracle Data Guard](https://docs.oracle.com/en/database/oracle/oracle-database/21/sbydb/introduction-to-oracle-data-guard-concepts.html#GUID-5E73667D-4A56-445E-911F-1E99092DD8D7)를 사용하면 대기 데이터베이스를 생성, 유지, 관리 및 모니터링할 수 있습니다. 이 패턴은 역할 전환([Oracle Data Guard 전환](https://docs.oracle.com/database/121/DGBKR/sofo.htm#DGBKR330))을 위해 Oracle Data Guard 최대 성능을 사용합니다.

## 모범 사례
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle-best-practices"></a>

프로덕션 배포의 경우 기본 및 읽기 전용 복제본 노드와 분리된 세 번째 가용 영역에서 옵저버 인스턴스를 시작하는 것이 좋습니다.

## 에픽
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle-epics"></a>

### 역할 전환 시작
<a name="initiate-role-transition"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 및 복제본 모두에 대한 데이터베이스 자동화를 일시 중지합니다. | RDS Custom 자동화 프레임워크가 역할 전환 프로세스를 방해하지는 않지만 Oracle Data Guard 전환 중에 자동화를 일시 중지하는 것이 좋습니다.RDS Custom 데이터베이스 자동화를 일시 중지했다가 다시 시작하려면 [RDS Custom 자동화 일시 중지 및 재개](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-managing.html#custom-managing.pausing)의 지침을 준수합니다. | 클라우드 관리자, DBA | 
| Oracle Data Guard 상태를 확인합니다. | Oracle Data Guard 상태를 확인하려면 기본 데이터베이스에 로그인합니다. 이 패턴에는 멀티테넌트 컨테이너 데이터베이스 (CDB) 또는 비CDB 인스턴스를 사용하기 위한 코드가 포함됩니다.**비 CDB**<pre>-bash-4.2$ dgmgrl RDS_DATAGUARD@RDS_CUSTOM_ORCL_A<br />DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon Nov 28 20:55:50 2022<br />Version 19.10.0.0.0<br />Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.<br />Welcome to DGMGRL, type "help" for information.<br />Password:<br />Connected to "ORCL_A"<br />Connected as SYSDG.<br />DGMGRL> show configuration<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_a - Primary database<br />orcl_d - Physical standby database <br />Fast-Start Failover: Disabled<br />Configuration Status:<br />SUCCESS (status updated 59 seconds ago)<br />DGMGRL></pre>**CDB**<pre>CDB-bash-4.2$ dgmgrl C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_A<br />DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Jan 18 06:13:07 2023<br />Version 19.16.0.0.0<br />Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.<br />Welcome to DGMGRL, type "help" for information.<br />Password:<br />Connected to "RDSCDB_A"<br />Connected as SYSDG.<br />DGMGRL> show configuration<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_a - Primary database<br />    rdscdb_b - Physical standby database <br />Fast-Start Failover:  Disabled<br />Configuration Status:<br />SUCCESS   (status updated 52 seconds ago)<br />DGMGRL></pre> | DBA | 
| 인스턴스 역할을 확인합니다. | AWS Management Console에 열고 Amazon RDS 콘솔로 이동합니다. 데이터베이스의 **복제** 섹션의 **연결 및 보안** 탭에서 기본 및 복제본의 인스턴스 역할을 확인합니다.기본 역할은 Oracle Data Guard 기본 데이터베이스와 일치해야 하고, 복제본 역할은 Oracle Data Guard 물리적 대기 데이터베이스와 일치해야 합니다. | 클라우드 관리자, DBA | 
| 전환을 실시합니다. | 전환을 실시하려면 프라이머리 노드에서 `DGMGRL`로 연결합니다.**비 CDB**<pre>DGMGRL> switchover to orcl_d;<br />Performing switchover NOW, please wait...<br />Operation requires a connection to database "orcl_d"<br />Connecting ...<br />Connected to "ORCL_D"<br />Connected as SYSDG.<br />New primary database "orcl_d" is opening...<br />Operation requires start up of instance "ORCL" on database "orcl_a"<br />Starting instance "ORCL"...<br />Connected to an idle instance.<br />ORACLE instance started.<br />Connected to "ORCL_A"<br />Database mounted.<br />Database opened.<br />Connected to "ORCL_A"<br />Switchover succeeded, new primary is "orcl_d"<br />DGMGRL>  </pre>**CDB**<pre>DGMGRL> switchover to rdscdb_b<br />Performing switchover NOW, please wait...<br />New primary database "rdscdb_b" is opening...<br />Operation requires start up of instance "RDSCDB" on database "rdscdb_a"<br />Starting instance "RDSCDB"...<br />Connected to an idle instance.<br />ORACLE instance started.<br />Connected to "RDSCDB_A"<br />Database mounted.<br />Database opened.<br />Connected to "RDSCDB_A"<br />Switchover succeeded, new primary is "rdscdb_b"</pre> | DBA | 
| Oracle Data Guard 연결을 확인합니다. | 전환 후 프라이머리 노드에서 `DGMGRL`로의 Oracle Data Guard 연결을 확인합니다.**비 CDB**<pre>DGMGRL> show configuration;<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_d - Primary database<br />orcl_a - Physical standby database <br />Fast-Start Failover: Disabled<br />Configuration Status:<br />SUCCESS (status updated 60 seconds ago)<br />DGMGRL> <br /><br />DGMGRL> show configuration lag;<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_d - Primary database<br />orcl_a - Physical standby database <br />Transport Lag: 0 seconds (computed 0 seconds ago)<br />Apply Lag: 0 seconds (computed 0 seconds ago)<br />Fast-Start Failover: Disabled<br />Configuration Status:<br />SUCCESS (status updated 44 seconds ago)<br />DGMGRL> </pre>**CDB**<pre>DGMGRL> show configuration<br />DGMGRL> show configuration<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_b - Primary database<br />    rdscdb_a - Physical standby database <br />Fast-Start Failover:  Disabled<br />Configuration Status:<br />SUCCESS   (status updated 52 seconds ago)<br />DGMGRL> <br /><br />DGMGRL> show configuration lag<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_b - Primary database<br />    rdscdb_a - Physical standby database <br />               Transport Lag:      0 seconds (computed 0 seconds ago)<br />               Apply Lag:          0 seconds (computed 0 seconds ago)<br />Fast-Start Failover:  Disabled<br />Configuration Status:<br />SUCCESS   (status updated 53 seconds ago)<br />DGMGRL></pre> | DBA | 
| Amazon RDS 콘솔에서 인스턴스 역할을 확인합니다. | 역할 전환을 한 후 Amazon RDS 콘솔에 **데이터베이스** 아래에 **연결 및 보안** 탭에 있는 **복제본** 섹션 아래에 새로운 역할이 표시됩니다. **복제 상태**가 비어 있다가 **복제 중**으로 업데이트되는 데 몇 분 정도 걸릴 수 있습니다. | DBA | 

### FSFO 구성
<a name="configure-fsfo"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전환을 재설정합니다. | 전환을 프라이머리 노드로 다시 설정합니다. | DBA | 
| 옵저버를 설치하고 시작합니다. | 옵저버 프로세스는 일반적으로 기본 및 대기 데이터베이스와는 다른 시스템에서 실행되고 있는 `DGMGRL` 클라이언트 구성 요소입니다. 옵저버용 ORACLE HOME 설치는 Oracle Client Administrator 설치일 수도 있거나, Oracle Database Enterprise Edition 또는 Personal Edition을 설치할 수도 있습니다. 데이터베이스 릴리스의 옵저버 설치에 대한 자세한 내용[은 옵저버 설치 및 시작](https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/using-data-guard-broker-to-manage-switchovers-failovers.html#GUID-11EF3897-8FCA-4A54-B63B-E8C1668AE21B)을 참조하세요. 옵저버 프로세스의 고가용성을 구성하려면 다음을 수행할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle.html)Oracle 12c Release 2 이상의 경우 최대 3명의 옵저버를 배포할 수 있습니다. 한 명의 옵저버가 기본 옵저버이고 나머지는 백업 옵저버입니다. 기본 옵저버가 실패하면 백업 옵저버 중 한 명이 기본 역할을 맡습니다. | DBA | 
| 옵저버 호스트에서 DGMGRL에 연결합니다. | 옵저버 호스트는 기본 및 대기 데이터베이스 연결을 위한 `tnsnames.ora` 항목으로 구성됩니다. 데이터 손실이 [FastStartFailoverLagLimit](https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/oracle-data-guard-broker-properties.html) 구성(초 단위 값) 내에 있는 한 최대 성능 보호 모드로 FSFO를 활성화할 수 있지만 데이터 손실이 전혀 없도록(RPO=0) 하려면 최대 가용성 보호 모드를 사용해야 합니다.**비 CDB**<pre>DGMGRL> show configuration;<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_a - Primary database<br />orcl_d - Physical standby database <br />Fast-Start Failover: Disabled<br />Configuration Status:<br />SUCCESS (status updated 58 seconds ago)<br />DGMGRL> show configuration lag<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_a - Primary database<br />orcl_d - Physical standby database <br />Transport Lag: 0 seconds (computed 1 second ago)<br />Apply Lag: 0 seconds (computed 1 second ago)<br />Fast-Start Failover: Disabled<br />Configuration Status:<br />SUCCESS (status updated 5 seconds ago)<br />DGMGRL></pre>**CDB**<pre>-bash-4.2$ dgmgrl C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_A<br />DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Jan 18 06:55:09 2023<br />Version 19.16.0.0.0<br />Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.<br />Welcome to DGMGRL, type "help" for information.<br />Password:<br />Connected to "RDSCDB_A"<br />Connected as SYSDG.<br />DGMGRL> show configuration<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_a - Primary database<br />    rdscdb_b - Physical standby database <br />Fast-Start Failover:  Disabled<br />Configuration Status:<br />SUCCESS   (status updated 18 seconds ago)<br />DGMGRL></pre> | DBA | 
| 대기 데이터베이스를 장애 조치 대상으로 수정합니다. | 프라이머리 노드 또는 옵저버 노드에서 하나의 대기 데이터베이스로 접속합니다. (구성에 여러 대기 데이터베이스가 있을 수 있지만 지금은 하나만 연결하면 됩니다.)**비 CDB**<pre>DGMGRL> edit database orcl_a set property FastStartFailoverTarget='orcl_d';<br />Property "faststartfailovertarget" updated<br />DGMGRL> edit database orcl_d set property FastStartFailoverTarget='orcl_a';<br />Property "faststartfailovertarget" updated<br />DGMGRL> show database orcl_a FastStartFailoverTarget;<br />FastStartFailoverTarget = 'orcl_d'<br />DGMGRL> show database orcl_d FastStartFailoverTarget;<br />FastStartFailoverTarget = 'orcl_a'<br />DGMGRL></pre>**CDB**<pre>DGMGRL> edit database orcl_a set property FastStartFailoverTarget='rdscdb_b';<br />Object "orcl_a" was not found<br />DGMGRL> edit database rdscdb_a set property FastStartFailoverTarget='rdscdb_b';<br />Property "faststartfailovertarget" updated<br />DGMGRL> edit database rdscdb_b set property FastStartFailoverTarget='rdscdb_a';<br />Property "faststartfailovertarget" updated<br />DGMGRL> show database rdscdb_a FastStartFailoverTarget;<br />  FastStartFailoverTarget = 'rdscdb_b'<br />DGMGRL> show database rdscdb_b FastStartFailoverTarget;<br />  FastStartFailoverTarget = 'rdscdb_a'<br />DGMGRL></pre> | DBA | 
| DGMGRL에 대한 연결을 위해 FastStartFailoverThreshold를 구성합니다. | Oracle 19c의 기본값은 30초이고 최소값은 6초입니다. 값이 낮으면 장애 조치 중에 Recovery Time Objective (RTO)가 단축될 가능성이 있습니다. 값이 높을수록 기본 데이터베이스에서 불필요한 장애 조치 일시적 오류가 발생할 가능성을 줄이는 데 도움이 됩니다.Oracle용 RDS Custom 자동화 프레임워크는 데이터베이스 상태를 모니터링하고 몇 초마다 수정 작업을 수행합니다. 따라서 FastStartFailoverThreshold를 10초보다 큰 값으로 설정하는 것이 좋습니다. 다음 예제에서는 임계값을 35초로 구성합니다.**비·CBD 또는 CDB**<pre>DGMGRL> edit configuration set property FastStartFailoverThreshold=35;<br />Property "faststartfailoverthreshold" updated<br />DGMGRL> show configuration FastStartFailoverThreshold;<br />FastStartFailoverThreshold = '35'<br />DGMGRL></pre> | DBA | 
| 기본 또는 옵저버 노드에서 DGMGRL에 연결하여 FSFO를 활성화합니다. | 데이터베이스에 [플래시백 데이터베이스](https://docs.oracle.com/en/database/oracle/oracle-database/19/rcmrf/FLASHBACK-DATABASE.html#GUID-584AC79A-40C5-45CA-8C63-DED3BE3A4511)가 활성화되지 않은 경우 경고 메시지 `ORA-16827`가 나타납니다. 선택적 플래시백 데이터베이스를 사용하면 [FastStartFailoverAutoReinstate](https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/oracle-data-guard-broker-properties.html#GUID-824E97C0-EEB0-4E1B-BD4A-F5AE282CEA28) 구성 속성이 `TRUE`(기본값)으로 설정된 경우 장애가 발생한 기본 데이터베이스를 장애 조치 이전의 특정 시점으로 자동으로 복원할 수 있습니다.**비 CDB**<pre>DGMGRL> enable fast_start failover;<br />Warning: ORA-16827: Flashback Database is disabled<br />Enabled in Zero Data Loss Mode.<br />DGMGRL> <br />DGMGRL> show configuration<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_a - Primary database<br />Warning: ORA-16819: fast-start failover observer not started<br />orcl_d - (*) Physical standby database <br />Warning: ORA-16819: fast-start failover observer not started<br />Fast-Start Failover: Enabled in Zero Data Loss Mode<br />Configuration Status:<br />WARNING (status updated 29 seconds ago)<br />DGMGRL></pre>**CDB**<pre>DGMGRL> enable fast_start failover;<br />Warning: ORA-16827: Flashback Database is disabled<br />Enabled in Zero Data Loss Mode.<br />DGMGRL> show configuration;<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_a - Primary database<br />    Warning: ORA-16819: fast-start failover observer not started<br />    rdscdb_b - (*) Physical standby database <br />Fast-Start Failover: Enabled in Zero Data Loss Mode<br />Configuration Status:<br />WARNING   (status updated 11 seconds ago)<br />DGMGRL></pre> | DBA | 
| FSFO 모니터링을 위한 옵저버를 시작하고 상태를 확인합니다. | FSFO를 활성화하기 전 또는 활성화한 후에 옵저버를 시작할 수 있습니다. FSFO가 이미 활성화된 경우 옵저버는 즉시 기본 및 대상 대기 데이터베이스에 대한 상태 및 연결 모니터링을 시작합니다. FSFO가 활성화되지 않은 경우 옵저버는 FSFO가 활성화될 때까지 모니터링을 시작하지 않습니다.옵저버를 시작하면 이전 `show configuration` 명령에서 알 수 있듯이 기본 DB 구성이 오류 메시지 없이 표시됩니다.**비 CDB**<pre>DGMGRL> start observer;<br />[W000 2022-12-01T06:16:51.271+00:00] FSFO target standby is orcl_d<br />Observer 'ip-10-0-1-89' started<br />[W000 2022-12-01T06:16:51.352+00:00] Observer trace level is set to USER<br /><br />DGMGRL> show configuration<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_a - Primary database<br />orcl_d - (*) Physical standby database <br />Fast-Start Failover: Enabled in Zero Data Loss Mode<br />Configuration Status:<br />SUCCESS (status updated 56 seconds ago)<br />DGMGRL> <br /><br />DGMGRL> show observer<br />Configuration - rds_dg<br />Primary: orcl_a<br />Active Target: orcl_d<br />Observer "ip-10-0-1-89" - Master<br />Host Name: ip-10-0-1-89<br />Last Ping to Primary: 1 second ago<br />Last Ping to Target: 1 second ago<br />DGMGRL></pre>**CDB**<pre>DGMGRL> start observer;<br />Succeeded in opening the observer file "/home/oracle/fsfo_ip-10-0-1-56.dat".<br />[W000 2023-01-18T07:31:32.589+00:00] FSFO target standby is rdscdb_b<br />Observer 'ip-10-0-1-56' started<br />The observer log file is '/home/oracle/observer_ip-10-0-1-56.log'.<br /><br />DGMGRL> show configuration<br />Configuration - rds_dg<br />  Protection Mode: MaxAvailability<br />  Members:<br />  rdscdb_a - Primary database<br />    rdscdb_b - (*) Physical standby database <br />Fast-Start Failover: Enabled in Zero Data Loss Mode<br />Configuration Status:<br />SUCCESS   (status updated 12 seconds ago)<br />DGMGRL> <br /><br />DGMGRL> show observer;<br />Configuration - rds_dg<br />  Primary:            rdscdb_a<br />  Active Target:      rdscdb_b<br />Observer "ip-10-0-1-56" - Master<br />  Host Name:                    ip-10-0-1-56<br />  Last Ping to Primary:         1 second ago<br />  Last Ping to Target:          2 seconds ago<br />DGMGRL></pre> | DBA | 
| 장애 조치 확인합니다. | 이 시나리오에서는 기본 EC2 인스턴스를 수동으로 중지하여 장애 조치 테스트를 수행할 수 있습니다. EC2 인스턴스를 중지하기 전에 `tail` 명령을 사용하여 구성을 기반으로 옵저버 로그 파일을 모니터링합니다. `DGMGRL`을 사용하여 사용자 `RDS_DATAGUARD`로 대기 데이터베이스 `orcl_d`에 로그인하고 Oracle Data Guard 상태를 확인합니다. `orcl_d`은 새로운 기본 데이터베이스라고 표시되어야 합니다.이 장애 조치 테스트 시나리오에서는 `orcl_d`가 비CDB 데이터베이스입니다.장애 조치 전에는 플래시백 데이터베이스가 `orcl_a`에서 활성화되었습니다. 이전의 기본 데이터베이스가 온라인 상태로 돌아와 `MOUNT` 상태로 시작되면 옵저버는 해당 데이터베이스를 새로운 대기 데이터베이스로 복원합니다. 복원된 데이터베이스는 새로운 기본 데이터베이스의 FSFO 대상 역할을 합니다. 옵저버 로그에서 세부 정보를 확인할 수 있습니다.<pre>DGMGRL> show configuration<br />Configuration - rds_dg<br />Protection Mode: MaxAvailability<br />Members:<br />orcl_d - Primary database<br />Warning: ORA-16824: multiple warnings, including fast-start failover-related warnings, detected for the database<br />orcl_a - (*) Physical standby database (disabled)<br />ORA-16661: the standby database needs to be reinstated<br />Fast-Start Failover: Enabled in Zero Data Loss Mode<br />Configuration Status:<br />WARNING (status updated 25 seconds ago)<br />DGMGRL></pre>다음은 `observer.log`에서의 출력 예입니다.<pre>$ tail -f /tmp/observer.log<br />Unable to connect to database using rds_custom_orcl_a<br />[W000 2023-01-18T07:50:32.589+00:00] Primary database cannot be reached.<br />[W000 2023-01-18T07:50:32.589+00:00] Fast-Start Failover threshold has expired.<br />[W000 2023-01-18T07:50:32.590+00:00] Try to connect to the standby.<br />[W000 2023-01-18T07:50:32.590+00:00] Making a last connection attempt to primary database before proceeding with Fast-Start Failover.<br />[W000 2023-01-18T07:50:32.591+00:00] Check if the standby is ready for failover.<br />[S002 2023-01-18T07:50:32.591+00:00] Fast-Start Failover started...<br />2023-01-18T07:50:32.591+00:00<br />Initiating Fast-Start Failover to database "orcl_d"...<br />[S002 2023-01-18T07:50:32.592+00:00] Initiating Fast-start Failover.<br />Performing failover NOW, please wait...<br />Failover succeeded, new primary is "orcl_d"<br />2023-01-18T07:55:32.101+00:00<br />[S002 2023-01-18T07:55:32.591+00:00] Fast-Start Failover finished...<br />[W000 2023-01-18T07:55:32.591+00:00] Failover succeeded. Restart pinging.<br />[W000 2023-01-18T07:55:32.603+00:00] Primary database has changed to orcl_d.<br />[W000 2023-01-18T07:55:33.618+00:00] Try to connect to the primary.<br />[W000 2023-01-18T07:55:33.622+00:00] Try to connect to the primary rds_custom_orcl_d.<br />[W000 2023-01-18T07:55:33.634+00:00] The standby orcl_a needs to be reinstated<br />[W000 2023-01-18T07:55:33.654+00:00] Try to connect to the new standby orcl_a.<br />[W000 2023-01-18T07:55:33.654+00:00] Connection to the primary restored!<br />[W000 2023-01-18T07:55:35.654+00:00] Disconnecting from database rds_custom_orcl_d.<br />[W000 2023-01-18T07:55:57.701+00:00] Try to connect to the new standby orcl_a.<br />ORA-12170: TNS:Connect timeout occurred</pre> | DBA | 

### Oracle Peoplesoft 애플리케이션과 데이터베이스 간의 연결 구성
<a name="configure-connectivity-between-the-oracle-peoplesoft-application-and-the-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 데이터베이스에서 서비스를 생성하고 시작합니다. | 구성에 기본 및 대기 데이터베이스 엔드포인트가 모두 포함된 TNS 항목을 사용하면 역할 전환 중에 애플리케이션 구성이 변경되지 않도록 할 수 있습니다. 읽기/쓰기 및 읽기 전용 워크로드를 모두 지원하는 두 개의 역할 기반 데이터베이스 서비스를 정의할 수 있습니다. 다음 예에서는 기본 데이터베이스에서 `orcl_rw`는 기본 데이터베이스에 활성화된 읽기/쓰기 서비스입니다. `orcl_ro`는 읽기 전용 서비스이며 읽기 전용 모드로 열린 대기 데이터베이스에서 활성화됩니다.<pre>SQL> select name,open_mode from v$database;<br />NAME OPEN_MODE<br />--------- --------------------<br />ORCL READ WRITE<br />SQL> exec dbms_service.create_service('orcl_rw','orcl_rw');<br />PL/SQL procedure successfully completed.<br />SQL> exec dbms_service.create_service('orcl_ro','orcl_ro');<br />PL/SQL procedure successfully completed.<br /><br />SQL> exec dbms_service.start_service('orcl_rw');<br />PL/SQL procedure successfully completed.<br />SQL></pre> | DBA | 
| 대기 데이터베이스에서 서비스를 시작합니다. | 읽기 전용 대기 데이터베이스에서 서비스를 시작하려면 다음 코드를 사용합니다.<pre>SQL> select name,open_mode from v$database;<br />NAME OPEN_MODE<br />--------- --------------------<br />ORCL READ ONLY WITH APPLY<br />SQL> exec dbms_service.start_service('orcl_ro');<br />PL/SQL procedure successfully completed.<br />SQL></pre> | DBA | 
| 기본 DB 재시작 시 서비스 시작을 자동화합니다. | 서비스를 다시 시작할 때 기본 데이터베이스에서 서비스를 자동으로 시작하려면 다음 코드를 사용합니다.<pre>SQL> CREATE OR REPLACE TRIGGER TrgDgServices after startup on database<br />DECLARE<br />db_role VARCHAR(30);<br />db_open_mode VARCHAR(30);<br />BEGIN<br />SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;<br />IF db_role = 'PRIMARY' THEN<br />DBMS_SERV 2 ICE.START_SERVICE('orcl_rw');<br />END IF;<br />IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN<br />DBMS_SERVICE.START_SERVICE('orcl_ro');<br />END IF;<br />END;<br />/ <br />Trigger created.<br />SQL> </pre> | DBA | 
| 읽기/쓰기 데이터베이스와 읽기 전용 데이터베이스 간의 연결을 구성합니다. | 다음 애플리케이션 구성 예제를 읽기/쓰기 및 읽기 전용 연결에 사용할 수 있습니다.<pre>ORCL_RW = (DESCRIPTION =<br />(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)<br />(ADDRESS_LIST =<br />(ADDRESS = (PROTOCOL = TCP)(HOST=devpsftdb.******.us-west-2.rds.amazonaws.com)(PORT=1521))<br />(ADDRESS = (PROTOCOL = TCP)(HOST=psftread.******.us-west-2.rds.amazonaws.com)(PORT=1521))<br />)<br />(CONNECT_DATA=(SERVICE_NAME = orcl_rw))<br />)<br />ORCL_RO = (DESCRIPTION =<br />(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)<br />(ADDRESS_LIST =<br />(ADDRESS = (PROTOCOL = TCP)(HOST=devpsftdb.******.us-west-2.rds.amazonaws.com)(PORT=1521))<br />(ADDRESS = (PROTOCOL = TCP)(HOST=psftread.******.us-west-2.rds.amazonaws.com)(PORT=1521))<br />)<br />(CONNECT_DATA=(SERVICE_NAME = orcl_ro))<br />)</pre> | DBA | 

## 관련 리소스
<a name="transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle-resources"></a>
+ [Oracle용 Amazon RDS Custom에서 Data Guard를 사용하여 고가용성 활성화](https://d1.awsstatic.com/whitepapers/enabling-high-availability-with-data-guard-on-amazon-rds-custom-for-oracle.pdf)(AWS 기술 가이드)
+ [Amazon RDS를 Oracle PeopleSoft 데이터베이스로 구성](https://d1.awsstatic.com/whitepapers/configuring-amazon-rds-as-peoplesoft-database.pdf)(AWS 백서)
+ [Oracle Data Guard Broker](https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/index.html) 가이드(Oracle 참조 문서)
+ [Oracle Data Guard Concepts 및 Administration](https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/index.html)(Oracle 참조 문서)
+ [Oracle Data Guard Specific FAN 및 FCF Configuration Requirements](https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/using-data-guard-broker-to-manage-switchovers-failovers.html#GUID-DFFDAA2B-A889-49AD-AB85-747D73FF0FF5)(Oracle 참조 문서)

# 계정 간에 Amazon Redshift 클러스터에서 Amazon S3로 데이터 언로드
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3"></a>

*Andrew Kamel, Amazon Web Services*

## 요약
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-summary"></a>

애플리케이션을 테스트할 때는 테스트 환경에 프로덕션 데이터를 확보하는 것이 좋습니다. 프로덕션 데이터를 사용하면 개발 중인 애플리케이션을 보다 정확하게 평가할 수 있습니다.

이 패턴은 프로덕션 환경의 Amazon Redshift 클러스터에서 Amazon Web Services()의 개발 환경의 Amazon Simple Storage Service(Amazon S3) 버킷으로 데이터를 추출합니다AWS.

패턴은 다음을 포함하여 DEV 및 PROD 계정의 설정을 단계별로 수행합니다.
+ 필수 리소스
+ AWS Identity and Access Management (IAM) 역할
+ Amazon Redshift 연결을 지원하기 위한 서브넷, 보안 그룹 및 Virtual Private Cloud(VPC)에 대한 네트워크 조정
+ 아키텍처를 테스트하기 위한 Python 런타임이 있는 예제 AWS Lambda 함수

Amazon Redshift 클러스터에 대한 액세스 권한을 부여하기 위해 패턴은를 사용하여 관련 자격 증명을 AWS Secrets Manager 저장합니다. 이점은 Amazon Redshift 클러스터의 위치를 알 필요 없이 Amazon Redshift 클러스터에 직접 연결하는 데 필요한 모든 정보를 확보하는 것입니다. 또한 [시크릿 사용을 모니터링](https://docs.aws.amazon.com/secretsmanager/latest/userguide/monitoring.html)할 수 있습니다.

Secrets Manager에 저장된 보안 암호에는 Amazon Redshift 클러스터의 호스트, 데이터베이스 이름, 포트 및 관련 보안 인증 정보가 포함됩니다.

이 패턴 사용 시 보안 고려 사항에 대한 자세한 내용은 [모범 사례](#unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-best-practices) 섹션을 참조하세요.

## 사전 조건 및 제한 사항
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-prereqs"></a>

**사전 조건 **
+ PROD 계정에서 [실행되는 Amazon Redshift 클러스터](https://docs.aws.amazon.com/redshift/latest/gsg/new-user.html) 
+ DEV 계정에서 [생성된 S3 버킷](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 
+ DEV 계정과 PROD 계정 간의 [VPC 피어링](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html) 및 그에 따라 [조정된 라우팅 테이블](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-routing.html) 
+ DNS 호스트 이름과 DNS 확인에 대해 두 VPC를 모두 활성화해야 합니다.

**제한 사항 **
+ 쿼리하려는 데이터의 양에 따라 Lambda 함수가 시간 초과될 수 있습니다.

  실행이 최대 Lambda 제한 시간(15분)보다 오래 걸리는 경우 Lambda 코드에 비동기식 접근 방식을 사용합니다. 이 패턴의 코드 예시는 현재 비동기 처리를 지원하지 않는 Python용 [psycopg2](https://github.com/psycopg/psycopg2) 라이브러리를 사용합니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-architecture"></a>

다음 다이어그램은 DEV 및 PROD 계정이 있는 대상 아키텍처를 보여줍니다.

![\[DEV 계정의 Lambda VPC와 PROD 계정의 Amazon Redshift VPC입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5c83c617-3a85-4aea-a7a7-930f406d1cef/images/fa4d01df-483d-4454-9711-b391ebbe4629.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. DEV 계정의 Lambda 함수는 PROD 계정의 Secrets Manager에서 Amazon Redshift 자격 증명에 액세스하는 데 필요한 IAM 역할을 수임합니다.

   그러면 Lambda 함수가 Amazon Redshift 클러스터 시크릿을 검색합니다.

1. DEV 계정의 Lambda 함수는 정보를 사용하여 피어링된 VPCs를 통해 PROD 계정의 Amazon Redshift 클러스터에 연결합니다.

   그런 다음 Lambda 함수는 언로드 명령을 전송하여 PROD 계정의 Amazon Redshift 클러스터를 쿼리합니다.

1. PROD 계정의 Amazon Redshift 클러스터는 DEV 계정의 S3 버킷에 액세스하기 위해 관련 IAM 역할을 수임합니다.

   Amazon Redshift 클러스터는 쿼리된 데이터를 DEV 계정의 S3 버킷으로 언로드합니다.

**Amazon Redshift에서 데이터 쿼리**

다음 다이어그램은 Amazon Redshift 자격 증명을 검색하고 Amazon Redshift 클러스터에 연결하는 데 사용되는 역할을 보여줍니다. 워크플로는 Lambda 함수에 의해 시작됩니다.

![\[계정 간에 역할을 수임하기 위한 3단계 프로세스입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5c83c617-3a85-4aea-a7a7-930f406d1cef/images/ab25b72c-773c-4d58-9012-4a3755c181ff.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. DEV 계정`CrossAccount-SM-Read-Role`의는 PROD 계정`SM-Read-Role`의를 수임합니다.

1. `SM-Read-Role` 역할은 연결된 정책을 사용하여 Secrets Manager에서 시크릿을 검색합니다.

1. 자격 증명은 Amazon Redshift 클러스터에 액세스하는 데 사용됩니다.

Amazon S3로 데이터 업로드

다음 다이어그램은 데이터를 추출하고 Amazon S3에 업로드하기 위한 교차 계정 읽기-쓰기 프로세스를 보여줍니다. 워크플로는 Lambda 함수에 의해 시작됩니다. 패턴은 [Amazon Redshift의 IAM 역할을 연결합니다](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles). Amazon Redshift 클러스터에서 오는 언로드 명령은를 수임`CrossAccount-S3-Write-Role`한 다음를 수임합니다`S3-Write-Role`. 이 역할 체인은 Amazon Redshift에 Amazon S3에 대한 액세스 권한을 부여합니다.

![\[자격 증명을 가져오고, Amazon Redshift에 액세스하고, Amazon S3에 데이터를 업로드하는 역할입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5c83c617-3a85-4aea-a7a7-930f406d1cef/images/d2982fc6-1d12-4f9d-9493-a99ce691d693.png)


이 워크플로는 다음 워크플로우를 포함합니다.

1. DEV 계정`CrossAccount-SM-Read-Role`의는 PROD 계정`SM-Read-Role`의를 수임합니다.

1. `SM-Read-Role`는 Secrets Manager에서 Amazon Redshift 자격 증명을 검색합니다.

1. Lambda 함수는 Amazon Redshift 클러스터에 연결하고 쿼리를 전송합니다.

1. Amazon Redshift 클러스터는를 수임합니다`CrossAccount-S3-Write-Role`.

1. 는 DEV 계정`S3-Write-Role`에서를 `CrossAccount-S3-Write-Role` 가정합니다.

1. 쿼리 결과는 DEV 계정의 S3 버킷으로 언로드됩니다.

## 도구
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-tools"></a>

**AWS 서비스**
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)는 AWS 클라우드에서 관리되는 페타바이트급 데이터 웨어하우스 서비스입니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 이용하면 코드의 시크릿을 포함해 하드 코딩된 보안 인증을 Secrets Manager에서 프로그래밍 방식으로 시크릿을 검색하도록 하는 API 호출로 바꿀 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [unload-redshift-to-s3-python](https://github.com/aws-samples/unload-redshift-to-s3-python/) 리포지토리에서 사용할 수 있습니다.

## 모범 사례
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-best-practices"></a>

**보안 면책 조항**

이 솔루션을 구현하기 전에 다음과 같은 중요한 보안 권장 사항을 고려하세요.
+ 개발 계정과 프로덕션 계정을 연결하면 범위를 늘리고 전반적인 보안 태세를 낮출 수 있습니다. 이 솔루션을 일시적으로만 배포하고 데이터의 필요한 부분을 추출한 다음 배포된 리소스를 즉시 삭제하는 것이 좋습니다. 리소스를 삭제하려면 Lambda 함수를 삭제하고,이 솔루션에 대해 생성된 IAM 역할 및 정책을 제거하고, 계정 간에 부여된 네트워크 액세스를 취소해야 합니다.
+ 프로덕션 환경에서 개발 환경으로 데이터를 복사하기 전에 보안 및 규정 준수 팀에 문의하세요. 개인 식별 정보(PII), 보호 대상 건강 정보(PHI) 및 기타 기밀 또는 규제 데이터는 일반적으로 이러한 방식으로 복사해서는 안 됩니다. 공개적으로 사용 가능한 비기밀 정보(예: 상점 프런트엔드의 공개 주식 데이터)만 복사합니다. 가능하면 프로덕션 데이터를 사용하는 대신 데이터를 토큰화하거나 익명화하거나 합성 테스트 데이터를 생성하는 것이 좋습니다. [AWS 보안 원칙](https://docs.aws.amazon.com/en_us/wellarchitected/2022-03-31/framework/sec-design.html) 중 하나는 데이터에서 사람을 멀리하는 것입니다. 즉, 개발자는 프로덕션 계정에서 작업을 수행해서는 안 됩니다.
+ 프로덕션 환경의 Amazon Redshift 클러스터에서 데이터를 읽을 수 있으므로 개발 계정의 Lambda 함수에 대한 액세스를 제한합니다.
+ 프로덕션 환경이 중단되지 않도록 하려면 다음 권장 사항을 구현합니다.
  + 테스트 및 개발 활동에 별도의 전용 개발 계정을 사용합니다.
  + 엄격한 네트워크 액세스 제어를 구현하고 계정 간 트래픽을 필요한 것으로만 제한합니다.
  + 프로덕션 환경 및 데이터 소스에 대한 액세스를 모니터링하고 감사합니다.
  + 관련된 모든 리소스 및 서비스에 대해 최소 권한 액세스 제어를 구현합니다.
  +  AWS Secrets Manager 보안 암호 및 IAM 역할 액세스 키와 같은 자격 증명을 정기적으로 검토하고 교체합니다.
+ 이 문서에 사용된 서비스에 대한 다음 보안 설명서를 참조하세요.
  + [AWS Lambda 보안](https://docs.aws.amazon.com/lambda/latest/dg/lambda-security.html)
  + Amazon Redshift 보안 그룹
  + [Amazon S3 보안](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security.html)
  + [AWS Secrets Manager 보안](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security.html)
  + [IAM 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)

프로덕션 데이터 및 리소스에 액세스할 때는 보안이 최우선 순위입니다. 항상 모범 사례를 따르고, 최소 권한 액세스 제어를 구현하고, 보안 조치를 정기적으로 검토하고 업데이트하세요.

## 에픽
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-epics"></a>

### Amazon Redshift에서 데이터 쿼리
<a name="query-data-from-amazon-redshift"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 이 보안 암호는 Amazon Redshift 클러스터용 입니다. | Amazon Redshift 클러스터의 시크릿을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
| 역할을 생성하여 Secrets Manager에 액세스합니다. | IAM 역할을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 

### Amazon S3로 데이터 업로드
<a name="upload-data-to-s3"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷에 액세스하기 위한 IAM 역할 | S3 버킷에 액세스하기 위한 역할을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
| Amazon Redshift 역할을 생성합니다. | IAM 역할을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 

### Lambda 함수 배포
<a name="deploy-the-lam-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 함수를 배포합니다. | 피어링된 VPC에 Lambda 함수를 배포하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 

### 아키텍처 테스트
<a name="test-the-architecture"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필요한 리소스를 가져옵니다. | 필요한 리소스를 가져오려면 다음 명령을 실행합니다.<pre>import ast<br />import boto3<br />import psycopg2<br />import base64<br />from botocore.exceptions import ClientError</pre> | 앱 개발자 | 
| Lambda 핸들러 함수를 실행합니다. | Lambda 함수는 교차 계정 액세스 및 임시 자격 증명 관리에 AWS Security Token Service (AWS STS)를 사용합니다. 함수는 AssumeRole API 작업을 사용하여 `sm_read_role` IAM 역할의 권한을 일시적으로 수임합니다.Lambda 함수를 생성하려면 다음 코드를 실행합니다.<pre>def lambda_handler(event, context):<br />    sts_client = boto3.client('sts')<br /><br />    # Secrets Manager Configurations<br />    secret_name = "redshift_creds"<br />    sm_region = "eu-west-1"<br />    sm_read_role = "arn:aws:iam::PROD_ACCOUNT_NUMBER:role/SM-Read-Role"<br /><br />    # S3 Bucket Configurations<br />    s3_bucket_path = "s3://mybucket/"<br />    s3_bucket_region = "eu-west-1"<br />    s3_write_role = "arn:aws:iam::DEV_ACCOUNT_NUMBER:role/S3-Write-Role"<br /><br />    # Redshift Configurations<br />    sql_query = "select * from category"<br />    redshift_db = "dev"<br />    redshift_s3_write_role = "arn:aws:iam::PROD_ACCOUNT_NUMBER:role/CrossAccount-S3-Write-Role"<br /><br />    chained_s3_write_role = "%s,%s" % (redshift_s3_write_role, s3_write_role)<br /><br />    assumed_role_object = sts_client.assume_role(<br />        RoleArn=sm_read_role,<br />        RoleSessionName="CrossAccountRoleAssumption",<br />        ExternalId="YOUR_EXTERNAL_ID",<br />    )<br />    credentials = assumed_role_object['Credentials']<br /><br />    secret_dict = ast.literal_eval(get_secret(credentials, secret_name, sm_region))<br />    execute_query(secret_dict, sql_query, s3_bucket_path, chained_s3_write_role, s3_bucket_region, redshift_db)<br /><br />    return {<br />        'statusCode': 200<br />    }</pre> | 앱 개발자 | 
| 시크릿을 가져옵니다. | Amazon Redshift 시크릿을 가져오려면 다음 예시 코드를 사용합니다.<pre>def get_secret(credentials, secret_name, sm_region):<br />    # Create a Secrets Manager client<br />    session = boto3.session.Session()<br />    sm_client = session.client(<br />        service_name='secretsmanager',<br />        aws_access_key_id=credentials['AccessKeyId'],<br />        aws_secret_access_key=credentials['SecretAccessKey'],<br />        aws_session_token=credentials['SessionToken'],<br />        region_name=sm_region<br />    )<br /><br />    try:<br />        get_secret_value_response = sm_client.get_secret_value(<br />            SecretId=secret_name<br />        )<br />    except ClientError as e:<br />        print(e)<br />        raise e<br />    else:<br />        if 'SecretString' in get_secret_value_response:<br />            return get_secret_value_response['SecretString']<br />        else:<br />            return base64.b64decode(get_secret_value_response['SecretBinary'])</pre> | 앱 개발자 | 
| 언로드 명령을 실행합니다. | 데이터를 S3 버킷으로 언로드하려면 다음 예시 코드를 사용합니다.<pre>def execute_query(secret_dict, sql_query, s3_bucket_path, chained_s3_write_role, s3_bucket_region, redshift_db):<br />    conn_string = "dbname='%s' port='%s' user='%s' password='%s' host='%s'" \<br />                  % (redshift_db,<br />                     secret_dict["port"],<br />                     secret_dict["username"],<br />                     secret_dict["password"],<br />                     secret_dict["host"])<br /><br />    con = psycopg2.connect(conn_string)<br /><br />    unload_command = "UNLOAD ('{}') TO '{}' IAM_ROLE '{}' DELIMITER '|' REGION '{}';" \<br />        .format(sql_query,<br />                s3_bucket_path + str(datetime.datetime.now()) + ".csv",<br />                chained_s3_write_role,<br />                s3_bucket_region)<br /><br />    # Opening a cursor and run query<br />    cur = con.cursor()<br />    cur.execute(unload_command)<br /><br />    print(cur.fetchone())<br />    cur.close()<br />    con.close()</pre> | 앱 개발자 | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 함수를 삭제합니다. | 예상치 못한 비용이 발생하지 않도록 DEV 계정과 PROD 계정 간의 리소스 및 연결을 제거합니다.Lambda 함수를 제거하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
| IAM 역할 및 정책을 제거합니다. | DEV 및 PROD 계정에서 IAM 역할 및 정책을 제거합니다.대상 계정에서 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html)대상 계정에서 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
| Secrets Manager에서 보안 암호 삭제 | 시크릿을 삭제하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
| VPC 피어링 및 보안 그룹 규칙을 제거합니다. | VPC 피어링 및 보안 그룹 규칙을 제거하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
| S3 버킷에서 데이터를 제거합니다. | Amazon S3에서 데이터를 제거하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
|  AWS KMS 키를 정리합니다. | 암호화를 위한 사용자 지정 AWS KMS 키를 생성한 경우 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 
| Amazon CloudWatch logs를 검토하고 삭제합니다. | CloudWatch 로그를 삭제하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.html) | DevOps 엔지니어 | 

## 관련 리소스
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-resources"></a>
+ [Amazon CloudWatch 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [IAM 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)
+ [Lambda 설명서](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [Amazon Redshift 설명서](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html)
+ [Amazon S3 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)
+ [AWS Secrets Manager 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [AWS 보안 원칙](https://docs.aws.amazon.com/en_us/wellarchitected/2022-03-31/framework/sec-design.html)

## 추가 정보
<a name="unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3-additional"></a>

Amazon Redshift에서 Amazon S3로 데이터를 언로드한 후 Amazon Athena를 사용하여 데이터를 분석할 수 있습니다.

[Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html)는 대용량 데이터에 액세스해야 할 때 유용한 빅 데이터 쿼리 서비스입니다. 서버나 데이터베이스를 프로비저닝하지 않고도 Athena를 사용할 수 있습니다. Athena는 복잡한 쿼리를 지원하며 다양한 객체에서 실행할 수 있습니다.

대부분의 경우와 마찬가지로 Athena 사용의 AWS 서비스주요 이점은 복잡성을 추가하지 않고도 쿼리를 실행하는 방법에 뛰어난 유연성을 제공한다는 것입니다. Athena를 사용하는 경우 데이터 형식을 변경하지 않고도 Amazon S3에서 CSV 및 JSON과 같은 다양한 데이터 형식을 쿼리할 수 있습니다. 외부를 포함한 다양한 소스에서 데이터를 쿼리할 수 있습니다 AWS. Athena는 서버를 관리할 필요가 없으므로 복잡성을 줄입니다. Athena는 쿼리를 실행하기 전에 데이터를 로드하거나 변경하지 않고 Amazon S3에서 직접 데이터를 읽습니다.

# 워크로드별 데이터베이스 마이그레이션 패턴
<a name="databases-database-migration-patterns-by-workload-pattern-list"></a>

**Topics**
+ [IBM](databases-database-migration-patterns-by-workload-ibm-pattern-list.md)
+ [Microsoft](databases-database-migration-patterns-by-workload-microsoft-pattern-list.md)
+ [N/A](databases-database-migration-patterns-by-workload-notapplicable-pattern-list.md)
+ [오픈 소스](databases-database-migration-patterns-by-workload-open-source-pattern-list.md)
+ [Oracle](databases-database-migration-patterns-by-workload-oracle-pattern-list.md)
+ [SAP](databases-database-migration-patterns-by-workload-sap-pattern-list.md)

# IBM
<a name="databases-database-migration-patterns-by-workload-ibm-pattern-list"></a>

**Topics**
+ [AWS DMS를 사용하여 Db2 데이터베이스를 Amazon EC2에서 Aurora MySQL과 호환되는 Aurora로 마이그레이션](migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.md)
+ [중단 시간을 줄이기 위해 로그 전달을 사용하여 Db2 for LUW를 Amazon EC2로 마이그레이션](migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.md)
+ [고가용성 재해 복구 기능을 갖춘 Db2 for LUW를 Amazon EC2로 마이그레이션하세요.](migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2의 IBM Db2에서 PostgreSQL과 호환되는 Aurora PostgreSQL로 마이그레이션하십시오.](migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.md)
+ [IBM WebSphere Application Server에서 Amazon EC2의 Apache Tomcat으로 마이그레이션](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2.md)
+ [IBM Db2, SAP, Sybase 및 기타 데이터베이스에서의 MongoDB Atlas로 데이터 스트리밍 AWS](stream-data-from-ibm-db2-to-mongodb-atlas.md)

# Microsoft
<a name="databases-database-migration-patterns-by-workload-microsoft-pattern-list"></a>

**Topics**
+ [Microsoft 워크로드 검색 및 AWS로의 마이그레이션 가속화](accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.md)
+ [연결된 서버를 사용하여 Amazon EC2의 Microsoft SQL Server에서 온프레미스 Microsoft SQL Server 테이블에 액세스](access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers.md)
+ [SQL Server 데이터베이스를 AWS의 MongoDB Atlas로 마이그레이션하기 위한 쿼리 성능 평가](assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws.md)
+ [AWS Lambda 및 Task Scheduler를 사용하여 Amazon EC2에서 실행되는 SQL Server Express 에디션에서 데이터베이스 작업 자동화](automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.md)
+ [Microsoft SQL Server에서 Amazon Aurora PostgreSQL-Compatible Edition으로 데이터베이스 마이그레이션을 지원하도록 Python 및 Perl 애플리케이션 변경](change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.md)
+ [AWS 기반 SQL Server의 Always On 가용성 그룹에서 읽기 전용 라우팅 구성](configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.md)
+ [를 사용하여 Amazon RDS for Microsoft SQL Server에 대한 Windows 인증 구성 AWS Managed Microsoft AD](configure-windows-authentication-for-amazon-rds-using-microsoft-ad.md)
+ [Microsoft 엑셀과 Python을 사용하여 AWS DMS 작업을 위한 AWS CloudFormation 템플릿 생성](create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python.md)
+ [Terraform을 사용하여 Amazon EC2 및 Amazon FSx에 SQL Server 장애 조치 클러스터 인스턴스 배포](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [AWS DMS를 사용하여 Microsoft SQL Server 데이터베이스를 Amazon S3로 내보내기](export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.md)
+ [AWS DMS를 사용하여 Amazon RDS for SQL Server 테이블을 S3 버킷으로 내보내기](export-amazon-rds-for-sql-server-tables-to-an-s3-bucket-by-using-aws-dms.md)
+ [SQL Server에서 PostgreSQL로 마이그레이션할 때 PII 데이터에 대한 SHA1 해싱 구현](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [EC2 Windows 인스턴스를 수집하여 AWS Managed Services 계정으로 마이그레이션](ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.md)
+ [FSx for Windows File Server를 사용하여 Amazon EC2에서 Microsoft SQL Server 장애 조치 클러스터 설정](microsoft-sql-failover-cluster-on-amazon-ec2.md)
+ [메시지 대기열을 Microsoft Azure 서비스 버스에서 Amazon SQS로 마이그레이션](migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs.md)
+ [AWS DMS를 사용하여 Microsoft SQL 서버 데이터베이스를 Amazon EC2에서 Amazon DocumentDB로 마이그레이션](migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms.md)
+ [AWS DMS와 AWS SCT를 사용하여 Microsoft SQL Server 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct.md)
+ [Microsoft Azure 앱 서비스의 .NET 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션](migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server.md)
+ [연결된 서버를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers.md)
+ [기본 백업 및 복원 수단을 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.md)
+ [AWS DMS를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms.md)
+ [SCT 데이터 추출 에이전트를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.md)
+ [Linux가 실행되는 Amazon EC2의 Microsoft SQL Server로 온프레미스 Microsoft SQL Server 데이터베이스의 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux.md)
+ [Rclone를 사용하여 Microsoft Azure Blob에서 Amazon S3로 데이터 마이그레이션하기](migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.md)
+ [appcmd.exe를 사용하여 IIS 호스팅 애플리케이션을 Amazon EC2로 마이그레이션](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [를 사용하여 Microsoft SQL Server Always On 가용성 그룹 마이그레이션 AWS Application Migration Service](migrate-microsoft-sql-server-always-on-group-using-mgn.md)
+ [Application Migration Service를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.md)
+ [에서 관계형 데이터베이스를 MongoDB Atlas로 마이그레이션 AWS](migrate-relational-database-to-mongodb-atlas.md)
+ [분산된 가용성 그룹을 사용하여 SQL Server를 AWS로 마이그레이션](migrate-sql-server-to-aws-using-distributed-availability-groups.md)
+ [ACM을 사용하여 Windows SSL 인증서를 Application Load Balancer로 마이그레이션](migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.md)
+ [AWS 클라우드의 온프레미스 워크로드 리호스팅: 마이그레이션 체크리스트](rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist.md)
+ [Microsoft SQL Server를 AWS 클라우드로 마이그레이션한 후 연결 오류 해결](resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.md)
+ [온프레미스 SMTP 서버 및 Database Mail을 사용하여 Amazon RDS for SQL Server 데이터베이스 인스턴스에 대한 알림 전송하기](send-notifications-for-an-amazon-rds-for-sql-server-database-instance-by-using-an-on-premises-smtp-server-and-database-mail.md)
+ [Terraform을 사용하여 데이터베이스 마이그레이션을 위한 CI/CD 파이프라인 설정](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [Amazon FSx를 사용하여 SQL Server Always On FCI용 다중 AZ 인프라 설정](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)

# N/A
<a name="databases-database-migration-patterns-by-workload-notapplicable-pattern-list"></a>

**Topics**
+ [로 리호스팅 마이그레이션하는 동안 방화벽 요청에 대한 승인 프로세스 생성 AWS](create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws.md)
+ [기존 Amazon RDS for PostgreSQL DB 인스턴스 암호화하기](encrypt-an-existing-amazon-rds-for-postgresql-db-instance.md)
+ [Amazon DynamoDB 테이블의 스토리지 비용 추정](estimate-storage-costs-for-an-amazon-dynamodb-table.md)
+ [AWS DMS와 Amazon Aurora를 사용하여 지역 간 재해 복구 구현](implement-cross-region-disaster-recovery-with-aws-dms-and-amazon-aurora.md)

# 오픈 소스
<a name="databases-database-migration-patterns-by-workload-open-source-pattern-list"></a>

**Topics**
+ [Python 애플리케이션을 사용하여 Amazon DynamoDB용 PynamoDB DynamoDB 모델 및 CRUD 함수 자동 생성](automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.md)
+ [pgAdmin에서 SSH 터널을 사용하여 연결](connect-by-using-an-ssh-tunnel-in-pgadmin.md)
+ [Aurora PostgreSQL 호환에서 애플리케이션 사용자 및 역할을 생성](create-application-users-and-roles-in-aurora-postgresql-compatible.md)
+ [Amazon RDS에서 PostgreSQL DB 인스턴스에 대한 암호화된 연결 활성화하기](enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.md)
+ [AWS CLI 및를 AWS SCT AWS DMS 사용하여 Amazon RDS for Oracle을 Amazon RDS for PostgreSQL로 마이그레이션 CloudFormation](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.md)
+ [온프레미스 MariaDB 데이터베이스를 기본 도구를 사용하여 Amazon RDS for MariaDB로 마이그레이션](migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools.md)
+ [온프레미스 MySQL 데이터베이스를 Amazon EC2로 마이그레이션](migrate-an-on-premises-mysql-database-to-amazon-ec2.md)
+ [온프레미스 MySQL 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql.md)
+ [온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-aurora-mysql.md)
+ [온프레미스 PostgreSQL 데이터베이스를 Aurora PostgreSQL로 마이그레이션하기](migrate-an-on-premises-postgresql-database-to-aurora-postgresql.md)
+ [Couchbase Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-couchbase-server-ec2.md)
+ [Auto Scaling을 사용하여 IBM WebSphere 애플리케이션 서버에서 Amazon EC2의 Apache Tomcat으로 마이그레이션하세요.](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling.md)
+ [SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for Oracle로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.md)
+ [pglogical을 사용하여 Amazon EC2의 PostgreSQL에서 Amazon RDS for PostgreSQL로 마이그레이션합니다.](migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.md)
+ [AWS App2Container를 사용하여 온프레미스 Java 애플리케이션을 AWS로 마이그레이션](migrate-on-premises-java-applications-to-aws-using-aws-app2container.md)
+ [Percona XtraBackup, Amazon EFS, Amazon S3을 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션하기](migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.md)
+ [Oracle 외부 테이블을 Amazon Aurora PostgreSQL 호환으로 마이그레이션](migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible.md)
+ [100개 이상의 인수가 있는 Oracle 함수 및 프로시저를 PostgreSQL로 마이그레이션](migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql.md)
+ [Redis 워크로드를 AWS의 Redis Enterprise Cloud로 마이그레이션](migrate-redis-workloads-to-redis-enterprise-cloud-on-aws.md)
+ [암호화를 사용하지 않는 인스턴스가 있는지 Amazon Aurora를 모니터링](monitor-amazon-aurora-for-instances-without-encryption.md)
+ [RHEL 소스 서버를 재부팅한 후 SELinux를 비활성화하지 않고 Replication Agent를 자동으로 다시 시작](restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server.md)
+ [Lambda와 Secrets Manager를 사용하여 Amazon RDS for PostgreSQL 및 Aurora PostgreSQL 작업 예약하기](schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager.md)
+ [pg\$1transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송](transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.md)
+ [계정 간에 Amazon Redshift 클러스터에서 Amazon S3로 데이터 언로드](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)

# Oracle
<a name="databases-database-migration-patterns-by-workload-oracle-pattern-list"></a>

**Topics**
+ [읽기 전용 복제본을 사용하여 Amazon RDS Custom의 Oracle PeopleSoft에 HA 추가](add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica.md)
+ [JSON Oracle 쿼리를 PostgreSQL 데이터베이스 SQL로 변환](convert-json-oracle-queries-into-postgresql-database-sql.md)
+ [Oracle의 VARCHAR2(1) 데이터 유형을 Amazon Aurora PostgreSQL의 부울 데이터 유형으로 변환](convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.md)
+ [PostgreSQL-compatible Aurora 글로벌 데이터베이스를 사용하여 Oracle DR 에뮬레이션하기](emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.md)
+ [Amazon Aurora PostgreSQL 및 Amazon RDS for PostgreSQLPostgreSQL 연결 배열 에뮬레이션](emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql.md)
+ [AWR 보고서를 사용하여 Oracle 데이터베이스의 Amazon RDS 엔진 크기 추정](estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.md)
+ [Aurora PostgreSQL의 동적 SQL 명령문에서 익명 블록 처리](handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql.md)
+ [Oracle SQL Developer 및 AWS SCT를 사용하여 Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 점진적으로 마이그레이션](incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.md)
+ [Aurora PostgreSQL-Compatible에서 파일 인코딩을 사용하여 BLOB 파일을 TEXT에 로드](load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.md)
+ [AWS DMS를 사용하여 SSL 모드에서 Amazon RDS for Oracle를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.md)
+ [Amazon RDS for Oracle 데이터베이스를 다른 로 마이그레이션 AWS 계정 하고 지속적인 복제를 AWS DMS 위해 AWS 리전 사용](migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon EC2 로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.md)
+ [Logstash를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon OpenSearch Service로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash.md)
+ [DMS 및 SCT를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.md)
+ [데이터베이스 링크를 통한 직접 Oracle 데이터 펌프 가져오기를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-by-using-direct-oracle-data-pump-import-over-a-database-link.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump.md)
+ [Oracle bystander 및 AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon EC2의 Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2에서 Amazon RDS for MariaDB로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.md)
+ [AWS DMS를 사용하여 Amazon EC2에서 Amazon RDS for Oracle로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms.md)
+ [AWS DMS를 사용하여 Amazon DynamoDB로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-to-amazon-dynamodb-using-aws-dms.md)
+ [Oracle GoldenGate 플랫 파일 어댑터를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon Redshift로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Aurora PostgreSQL로 Oracle 데이터베이스를 마이그레이션하기](migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.md)
+ [Oracle Data Pump와 AWS DMS를 사용하여 Oracle JD Edwards EnterpriseOne 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.md)
+ [AWS DMS를 사용하여 Oracle 파티션형 테이블을 PostgreSQL로 마이그레이션하기](migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms.md)
+ [AWS DMS를 사용하여 Oracle PeopleSoft 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.md)
+ [Aurora PostgreSQL로 온프레미스 Oracle 데이터베이스의 데이터를 마이그레이션하기](migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql.md)
+ [Amazon RDS for Oracle에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql.md)
+ [구체화된 뷰와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms.md)
+ [SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms.md)
+ [Oracle GoldenGate를 사용하여 Oracle Database에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.md)
+ [DMS 및 SCT를 사용하여 Amazon EC2의 오라클에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [Amazon ECS에서 Oracle WebLogic으로부터 Apache Tomcat(TomEE)으로 마이그레이션](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [함수 기반 인덱스를 Oracle에서 PostgreSQL로 마이그레이션](migrate-function-based-indexes-from-oracle-to-postgresql.md)
+ [레거시 애플리케이션을 Oracle Pro\$1C에서 ECPG로 마이그레이션](migrate-legacy-applications-from-oracle-pro-c-to-ecpg.md)
+ [AWS에서 PostgreSQL의 개별 행으로 Oracle CLOB 값을 마이그레이션](migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws.md)
+ [Oracle Database 오류 코드를 Amazon Aurora PostgreSQL Compatible 데이터베이스로 마이그레이션](migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.md)
+ [확장 기능을 사용하여 Oracle 네이티브 함수를 PostgreSQL로 마이그레이션](migrate-oracle-native-functions-to-postgresql-using-extensions.md)
+ [Oracle PeopleSoft를 Amazon RDS Custom으로 마이그레이션](migrate-oracle-peoplesoft-to-amazon-rds-custom.md)
+ [Oracle ROWID 기능을 AWS 기반 PostgreSQL로 마이그레이션](migrate-oracle-rowid-functionality-to-postgresql-on-aws.md)
+ [Oracle SERIALLY\$1REUSABLE 프라그마 패키지를 PostgreSQL로 마이그레이션](migrate-oracle-serially-reusable-pragma-packages-into-postgresql.md)
+ [가상으로 생성된 열을 오라클에서 PostgreSQL로 마이그레이션](migrate-virtual-generated-columns-from-oracle-to-postgresql.md)
+ [Amazon CloudWatch를 사용하여 Oracle GoldenGate 로그를 모니터링](monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.md)
+ [Oracle에서 PostgreSQL로의 부분 데이터베이스 마이그레이션에 대한 객체 종속성 분석](multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql.md)
+ [Amazon RDS for Oracle에서 Oracle Database Enterprise Edition을 Standard Edition 2로 리플랫포밍](replatform-oracle-database-enterprise-edition-to-standard-edition-2-on-amazon-rds-for-oracle.md)
+ [활성 대기 데이터베이스를 사용하여 Amazon RDS Custom에서 Oracle E-Business Suite를 위한 HA/DR 아키텍처를 설정합니다.](set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database.md)
+ [Aurora PostgreSQL 호환에서 Oracle UTL\$1FILE 기능 설정](set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.md)
+ [Oracle용 Amazon RDS Custom의 Oracle PeopleSoft 애플리케이션에 대한 전환 역할](transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle.md)
+ [Oracle에서 Amazon Aurora PostgreSQL로 마이그레이션한 후 데이터베이스 객체 검증](validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql.md)

# SAP
<a name="databases-database-migration-patterns-by-workload-sap-pattern-list"></a>

**Topics**
+ [Systems Manager와 EventBridge를 사용하여 SAP HANA 데이터베이스를 자동으로 백업](automatically-back-up-sap-hana-databases-using-systems-manager-and-eventbridge.md)
+ [AWS DMS를 사용하여 SAP ASE에서 Amazon RDS for SQL Server로 마이그레이션](migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms.md)
+ [AWS SCT 및 AWS DMS를 사용하여 SAP ASE에 있는 Amazon EC2를 Amazon Aurora PostgreSQL-Compatible로 마이그레이션하기](migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms.md)
+ [동일한 호스트 이름을 가진 SAP HSR을 사용하여 SAP HANA를 AWS로 마이그레이션](migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname.md)
+ [AWS 기반 IBM Db2에서 SAP를 위한 재해 복구 설정](set-up-disaster-recovery-for-sap-on-ibm-db2-on-aws.md)

# 패턴 더 보기
<a name="databases-more-patterns-pattern-list"></a>

**Topics**
+ [Amazon EKS 컨테이너에서 Amazon Neptune 데이터베이스 액세스](access-amazon-neptune-database-from-amazon-eks-container.md)
+ [Athena를 사용한 Amazon DynamoDB 테이블 액세스, 쿼리 및 조인](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [AMS 계정의 S3 버킷에 대한 EC2 인스턴스 쓰기 액세스 허용](allow-ec2-instances-write-access-to-s3-buckets-in-ams-accounts.md)
+ [Amazon Athena 및 Amazon Quick Sight를 사용하여 중첩된 JSON 데이터 분석 및 시각화](analyze-and-visualize-nested-json-data-with-amazon-athena-and-amazon-quicksight.md)
+ [AWS Batch를 사용하여 Amazon RDS for PostgreSQL DB 인스턴스 백업 자동화](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [DynamoDB TTL을 사용하여 Amazon S3에 항목 자동으로 보관](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.md)
+ [암호화되지 않은 Amazon RDS DB 인스턴스 및 클러스터를 자동으로 수정하기](automatically-remediate-unencrypted-amazon-rds-db-instances-and-clusters.md)
+ [AWS Systems Manager 유지 관리 기간을 사용하여 Amazon RDS DB 인스턴스 자동 중지 및 시작](automatically-stop-and-start-an-amazon-rds-db-instance-using-aws-systems-manager-maintenance-windows.md)
+ [MongoDB Atlas를 포함하는 AWS 랜딩 존 구축](build-aws-landing-zone-that-includes-mongodb-atlas.md)
+ [AWS Mainframe Modernization 및를 사용하여 COBOL Db2 프로그램 구축 AWS CodeBuild](build-cobol-db2-programs-mainframe-modernization-codebuild.md)
+ [Amazon DataZone을 사용하여 엔터프라이즈 데이터 메시 구축 AWS CDK AWS CloudFormation](build-enterprise-data-mesh-amazon-data-zone.md)
+ [Microsoft SQL Server에서 Amazon Aurora PostgreSQL-Compatible Edition으로 데이터베이스 마이그레이션을 지원하도록 Python 및 Perl 애플리케이션 변경](change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.md)
+ [Python을 사용하여 AWS에서 EBCDIC 데이터를 ASCII로 변환 및 압축 해제](convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.md)
+ [Teradata NORMALIZE 임시 기능을 Amazon Redshift SQL로 변환](convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql.md)
+ [Teradata RESET WHEN 기능을 Amazon Redshift SQL로 변환](convert-the-teradata-reset-when-feature-to-amazon-redshift-sql.md)
+ [Oracle의 VARCHAR2(1) 데이터 유형을 Amazon Aurora PostgreSQL의 부울 데이터 유형으로 변환](convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.md)
+ [Aurora PostgreSQL 호환에서 애플리케이션 사용자 및 역할을 생성](create-application-users-and-roles-in-aurora-postgresql-compatible.md)
+ [Microsoft 엑셀과 Python을 사용하여 AWS DMS 작업을 위한 AWS CloudFormation 템플릿 생성](create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python.md)
+ [에서 Kinesis Data Streams 및 Firehose를 사용하여 Amazon S3에 DynamoDB 레코드 전송 AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [프라이빗 고정 IP를 사용하여 Amazon EC2에 Cassandra 클러스터를 배포하여 리밸런싱 방지](deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing.md)
+ [Terraform을 사용하여 Amazon EKS에 CockroachDB 클러스터 배포](deploy-cockroachdb-on-eks-using-terraform.md)
+ [RAG 및 ReAct 프롬프트를 사용하여 고급 생성형 AI 채팅 기반 어시스턴트 개발](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [PostgreSQL-compatible Aurora 글로벌 데이터베이스를 사용하여 Oracle DR 에뮬레이션하기](emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.md)
+ [IBM Db2 데이터베이스에서 Amazon S3에 직접 DB2 로그 아카이빙 활성화 Amazon S3 Db2](enable-db2-logarchive-directly-to-amazon-s3-in-ibm-db2-database.md)
+ [Amazon RDS for SQL Server에서 투명한 데이터 암호화 활성화하기](enable-transparent-data-encryption-in-amazon-rds-for-sql-server.md)
+ [AWS DMS를 사용하여 Microsoft SQL Server 데이터베이스를 Amazon S3로 내보내기](export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.md)
+ [SQL Server에서 PostgreSQL로 마이그레이션할 때 PII 데이터에 대한 SHA1 해싱 구현](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Oracle SQL Developer 및 AWS SCT를 사용하여 Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 점진적으로 마이그레이션](incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.md)
+ [Aurora PostgreSQL-Compatible에서 파일 인코딩을 사용하여 BLOB 파일을 TEXT에 로드](load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.md)
+ [AWS Secrets Manager를 사용한 보안 인증 정보 관리](manage-credentials-using-aws-secrets-manager.md)
+ [AWS DMS를 사용하여 Db2 데이터베이스를 Amazon EC2에서 Aurora MySQL과 호환되는 Aurora로 마이그레이션](migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.md)
+ [AWS DMS를 사용하여 Microsoft SQL 서버 데이터베이스를 Amazon EC2에서 Amazon DocumentDB로 마이그레이션](migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms.md)
+ [AWS DMS와 AWS SCT를 사용하여 Microsoft SQL Server 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct.md)
+ [AWS DMS를 사용하여 SSL 모드에서 Amazon RDS for Oracle를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.md)
+ [AWS CLI 및를 AWS SCT AWS DMS 사용하여 Amazon RDS for Oracle을 Amazon RDS for PostgreSQL로 마이그레이션 CloudFormation](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.md)
+ [Amazon RDS DB 인스턴스를 다른 VPC 또는 계정으로 마이그레이션](migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.md)
+ [Amazon RDS for Oracle 데이터베이스를 다른 로 마이그레이션 AWS 계정 하고 지속적인 복제를 AWS DMS 위해 AWS 리전 사용](migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.md)
+ [Amazon Redshift 클러스터를 중국의 AWS 리전으로 마이그레이션](migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china.md)
+ [온프레미스 MariaDB 데이터베이스를 기본 도구를 사용하여 Amazon RDS for MariaDB로 마이그레이션](migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server.md)
+ [연결된 서버를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers.md)
+ [기본 백업 및 복원 수단을 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.md)
+ [AWS DMS를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms.md)
+ [SCT 데이터 추출 에이전트를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.md)
+ [Linux가 실행되는 Amazon EC2의 Microsoft SQL Server로 온프레미스 Microsoft SQL Server 데이터베이스의 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux.md)
+ [온프레미스 MySQL 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql.md)
+ [온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-aurora-mysql.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon EC2 로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.md)
+ [Logstash를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon OpenSearch Service로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash.md)
+ [DMS 및 SCT를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.md)
+ [데이터베이스 링크를 통한 직접 Oracle 데이터 펌프 가져오기를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-by-using-direct-oracle-data-pump-import-over-a-database-link.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump.md)
+ [Oracle bystander 및 AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon EC2의 Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2.md)
+ [온프레미스 PostgreSQL 데이터베이스를 Aurora PostgreSQL로 마이그레이션하기](migrate-an-on-premises-postgresql-database-to-aurora-postgresql.md)
+ [온프레미스 ThoughtSpot Falcon 데이터베이스를 Amazon Redshift로 마이그레이션하기](migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2에서 Amazon RDS for MariaDB로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.md)
+ [AWS DMS를 사용하여 Amazon EC2에서 Amazon RDS for Oracle로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms.md)
+ [Oracle GoldenGate 플랫 파일 어댑터를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon Redshift로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Aurora PostgreSQL로 Oracle 데이터베이스를 마이그레이션하기](migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.md)
+ [Oracle Data Pump와 AWS DMS를 사용하여 Oracle JD Edwards EnterpriseOne 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.md)
+ [AWS DMS를 사용하여 Oracle 파티션형 테이블을 PostgreSQL로 마이그레이션하기](migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms.md)
+ [AWS DMS를 사용하여 Oracle PeopleSoft 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.md)
+ [Couchbase Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-couchbase-server-ec2.md)
+ [Aurora PostgreSQL로 온프레미스 Oracle 데이터베이스의 데이터를 마이그레이션하기](migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql.md)
+ [Starburst를 사용하여 AWS 클라우드 로 데이터 마이그레이션](migrate-data-to-the-aws-cloud-by-using-starburst.md)
+ [중단 시간을 줄이기 위해 로그 전달을 사용하여 Db2 for LUW를 Amazon EC2로 마이그레이션](migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.md)
+ [고가용성 재해 복구 기능을 갖춘 Db2 for LUW를 Amazon EC2로 마이그레이션하세요.](migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.md)
+ [Amazon RDS for Oracle에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql.md)
+ [카우치베이스 서버에서 AWS의 카우치베이스 카펠라로 마이그레이션](migrate-from-couchbase-server-to-couchbase-capella-on-aws.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2의 IBM Db2에서 PostgreSQL과 호환되는 Aurora PostgreSQL로 마이그레이션하십시오.](migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.md)
+ [구체화된 뷰와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms.md)
+ [SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms.md)
+ [Oracle GoldenGate를 사용하여 Oracle Database에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.md)
+ [DMS 및 SCT를 사용하여 Amazon EC2의 오라클에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [pglogical을 사용하여 Amazon EC2의 PostgreSQL에서 Amazon RDS for PostgreSQL로 마이그레이션합니다.](migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.md)
+ [AWS DMS를 사용하여 SAP ASE에서 Amazon RDS for SQL Server로 마이그레이션](migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms.md)
+ [함수 기반 인덱스를 Oracle에서 PostgreSQL로 마이그레이션](migrate-function-based-indexes-from-oracle-to-postgresql.md)
+ [레거시 애플리케이션을 Oracle Pro\$1C에서 ECPG로 마이그레이션](migrate-legacy-applications-from-oracle-pro-c-to-ecpg.md)
+ [Application Migration Service를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.md)
+ [온프레미스 Cloudera 워크로드를 AWS의 Cloudera 데이터 플랫폼으로 마이그레이션](migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.md)
+ [Percona XtraBackup, Amazon EFS, Amazon S3을 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션하기](migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.md)
+ [온프레미스 서버에서 Oracle Business Intelligence 12c를 AWS 클라우드로 마이그레이션](migrate-oracle-business-intelligence-12c-to-the-aws-cloud-from-on-premises-servers.md)
+ [AWS에서 PostgreSQL의 개별 행으로 Oracle CLOB 값을 마이그레이션](migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws.md)
+ [Oracle Database 오류 코드를 Amazon Aurora PostgreSQL Compatible 데이터베이스로 마이그레이션](migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.md)
+ [Oracle 외부 테이블을 Amazon Aurora PostgreSQL 호환으로 마이그레이션](migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible.md)
+ [확장 기능을 사용하여 Oracle 네이티브 함수를 PostgreSQL로 마이그레이션](migrate-oracle-native-functions-to-postgresql-using-extensions.md)
+ [Oracle PeopleSoft를 Amazon RDS Custom으로 마이그레이션](migrate-oracle-peoplesoft-to-amazon-rds-custom.md)
+ [Oracle ROWID 기능을 AWS 기반 PostgreSQL로 마이그레이션](migrate-oracle-rowid-functionality-to-postgresql-on-aws.md)
+ [Oracle SERIALLY\$1REUSABLE 프라그마 패키지를 PostgreSQL로 마이그레이션](migrate-oracle-serially-reusable-pragma-packages-into-postgresql.md)
+ [AWS SCT 및 AWS DMS를 사용하여 SAP ASE에 있는 Amazon EC2를 Amazon Aurora PostgreSQL-Compatible로 마이그레이션하기](migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms.md)
+ [가상으로 생성된 열을 오라클에서 PostgreSQL로 마이그레이션](migrate-virtual-generated-columns-from-oracle-to-postgresql.md)
+ [조직 간에 데이터를 공유하기 위한 실행 가능한 최소 데이터 공간 설정](minimum-viable-data-space-share-data-organizations.md)
+ [Amazon ElastiCache 클러스터의 미사용 암호화 모니터링](monitor-amazon-elasticache-clusters-for-at-rest-encryption.md)
+ [Amazon Athena를 사용하여 SQL로 Amazon DynamoDB 테이블 쿼리](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [신뢰할 수 있는 컨텍스트를 사용하여 AWS에서 Db2 페더레이션 데이터베이스의 사용자 액세스 보호 및 간소화](secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts.md)
+ [고가용성 PeopleSoft 아키텍처 설정](set-up-a-highly-available-peoplesoft-architecture-on-aws.md)
+ [Aurora PostgreSQL 호환에서 Oracle UTL\$1FILE 기능 설정](set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.md)
+ [PGO를 사용하여 Amazon EKS에서 PostgreSQL 배포 간소화](streamline-postgresql-deployments-amazon-eks-pgo.md)
+ [대규모 Db2 z/OS 데이터를 CSV 파일로 Amazon S3에 전송](transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.md)
+ [pg\$1transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송](transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.md)
+ [Oracle에서 Amazon Aurora PostgreSQL로 마이그레이션한 후 데이터베이스 객체 검증](validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql.md)