

# Amazon RDS 시작하기
<a name="CHAP_GettingStarted"></a>

다음 예제에서는 Amazon Relational Database Service(Amazon RDS)를 사용하여 DB 인스턴스를 생성하여 연결하는 방법을 확인할 수 있습니다. Db2, MariaDB, MySQL, Microsoft SQL Server, Oracle 또는 PostgreSQL을 사용하는 DB 인스턴스를 생성할 수 있습니다.

**중요**  
DB 인스턴스를 생성하거나 DB 인스턴스에 연결하려면 먼저 [Amazon RDS 환경 설정](CHAP_SettingUp.md) 섹션의 태스크를 완료해야 합니다.

DB 인스턴스를 생성한 후 DB 인스턴스의 데이터베이스에 연결하는 작업은 DB 엔진마다 조금씩 다릅니다. 따라서 DB 인스턴스를 생성하여 연결하는 데 필요한 세부 정보를 감안하여 다음 DB 엔진 중 사용할 엔진을 선택합니다. DB 인스턴스를 생성하여 연결하고 나면 DB 인스턴스 삭제를 도와주는 지침을 이용할 수 있습니다.

**Topics**
+ [MariaDB DB 인스턴스 생성 및 해당 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.MariaDB.md)
+ [Microsoft SQL Server DB 인스턴스 생성 및 해당 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.SQLServer.md)
+ [MySQL DB 인스턴스 생성 및 해당 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.MySQL.md)
+ [Oracle DB 인스턴스 생성 및 해당 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.Oracle.md)
+ [PostgreSQL DB 인스턴스 생성 및 해당 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.PostgreSQL.md)
+ [자습서: 웹 서버 및 Amazon RDS DB 인스턴스 생성](TUT_WebAppWithRDS.md)
+ [자습서: Amazon RDS에 액세스하기 위해 Lambda 함수 사용](rds-lambda-tutorial.md)

# MariaDB DB 인스턴스 생성 및 해당 인스턴스에 연결
<a name="CHAP_GettingStarted.CreatingConnecting.MariaDB"></a>

이 자습서에서는 EC2 인스턴스와 RDS for MariaDB DB 인스턴스를 생성합니다. 자습서에서는 표준 MySQL 클라이언트를 사용하여 EC2 인스턴스에서 DB 인스턴스에 액세스하는 방법을 보여줍니다. 이 자습서에서는 모범 사례를 따라 Virtual Private Cloud(VPC)에서 프라이빗 DB 인스턴스를 생성합니다. 대부분의 경우 EC2 인스턴스와 같이 동일한 VPC에 있는 다른 리소스는 DB 인스턴스에 액세스할 수 있지만 VPC 외부의 리소스는 DB 인스턴스에 액세스할 수 없습니다.

자습서를 완료하면 VPC의 각 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷이 있을 것입니다. 한 가용 영역에서 EC2 인스턴스는 퍼블릭 서브넷에 있고 DB 인스턴스는 프라이빗 서브넷에 있습니다.

**중요**  
AWS 계정 생성은 무료입니다. 그러나 이 자습서를 완료하면 사용하는 리소스에 대한 비용이 발생할 수 있습니다. 자습서가 더 이상 필요하지 않은 경우 자습서를 완료한 후에 이러한 리소스를 삭제할 수 있습니다.

다음 다이어그램은 이 자습서를 완료했을 때 구성을 보여 줍니다.

![\[EC2 인스턴스 및 MariaDB DB 인스턴스\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-mariadb.png)


이 자습서에서는 다음 방법 중 하나를 사용하여 리소스를 생성할 수 있습니다.

1. AWS Management Console 사용 ‐ [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.MariaDB.EC2) 및 [MariaDB DB 인스턴스 생성](#CHAP_GettingStarted.Creating.MariaDB) 

1. 데이터베이스 인스턴스 및 EC2 인스턴스를 생성하는 데 CloudFormation 사용 - [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 MariaDB 인스턴스 생성](#CHAP_GettingStarted.CFN.MariaDB) 

첫 번째 방법은 **간편 생성**을 사용하여 AWS Management Console을 통해 프라이빗 MariaDB DB 인스턴스를 생성합니다. 여기에서는 DB 엔진 유형, DB 인스턴스 크기 및 DB 인스턴스 식별자만 지정합니다. [**간편 생성(Easy create)**]은 다른 구성 옵션에서도 기본 설정을 사용합니다.

**표준 생성**을 대신 사용하는 경우에는 DB 인스턴스를 생성할 때 더 많은 구성 옵션을 지정할 수 있습니다. 이러한 옵션에는 가용성, 보안, 백업 및 유지 관리에 대한 설정이 포함됩니다. 퍼블릭 DB 인스턴스를 만들려면 **표준 생성**을 사용해야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#CHAP_GettingStarted.Prerequisites.MariaDB)
+ [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.MariaDB.EC2)
+ [MariaDB DB 인스턴스 생성](#CHAP_GettingStarted.Creating.MariaDB)
+ [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 MariaDB 인스턴스 생성](#CHAP_GettingStarted.CFN.MariaDB)
+ [MariaDB DB 인스턴스에 연결](#CHAP_GettingStarted.Connecting.MariaDB)
+ [EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.Deleting.MariaDB)
+ [(선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.DeletingCFN.MariaDB)
+ [(선택 사항) DB 인스턴스를 Lambda 함수에 연결](#CHAP_GettingStarted.ComputeConnect.MariaDB)

## 사전 조건
<a name="CHAP_GettingStarted.Prerequisites.MariaDB"></a>

시작하기 전에 다음 섹션에서 다음 단계를 완료하세요.
+ [AWS 계정에 가입](CHAP_SettingUp.md#sign-up-for-aws)
+ [관리자 액세스 권한이 있는 사용자 생성](CHAP_SettingUp.md#create-an-admin)

## EC2 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.MariaDB.EC2"></a>

데이터베이스에 연결하는 데 사용할 Amazon EC2 인스턴스를 생성합니다.

**EC2 인스턴스를 생성하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단에서 EC2 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 다음 이미지에 나와 있는 것처럼 **EC2 대시보드**를 선택한 다음, **인스턴스 시작**을 선택합니다.  
![\[EC2 대시보드.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **인스턴스 시작** 페이지가 열립니다.

1. **인스턴스 시작** 페이지에서 다음 설정을 선택합니다.

   1. **Name and tags**(이름 및 태그) 아래의 **Name**(이름)에 **ec2-database-connect**을 입력하세요.

   1. **Application and OS Images (Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image))에서 **Amazon Linux**를 선택한 다음 **Amazon Linux 2023 AMI**를 선택합니다. 다른 선택 항목에 대해서는 기본값을 그대로 유지합니다.  
![\[Amazon Machine Image를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. **인스턴스 유형**에서 **t2.micro**를 선택합니다.

   1. **키 페어(로그인)**에서 기존 키 페어를 사용할 **키 페어 이름**을 선택합니다. Amazon EC2 인스턴스에 대한 새 키 페어를 생성하려면 **새 키 페어 생성**을 선택한 다음 **키 페어 생성** 창을 사용하여 생성합니다.

      새 키 페어 생성에 대한 자세한 내용은 **Amazon EC2 Linux 인스턴스용 사용 설명서의 [키 페어 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)을 참조하세요.

   1. **네트워크 설정**의 **SSH 트래픽 허용**에서 EC2 인스턴스에 대한 SSH 연결 소스를 선택합니다.

      표시된 IP 주소가 SSH 연결에 대해 올바른 경우 **내 IP**를 선택할 수 있습니다. 그렇지 않으면 SSH(Secure Shell)를 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 결정할 수 있습니다. 퍼블릭 IP 주소를 확인하려면 다른 브라우저 창 또는 탭에서 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/)의 서비스를 사용합니다. IP 주소의 예는 192.0.2.1/32입니다.

       대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 결정합니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

      다음 이미지는 **네트워크 설정** 섹션의 예를 보여 줍니다.  
![\[EC2 인스턴스에 대한 네트워크 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 나머지 섹션에서 기본값은 그대로 둡니다.

   1. **요약** 패널에서 EC2 인스턴스 구성 요약을 검토하고 준비가 되면 **인스턴스 시작**을 선택합니다.

1. **시작 상태** 페이지에서, 새 EC2 인스턴스의 식별자(예: `i-1234567890abcdef0`)를 기록해 둡니다.  
![\[시작 상태 페이지의 EC2 인스턴스 식별자.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. EC2 인스턴스 식별자를 선택하여 EC2 인스턴스 목록을 열고 EC2 인스턴스를 선택합니다.

1. **세부 정보** 탭에서 SSH를 사용하여 연결할 때 필요한 다음 값을 기록해 둡니다.

   1. **인스턴스 요약**에서 **퍼블릭 IPv4 DNS**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 퍼블릭 DNS 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. **인스턴스 세부 정보**에서 **키 페어 이름**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 키 페어 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 계속하기 전에 EC2 인스턴스의 **인스턴스 상태**가 **실행 중**이 될 때까지 기다립니다.

## MariaDB DB 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.MariaDB"></a>

Amazon RDS의 기본 빌딩 블록은 DB 인스턴스입니다. MariaDB 데이터베이스를 실행하는 환경입니다.

이 예시에서는 **간편 생성**을 사용하여 db.t4g.micro DB 인스턴스 클래스에서 MariaDB 데이터베이스 엔진을 실행하는 DB 인스턴스를 만듭니다.

**간편 생성(Easy create)을 사용하여 MariaDB DB 인스턴스를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

1. **데이터베이스 생성**에서 **간편 생성**을 선택합니다.  
![\[간편 생성 옵션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. **구성**에서 **MariaDB**를 선택합니다.

1. **DB 인스턴스 크기**에서 **프리 티어** 또는 **샌드박스**를 선택합니다. **프리 티어**는 무료 요금제 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.

1. **DB 인스턴스 식별자**에 **database-test1**을 입력합니다.

1. **마스터 사용자 이름**에 마스터 사용자의 이름을 입력하거나 기본 이름을 그대로 유지합니다.

   **데이터베이스 생성** 페이지는 다음 이미지와 비슷해야 합니다. 무료 요금제 계정에는 **프리 티어**가 표시됩니다. 유료 요금제 계정에는 **샌드박스**가 표시됩니다.  
![\[데이터베이스 생성 페이지.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-mariadb.png)

1. DB 인스턴스에 자동 생성된 마스터 암호를 사용하려면 **암호 자동 생성**을 선택합니다.

   마스터 암호를 입력하려면 **암호 자동 생성**을 지우고 **마스터 암호** 및 **마스터 암호 확인**에 동일한 암호를 입력합니다.

1. 이전에 만든 EC2 인스턴스와의 연결을 설정하려면 **EC2 연결 설정 - *선택 사항***을 확장합니다.

   **Connect to an EC2 compute resource**(EC2 컴퓨팅 리소스에 연결)를 선택합니다. 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[EC2 연결 옵션을 설정합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. **간편 생성 기본 설정 보기**를 확장합니다.  
![\[Easy Create(간편 생성) 기본 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-view-default-maria.png)

   [**간편 생성(Easy Create)**]과 함께 사용되는 기본 설정을 검토할 수 있습니다. **데이터베이스 생성 후 편집 가능** 열에는 데이터베이스 생성 후 어떤 옵션을 변경할 수 있는지 나와 있습니다.
   + 설정의 해당 열에 **아니요**라고 되어 있지만 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들 수 있습니다.
   + 설정의 해당 열에 **예**라고 되어 있으며 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들거나 DB 인스턴스를 생성한 후 수정하여 설정을 변경할 수 있습니다.

1. **데이터베이스 생성**을 선택합니다.

   DB 인스턴스의 마스터 사용자 이름 및 암호를 보려면 **View credential details(자격 증명 세부 정보 보기)**를 선택합니다.

   DB 인스턴스를 마스터 사용자로 연결하려면 화면에 나타난 사용자 이름과 암호를 사용합니다.
**중요**  
마스터 사용자 암호를 다시 볼 수는 없습니다. 따라서 기록을 해두지 않으면 이를 변경해야 합니다.  
DB 인스턴스가 사용 가능한 상태가 되고 난 후에 마스터 사용자 암호를 변경해야 하는 경우에는 다음과 같은 방법으로 DB 인스턴스를 수정할 수 있습니다. DB 인스턴스 변경에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

1. **데이터베이스** 목록에서 새 MariaDB DB 인스턴스의 이름을 선택하면 세부 정보가 표시됩니다.

   DB 인스턴스를 사용할 준비가 될 때까지 DB 인스턴스의 상태는 **생성 중**입니다.  
![\[DB 인스턴스 세부 정보.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MariaDB-Launch06.png)

   상태가 **Available**(사용 가능)로 변경되면 DB 인스턴스에 연결할 수 있습니다. DB 인스턴스 클래스와 스토리지의 양에 따라 새 인스턴스를 사용할 수 있을 때까지 최대 20분이 걸릴 수 있습니다.

## (선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 MariaDB 인스턴스 생성
<a name="CHAP_GettingStarted.CFN.MariaDB"></a>

콘솔을 사용하여 VPC, EC2 인스턴스 및 MariaDB 인스턴스를 생성하는 대신 CloudFormation을 통해 코드형 인프라로 처리하여 AWS 리소스를 프로비저닝할 수 있습니다. AWS 리소스를 더 작고 관리하기 쉬운 단위로 구성하는 데 도움이 되도록 CloudFormation 중첩 스택 기능을 사용할 수 있습니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 생성](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) 및 [중첩된 스택 작업](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)을 참조하세요.

**중요**  
CloudFormation은 무료이지만, CloudFormation에서 생성하는 리소스는 라이브입니다. 이러한 리소스를 종료하지 않으면 해당 리소스에 대한 표준 사용 요금이 발생합니다. 자세한 내용은 [RDS for MariaDB 요금](https://aws.amazon.com//rds/mariadb/pricing)을 참조하세요.
+ CloudFormation 템플릿 파일을 다운로드하십시오.
+ CloudFormation을 사용하여 리소스 구성

### CloudFormation 템플릿 파일을 다운로드하십시오.
<a name="CHAP_GettingStarted.CFN.MariaDB.Step1"></a>

CloudFormation 템플릿은 JSON 또는 YAML 텍스트 파일로, 스택에서 생성하려는 리소스에 대한 구성 정보가 들어 있습니다. 또한 이 템플릿은 RDS 인스턴스와 함께 VPC와 Bastion Host를 생성합니다.

템플릿 파일을 다운로드하려면 다음 링크인 [MariaDB CloudFormation 템플릿](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-mariadb-main.template.yaml)을 엽니다.

Github 페이지에서 **원시 파일 다운로드 버튼을 클릭하여 템플릿 YAML 파일을 저장합니다.

### CloudFormation을 사용하여 리소스 구성
<a name="CHAP_GettingStarted.CFN.MariabDB.Step2"></a>

**참고**  
이 프로세스를 시작하기 전에 AWS 계정에 EC2 인스턴스용 키 페어가 있는지 확인합니다. 자세한 내용은 [Amazon EC2 키 페어 및 Linux 인스턴스](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)를 참조하세요.

CloudFormation 템플릿을 사용할 때는 리소스가 제대로 생성되도록 올바른 파라미터를 선택해야 합니다. 다음 단계를 따릅니다.

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)에서 CloudFormation 콘솔을 엽니다.

1. **스택 생성**을 선택합니다.

1. 템플릿 지정 섹션에서 **컴퓨터에서 템플릿 파일 업로드**를 선택하고 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 다음 파라미터를 설정합니다.

   1. **스택 이름**을 **MariaDBTestStack**으로 설정합니다.

   1. **파라미터**에서 가용 영역 3개를 선택하여 **가용 영역**을 설정합니다.

   1. **Linux Bastion Host 구성**에서 **키 이름**에 대해 EC2 인스턴스에 로그인할 키 페어를 선택합니다.

   1. **Linux Bastion Host 구성** 설정에서 **허용된 IP 범위**를 IP 주소로 설정합니다. Secure Shell(SSH)을 사용하여 VPC의 EC2 인스턴스에 연결하려면 [https://checkip.amazonaws.com](https://checkip.amazonaws.com)의 서비스를 사용하여 퍼블릭 IP 주소를 지정합니다. IP 주소의 예는 192.0.2.1/32입니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

   1. **데이터베이스 일반 구성**에서 **데이터베이스 인스턴스 클래스**를 **db.t3.micro**로 설정합니다.

   1. **데이터베이스 이름**을 **database-test1**으로 설정합니다.

   1. **데이터베이스 마스터 사용자 이름**에 마스터 사용자 이름을 입력합니다.

   1. 이 자습서에서는 **Secrets Manager를 사용하여 DB 마스터 사용자 암호 관리**를 `false`로 설정합니다.

   1. **데이터베이스 암호**의 경우 원하는 암호를 설정합니다. 자습서의 향후 단계에 사용할 수 있도록 암호를 기억해 둡니다.

   1. **데이터베이스 스토리지 구성**에서 **데이터베이스 스토리지 유형**을 **gp2**로 설정합니다.

   1. **데이터베이스 모니터링 구성**에서 **RDS 성능 개선 도우미 활성화**를 false로 설정합니다.

   1. 다른 모든 설정은 기본값으로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 검토** 페이지에서 데이터베이스 및 Linux Bastion Host 옵션을 확인한 후 **제출**을 선택합니다.

스택 생성 프로세스가 완료되면 **BastionStack 및 **RDSNS라는 이름의 스택을 보고 데이터베이스에 연결하는 데 필요한 정보를 기록해 둡니다. 자세한 내용은 [AWS Management Console에서 CloudFormation 스택 데이터 및 리소스 보기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)를 참조하세요.

## MariaDB DB 인스턴스에 연결
<a name="CHAP_GettingStarted.Connecting.MariaDB"></a>

표준 SQL 클라이언트 애플리케이션을 사용해 DB 인스턴스에 연결할 수 있습니다. 이 예시에서는 mysql 명령줄 클라이언트를 사용해 MariaDB DB 인스턴스에 연결합니다.

**MariaDB DB 인스턴스에 연결하는 방법**

1. DB 인스턴스의 엔드포인트(DNS 이름)와 포트 번호를 찾습니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스의 AWS 리전을 선택합니다.

   1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

   1. 세부 정보를 표시하고자 하는 MariaDB DB 인스턴스 이름을 선택합니다.

   1. **Connectivity & security(연결 및 보안)** 탭에서 엔드포인트를 복사합니다. 또한 포트 번호를 적어 둡니다. DB 인스턴스에 연결하려면 엔드포인트와 포트 번호가 모두 필요합니다.  
![\[MariaDB DB 인스턴스에 연결합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MariaDBConnect1.png)

1. **Amazon EC2 사용 설명서에 있는 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)의 단계를 따라 앞에서 만든 EC2 인스턴스에 연결합니다.

   SSH를 사용하여 EC2 인스턴스에 연결하는 것이 좋습니다. Windows, Linux 또는 Mac에 SSH 클라이언트 유틸리티가 설치된 경우 다음 명령 형식을 사용하여 인스턴스에 연결할 수 있습니다.

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   예를 들어 `ec2-database-connect-key-pair.pem`이 Linux의 `/dir1`에 저장되어 있고, EC2 인스턴스의 퍼블릭 IPv4 DNS가 `ec2-12-345-678-90.compute-1.amazonaws.com`이라고 가정해 보겠습니다. SSH 명령은 다음과 같이 표시됩니다.

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. EC2 인스턴스에서 소프트웨어를 업데이트하여 최신 버그 수정 및 보안 업데이트를 받습니다. 이렇게 하려면 다음 명령을 사용하십시오.
**참고**  
`-y` 옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.

   ```
   sudo dnf update -y
   ```

1. MariaDB의 mysql 명령줄 클라이언트를 설치합니다.

   Amazon Linux 2023에서 MariaDB 명령줄 클라이언트를 설치하려면 다음 명령을 실행합니다.

   ```
   sudo dnf install mariadb105
   ```

1. MariaDB DB 인스턴스에 연결합니다. 예를 들어, 다음 명령을 입력합니다. 이 작업을 통해 MySQL 클라이언트를 사용하여 MariaDB DB 인스턴스에 연결할 수 있습니다.

   `endpoint`는 DB 인스턴스 엔드포인트(DNS 이름)로 대체하고, `admin`는 사용된 마스터 사용자 이름으로 대체합니다. 암호를 묻는 메시지가 표시되면 사용한 마스터 암호를 제공합니다.

   ```
   mysql -h endpoint -P 3306 -u admin -p
   ```

   사용자에 대한 암호를 입력하면 다음과 유사한 출력이 나타납니다.

   ```
   Welcome to the MariaDB monitor.  Commands end with ; or \g.
   Your MariaDB connection id is 156
   Server version: 10.6.10-MariaDB-log managed by https://aws.amazon.com/rds/
    
   Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
     
   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
   MariaDB [(none)]>
   ```

   MariaDB DB 인스턴스 연결에 대한 자세한 내용은 [MariaDB DB 인스턴스에 연결](USER_ConnectToMariaDBInstance.md) 단원을 참조하십시오. DB 인스턴스에 연결할 수 없는 경우 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 단원을 참조하십시오.

   보안을 위해서는 암호화된 연결을 사용하는 것이 가장 좋습니다. 클라이언트와 서버가 동일한 VPC에 있고 네트워크를 신뢰할 수 있는 경우에만 암호화되지 않은 MariaDB 연결을 사용합니다. 암호화된 연결 사용에 대한 자세한 내용은 [MySQL 명령줄 클라이언트(암호화됨)에서 SSL/TLS를 사용하여 Amazon RDS의 MariaDB DB 인스턴스에 연결](USER_ConnectToMariaDBInstanceSSL.CLI.md) 섹션을 참조하세요.

1. SQL 명령을 실행합니다.

   예를 들어, 다음 SQL 명령은 현재 날짜 및 시간을 보여줍니다.

   ```
   SELECT CURRENT_TIMESTAMP;
   ```

## EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.Deleting.MariaDB"></a>

생성한 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후에는 요금이 더 이상 부과되지 않도록 삭제합니다.

CloudFormation을 사용하여 리소스를 생성했다면 이 단계를 건너뛰고 다음 단계로 이동합니다.

**EC2 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. EC2 인스턴스를 선택하고 **인스턴스 상태, 인스턴스 종료**를 차례로 선택합니다.

1. 확인 메시지가 나타나면 **종료**를 선택합니다.

EC2 인스턴스 삭제에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스 종료](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)를 참조하세요.

**최종 DB 스냅샷이 없는 DB 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 삭제할 DB 인스턴스를 선택합니다.

1. [** Actions**]에 대해 [**Delete**]를 선택합니다.

1. **최종 스냅샷을 생성하시겠습니까?** 및 **자동 백업 보존**을 선택 해제합니다.

1. 확인을 완료하고 **삭제**를 선택합니다.

## (선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.DeletingCFN.MariaDB"></a>

CloudFormation을 사용하여 리소스를 생성한 경우 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후 CloudFormation 스택을 삭제하여 더 이상 비용이 청구되지 않도록 합니다.

**CloudFormation 리소스를 삭제하려면**

1. CloudFormation 콘솔을 엽니다.

1. CloudFormation 콘솔의 **스택** 페이지에서 루트 스택(VPCStack, BastionStack 또는 RDSNS라는 이름이 없는 스택)을 선택합니다.

1. **삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **스택 삭제**를 선택합니다.

CloudFormation에서 스택을 삭제하는 방법에 대한 자세한 내용은 **AWS CloudFormation 사용 설명서의 [CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

## (선택 사항) DB 인스턴스를 Lambda 함수에 연결
<a name="CHAP_GettingStarted.ComputeConnect.MariaDB"></a>

RDS for MariaDB DB 인스턴스를 Lambda 서버리스 컴퓨팅 리소스에 연결할 수도 있습니다. Lambda 함수를 사용하면 인프라를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다. 또한 하루 12개에서 초당 수백 개에 이르는 모든 규모의 코드 실행 요청에 자동으로 응답할 수 있습니다. 자세한 내용은 [Lambda 함수와 DB 인스턴스 자동 연결](lambda-rds-connect.md) 섹션을 참조하세요.

# Microsoft SQL Server DB 인스턴스 생성 및 해당 인스턴스에 연결
<a name="CHAP_GettingStarted.CreatingConnecting.SQLServer"></a>

이 자습서에서는 EC2 인스턴스와 RDS for Microsoft SQL Server DB 인스턴스를 생성합니다. 자습서에서는 Microsoft SQL Server Management Studio 클라이언트를 사용하여 EC2 인스턴스에서 DB 인스턴스에 액세스하는 방법을 보여줍니다. 이 자습서에서는 모범 사례를 따라 Virtual Private Cloud(VPC)에서 프라이빗 DB 인스턴스를 생성합니다. 대부분의 경우 EC2 인스턴스와 같이 동일한 VPC에 있는 다른 리소스는 DB 인스턴스에 액세스할 수 있지만 VPC 외부의 리소스는 DB 인스턴스에 액세스할 수 없습니다.

자습서를 완료하면 VPC의 각 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷이 있을 것입니다. 한 가용 영역에서 EC2 인스턴스는 퍼블릭 서브넷에 있고 DB 인스턴스는 프라이빗 서브넷에 있습니다.

**중요**  
AWS 계정 생성은 무료입니다. 그러나 이 자습서를 완료하면 사용하는 AWS 리소스에 대한 비용이 발생할 수 있습니다. 자습서가 더 이상 필요하지 않은 경우 자습서를 완료한 후에 이러한 리소스를 삭제할 수 있습니다.

다음 다이어그램은 이 자습서를 완료했을 때 구성을 보여 줍니다.

![\[EC2 인스턴스와 Microsoft SQL Server DB 인스턴스.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-sqlserver.png)


이 자습서에서는 다음 방법 중 하나를 사용하여 리소스를 생성할 수 있습니다.

1. AWS Management Console 사용 ‐ [SQL Server DB 인스턴스 생성](#CHAP_GettingStarted.Creating.SQLServer) 및 [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.SQLServer.EC2)

1. 데이터베이스 인스턴스 및 EC2 인스턴스를 생성하는 데 CloudFormation 사용 - [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 SQL Server 인스턴스 생성](#CHAP_GettingStarted.CFN.SQLServer) 

첫 번째 방법은 **간편 생성**을 사용하여 AWS Management Console을 통해 프라이빗 SQL Server DB 인스턴스를 생성합니다. 여기에서는 DB 엔진 유형, DB 인스턴스 크기 및 DB 인스턴스 식별자만 지정합니다. [**간편 생성(Easy create)**]은 다른 구성 옵션에서도 기본 설정을 사용합니다.

**표준 생성**을 대신 사용하는 경우에는 DB 인스턴스를 생성할 때 더 많은 구성 옵션을 지정할 수 있습니다. 이러한 옵션에는 가용성, 보안, 백업 및 유지 관리에 대한 설정이 포함됩니다. 퍼블릭 DB 인스턴스를 만들려면 **표준 생성**을 사용해야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#CHAP_GettingStarted.Prerequisites.SQLServer)
+ [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.SQLServer.EC2)
+ [SQL Server DB 인스턴스 생성](#CHAP_GettingStarted.Creating.SQLServer)
+ [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 SQL Server 인스턴스 생성](#CHAP_GettingStarted.CFN.SQLServer)
+ [SQL Server DB 인스턴스에 연결](#CHAP_GettingStarted.Connecting.SQLServer)
+ [샘플 SQL Server DB 인스턴스 탐색](#CHAP_GettingStarted.SQLServer.Exploring)
+ [EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.Deleting.SQLServer)
+ [(선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.DeletingCFN.SQLServer)
+ [(선택 사항) DB 인스턴스를 Lambda 함수에 연결](#CHAP_GettingStarted.ComputeConnect.SQLServer)

## 사전 조건
<a name="CHAP_GettingStarted.Prerequisites.SQLServer"></a>

시작하기 전에 다음 섹션에서 다음 단계를 완료하세요.
+ [AWS 계정에 가입](CHAP_SettingUp.md#sign-up-for-aws)
+ [관리자 액세스 권한이 있는 사용자 생성](CHAP_SettingUp.md#create-an-admin)

## EC2 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.SQLServer.EC2"></a>

데이터베이스에 연결하는 데 사용할 Amazon EC2 인스턴스를 생성합니다.

**EC2 인스턴스를 생성하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단에서 이전에 데이터베이스에 사용한 AWS 리전을 선택합니다.

1. 다음 이미지에 나와 있는 것처럼 **EC2 대시보드**를 선택한 다음, **인스턴스 시작**을 선택합니다.  
![\[EC2 대시보드.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **인스턴스 시작** 페이지가 열립니다.

1. **인스턴스 시작** 페이지에서 다음 설정을 선택합니다.

   1. **Name and tags**(이름 및 태그) 아래의 **Name**(이름)에 **ec2-database-connect**을 입력하세요.

   1. **Application and OS Images (Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image))에서 **Windows**를 선택한 다음 **Microsoft Windows Server 2022 Base**를 선택합니다. 다른 선택 항목에 대해서는 기본값을 그대로 유지합니다.  
![\[Amazon Machine Image를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/tutorial_ec2_sqlserver_create1.png)

   1. **인스턴스 유형**에서 **t2.micro**를 선택합니다.

   1. **키 페어(로그인)**에서 기존 키 페어를 사용할 **키 페어 이름**을 선택합니다. Amazon EC2 인스턴스에 대한 새 키 페어를 생성하려면 **새 키 페어 생성**을 선택한 다음 **키 페어 생성** 창을 사용하여 생성합니다.

      새로운 키 페어 생성에 대한 자세한 내용은 *Amazon EC2 Windows 인스턴스용 사용 설명서*의 [키 페어 생성](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html)을 참조하세요.

   1. **네트워크 설정**의 **방화벽(보안 그룹)**에서 **다음 위치의 RDP 트래픽 허용**을 선택하여 EC2 인스턴스에 연결합니다.

      표시된 IP 주소가 RDP 연결에 대해 올바른 경우 **내 IP**를 선택할 수 있습니다. 그렇지 않으면 RDP를 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 결정할 수 있습니다. 퍼블릭 IP 주소를 확인하려면 다른 브라우저 창 또는 탭에서 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/)의 서비스를 사용합니다. IP 주소의 예는 192.0.2.1/32입니다.

       대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 결정합니다.
**주의**  
RDP 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 RDP를 사용하여 퍼블릭 EC2 인스턴스에 액세스하도록 설정할 수 있습니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 RDP를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

      다음 이미지는 **네트워크 설정** 섹션의 예를 보여 줍니다.  
![\[EC2 인스턴스에 대한 네트워크 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettingsRDSMS.png)

   1. 나머지 섹션에서 기본값은 그대로 둡니다.

   1. **요약** 패널에서 EC2 인스턴스 구성 요약을 검토하고 준비가 되면 **인스턴스 시작**을 선택합니다.

1. **시작 상태** 페이지에서, 새 EC2 인스턴스의 식별자(예: `i-1234567890abcdef0`)를 기록해 둡니다.  
![\[시작 상태 페이지의 EC2 인스턴스 식별자.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. EC2 인스턴스 식별자를 선택하여 EC2 인스턴스 목록을 엽니다.

1. 계속하기 전에 EC2 인스턴스의 **인스턴스 상태**가 **실행 중**이 될 때까지 기다립니다.

## SQL Server DB 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.SQLServer"></a>

Amazon RDS의 기본 빌딩 블록은 DB 인스턴스입니다. SQL Server 데이터베이스를 실행하는 환경입니다.

이 예시에서는 **간편 생성**을 사용하여 db.t2.micro DB 인스턴스 클래스에서 SQL Server 데이터베이스 엔진을 실행하는 DB 인스턴스를 생성합니다.

**Easy Create(간편 생성)로 Microsoft SQL Server DB 인스턴스를 생성하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. [**데이터베이스 생성(Create database)**]을 선택하고 [**간편 생성(Easy Create)**]이 선택되어 있는지 확인합니다.  
![\[간편 생성 옵션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. **구성**에서 **Microsoft SQL Server**를 선택합니다.

1. **에디션**에서 **SQL Server Express Edition**을 선택합니다.

1. **DB instance size(DB 인스턴스 크기)**에서 **프리 티어**를 선택합니다. **프리 티어**는 무료 요금제 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.

1. **DB 인스턴스 식별자**에 **database-test1**을 입력합니다.

   **데이터베이스 생성** 페이지는 다음 이미지와 비슷해야 합니다. 무료 요금제 계정에는 **프리 티어**가 표시됩니다. 유료 요금제 계정에는 **샌드박스**가 표시됩니다.  
![\[엔진 옵션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-sqlserver.png)

1. **마스터 사용자 이름**에 마스터 사용자의 이름을 입력하거나 기본 이름을 그대로 유지합니다.

1. 이전에 생성한 EC2 인스턴스와의 연결을 설정하려면 **EC2 연결 설정 - *선택 사항***을 엽니다.

   **Connect to an EC2 compute resource**(EC2 컴퓨팅 리소스에 연결)를 선택합니다. 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[EC2 연결 옵션을 설정합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. DB 인스턴스에서 자동 생성된 마스터 암호를 사용하려면 [**암호 자동 생성(Auto generate a password)**] 확인란을 선택합니다.

   마스터 암호를 입력하려면 [**암호 자동 생성(Auto generate a password)**] 확인란의 선택을 해제한 다음, [**마스터 암호(Master password)**] 및 [**암호 확인(Confirm password)**]에 동일한 암호를 입력합니다.

1. **간편 생성 기본 설정 보기**를 엽니다.  
![\[Easy Create(간편 생성) 기본 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-sqlserver-confirm.png)

   [**간편 생성(Easy Create)**]과 함께 사용되는 기본 설정을 검토할 수 있습니다. **데이터베이스 생성 후 편집 가능** 열에는 데이터베이스 생성 후 어떤 옵션을 변경할 수 있는지 나와 있습니다.
   + 설정의 해당 열에 **아니요**라고 되어 있지만 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들 수 있습니다.
   + 설정의 해당 열에 **예**라고 되어 있으며 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들거나 DB 인스턴스를 생성한 후 수정하여 설정을 변경할 수 있습니다.

1. **데이터베이스 생성**을 선택합니다.

   DB 인스턴스의 마스터 사용자 이름 및 암호를 보려면 **View credential details(자격 증명 세부 정보 보기)**를 선택합니다.

   DB 인스턴스를 마스터 사용자로 연결하려면 화면에 나타난 사용자 이름과 암호를 사용합니다.
**중요**  
마스터 사용자 암호를 다시 볼 수는 없습니다. 따라서 기록을 해두지 않으면 이를 변경해야 합니다.  
DB 인스턴스가 사용 가능한 상태가 되고 난 후에 마스터 사용자 암호를 변경해야 하는 경우에는 다음과 같은 방법으로 DB 인스턴스를 수정할 수 있습니다. DB 인스턴스 변경에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

1. **데이터베이스** 목록에서 새 SQL Server DB 인스턴스의 이름을 선택하면 세부 정보가 표시됩니다.

   DB 인스턴스를 사용할 준비가 될 때까지 DB 인스턴스의 상태는 **생성 중**입니다.  
![\[DB 인스턴스 세부 정보의 화면 캡처\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-sqlserver-launch.png)

   상태가 **Available**(사용 가능)로 변경되면 DB 인스턴스에 연결할 수 있습니다. DB 인스턴스 클래스와 스토리지의 양에 따라 새 인스턴스를 사용할 수 있을 때까지 최대 20분이 걸릴 수 있습니다.

## (선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 SQL Server 인스턴스 생성
<a name="CHAP_GettingStarted.CFN.SQLServer"></a>

콘솔을 사용하여 VPC, EC2 인스턴스 및 SQL Server 인스턴스를 생성하는 대신 CloudFormation을 통해 코드형 인프라로 처리하여 AWS 리소스를 프로비저닝할 수 있습니다. AWS 리소스를 더 작고 관리하기 쉬운 단위로 구성하는 데 도움이 되도록 CloudFormation 중첩 스택 기능을 사용할 수 있습니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 생성](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) 및 [중첩된 스택 작업](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)을 참조하세요.

**중요**  
CloudFormation은 무료이지만, CloudFormation에서 생성하는 리소스는 라이브입니다. 이러한 리소스를 종료하지 않으면 해당 리소스에 대한 표준 사용 요금이 발생합니다. 자세한 내용은 [RDS for SQL Server 요금](https://aws.amazon.com//rds/sqlserver/pricing)을 참조하세요.

CloudFormation 콘솔을 사용하여 리소스를 생성하려면 다음 단계를 완료합니다.
+ CloudFormation 템플릿 파일을 다운로드하십시오.
+ CloudFormation을 사용하여 리소스 구성

### CloudFormation 템플릿 파일을 다운로드하십시오.
<a name="CHAP_GettingStarted.CFN.SQLServer.Step1"></a>

CloudFormation 템플릿은 JSON 또는 YAML 텍스트 파일로, 스택에서 생성하려는 리소스에 대한 구성 정보가 들어 있습니다. 또한 이 템플릿은 RDS 인스턴스와 함께 VPC와 Bastion Host를 생성합니다.

템플릿 파일을 다운로드하려면 다음 링크인 [SQL Server CloudFormation 템플릿](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-sqlserver-main.template.yaml)을 엽니다.

Github 페이지에서 **원시 파일 다운로드 버튼을 클릭하여 템플릿 YAML 파일을 저장합니다.

### CloudFormation을 사용하여 리소스 구성
<a name="CHAP_GettingStarted.CFN.SQLServer.Step2"></a>

**참고**  
이 프로세스를 시작하기 전에 AWS 계정에 EC2 인스턴스용 키 페어가 있는지 확인합니다. 자세한 내용은 [Amazon EC2 키 페어 및 Linux 인스턴스](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)를 참조하세요.

CloudFormation 템플릿을 사용할 때는 리소스가 제대로 생성되도록 올바른 파라미터를 선택해야 합니다. 다음 단계를 따릅니다.

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)에서 CloudFormation 콘솔을 엽니다.

1. **스택 생성**을 선택합니다.

1. 템플릿 지정 섹션에서 **컴퓨터에서 템플릿 파일 업로드**를 선택하고 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 다음 파라미터를 설정합니다.

   1. **스택 이름**을 **SQLServerTestStack**으로 설정합니다.

   1. **파라미터**에서 가용 영역 3개를 선택하여 **가용 영역**을 설정합니다.

   1. **Linux Bastion Host 구성**에서 **키 이름**에 대해 EC2 인스턴스에 로그인할 키 페어를 선택합니다.

   1. **Linux Bastion Host 구성** 설정에서 **허용된 IP 범위**를 IP 주소로 설정합니다. Secure Shell(SSH)을 사용하여 VPC의 EC2 인스턴스에 연결하려면 [https://checkip.amazonaws.com](https://checkip.amazonaws.com)의 서비스를 사용하여 퍼블릭 IP 주소를 지정합니다. IP 주소의 예는 192.0.2.1/32입니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

   1. **데이터베이스 일반 구성**에서 **데이터베이스 인스턴스 클래스**를 **db.t3.micro**로 설정합니다.

   1. **데이터베이스 이름**을 **database-test1**으로 설정합니다.

   1. **데이터베이스 마스터 사용자 이름**에 마스터 사용자 이름을 입력합니다.

   1. 이 자습서에서는 **Secrets Manager를 사용하여 DB 마스터 사용자 암호 관리**를 `false`로 설정합니다.

   1. **데이터베이스 암호**의 경우 원하는 암호를 설정합니다. 자습서의 향후 단계에 사용할 수 있도록 암호를 기억해 둡니다.

   1. **데이터베이스 스토리지 구성**에서 **데이터베이스 스토리지 유형**을 **gp2**로 설정합니다.

   1. **데이터베이스 모니터링 구성**에서 **RDS 성능 개선 도우미 활성화**를 false로 설정합니다.

   1. 다른 모든 설정은 기본값으로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 옵션 구성** 페이지에서는 모든 기본 옵션을 그대로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 검토** 페이지에서 데이터베이스 및 Linux Bastion Host 옵션을 확인한 후 **제출**을 선택합니다.

스택 생성 프로세스가 완료되면 **BastionStack 및 **RDSNS라는 이름의 스택을 보고 데이터베이스에 연결하는 데 필요한 정보를 기록해 둡니다. 자세한 내용은 [AWS Management Console에서 CloudFormation 스택 데이터 및 리소스 보기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)를 참조하세요.

## SQL Server DB 인스턴스에 연결
<a name="CHAP_GettingStarted.Connecting.SQLServer"></a>

다음 프로시저에서는 Microsoft SQL Server Management Studio(SSMS)를 사용하여 DB 인스턴스에 연결합니다.

**SSMS를 사용하여 RDS for SQL Server DB에 연결하려면**

1. DB 인스턴스의 엔드포인트(DNS 이름)와 포트 번호를 찾습니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스의 AWS 리전을 선택합니다.

   1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

   1. 세부 정보를 표시하고자 하는 SQL Server DB 인스턴스 이름을 선택합니다.

   1. **연결** 탭에서 엔드포인트를 복사합니다. 또한 포트 번호를 적어 둡니다. DB 인스턴스에 연결하려면 엔드포인트와 포트 번호가 모두 필요합니다.  
![\[Microsoft SQL Server DB 인스턴스에 연결합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/SQLServerConnect2.png)

1. **Windows 인스턴스용 Amazon EC2 사용 설명서에 있는 [Microsoft Windows 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-connect-to-instance-windows)의 단계를 따라 앞에서 만든 EC2 인스턴스에 연결합니다.

1. Microsoft의 SQL Server Management Studio(SSMS) 클라이언트를 설치합니다.

   SSMS의 독립 실행형 버전을 EC2 인스턴스에 다운로드하려면 Microsoft 설명서의 [SSMS(SQL Server Management Studio) 다운로드](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms)를 참조하세요.

   1. 시작 메뉴를 사용하여 Internet Explorer를 엽니다.

   1. Internet Explorer를 사용하여 독립 실행형 버전의 SSMS를 다운로드하고 설치합니다. 사이트를 신뢰할 수 없다는 메시지가 표시되면 신뢰할 수 있는 사이트 목록에 해당 사이트를 추가하세요.

1. SQL Server Management Studio(SSMS)를 시작합니다.

   **Connect to Server** 대화 상자가 나타납니다.

1. 샘플 DB 인스턴스에 대한 다음 정보를 제공합니다.

   1. [**Server type**]에서 [**Database Engine**]을 선택합니다.

   1. **서버 이름**에서 DNS 이름, 쉼표 및 포트 번호(기본 포트 1433)를 차례대로 입력합니다. 예를 들어 서버 이름은 다음과 같은 형식이어야 합니다.

      ```
      database-test1.0123456789012.us-west-2.rds.amazonaws.com,1433
      ```

   1. **인증(Authentication)**]의 경우 **SQL Server 인증(SQL Server Authentication)**을 선택합니다.

   1. **로그인**에서 샘플 DB 인스턴스에 사용하려고 선택한 사용자 이름을 입력합니다. 마스터 사용자 이름으로도 알려져 있습니다.

   1. **암호**에 샘플 DB 인스턴스에 대해 이전에 선택한 암호를 입력합니다. 마스터 사용자 암호로도 알려져 있습니다.

1. [**Connect**]를 선택합니다.

   몇 분 정도 지나면 SSMS가 DB 인스턴스에 연결됩니다. 보안을 위해서는 암호화된 연결을 사용하는 것이 가장 좋습니다. 클라이언트와 서버가 동일한 VPC에 있고 네트워크를 신뢰할 수 있는 경우에만 암호화되지 않은 SQL Server 연결을 사용합니다. 암호화된 연결 사용에 대한 자세한 내용은 [Microsoft SQL Server DB 인스턴스와 함께 SSL 사용](SQLServer.Concepts.General.SSL.Using.md) 섹션을 참조하세요.

Microsoft SQL Server DB 인스턴스에 연결하는 방법에 대한 자세한 내용은 [Microsoft SQL Server DB 인스턴스에 연결](USER_ConnectToMicrosoftSQLServerInstance.md) 섹션을 참조하세요.

연결에 대한 내용은 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 섹션을 참조하세요.

## 샘플 SQL Server DB 인스턴스 탐색
<a name="CHAP_GettingStarted.SQLServer.Exploring"></a>

Microsoft SQL Server Management Studio(SSMS)를 사용하여 샘플 DB 인스턴스를 탐색할 수 있습니다.

**SSMS를 사용하여 DB 인스턴스를 탐색하려면**

1. SQL 서버 DB 인스턴스는 SQL 서버의 표준 기본 제공 시스템 데이터베이스(마스터, 모델, msdb 및 tempdb)와 함께 제공됩니다. 시스템 데이터베이스를 탐색하려면 다음을 수행하십시오.

   1. SSMS의 [**View**] 메뉴에서 [**Object Explorer**]를 선택합니다.

   1. DB 인스턴스와 **데이터베이스**를 확장하고, 다음과 같이 **시스템 데이터베이스**를 확장합니다.  
![\[시스템 데이터베이스를 표시하는 객체 탐색기.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/SQL-SSMS-SystemDBs.png)

   SQL Server DB 인스턴스는 `rdsadmin`이라는 이름의 데이터베이스와 함께 제공됩니다. Amazon RDS는 이 데이터베이스를 사용하여 데이터베이스를 관리하는 데 사용하는 객체를 저장합니다. `rdsadmin` 데이터베이스에도 고급 작업 수행을 위해 실행할 수 있는 저장 절차가 포함됩니다.

1. 자체 데이터베이스 생성을 시작하고 평소대로 DB 인스턴스와 데이터베이스에 대한 쿼리 실행을 시작합니다. 샘플 DB 인스턴스에 대한 테스트 쿼리를 실행하려면 다음을 수행합니다.

   1. SSMS의 **File**(파일) 메뉴에서 **New**(새로 만들기)를 가리킨 후 **Query with Current Connection**(현재 연결로 쿼리)을 선택합니다.

   1. 다음 SQL 쿼리를 입력합니다.

      ```
      select @@VERSION
      ```

   1. 쿼리를 실행합니다. SSMS가 Amazon RDS DB 인스턴스의 SQL Server 버전을 반환합니다.  
![\[SQL 쿼리 창.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/SQL-Connect-Query.png)

## EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.Deleting.SQLServer"></a>

생성한 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후에는 요금이 더 이상 부과되지 않도록 삭제합니다.

CloudFormation을 사용하여 리소스를 생성했다면 이 단계를 건너뛰고 다음 단계로 이동합니다.

**EC2 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. EC2 인스턴스를 선택하고 **인스턴스 상태, 인스턴스 종료**를 차례로 선택합니다.

1. 확인 메시지가 나타나면 **종료**를 선택합니다.

EC2 인스턴스 삭제에 대한 자세한 내용은 **Windows 인스턴스용 Amazon EC2 사용 설명서의 [인스턴스 종료](https://docs.aws.amazon.com//AWSEC2/latest/WindowsGuide/terminating-instances.html)를 참조하세요.

**최종 DB 스냅샷이 없는 DB 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 삭제할 DB 인스턴스를 선택합니다.

1. [** Actions**]에 대해 [**Delete**]를 선택합니다.

1. **최종 스냅샷을 생성하시겠습니까?** 및 **자동 백업 보존**을 선택 해제합니다.

1. 확인을 완료하고 **삭제**를 선택합니다.

## (선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.DeletingCFN.SQLServer"></a>

CloudFormation을 사용하여 리소스를 생성한 경우 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후 CloudFormation 스택을 삭제하여 더 이상 비용이 청구되지 않도록 합니다.

**CloudFormation 리소스를 삭제하려면**

1. CloudFormation 콘솔을 엽니다.

1. CloudFormation 콘솔의 **스택** 페이지에서 루트 스택(VPCStack, BastionStack 또는 RDSNS라는 이름이 없는 스택)을 선택합니다.

1. **삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **스택 삭제**를 선택합니다.

CloudFormation에서 스택을 삭제하는 방법에 대한 자세한 내용은 **AWS CloudFormation 사용 설명서의 [CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

## (선택 사항) DB 인스턴스를 Lambda 함수에 연결
<a name="CHAP_GettingStarted.ComputeConnect.SQLServer"></a>

RDS for SQL Server DB 인스턴스를 Lambda 서버리스 컴퓨팅 리소스에 연결할 수도 있습니다. Lambda 함수를 사용하면 인프라를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다. 또한 하루 12개에서 초당 수백 개에 이르는 모든 규모의 코드 실행 요청에 자동으로 응답할 수 있습니다. 자세한 내용은 [Lambda 함수와 DB 인스턴스 자동 연결](lambda-rds-connect.md) 섹션을 참조하세요.

# MySQL DB 인스턴스 생성 및 해당 인스턴스에 연결
<a name="CHAP_GettingStarted.CreatingConnecting.MySQL"></a>

이 자습서에서는 EC2 인스턴스와 RDS for MySQL DB 인스턴스를 생성합니다. 자습서에서는 표준 MySQL 클라이언트를 사용하여 EC2 인스턴스에서 DB 인스턴스에 액세스하는 방법을 보여줍니다. 이 자습서에서는 모범 사례를 따라 Virtual Private Cloud(VPC)에서 프라이빗 DB 인스턴스를 생성합니다. 대부분의 경우 EC2 인스턴스와 같이 동일한 VPC에 있는 다른 리소스는 DB 인스턴스에 액세스할 수 있지만 VPC 외부의 리소스는 DB 인스턴스에 액세스할 수 없습니다.

자습서를 완료하면 VPC의 각 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷이 있을 것입니다. 한 가용 영역에서 EC2 인스턴스는 퍼블릭 서브넷에 있고 DB 인스턴스는 프라이빗 서브넷에 있습니다.

**중요**  
AWS 계정 생성은 무료입니다. 그러나 이 자습서를 완료하면 사용하는 AWS 리소스에 대한 비용이 발생할 수 있습니다. 자습서가 더 이상 필요하지 않은 경우 자습서를 완료한 후에 이러한 리소스를 삭제할 수 있습니다.

다음 다이어그램은 이 자습서를 완료했을 때 구성을 보여 줍니다.

![\[EC2 인스턴스 및 MySQL DB 인스턴스\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-mysql.png)


이 자습서에서는 다음 방법 중 하나를 사용하여 리소스를 생성할 수 있습니다.

1. AWS Management Console 사용 ‐ [MySQL DB 인스턴스 생성](#CHAP_GettingStarted.Creating.MySQL) 및 [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.MySQL.EC2) 

1. 데이터베이스 인스턴스 및 EC2 인스턴스를 생성하는 데 CloudFormation 사용 - [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 MySQL 인스턴스 생성](#CHAP_GettingStarted.CFN.MySQL) 

첫 번째 방법은 **간편 생성**을 사용하여 AWS Management Console을 통해 프라이빗 MySQL DB 인스턴스를 생성합니다. 여기에서는 DB 엔진 유형, DB 인스턴스 크기 및 DB 인스턴스 식별자만 지정합니다. [**간편 생성(Easy create)**]은 다른 구성 옵션에서도 기본 설정을 사용합니다.

**표준 생성**을 대신 사용하는 경우에는 DB 인스턴스를 생성할 때 더 많은 구성 옵션을 지정할 수 있습니다. 이러한 옵션에는 가용성, 보안, 백업 및 유지 관리에 대한 설정이 포함됩니다. 퍼블릭 DB 인스턴스를 만들려면 **표준 생성**을 사용해야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#CHAP_GettingStarted.Prerequisites.MySQL)
+ [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.MySQL.EC2)
+ [MySQL DB 인스턴스 생성](#CHAP_GettingStarted.Creating.MySQL)
+ [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 MySQL 인스턴스 생성](#CHAP_GettingStarted.CFN.MySQL)
+ [MySQL DB 인스턴스에 연결](#CHAP_GettingStarted.Connecting.MySQL)
+ [EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.Deleting.MySQL)
+ [(선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.DeletingCFN.MySQL)
+ [(선택 사항) DB 인스턴스를 Lambda 함수에 연결](#CHAP_GettingStarted.ComputeConnect.MySQL)

## 사전 조건
<a name="CHAP_GettingStarted.Prerequisites.MySQL"></a>

시작하기 전에 다음 섹션에서 다음 단계를 완료하세요.
+ [AWS 계정에 가입](CHAP_SettingUp.md#sign-up-for-aws)
+ [관리자 액세스 권한이 있는 사용자 생성](CHAP_SettingUp.md#create-an-admin)

## EC2 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.MySQL.EC2"></a>

데이터베이스에 연결하는 데 사용할 Amazon EC2 인스턴스를 생성합니다.

**EC2 인스턴스를 생성하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단에서 EC2 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 다음 이미지에 나와 있는 것처럼 **EC2 대시보드**를 선택한 다음, **인스턴스 시작**을 선택합니다.  
![\[EC2 대시보드.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **인스턴스 시작** 페이지가 열립니다.

1. **인스턴스 시작** 페이지에서 다음 설정을 선택합니다.

   1. **Name and tags**(이름 및 태그) 아래의 **Name**(이름)에 **ec2-database-connect**을 입력하세요.

   1. **Application and OS Images (Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image))에서 **Amazon Linux**를 선택한 다음 **Amazon Linux 2023 AMI**를 선택합니다. 다른 선택 항목에 대해서는 기본값을 그대로 유지합니다.  
![\[Amazon Machine Image를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. **인스턴스 유형**에서 **t2.micro**를 선택합니다.

   1. **키 페어(로그인)**에서 기존 키 페어를 사용할 **키 페어 이름**을 선택합니다. Amazon EC2 인스턴스에 대한 새 키 페어를 생성하려면 **새 키 페어 생성**을 선택한 다음 **키 페어 생성** 창을 사용하여 생성합니다.

      새 키 페어 생성에 대한 자세한 내용은 **Amazon EC2 Linux 인스턴스용 사용 설명서의 [키 페어 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)을 참조하세요.

   1. **네트워크 설정**의 **SSH 트래픽 허용**에서 EC2 인스턴스에 대한 SSH 연결 소스를 선택합니다.

      표시된 IP 주소가 SSH 연결에 대해 올바른 경우 **내 IP**를 선택할 수 있습니다. 그렇지 않으면 SSH(Secure Shell)를 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 결정할 수 있습니다. 퍼블릭 IP 주소를 확인하려면 다른 브라우저 창 또는 탭에서 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/)의 서비스를 사용합니다. IP 주소의 예는 192.0.2.1/32입니다.

       대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 결정합니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

      다음 이미지는 **네트워크 설정** 섹션의 예를 보여 줍니다.  
![\[EC2 인스턴스에 대한 네트워크 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 나머지 섹션에서 기본값은 그대로 둡니다.

   1. **요약** 패널에서 EC2 인스턴스 구성 요약을 검토하고 준비가 되면 **인스턴스 시작**을 선택합니다.

1. **시작 상태** 페이지에서, 새 EC2 인스턴스의 식별자(예: `i-1234567890abcdef0`)를 기록해 둡니다.  
![\[시작 상태 페이지의 EC2 인스턴스 식별자.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. EC2 인스턴스 식별자를 선택하여 EC2 인스턴스 목록을 열고 EC2 인스턴스를 선택합니다.

1. **세부 정보** 탭에서 SSH를 사용하여 연결할 때 필요한 다음 값을 기록해 둡니다.

   1. **인스턴스 요약**에서 **퍼블릭 IPv4 DNS**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 퍼블릭 DNS 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. **인스턴스 세부 정보**에서 **키 페어 이름**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 키 페어 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 계속하기 전에 EC2 인스턴스의 **인스턴스 상태**가 **실행 중**이 될 때까지 기다립니다.

## MySQL DB 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.MySQL"></a>

Amazon RDS의 기본 빌딩 블록은 DB 인스턴스입니다. MySQL 데이터베이스를 실행하는 환경입니다.

이 예시에서는 **간편 생성**을 사용하여 db.t3.micro DB 인스턴스 클래스에서 MySQL 데이터베이스 엔진을 실행하는 DB 인스턴스를 생성합니다.

**간편 생성(Easy create)을 사용하여 MySQL DB 인스턴스를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. Amazon RDS 콘솔의 오른쪽 상단에서 이전에 EC2 인스턴스에 사용한 AWS 리전을 선택합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. [**데이터베이스 생성(Create database)**]을 선택하고 [**간편 생성(Easy Create)**]이 선택되어 있는지 확인합니다.  
![\[간편 생성 옵션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. **구성**에서 **MySQL**을 선택합니다.

1. **DB instance size(DB 인스턴스 크기)**에서 **프리 티어**를 선택합니다. **프리 티어**는 무료 요금제 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.

1. **DB 인스턴스 식별자**에 **database-test1**을 입력합니다.

1. **마스터 사용자 이름**에 마스터 사용자의 이름을 입력하거나 기본 이름을 그대로 유지합니다.

   **데이터베이스 생성** 페이지는 다음 이미지와 비슷해야 합니다. 무료 요금제 계정에는 **프리 티어**가 표시됩니다. 유료 요금제 계정에는 **샌드박스**가 표시됩니다.  
![\[데이터베이스 생성 페이지.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-mysql.png)

1. DB 인스턴스에 자동 생성된 마스터 암호를 사용하려면 **암호 자동 생성**을 선택합니다.

   마스터 암호를 입력하려면 **암호 자동 생성** 선택을 해제한 다음, **마스터 암호**와 **암호 확인**에 동일한 암호를 입력합니다.

1. 이전에 생성한 EC2 인스턴스와의 연결을 설정하려면 **EC2 연결 설정 - *선택 사항***을 엽니다.

   **Connect to an EC2 compute resource**(EC2 컴퓨팅 리소스에 연결)를 선택합니다. 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[EC2 연결 옵션을 설정합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. (선택 사항) **View default settings for Easy create(간편 생성 기본 설정 보기)**를 엽니다.  
![\[Easy Create(간편 생성) 기본 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-view-default-mysql.png)

   [**간편 생성(Easy Create)**]과 함께 사용되는 기본 설정을 검토할 수 있습니다. **데이터베이스 생성 후 편집 가능** 열에는 데이터베이스 생성 후 어떤 옵션을 변경할 수 있는지 나와 있습니다.
   + 설정의 해당 열에 **아니요**라고 되어 있지만 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들 수 있습니다.
   + 설정의 해당 열에 **예**라고 되어 있으며 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들거나 DB 인스턴스를 생성한 후 수정하여 설정을 변경할 수 있습니다.

1. **데이터베이스 생성**을 선택합니다.

   DB 인스턴스의 마스터 사용자 이름 및 암호를 보려면 **View credential details(자격 증명 세부 정보 보기)**를 선택합니다.

   DB 인스턴스를 마스터 사용자로 연결하려면 화면에 나타난 사용자 이름과 암호를 사용합니다.
**중요**  
마스터 사용자 암호를 다시 볼 수는 없습니다. 따라서 기록을 해두지 않으면 이를 변경해야 합니다.  
DB 인스턴스가 사용 가능한 상태가 되고 난 후에 마스터 사용자 암호를 변경해야 하는 경우에는 다음과 같은 방법으로 DB 인스턴스를 수정할 수 있습니다. DB 인스턴스 변경에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

1. **데이터베이스** 목록에서 새 MySQL DB 인스턴스의 이름을 선택하면 세부 정보가 표시됩니다.

   DB 인스턴스를 사용할 준비가 될 때까지 DB 인스턴스의 상태는 **생성 중**입니다.  
![\[DB 인스턴스 세부 정보.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MySQL-Launch06.png)

   상태가 **Available**(사용 가능)로 변경되면 DB 인스턴스에 연결할 수 있습니다. DB 인스턴스 클래스와 스토리지의 양에 따라 새 인스턴스를 사용할 수 있을 때까지 최대 20분이 걸릴 수 있습니다.

## (선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 MySQL 인스턴스 생성
<a name="CHAP_GettingStarted.CFN.MySQL"></a>

콘솔을 사용하여 VPC, EC2 인스턴스 및 MySQL 인스턴스를 생성하는 대신 CloudFormation을 통해 코드형 인프라로 처리하여 AWS 리소스를 프로비저닝할 수 있습니다. AWS 리소스를 더 작고 관리하기 쉬운 단위로 구성하는 데 도움이 되도록 CloudFormation 중첩 스택 기능을 사용할 수 있습니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 생성](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) 및 [중첩된 스택 작업](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)을 참조하세요.

**중요**  
CloudFormation은 무료이지만, CloudFormation에서 생성하는 리소스는 라이브입니다. 이러한 리소스를 종료하지 않으면 해당 리소스에 대한 표준 사용 요금이 발생합니다. 자세한 내용은 [RDS for MySQL 요금](https://aws.amazon.com//rds/mysql/pricing)을 참조하세요.

CloudFormation 콘솔을 사용하여 리소스를 생성하려면 다음 단계를 완료합니다.
+ CloudFormation 템플릿 파일을 다운로드하십시오.
+ CloudFormation을 사용하여 리소스 구성

### CloudFormation 템플릿 파일을 다운로드하십시오.
<a name="CHAP_GettingStarted.CFN.MySQL.Step1"></a>

CloudFormation 템플릿은 JSON 또는 YAML 텍스트 파일로, 스택에서 생성하려는 리소스에 대한 구성 정보가 들어 있습니다. 또한 이 템플릿은 RDS 인스턴스와 함께 VPC와 Bastion Host를 생성합니다.

템플릿 파일을 다운로드하려면 다음 링크인 [MySQL CloudFormation 템플릿](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-mysql-main.template.yaml)을 엽니다.

Github 페이지에서 **원시 파일 다운로드 버튼을 클릭하여 템플릿 YAML 파일을 저장합니다.

### CloudFormation을 사용하여 리소스 구성
<a name="CHAP_GettingStarted.CFN.MySQL.Step2"></a>

**참고**  
이 프로세스를 시작하기 전에 AWS 계정에 EC2 인스턴스용 키 페어가 있는지 확인합니다. 자세한 내용은 [Amazon EC2 키 페어 및 Linux 인스턴스](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)를 참조하세요.

CloudFormation 템플릿을 사용할 때는 리소스가 제대로 생성되도록 올바른 파라미터를 선택해야 합니다. 다음 단계를 따릅니다.

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)에서 CloudFormation 콘솔을 엽니다.

1. **스택 생성**을 선택합니다.

1. 템플릿 지정 섹션에서 **컴퓨터에서 템플릿 파일 업로드**를 선택하고 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 다음 파라미터를 설정합니다.

   1. **스택 이름**을 **MySQLTestStack**으로 설정합니다.

   1. **파라미터**에서 가용 영역 3개를 선택하여 **가용 영역**을 설정합니다.

   1. **Linux Bastion Host 구성**에서 **키 이름**에 대해 EC2 인스턴스에 로그인할 키 페어를 선택합니다.

   1. **Linux Bastion Host 구성** 설정에서 **허용된 IP 범위**를 IP 주소로 설정합니다. Secure Shell(SSH)을 사용하여 VPC의 EC2 인스턴스에 연결하려면 [https://checkip.amazonaws.com](https://checkip.amazonaws.com)의 서비스를 사용하여 퍼블릭 IP 주소를 지정합니다. IP 주소의 예는 192.0.2.1/32입니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

   1. **데이터베이스 일반 구성**에서 **데이터베이스 인스턴스 클래스**를 **db.t3.micro**로 설정합니다.

   1. **데이터베이스 이름**을 **database-test1**으로 설정합니다.

   1. **데이터베이스 마스터 사용자 이름**에 마스터 사용자 이름을 입력합니다.

   1. 이 자습서에서는 **Secrets Manager를 사용하여 DB 마스터 사용자 암호 관리**를 `false`로 설정합니다.

   1. **데이터베이스 암호**의 경우 원하는 암호를 설정합니다. 자습서의 향후 단계에 사용할 수 있도록 암호를 기억해 둡니다.

   1. **데이터베이스 스토리지 구성**에서 **데이터베이스 스토리지 유형**을 **gp2**로 설정합니다.

   1. **데이터베이스 모니터링 구성**에서 **RDS 성능 개선 도우미 활성화**를 false로 설정합니다.

   1. 다른 모든 설정은 기본값으로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 옵션 구성** 페이지에서는 모든 기본 옵션을 그대로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 검토** 페이지에서 데이터베이스 및 Linux Bastion Host 옵션을 확인한 후 **제출**을 선택합니다.

스택 생성 프로세스가 완료되면 **BastionStack 및 **RDSNS라는 이름의 스택을 보고 데이터베이스에 연결하는 데 필요한 정보를 기록해 둡니다. 자세한 내용은 [AWS Management Console에서 CloudFormation 스택 데이터 및 리소스 보기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)를 참조하세요.

## MySQL DB 인스턴스에 연결
<a name="CHAP_GettingStarted.Connecting.MySQL"></a>

표준 SQL 클라이언트 애플리케이션을 사용해 DB 인스턴스에 연결할 수 있습니다. 이 예시에서는 mysql 명령줄 클라이언트를 사용해 MySQL DB 인스턴스에 연결합니다.

**MySQL DB 인스턴스에 연결하는 방법**

1. DB 인스턴스의 엔드포인트(DNS 이름)와 포트 번호를 찾습니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스의 AWS 리전을 선택합니다.

   1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

   1. 세부 정보를 표시하고자 하는 MySQL DB 인스턴스 이름을 선택합니다.

   1. **Connectivity & security(연결 및 보안)** 탭에서 엔드포인트를 복사합니다. 또한 포트 번호를 적어 둡니다. DB 인스턴스에 연결하려면 엔드포인트와 포트 번호가 모두 필요합니다.  
![\[MySQL DB 인스턴스에 연결\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MySQLConnect1.png)

1. **Amazon EC2 사용 설명서에 있는 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)의 단계를 따라 앞에서 만든 EC2 인스턴스에 연결합니다.

   SSH를 사용하여 EC2 인스턴스에 연결하는 것이 좋습니다. Windows, Linux 또는 Mac에 SSH 클라이언트 유틸리티가 설치된 경우 다음 명령 형식을 사용하여 인스턴스에 연결할 수 있습니다.

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   예를 들어 `ec2-database-connect-key-pair.pem`이 Linux의 `/dir1`에 저장되어 있고, EC2 인스턴스의 퍼블릭 IPv4 DNS가 `ec2-12-345-678-90.compute-1.amazonaws.com`이라고 가정해 보겠습니다. SSH 명령은 다음과 같이 표시됩니다.

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. EC2 인스턴스에서 소프트웨어를 업데이트하여 최신 버그 수정 및 보안 업데이트를 받습니다. 이렇게 하려면 다음 명령을 사용하십시오.
**참고**  
`-y` 옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.

   ```
   sudo dnf update -y
   ```

1.  Amazon Linux 2023에서 MariaDB의 mysql 명령줄 클라이언트를 설치하려면 다음 명령을 실행합니다.

   ```
   sudo dnf install mariadb105
   ```

1. MySQL DB 인스턴스에 연결합니다. 예를 들어, 다음 명령을 입력합니다. 이 작업을 통해 MySQL 클라이언트를 사용하여 MySQL DB 인스턴스에 연결할 수 있습니다.

   `endpoint`는 DB 인스턴스 엔드포인트(DNS 이름)로 대체하고, `admin`는 사용된 마스터 사용자 이름으로 대체합니다. 암호를 묻는 메시지가 표시되면 사용한 마스터 암호를 제공합니다.

   ```
   mysql -h endpoint -P 3306 -u admin -p
   ```

   사용자에 대한 암호를 입력하면 다음과 유사한 출력이 나타납니다.

   ```
   Welcome to the MariaDB monitor.  Commands end with ; or \g.
   Your MySQL connection id is 3082
   Server version: 8.0.28 Source distribution
   
   Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
   
   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
   
   MySQL [(none)]>
   ```

   MySQL DB 인스턴스 연결에 대한 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 단원을 참조하십시오. DB 인스턴스에 연결할 수 없는 경우 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 단원을 참조하십시오.

   보안을 위해서는 암호화된 연결을 사용하는 것이 가장 좋습니다. 클라이언트와 서버가 동일한 VPC에 있고 네트워크를 신뢰할 수 있는 경우에만 암호화되지 않은 MySQL 연결을 사용합니다. 암호화된 연결 사용에 대한 자세한 내용은 [MySQL 명령줄 클라이언트(암호화됨)에서 SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 연결](USER_ConnectToInstanceSSL.CLI.md) 섹션을 참조하세요.

1. SQL 명령을 실행합니다.

   예를 들어, 다음 SQL 명령은 현재 날짜 및 시간을 보여줍니다.

   ```
   SELECT CURRENT_TIMESTAMP;
   ```

## EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.Deleting.MySQL"></a>

생성한 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후에는 요금이 더 이상 부과되지 않도록 삭제합니다.

CloudFormation을 사용하여 리소스를 생성했다면 이 단계를 건너뛰고 다음 단계로 이동합니다.

**EC2 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. EC2 인스턴스를 선택하고 **인스턴스 상태, 인스턴스 종료**를 차례로 선택합니다.

1. 확인 메시지가 나타나면 **종료**를 선택합니다.

EC2 인스턴스 삭제에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스 종료](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)를 참조하세요.

**최종 DB 스냅샷이 없는 DB 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 삭제할 DB 인스턴스를 선택합니다.

1. [** Actions**]에 대해 [**Delete**]를 선택합니다.

1. **최종 스냅샷을 생성하시겠습니까?** 및 **자동 백업 보존**을 선택 해제합니다.

1. 확인을 완료하고 **삭제**를 선택합니다.

## (선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.DeletingCFN.MySQL"></a>

CloudFormation을 사용하여 리소스를 생성한 경우 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후 CloudFormation 스택을 삭제하여 더 이상 비용이 청구되지 않도록 합니다.

**CloudFormation 리소스를 삭제하려면**

1. CloudFormation 콘솔을 엽니다.

1. CloudFormation 콘솔의 **스택** 페이지에서 루트 스택(VPCStack, BastionStack 또는 RDSNS라는 이름이 없는 스택)을 선택합니다.

1. **삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **스택 삭제**를 선택합니다.

CloudFormation에서 스택을 삭제하는 방법에 대한 자세한 내용은 **AWS CloudFormation 사용 설명서의 [CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

## (선택 사항) DB 인스턴스를 Lambda 함수에 연결
<a name="CHAP_GettingStarted.ComputeConnect.MySQL"></a>

RDS for MySQL DB 인스턴스를 Lambda 서버리스 컴퓨팅 리소스에 연결할 수도 있습니다. Lambda 함수를 사용하면 인프라를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다. 또한 하루 12개에서 초당 수백 개에 이르는 모든 규모의 코드 실행 요청에 자동으로 응답할 수 있습니다. 자세한 내용은 [Lambda 함수와 DB 인스턴스 자동 연결](lambda-rds-connect.md) 섹션을 참조하세요.

# Oracle DB 인스턴스 생성 및 해당 인스턴스에 연결
<a name="CHAP_GettingStarted.CreatingConnecting.Oracle"></a>

이 자습서에서는 EC2 인스턴스와 RDS for Oracle DB 인스턴스를 생성합니다. 자습서에서는 표준 Oracle 클라이언트를 사용하여 EC2 인스턴스에서 DB 인스턴스에 액세스하는 방법을 보여줍니다. 이 자습서에서는 모범 사례를 따라 Virtual Private Cloud(VPC)에서 프라이빗 DB 인스턴스를 생성합니다. 대부분의 경우 EC2 인스턴스와 같이 동일한 VPC에 있는 다른 리소스는 DB 인스턴스에 액세스할 수 있지만 VPC 외부의 리소스는 DB 인스턴스에 액세스할 수 없습니다.

자습서를 완료하면 VPC의 각 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷이 있을 것입니다. 한 가용 영역에서 EC2 인스턴스는 퍼블릭 서브넷에 있고 DB 인스턴스는 프라이빗 서브넷에 있습니다.

**중요**  
AWS 계정 생성은 무료입니다. 그러나 이 자습서를 완료하면 사용하는 AWS 리소스에 대한 비용이 발생할 수 있습니다. 자습서가 더 이상 필요하지 않은 경우 자습서를 완료한 후에 이러한 리소스를 삭제할 수 있습니다.

다음 다이어그램은 이 자습서를 완료했을 때 구성을 보여 줍니다.

![\[EC2 인스턴스 및 Oracle DB 인스턴스.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-oracle.png)


이 자습서에서는 다음 방법 중 하나를 사용하여 리소스를 생성할 수 있습니다.

1. AWS Management Console 사용 ‐ [2단계: Oracle DB 인스턴스 생성](#CHAP_GettingStarted.Creating.Oracle) 및 [1단계: EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.Oracle.EC2) 

1. 데이터베이스 인스턴스 및 EC2 인스턴스를 생성하는 데 CloudFormation 사용 - [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 Oracle DB 인스턴스 생성](#CHAP_GettingStarted.CFN.Oracle) 

첫 번째 방법은 **간편 생성**을 사용하여 AWS Management Console을 통해 프라이빗 Oracle DB 인스턴스를 생성합니다. 여기에서는 DB 엔진 유형, DB 인스턴스 크기 및 DB 인스턴스 식별자만 지정합니다. [**간편 생성(Easy create)**]은 다른 구성 옵션에서도 기본 설정을 사용합니다.

**표준 생성**을 대신 사용하는 경우에는 DB 인스턴스를 생성할 때 더 많은 구성 옵션을 지정할 수 있습니다. 이러한 옵션에는 가용성, 보안, 백업 및 유지 관리에 대한 설정이 포함됩니다. 퍼블릭 DB 인스턴스를 만들려면 **표준 생성**을 사용해야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#CHAP_GettingStarted.Prerequisites.Oracle)
+ [1단계: EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.Oracle.EC2)
+ [2단계: Oracle DB 인스턴스 생성](#CHAP_GettingStarted.Creating.Oracle)
+ [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 Oracle DB 인스턴스 생성](#CHAP_GettingStarted.CFN.Oracle)
+ [3단계: SQL 클라이언트를 Oracle DB 인스턴스에 연결](#CHAP_GettingStarted.Connecting.Oracle)
+ [4단계: EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.Deleting.Oracle)
+ [(선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.DeletingCFN.Oracle)
+ [(선택 사항) DB 인스턴스를 Lambda 함수에 연결](#CHAP_GettingStarted.ComputeConnect.Oracle)

## 사전 조건
<a name="CHAP_GettingStarted.Prerequisites.Oracle"></a>

시작하기 전에 다음 섹션에서 다음 단계를 완료하세요.
+ [AWS 계정에 가입](CHAP_SettingUp.md#sign-up-for-aws)
+ [관리자 액세스 권한이 있는 사용자 생성](CHAP_SettingUp.md#create-an-admin)

## 1단계: EC2 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.Oracle.EC2"></a>

데이터베이스에 연결하는 데 사용할 Amazon EC2 인스턴스를 생성합니다.

**EC2 인스턴스를 생성하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단에서 EC2 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 다음 이미지에 나와 있는 것처럼 **EC2 대시보드**를 선택한 다음, **인스턴스 시작**을 선택합니다.  
![\[EC2 대시보드.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **인스턴스 시작** 페이지가 열립니다.

1. **인스턴스 시작** 페이지에서 다음 설정을 선택합니다.

   1. **Name and tags**(이름 및 태그) 아래의 **Name**(이름)에 **ec2-database-connect**을 입력하세요.

   1. **Application and OS Images (Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image))에서 **Amazon Linux**를 선택한 다음 **Amazon Linux 2023 AMI**를 선택합니다. 다른 선택 항목에 대해서는 기본값을 그대로 유지합니다.  
![\[Amazon Machine Image를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. **인스턴스 유형**에서 **t2.micro**를 선택합니다.

   1. **키 페어(로그인)**에서 기존 키 페어를 사용할 **키 페어 이름**을 선택합니다. Amazon EC2 인스턴스에 대한 새 키 페어를 생성하려면 **새 키 페어 생성**을 선택한 다음 **키 페어 생성** 창을 사용하여 생성합니다.

      새 키 페어 생성에 대한 자세한 내용은 **Amazon EC2 Linux 인스턴스용 사용 설명서의 [키 페어 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)을 참조하세요.

   1. **네트워크 설정**의 **SSH 트래픽 허용**에서 EC2 인스턴스에 대한 SSH 연결 소스를 선택합니다.

      표시된 IP 주소가 SSH 연결에 대해 올바른 경우 **내 IP**를 선택할 수 있습니다. 그렇지 않으면 SSH(Secure Shell)를 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 결정할 수 있습니다. 퍼블릭 IP 주소를 확인하려면 다른 브라우저 창 또는 탭에서 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/)의 서비스를 사용합니다. IP 주소의 예는 192.0.2.1/32입니다.

       대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 결정합니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

      다음 이미지는 **네트워크 설정** 섹션의 예를 보여 줍니다.  
![\[EC2 인스턴스에 대한 네트워크 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 나머지 섹션에서 기본값은 그대로 둡니다.

   1. **요약** 패널에서 EC2 인스턴스 구성 요약을 검토하고 준비가 되면 **인스턴스 시작**을 선택합니다.

1. **시작 상태** 페이지에서, 새 EC2 인스턴스의 식별자(예: `i-1234567890abcdef0`)를 기록해 둡니다.  
![\[시작 상태 페이지의 EC2 인스턴스 식별자.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. EC2 인스턴스 식별자를 선택하여 EC2 인스턴스 목록을 열고 EC2 인스턴스를 선택합니다.

1. **세부 정보** 탭에서 SSH를 사용하여 연결할 때 필요한 다음 값을 기록해 둡니다.

   1. **인스턴스 요약**에서 **퍼블릭 IPv4 DNS**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 퍼블릭 DNS 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. **인스턴스 세부 정보**에서 **키 페어 이름**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 키 페어 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 계속하기 전에 EC2 인스턴스의 **인스턴스 상태**가 **실행 중**이 될 때까지 기다립니다.

## 2단계: Oracle DB 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.Oracle"></a>

Amazon RDS의 기본 빌딩 블록은 DB 인스턴스입니다. Oracle 데이터베이스를 실행하는 환경입니다.

이 예시에서는 **간편 생성**을 사용하여 db.m5.large DB 인스턴스 클래스에서 Oracle 데이터베이스 엔진을 실행하는 DB 인스턴스를 생성합니다.

**간편 생성을 사용하여 Oracle DB 인스턴스를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. [**데이터베이스 생성(Create database)**]을 선택하고 [**간편 생성(Easy Create)**]이 선택되어 있는지 확인합니다.  
![\[간편 생성 옵션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. **구성**에서 **Oracle**을 선택합니다.

1. **DB instance size(DB 인스턴스 크기)**에서 **개발/테스트**를 선택합니다.

1. **DB 인스턴스 식별자**에 **database-test1**을 입력합니다.

1. **마스터 사용자 이름**에 마스터 사용자의 이름을 입력하거나 기본 이름을 그대로 유지합니다.

   **데이터베이스 생성** 페이지는 다음 이미지와 비슷해야 합니다.  
![\[데이터베이스 생성 페이지.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-oracle2.png)

1. DB 인스턴스에 자동 생성된 마스터 암호를 사용하려면 **암호 자동 생성**을 선택합니다.

   마스터 암호를 입력하려면 **암호 자동 생성** 선택을 해제한 다음, **마스터 암호**와 **암호 확인**에 동일한 암호를 입력합니다.

1. 이전에 생성한 EC2 인스턴스와의 연결을 설정하려면 **EC2 연결 설정 - *선택 사항***을 엽니다.

   **Connect to an EC2 compute resource**(EC2 컴퓨팅 리소스에 연결)를 선택합니다. 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[EC2 연결 옵션을 설정합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. **간편 생성 기본 설정 보기**를 엽니다.  
![\[Easy Create(간편 생성) 기본 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-view-default-Oracle.png)

   [**간편 생성(Easy Create)**]과 함께 사용되는 기본 설정을 검토할 수 있습니다. **데이터베이스 생성 후 편집 가능** 열에는 데이터베이스 생성 후 어떤 옵션을 변경할 수 있는지 나와 있습니다.
   + 설정의 해당 열에 **아니요**라고 되어 있지만 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들 수 있습니다.
   + 설정의 해당 열에 **예**라고 되어 있으며 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들거나 DB 인스턴스를 생성한 후 수정하여 설정을 변경할 수 있습니다.

1. **데이터베이스 생성**을 선택합니다.

   DB 인스턴스의 마스터 사용자 이름 및 암호를 보려면 **View credential details(자격 증명 세부 정보 보기)**를 선택합니다.

   DB 인스턴스를 마스터 사용자로 연결하려면 화면에 나타난 사용자 이름과 암호를 사용합니다.
**중요**  
마스터 사용자 암호를 다시 볼 수는 없습니다. 따라서 기록을 해두지 않으면 이를 변경해야 합니다.  
DB 인스턴스가 사용 가능한 상태가 되고 난 후에 마스터 사용자 암호를 변경해야 하는 경우에는 다음과 같은 방법으로 DB 인스턴스를 수정할 수 있습니다. DB 인스턴스 변경에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

1. **데이터베이스** 목록에서 새 Oracle DB 인스턴스의 이름을 선택하면 세부 정보가 표시됩니다.

   DB 인스턴스를 사용할 준비가 될 때까지 DB 인스턴스의 상태는 **생성 중**입니다.  
![\[DB 인스턴스 세부 정보.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Oracle-Launch05.png)

   상태가 **Available**(사용 가능)로 변경되면 DB 인스턴스에 연결할 수 있습니다. DB 인스턴스 클래스와 스토리지의 양에 따라 새 인스턴스를 사용할 수 있을 때까지 최대 20분이 걸릴 수 있습니다. DB 인스턴스를 생성하는 동안 다음 단계를 진행하여 EC2 인스턴스를 생성할 수 있습니다.

## (선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 Oracle DB 인스턴스 생성
<a name="CHAP_GettingStarted.CFN.Oracle"></a>

콘솔을 사용하여 VPC, EC2 인스턴스 및 Oracle DB 인스턴스를 생성하는 대신 CloudFormation을 통해 코드형 인프라로 처리하여 AWS 리소스를 프로비저닝할 수 있습니다. AWS 리소스를 더 작고 관리하기 쉬운 단위로 구성하는 데 도움이 되도록 CloudFormation 중첩 스택 기능을 사용할 수 있습니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 생성](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) 및 [중첩된 스택 작업](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)을 참조하세요.

**중요**  
CloudFormation은 무료이지만, CloudFormation에서 생성하는 리소스는 라이브입니다. 이러한 리소스를 종료하지 않으면 해당 리소스에 대한 표준 사용 요금이 발생합니다. 자세한 내용은 [RDS for Oracle 요금](https://aws.amazon.com//rds/oracle/pricing)을 참조하세요.

CloudFormation 콘솔을 사용하여 리소스를 생성하려면 다음 단계를 완료합니다.
+ 1단계: CloudFormation 템플릿 다운로드
+ 2단계: CloudFormation을 사용하여 리소스 구성

### CloudFormation 템플릿 파일을 다운로드하십시오.
<a name="CHAP_GettingStarted.CFN.Oracle.Step1"></a>

CloudFormation 템플릿은 JSON 또는 YAML 텍스트 파일로, 스택에서 생성하려는 리소스에 대한 구성 정보가 들어 있습니다. 또한 이 템플릿은 RDS 인스턴스와 함께 VPC와 Bastion Host를 생성합니다.

템플릿 파일을 다운로드하려면 다음 링크인 [Oracle CloudFormation 템플릿](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-oracle-main.template.yaml)을 엽니다.

Github 페이지에서 **원시 파일 다운로드 버튼을 클릭하여 템플릿 YAML 파일을 저장합니다.

### CloudFormation을 사용하여 리소스 구성
<a name="CHAP_GettingStarted.CFN.Oracle.Step2"></a>

**참고**  
이 프로세스를 시작하기 전에 AWS 계정에 EC2 인스턴스용 키 페어가 있는지 확인합니다. 자세한 내용은 [Amazon EC2 키 페어 및 Linux 인스턴스](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)를 참조하세요.

CloudFormation 템플릿을 사용할 때는 리소스가 제대로 생성되도록 올바른 파라미터를 선택해야 합니다. 다음 단계를 따릅니다.

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)에서 CloudFormation 콘솔을 엽니다.

1. **스택 생성**을 선택합니다.

1. 템플릿 지정 섹션에서 **컴퓨터에서 템플릿 파일 업로드**를 선택하고 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 다음 파라미터를 설정합니다.

   1. **스택 이름**을 **OracleTestStack**으로 설정합니다.

   1. **파라미터**에서 가용 영역 3개를 선택하여 **가용 영역**을 설정합니다.

   1. **Linux Bastion Host 구성**에서 **키 이름**에 대해 EC2 인스턴스에 로그인할 키 페어를 선택합니다.

   1. **Linux Bastion Host 구성** 설정에서 **허용된 IP 범위**를 IP 주소로 설정합니다. Secure Shell(SSH)을 사용하여 VPC의 EC2 인스턴스에 연결하려면 [https://checkip.amazonaws.com](https://checkip.amazonaws.com)의 서비스를 사용하여 퍼블릭 IP 주소를 지정합니다. IP 주소의 예는 192.0.2.1/32입니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

   1. **데이터베이스 일반 구성**에서 **데이터베이스 인스턴스 클래스**를 **db.t3.micro**로 설정합니다.

   1. **데이터베이스 이름**을 **database-test1**으로 설정합니다.

   1. **데이터베이스 마스터 사용자 이름**에 마스터 사용자 이름을 입력합니다.

   1. 이 자습서에서는 **Secrets Manager를 사용하여 DB 마스터 사용자 암호 관리**를 `false`로 설정합니다.

   1. **데이터베이스 암호**의 경우 원하는 암호를 설정합니다. 자습서의 향후 단계에 사용할 수 있도록 암호를 기억해 둡니다.

   1. **데이터베이스 스토리지 구성**에서 **데이터베이스 스토리지 유형**을 **gp2**로 설정합니다.

   1. **데이터베이스 모니터링 구성**에서 **RDS 성능 개선 도우미 활성화**를 false로 설정합니다.

   1. 다른 모든 설정은 기본값으로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 옵션 구성** 페이지에서는 모든 기본 옵션을 그대로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 검토** 페이지에서 데이터베이스 및 Linux Bastion Host 옵션을 확인한 후 **제출**을 선택합니다.

스택 생성 프로세스가 완료되면 **BastionStack 및 **RDSNS라는 이름의 스택을 보고 데이터베이스에 연결하는 데 필요한 정보를 기록해 둡니다. 자세한 내용은 [AWS Management Console에서 CloudFormation 스택 데이터 및 리소스 보기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)를 참조하세요.

## 3단계: SQL 클라이언트를 Oracle DB 인스턴스에 연결
<a name="CHAP_GettingStarted.Connecting.Oracle"></a>

표준 SQL 클라이언트 애플리케이션을 사용하여 DB 인스턴스에 연결할 수 있습니다. 이 예시에서는 Oracle 명령줄 클라이언트를 사용하여 Oracle DB 인스턴스에 연결합니다.

**Oracle DB 인스턴스에 연결하려면**

1. DB 인스턴스의 엔드포인트(DNS 이름)와 포트 번호를 찾습니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스의 AWS 리전을 선택합니다.

   1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

   1. 세부 정보를 표시하고자 하는 Oracle DB 인스턴스 이름을 선택합니다.

   1. **Connectivity & security(연결 및 보안)** 탭에서 엔드포인트를 복사합니다. 또한 포트 번호를 적어 둡니다. DB 인스턴스에 연결하려면 엔드포인트와 포트 번호가 모두 필요합니다.  
![\[Oracle DB 인스턴스에 연결합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/OracleConnect1.png)

1. **Amazon EC2 사용 설명서에 있는 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)의 단계를 따라 앞에서 만든 EC2 인스턴스에 연결합니다.

   SSH를 사용하여 EC2 인스턴스에 연결하는 것이 좋습니다. Windows, Linux 또는 Mac에 SSH 클라이언트 유틸리티가 설치된 경우 다음 명령 형식을 사용하여 인스턴스에 연결할 수 있습니다.

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   예를 들어 `ec2-database-connect-key-pair.pem`이 Linux의 `/dir1`에 저장되어 있고, EC2 인스턴스의 퍼블릭 IPv4 DNS가 `ec2-12-345-678-90.compute-1.amazonaws.com`이라고 가정해 보겠습니다. SSH 명령은 다음과 같이 표시됩니다.

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. EC2 인스턴스에서 소프트웨어를 업데이트하여 최신 버그 수정 및 보안 업데이트를 받습니다. 이렇게 하려면 다음 명령을 사용합니다.
**참고**  
`-y` 옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.

   ```
   sudo dnf update -y
   ```

1. 웹 브라우저에서 [https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)로 이동합니다.

1. 웹 페이지에 표시되는 최신 데이터베이스 버전을 보려면 Instant Client Basic Package 및 SQL\$1Plus Package의 .rpm 링크(.zip 링크 아님)를 복사하세요. 예를 들어, 다음 링크는 Oracle 데이터베이스 버전 21.9의 링크입니다.
   + https://download.oracle.com/otn\$1software/linux/instantclient/219000/oracle-instantclient-basic-21.9.0.0.0-1.el8.x86\$164.rpm
   + https://download.oracle.com/otn\$1software/linux/instantclient/219000/oracle-instantclient-sqlplus-21.9.0.0.0-1.el8.x86\$164.rpm

1. SSH 세션에서 `wget` 명령을 실행하여 이전 단계에서 가져온 링크를 통해 .rpm 파일을 다운로드합니다. 다음 예제에서는 Oracle 데이터베이스 버전 21.9의 .rpm 파일을 다운로드합니다.

   ```
   wget https://download.oracle.com/otn_software/linux/instantclient/219000/oracle-instantclient-basic-21.9.0.0.0-1.el8.x86_64.rpm
   wget https://download.oracle.com/otn_software/linux/instantclient/219000/oracle-instantclient-sqlplus-21.9.0.0.0-1.el8.x86_64.rpm
   ```

1. 다음과 같이 `dnf` 명령을 실행하여 패키지를 설치합니다.

   ```
   sudo dnf install oracle-instantclient-*.rpm
   ```

1. SQL\$1Plus를 시작하고 Oracle DB 인스턴스에 연결합니다. 예를 들어, 다음 명령을 입력합니다.

   `oracle-db-instance-endpoint`는 DB 인스턴스 엔드포인트(DNS 이름)로 대체하고, `admin`는 사용된 마스터 사용자 이름으로 대체합니다. Oracle에서 **간편 생성**을 사용할 경우 데이터베이스 이름은 `DATABASE`입니다. 암호를 묻는 메시지가 표시되면 사용한 마스터 암호를 제공합니다.

   ```
   sqlplus admin@oracle-db-instance-endpoint:1521/DATABASE
   ```

   사용자에 대한 암호를 입력하면 다음과 유사한 출력이 나타납니다.

   ```
   SQL*Plus: Release 21.0.0.0.0 - Production on Wed Mar 1 16:41:28 2023
   Version 21.9.0.0.0
   
   Copyright (c) 1982, 2022, Oracle.  All rights reserved.
   
   Enter password: 
   Last Successful login time: Wed Mar 01 2023 16:30:52 +00:00
   
   Connected to:
   Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
   Version 19.18.0.0.0
   
   SQL>
   ```

   RDS for Oracle DB 인스턴스 연결에 대한 자세한 내용은 [Oracle DB 인스턴스에 연결](USER_ConnectToOracleInstance.md) 섹션을 참조하세요. DB 인스턴스에 연결할 수 없는 경우 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 단원을 참조하십시오.

   보안을 위해서는 암호화된 연결을 사용하는 것이 가장 좋습니다. 클라이언트와 서버가 동일한 VPC에 있고 네트워크를 신뢰할 수 있는 경우에만 암호화되지 않은 Oracle 연결을 사용합니다. 암호화된 연결 사용에 대한 자세한 내용은 [Oracle DB 인스턴스 연결 보안](Oracle.Concepts.RestrictedDBAPrivileges.md) 섹션을 참조하세요.

1. SQL 명령을 실행합니다.

   예를 들어, 다음 SQL 명령은 현재 날짜를 보여줍니다.

   ```
   SELECT SYSDATE FROM DUAL;
   ```

## 4단계: EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.Deleting.Oracle"></a>

생성한 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후에는 요금이 더 이상 부과되지 않도록 삭제합니다.

CloudFormation을 사용하여 리소스를 생성했다면 이 단계를 건너뛰고 다음 단계로 이동합니다.

**EC2 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. EC2 인스턴스를 선택하고 **인스턴스 상태, 인스턴스 종료**를 차례로 선택합니다.

1. 확인 메시지가 나타나면 **종료**를 선택합니다.

EC2 인스턴스 삭제에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스 종료](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)를 참조하세요.

**최종 DB 스냅샷이 없는 DB 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 삭제할 DB 인스턴스를 선택합니다.

1. [** Actions**]에 대해 [**Delete**]를 선택합니다.

1. **최종 스냅샷을 생성하시겠습니까?** 및 **자동 백업 보존**을 선택 해제합니다.

1. 확인을 완료하고 **삭제**를 선택합니다.

## (선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.DeletingCFN.Oracle"></a>

CloudFormation을 사용하여 리소스를 생성한 경우 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후 CloudFormation 스택을 삭제하여 더 이상 비용이 청구되지 않도록 합니다.

**CloudFormation 리소스를 삭제하려면**

1. CloudFormation 콘솔을 엽니다.

1. CloudFormation 콘솔의 **스택** 페이지에서 루트 스택(VPCStack, BastionStack 또는 RDSNS라는 이름이 없는 스택)을 선택합니다.

1. **삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **스택 삭제**를 선택합니다.

CloudFormation에서 스택을 삭제하는 방법에 대한 자세한 내용은 **AWS CloudFormation 사용 설명서의 [CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

## (선택 사항) DB 인스턴스를 Lambda 함수에 연결
<a name="CHAP_GettingStarted.ComputeConnect.Oracle"></a>

RDS for Oracle DB 인스턴스를 Lambda 서버리스 컴퓨팅 리소스에 연결할 수도 있습니다. Lambda 함수를 사용하면 인프라를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다. 또한 하루 12개에서 초당 수백 개에 이르는 모든 규모의 코드 실행 요청에 자동으로 응답할 수 있습니다. 자세한 내용은 [Lambda 함수와 DB 인스턴스 자동 연결](lambda-rds-connect.md) 섹션을 참조하세요.

# PostgreSQL DB 인스턴스 생성 및 해당 인스턴스에 연결
<a name="CHAP_GettingStarted.CreatingConnecting.PostgreSQL"></a>

이 자습서에서는 EC2 인스턴스와 RDS for PostgreSQL DB 인스턴스를 생성합니다. 자습서에서는 표준 PostgreSQL 클라이언트를 사용하여 EC2 인스턴스에서 DB 인스턴스에 액세스하는 방법을 보여줍니다. 이 자습서에서는 모범 사례를 따라 Virtual Private Cloud(VPC)에서 프라이빗 DB 인스턴스를 생성합니다. 대부분의 경우 EC2 인스턴스와 같이 동일한 VPC에 있는 다른 리소스는 DB 인스턴스에 액세스할 수 있지만 VPC 외부의 리소스는 DB 인스턴스에 액세스할 수 없습니다.

자습서를 완료하면 VPC의 각 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷이 있을 것입니다. 한 가용 영역에서 EC2 인스턴스는 퍼블릭 서브넷에 있고 DB 인스턴스는 프라이빗 서브넷에 있습니다.

**중요**  
AWS 계정 생성은 무료입니다. 그러나 이 자습서를 완료하면 사용하는 AWS 리소스에 대한 비용이 발생할 수 있습니다. 자습서가 더 이상 필요하지 않은 경우 자습서를 완료한 후에 이러한 리소스를 삭제할 수 있습니다.

다음 다이어그램은 이 자습서를 완료했을 때 구성을 보여 줍니다.

![\[EC2 인스턴스 및 PostgreSQL DB 인스턴스.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-postgresql.png)


이 자습서에서는 다음 방법 중 하나를 사용하여 리소스를 생성할 수 있습니다.

1. AWS Management Console 사용 ‐ [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.RDSPostgreSQL.EC2) 및 [PostgreSQL DB 인스턴스 생성](#CHAP_GettingStarted.Creating.PostgreSQL) 

1. 데이터베이스 인스턴스 및 EC2 인스턴스를 생성하는 데 CloudFormation 사용 - [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 PostgreSQL 인스턴스 생성](#CHAP_GettingStarted.CFN.PostgreSQL) 

첫 번째 방법은 **간편 생성**을 사용하여 AWS Management Console을 통해 프라이빗 PostgreSQL DB 인스턴스를 생성합니다. 여기에서는 DB 엔진 유형, DB 인스턴스 크기 및 DB 인스턴스 식별자만 지정합니다. [**간편 생성(Easy create)**]은 다른 구성 옵션에서도 기본 설정을 사용합니다.

**표준 생성**을 대신 사용하는 경우에는 DB 인스턴스를 생성할 때 더 많은 구성 옵션을 지정할 수 있습니다. 이러한 옵션에는 가용성, 보안, 백업 및 유지 관리에 대한 설정이 포함됩니다. 퍼블릭 DB 인스턴스를 만들려면 **표준 생성**을 사용해야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#CHAP_GettingStarted.Prerequisites.RDSPostgreSQL)
+ [EC2 인스턴스 생성](#CHAP_GettingStarted.Creating.RDSPostgreSQL.EC2)
+ [PostgreSQL DB 인스턴스 생성](#CHAP_GettingStarted.Creating.PostgreSQL)
+ [(선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 PostgreSQL 인스턴스 생성](#CHAP_GettingStarted.CFN.PostgreSQL)
+ [PostgreSQL DB 인스턴스에 연결](#CHAP_GettingStarted.Connecting.PostgreSQL)
+ [EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.Deleting.PostgreSQL)
+ [(선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제](#CHAP_GettingStarted.DeletingCFN.PostgreSQL)
+ [(선택 사항) DB 인스턴스를 Lambda 함수에 연결](#CHAP_GettingStarted.ComputeConnect.PostreSQL)

## 사전 조건
<a name="CHAP_GettingStarted.Prerequisites.RDSPostgreSQL"></a>

시작하기 전에 다음 섹션에서 다음 단계를 완료하세요.
+ [AWS 계정에 가입](CHAP_SettingUp.md#sign-up-for-aws)
+ [관리자 액세스 권한이 있는 사용자 생성](CHAP_SettingUp.md#create-an-admin)

## EC2 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.RDSPostgreSQL.EC2"></a>

데이터베이스에 연결하는 데 사용할 Amazon EC2 인스턴스를 생성합니다.

**EC2 인스턴스를 생성하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단에서 EC2 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 다음 이미지에 나와 있는 것처럼 **EC2 대시보드**를 선택한 다음, **인스턴스 시작**을 선택합니다.  
![\[EC2 대시보드.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

   **인스턴스 시작** 페이지가 열립니다.

1. **인스턴스 시작** 페이지에서 다음 설정을 선택합니다.

   1. **Name and tags**(이름 및 태그) 아래의 **Name**(이름)에 **ec2-database-connect**을 입력하세요.

   1. **Application and OS Images (Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image))에서 **Amazon Linux**를 선택한 다음 **Amazon Linux 2023 AMI**를 선택합니다. 다른 선택 항목에 대해서는 기본값을 그대로 유지합니다.  
![\[Amazon Machine Image를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. **인스턴스 유형**에서 **t2.micro**를 선택합니다.

   1. **키 페어(로그인)**에서 기존 키 페어를 사용할 **키 페어 이름**을 선택합니다. Amazon EC2 인스턴스에 대한 새 키 페어를 생성하려면 **새 키 페어 생성**을 선택한 다음 **키 페어 생성** 창을 사용하여 생성합니다.

      새 키 페어 생성에 대한 자세한 내용은 **Amazon EC2 Linux 인스턴스용 사용 설명서의 [키 페어 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)을 참조하세요.

   1. **네트워크 설정**의 **SSH 트래픽 허용**에서 EC2 인스턴스에 대한 SSH 연결 소스를 선택합니다.

      표시된 IP 주소가 SSH 연결에 대해 올바른 경우 **내 IP**를 선택할 수 있습니다. 그렇지 않으면 SSH(Secure Shell)를 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 결정할 수 있습니다. 퍼블릭 IP 주소를 확인하려면 다른 브라우저 창 또는 탭에서 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/)의 서비스를 사용합니다. IP 주소의 예는 192.0.2.1/32입니다.

       대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 결정합니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

      다음 이미지는 **네트워크 설정** 섹션의 예를 보여 줍니다.  
![\[EC2 인스턴스에 대한 네트워크 설정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Connect_NtwkSettings.png)

   1. 나머지 섹션에서 기본값은 그대로 둡니다.

   1. **요약** 패널에서 EC2 인스턴스 구성 요약을 검토하고 준비가 되면 **인스턴스 시작**을 선택합니다.

1. **시작 상태** 페이지에서, 새 EC2 인스턴스의 식별자(예: `i-1234567890abcdef0`)를 기록해 둡니다.  
![\[시작 상태 페이지의 EC2 인스턴스 식별자.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. EC2 인스턴스 식별자를 선택하여 EC2 인스턴스 목록을 열고 EC2 인스턴스를 선택합니다.

1. **세부 정보** 탭에서 SSH를 사용하여 연결할 때 필요한 다음 값을 기록해 둡니다.

   1. **인스턴스 요약**에서 **퍼블릭 IPv4 DNS**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 퍼블릭 DNS 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. **인스턴스 세부 정보**에서 **키 페어 이름**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 키 페어 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 계속하기 전에 EC2 인스턴스의 **인스턴스 상태**가 **실행 중**이 될 때까지 기다립니다.

## PostgreSQL DB 인스턴스 생성
<a name="CHAP_GettingStarted.Creating.PostgreSQL"></a>

Amazon RDS의 기본 빌딩 블록은 DB 인스턴스입니다. PostgreSQL 데이터베이스를 생성하는 환경입니다.

이 예시에서는 **간편 생성**을 사용하여 db.t3.micro DB 인스턴스 클래스에서 PostgreSQL Server 데이터베이스 엔진을 실행하는 DB 인스턴스를 생성합니다.

**Easy create(간편 생성)을 사용하여 PostgreSQL DB 인스턴스를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. [**데이터베이스 생성(Create database)**]을 선택하고 [**간편 생성(Easy Create)**]이 선택되어 있는지 확인합니다.  
![\[간편 생성 옵션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-option.png)

1. **구성**에서 **PostgreSQL**을 선택합니다.

1. **DB instance size(DB 인스턴스 크기)**에서 **프리 티어**를 선택합니다. **프리 티어**는 무료 요금제 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.

1. **DB 인스턴스 식별자**에 **database-test1**을 입력합니다.

1. **마스터 사용자 이름**에 마스터 사용자의 이름을 입력하거나 기본 이름(**postgres**)을 그대로 사용합니다.

   **데이터베이스 생성** 페이지는 다음 이미지와 비슷해야 합니다. 무료 요금제 계정에는 **프리 티어**가 표시됩니다. 유료 요금제 계정에는 **샌드박스**가 표시됩니다.  
![\[데이터베이스 생성 페이지.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-postgresql.png)

1. DB 인스턴스에 자동 생성된 마스터 암호를 사용하려면 **암호 자동 생성**을 선택합니다.

   마스터 암호를 입력하려면 **암호 자동 생성** 선택을 해제한 다음, **마스터 암호**와 **암호 확인**에 동일한 암호를 입력합니다.

1. 이전에 생성한 EC2 인스턴스와의 연결을 설정하려면 **EC2 연결 설정 - *선택 사항***을 엽니다.

   **Connect to an EC2 compute resource**(EC2 컴퓨팅 리소스에 연결)를 선택합니다. 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[EC2 연결 옵션을 설정합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2_RDS_Setup_Conn-EasyCreate.png)

1. **간편 생성 기본 설정 보기**를 엽니다.  
![\[RDS for PostgreSQL의 간편 생성 기본 설정.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-view-default-postgres.png)

   [**간편 생성(Easy Create)**]과 함께 사용되는 기본 설정을 검토할 수 있습니다. **데이터베이스 생성 후 편집 가능** 열에는 데이터베이스 생성 후 어떤 옵션을 변경할 수 있는지 나와 있습니다.
   + 설정의 해당 열에 **아니요**라고 되어 있지만 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들 수 있습니다.
   + 설정의 해당 열에 **예**라고 되어 있으며 다른 설정을 원하는 경우 **표준 생성**을 사용하여 DB 인스턴스를 만들거나 DB 인스턴스를 생성한 후 수정하여 설정을 변경할 수 있습니다.

1. **데이터베이스 생성**을 선택합니다.

   DB 인스턴스의 마스터 사용자 이름 및 암호를 보려면 **View credential details(자격 증명 세부 정보 보기)**를 선택합니다.

   DB 인스턴스를 마스터 사용자로 연결하려면 화면에 나타난 사용자 이름과 암호를 사용합니다.
**중요**  
마스터 사용자 암호를 다시 볼 수는 없습니다. 따라서 기록을 해두지 않으면 이를 변경해야 합니다.  
DB 인스턴스가 사용 가능한 상태가 되고 난 후에 마스터 사용자 암호를 변경해야 하는 경우에는 다음과 같은 방법으로 DB 인스턴스를 수정할 수 있습니다. DB 인스턴스 변경에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

1. **데이터베이스** 목록에서 새 PostgreSQL DB 인스턴스의 이름을 선택하면 세부 정보가 표시됩니다.

   DB 인스턴스를 사용할 준비가 될 때까지 DB 인스턴스의 상태는 **생성 중**입니다.  
![\[DB 인스턴스 세부 정보.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Postgres-Launch06.png)

   상태가 **Available**(사용 가능)로 변경되면 DB 인스턴스에 연결할 수 있습니다. DB 인스턴스 클래스와 스토리지의 양에 따라 새 인스턴스를 사용할 수 있을 때까지 최대 20분이 걸릴 수 있습니다.

## (선택 사항) CloudFormation를 사용하여 VPC, EC2 인스턴스 및 PostgreSQL 인스턴스 생성
<a name="CHAP_GettingStarted.CFN.PostgreSQL"></a>

콘솔을 사용하여 VPC, EC2 인스턴스 및 PostgreSQL 인스턴스를 생성하는 대신 CloudFormation을 통해 코드형 인프라로 처리하여 AWS 리소스를 프로비저닝할 수 있습니다. AWS 리소스를 더 작고 관리하기 쉬운 단위로 구성하는 데 도움이 되도록 CloudFormation 중첩 스택 기능을 사용할 수 있습니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 생성](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) 및 [중첩된 스택 작업](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)을 참조하세요.

**중요**  
CloudFormation은 무료이지만, CloudFormation에서 생성하는 리소스는 라이브입니다. 이러한 리소스를 종료하지 않으면 해당 리소스에 대한 표준 사용 요금이 발생합니다. 자세한 내용은 [RDS for PostgreSQL 요금](https://aws.amazon.com//rds/postgresql/pricing)을 참조하세요.

CloudFormation 콘솔을 사용하여 리소스를 생성하려면 다음 단계를 완료합니다.
+ CloudFormation 템플릿 파일을 다운로드하십시오.
+ CloudFormation을 사용하여 리소스 구성

### CloudFormation 템플릿 파일을 다운로드하십시오.
<a name="CHAP_GettingStarted.CFN.PostgreSQL.Step1"></a>

CloudFormation 템플릿은 JSON 또는 YAML 텍스트 파일로, 스택에서 생성하려는 리소스에 대한 구성 정보가 들어 있습니다. 또한 이 템플릿은 RDS 인스턴스와 함께 VPC와 Bastion Host를 생성합니다.

템플릿 파일을 다운로드하려면 다음 링크인 [PostgreSQL CloudFormation 템플릿](https://github.com/aws-ia/cfn-ps-amazon-rds/blob/main/templates/rds-postgres-main.template.yaml)을 엽니다.

Github 페이지에서 **원시 파일 다운로드 버튼을 클릭하여 템플릿 YAML 파일을 저장합니다.

### CloudFormation을 사용하여 리소스 구성
<a name="CHAP_GettingStarted.CFN.PostgreSQL.Step2"></a>

**참고**  
이 프로세스를 시작하기 전에 AWS 계정에 EC2 인스턴스용 키 페어가 있는지 확인합니다. 자세한 내용은 [Amazon EC2 키 페어 및 Linux 인스턴스](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-key-pairs.html)를 참조하세요.

CloudFormation 템플릿을 사용할 때는 리소스가 제대로 생성되도록 올바른 파라미터를 선택해야 합니다. 다음 단계를 따릅니다.

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)에서 CloudFormation 콘솔을 엽니다.

1. **스택 생성**을 선택합니다.

1. 템플릿 지정 섹션에서 **컴퓨터에서 템플릿 파일 업로드**를 선택하고 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 다음 파라미터를 설정합니다.

   1. **스택 이름**을 **PostgreSQLTestStack**으로 설정합니다.

   1. **파라미터**에서 가용 영역 3개를 선택하여 **가용 영역**을 설정합니다.

   1. **Linux Bastion Host 구성**에서 **키 이름**에 대해 EC2 인스턴스에 로그인할 키 페어를 선택합니다.

   1. **Linux Bastion Host 구성** 설정에서 **허용된 IP 범위**를 IP 주소로 설정합니다. Secure Shell(SSH)을 사용하여 VPC의 EC2 인스턴스에 연결하려면 [https://checkip.amazonaws.com](https://checkip.amazonaws.com)의 서비스를 사용하여 퍼블릭 IP 주소를 지정합니다. IP 주소의 예는 192.0.2.1/32입니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 EC2 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

   1. **데이터베이스 일반 구성**에서 **데이터베이스 인스턴스 클래스**를 **db.t3.micro**로 설정합니다.

   1. **데이터베이스 이름**을 **database-test1**으로 설정합니다.

   1. **데이터베이스 마스터 사용자 이름**에 마스터 사용자 이름을 입력합니다.

   1. 이 자습서에서는 **Secrets Manager를 사용하여 DB 마스터 사용자 암호 관리**를 `false`로 설정합니다.

   1. **데이터베이스 암호**의 경우 원하는 암호를 설정합니다. 자습서의 향후 단계에 사용할 수 있도록 암호를 기억해 둡니다.

   1. **데이터베이스 스토리지 구성**에서 **데이터베이스 스토리지 유형**을 **gp2**로 설정합니다.

   1. **데이터베이스 모니터링 구성**에서 **RDS 성능 개선 도우미 활성화**를 false로 설정합니다.

   1. 다른 모든 설정은 기본값으로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 옵션 구성** 페이지에서는 모든 기본 옵션을 그대로 둡니다. 계속하려면 **다음**을 클릭합니다.

1. **스택 검토** 페이지에서 데이터베이스 및 Linux Bastion Host 옵션을 확인한 후 **제출**을 선택합니다.

스택 생성 프로세스가 완료되면 **BastionStack 및 **RDSNS라는 이름의 스택을 보고 데이터베이스에 연결하는 데 필요한 정보를 기록해 둡니다. 자세한 내용은 [AWS Management Console에서 CloudFormation 스택 데이터 및 리소스 보기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html)를 참조하세요.

## PostgreSQL DB 인스턴스에 연결
<a name="CHAP_GettingStarted.Connecting.PostgreSQL"></a>

pgadmin 또는 psql을 사용하여 DB 인스턴스에 연결할 수 있습니다. 이 예시에서는 psql 명령줄 클라이언트를 사용하여 PostgreSQL DB 인스턴스에 연결하는 방법을 설명합니다.

**psql을 사용하여 PostgreSQL DB 인스턴스에 연결하려면**

1. DB 인스턴스의 엔드포인트(DNS 이름)와 포트 번호를 찾습니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스의 AWS 리전을 선택합니다.

   1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

   1. 세부 정보를 표시하고자 하는 PostgreSQL DB 인스턴스 이름을 선택합니다.

   1. **Connectivity & security(연결 및 보안)** 탭에서 엔드포인트를 복사합니다. 또한 포트 번호를 적어 둡니다. DB 인스턴스에 연결하려면 엔드포인트와 포트 번호가 모두 필요합니다.  
![\[PostgreSQL DB 인스턴스에 연결합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/PostgreSQL-endpoint.png)

1. **Amazon EC2 사용 설명서에 있는 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)의 단계를 따라 앞에서 만든 EC2 인스턴스에 연결합니다.

   SSH를 사용하여 EC2 인스턴스에 연결하는 것이 좋습니다. Windows, Linux 또는 Mac에 SSH 클라이언트 유틸리티가 설치된 경우 다음 명령 형식을 사용하여 인스턴스에 연결할 수 있습니다.

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   예를 들어 `ec2-database-connect-key-pair.pem`이 Linux의 `/dir1`에 저장되어 있고, EC2 인스턴스의 퍼블릭 IPv4 DNS가 `ec2-12-345-678-90.compute-1.amazonaws.com`이라고 가정해 보겠습니다. SSH 명령은 다음과 같이 표시됩니다.

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. EC2 인스턴스에서 소프트웨어를 업데이트하여 최신 버그 수정 및 보안 업데이트를 받습니다. 이렇게 하려면 다음 명령을 사용하십시오.
**참고**  
`-y` 옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.

   ```
   sudo dnf update -y
   ```

1. Amazon Linux 2023의 PostgreSQL에서 psql 명령줄 클라이언트를 설치하려면 다음 명령을 실행합니다.

   ```
   sudo dnf install postgresql15
   ```

1. PostgreSQL DB 인스턴스에 연결합니다. 예를 들어 클라이언트 컴퓨터의 명령 프롬프트에서 다음 명령을 입력합니다. 이 작업을 수행하면 psql 클라이언트를 사용하여 PostgreSQL DB 인스턴스에 연결할 수 있습니다.

   `endpoint`는 DB 인스턴스 엔드포인트로 대체하고, `postgres`는 연결하려는 데이터베이스 이름 `--dbname`으로 대체하고, `postgres`는 사용된 마스터 사용자 이름으로 대체합니다. 암호를 묻는 메시지가 표시되면 사용한 마스터 암호를 제공합니다.

   ```
   psql --host=endpoint --port=5432 --dbname=postgres --username=postgres
   ```

   사용자에 대한 암호를 입력하면 다음과 유사한 출력이 나타납니다.

   ```
   psql (14.3, server 14.6)
   SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
   Type "help" for help.
   
   postgres=>
   ```

   PostgreSQL DB 인스턴스 연결에 대한 자세한 내용은 [PostgreSQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결](USER_ConnectToPostgreSQLInstance.md) 섹션을 참조하세요. DB 인스턴스에 연결할 수 없는 경우 [RDS for PostgreSQL 인스턴스에 대한 연결 문제 해결](USER_ConnectToPostgreSQLInstance.Troubleshooting.md) 단원을 참조하십시오.

   보안을 위해서는 암호화된 연결을 사용하는 것이 가장 좋습니다. 클라이언트와 서버가 동일한 VPC에 있고 네트워크를 신뢰할 수 있는 경우에만 암호화되지 않은 PostgreSQL 연결을 사용합니다. 암호화된 연결 사용에 대한 자세한 내용은 [SSL을 통해 PostgreSQL DB 인스턴스에 연결](PostgreSQL.Concepts.General.SSL.md#PostgreSQL.Concepts.General.SSL.Connecting) 섹션을 참조하세요.

1. SQL 명령을 실행합니다.

   예를 들어, 다음 SQL 명령은 현재 날짜 및 시간을 보여줍니다.

   ```
   SELECT CURRENT_TIMESTAMP;
   ```

## EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.Deleting.PostgreSQL"></a>

생성한 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후에는 요금이 더 이상 부과되지 않도록 삭제합니다.

CloudFormation을 사용하여 리소스를 생성했다면 이 단계를 건너뛰고 다음 단계로 이동합니다.

**EC2 인스턴스를 삭제하는 방법**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. EC2 인스턴스를 선택하고 **인스턴스 상태, 인스턴스 종료**를 차례로 선택합니다.

1. 확인 메시지가 나타나면 **종료**를 선택합니다.

EC2 인스턴스 삭제에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스 종료](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)를 참조하세요.

**최종 DB 스냅샷이 없는 DB 인스턴스를 삭제하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 삭제할 DB 인스턴스를 선택합니다.

1. [** Actions**]에 대해 [**Delete**]를 선택합니다.

1. **최종 스냅샷을 생성하시겠습니까?** 및 **자동 백업 보존**을 선택 해제합니다.

1. 확인을 완료하고 **삭제**를 선택합니다.

## (선택 사항) CloudFormation으로 생성한 EC2 인스턴스 및 DB 인스턴스 삭제
<a name="CHAP_GettingStarted.DeletingCFN.PostgreSQL"></a>

CloudFormation을 사용하여 리소스를 생성한 경우 샘플 EC2 인스턴스 및 DB 인스턴스에 연결하고 탐색한 후 CloudFormation 스택을 삭제하여 더 이상 비용이 청구되지 않도록 합니다.

**CloudFormation 리소스를 삭제하려면**

1. CloudFormation 콘솔을 엽니다.

1. CloudFormation 콘솔의 **스택** 페이지에서 루트 스택(VPCStack, BastionStack 또는 RDSNS라는 이름이 없는 스택)을 선택합니다.

1. **삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **스택 삭제**를 선택합니다.

CloudFormation에서 스택을 삭제하는 방법에 대한 자세한 내용은 **AWS CloudFormation 사용 설명서의 [CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

## (선택 사항) DB 인스턴스를 Lambda 함수에 연결
<a name="CHAP_GettingStarted.ComputeConnect.PostreSQL"></a>

RDS for PostgreSQL DB 인스턴스를 Lambda 서버리스 컴퓨팅 리소스에 연결할 수도 있습니다. Lambda 함수를 사용하면 인프라를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다. 또한 하루 12개에서 초당 수백 개에 이르는 모든 규모의 코드 실행 요청에 자동으로 응답할 수 있습니다. 자세한 내용은 [Lambda 함수와 DB 인스턴스 자동 연결](lambda-rds-connect.md) 섹션을 참조하세요.

# 자습서: 웹 서버 및 Amazon RDS DB 인스턴스 생성
<a name="TUT_WebAppWithRDS"></a>

이 자습서에서는 PHP가 있는 Apache 웹 서버를 설치하고 MariaDB, MySQL 또는 PostgreSQL 데이터베이스를 생성하는 방법을 보여줍니다. 이 웹 서버는 Amazon Linux 2023을 사용하여 Amazon EC2 인스턴스에서 실행되며, MySQL 또는 PostgreSQL DB 인스턴스 중에서 선택할 수 있습니다. Amazon EC2 인스턴스와 DB 인스턴스 모두 Amazon VPC 서비스를 기반으로 하는 Virtual Private Cloud(VPC)에서 실행됩니다.

**중요**  
AWS 계정 생성은 무료입니다. 그러나 이 자습서를 완료하면 사용하는 AWS 리소스에 대한 비용이 발생할 수 있습니다. 자습서가 더 이상 필요하지 않은 경우 자습서를 완료한 후에 이러한 리소스를 삭제할 수 있습니다.

**참고**  
이 자습서에서는 Amazon Linux 2023을 사용하여 작업하며 다른 버전의 Linux는 적용되지 않을 수 있습니다.

다음 자습서에서는 AWS 계정의 .NET용 기본 VPC, 서브넷 및 보안 그룹을 사용하는 EC2 인스턴스를 생성합니다. 이 자습서에서는 DB 인스턴스를 생성하고 생성한 EC2 인스턴스와의 연결을 자동으로 설정하는 방법을 보여줍니다. 그런 다음 자습서에서는 EC2 인스턴스에 웹 서버를 설치하는 방법을 보여줍니다. DB 인스턴스 엔드포인트를 사용하여 VPC의 DB 인스턴스에 웹 서버를 연결합니다.

1. [EC2 인스턴스를 시작하여 DB 인스턴스에 연결](CHAP_Tutorials.WebServerDB.LaunchEC2.md)

1. [Amazon RDS DB 인스턴스 생성](CHAP_Tutorials.WebServerDB.CreateDBInstance.md)

1. [EC2 인스턴스에 웹 서버 설치](CHAP_Tutorials.WebServerDB.CreateWebServer.md)

다음 다이어그램은 이 자습서를 완료했을 때 구성을 보여 줍니다.

![\[단일 VPC 시나리오\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp.png)


**참고**  
자습서를 완료하면 VPC의 각 가용 영역에 퍼블릭 서브넷과 프라이빗 서브넷이 있을 것입니다. 이 자습서에서는 AWS 계정에 대한 기본 VPC를 사용하고 EC2 인스턴스와 DB 인스턴스 간의 연결을 자동으로 설정합니다. 대신 이 시나리오에 맞게 새 VPC 구성하려면 [자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)](CHAP_Tutorials.WebServerDB.CreateVPC.md)에서 작업을 완료하세요.

# EC2 인스턴스를 시작하여 DB 인스턴스에 연결
<a name="CHAP_Tutorials.WebServerDB.LaunchEC2"></a>

VPC의 퍼블릭 서브넷에서 Amazon EC2 인스턴스를 생성합니다.

**EC2 인스턴스 시작**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS Management Console 콘솔의 오른쪽 상단에서 EC2 인스턴스를 생성하려는 AWS 리전을 선택합니다.

1. 다음과 같이 **EC2 대시보드**를 선택한 다음, **인스턴스 시작**을 선택합니다.  
![\[EC2 대시보드\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_11.png)

1. **인스턴스 시작** 페이지에서 다음 설정을 선택합니다.

   1. **Name and tags**(이름 및 태그) 아래의 **Name**(이름)에 **tutorial-ec2-instance-web-server**을 입력하세요.

   1. **Application and OS Images (Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image))에서 **Amazon Linux**를 선택한 다음 **Amazon Linux 2023 AMI**를 선택합니다. 다른 선택 항목에 대해서는 기본값을 그대로 유지합니다.  
![\[Amazon Machine Image 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_12.png)

   1. **인스턴스 유형**에서 **t2.micro**를 선택합니다.

   1. **키 페어(로그인)**에서 기존 키 페어를 사용할 **키 페어 이름**을 선택합니다. Amazon EC2 인스턴스에 대한 새 키 페어를 생성하려면 **새 키 페어 생성**을 선택한 다음 **키 페어 생성** 창을 사용하여 생성합니다.

      새 키 페어 생성에 대한 자세한 내용은 **Amazon EC2 Linux 인스턴스용 사용 설명서의 [키 페어 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html#create-a-key-pair)을 참조하세요.

   1. **네트워크 설정**에서 다음과 같이 이러한 값을 설정하고 다른 값은 기본값으로 유지합니다.
      + **SSH 트래픽 허용**에서 EC2 인스턴스에 대한 SSH 연결 소스를 선택합니다.

        표시된 IP 주소가 SSH 연결에 대해 올바른 경우 **내 IP**를 선택할 수 있습니다.

        그렇지 않으면 SSH(Secure Shell)를 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 결정할 수 있습니다. 퍼블릭 IP 주소를 확인하려면 다른 브라우저 창 또는 탭에서 [https://checkip.amazonaws.com](https://checkip.amazonaws.com)의 서비스를 사용합니다. IP 주소의 예는 `203.0.113.25/32`입니다.

        대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 결정합니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.
      + **인터넷에서 오는 HTTPS 트래픽 허용**을 켭니다.
      + **인터넷에서 오는 HTTP 트래픽 허용**을 켭니다.  
![\[인스턴스 세부 정보 구성\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_14.png)

   1. 나머지 섹션에서 기본값은 그대로 둡니다.

   1. **요약** 패널에서 인스턴스 구성 요약을 검토하고 준비가 되면 **인스턴스 시작**을 선택합니다.

1. **시작 상태** 페이지에서, 새 EC2 인스턴스의 식별자(예: `i-1234567890abcdef0`)를 기록해 둡니다.  
![\[시작 상태 페이지의 EC2 인스턴스 식별자.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/getting-started-ec2-id.png)

1. EC2 인스턴스 식별자를 선택하여 EC2 인스턴스 목록을 열고 EC2 인스턴스를 선택합니다.

1. **세부 정보** 탭에서 SSH를 사용하여 연결할 때 필요한 다음 값을 기록해 둡니다.

   1. **인스턴스 요약**에서 **퍼블릭 IPv4 DNS**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 퍼블릭 DNS 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-public-dns.png)

   1. **인스턴스 세부 정보**에서 **키 페어 이름**의 값을 기록해 둡니다.  
![\[인스턴스 페이지의 세부 정보 탭에 있는 EC2 키 페어 이름.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/easy-create-ec2-key-pair.png)

1. 인스턴스의 **인스턴스 상태**가 **실행 중**으로 읽힐 때까지 기다린 다음 계속합니다.

1. [Amazon RDS DB 인스턴스 생성](CHAP_Tutorials.WebServerDB.CreateDBInstance.md)을 완료합니다.

# Amazon RDS DB 인스턴스 생성
<a name="CHAP_Tutorials.WebServerDB.CreateDBInstance"></a>

웹 애플리케이션에서 사용되는 데이터를 유지 관리하는 RDS for MariaDB, RDS for MySQL 또는 RDS for PostgreSQL 인스턴스를 생성합니다.

------
#### [ RDS for MariaDB ]

**MariaDB 인스턴스를 만들려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단 모서리에서 AWS 리전을 확인합니다. EC2 인스턴스를 생성한 리전과 동일해야 합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. **데이터베이스 생성**을 선택합니다.

1. **데이터베이스 생성** 페이지에서 **표준 생성**을 선택합니다.

1. **엔진 옵션**에서 **MariaDB**를 선택합니다.  
![\[엔진 유형 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/tutorial-create-mariadb.png)

1. **템플릿**에서 **프리 티어** 또는 **샌드박스**를 선택합니다. **프리 티어**는 무료 요금제 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.  
![\[템플릿 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. **가용성 및 내구성** 섹션에서 기본값을 사용합니다.

1. **설정** 섹션에서 이러한 값들을 설정합니다.
   + **DB 인스턴스 식별자** – **tutorial-db-instance**를 입력합니다.
   + **마스터 사용자 이름 ** - **tutorial\$1user**를 입력합니다.
   + **Auto generate a password**(암호 자동 생성) - 옵션을 끈 상태로 둡니다.
   + **마스터 암호** – 암호를 입력합니다.
   + **암호 확인** – 암호를 다시 입력합니다.  
![\[설정 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. **인스턴스 구성**] 섹션에서 다음 값을 설정합니다.
   + **버스트 가능 클래스(t 클래스 포함)**
   + **db.t3.micro**  
![\[인스턴스 구성 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. **스토리지** 섹션에서 기본값으로 유지합니다.

1. **연결** 섹션에서 다음 값을 설정하고 다른 값을 기본값으로 유지합니다.
   + **컴퓨팅 리소스**에서 **EC2 컴퓨팅 리소스에 연결**을 선택합니다.
   + E**C2 인스턴스**의 경우 **tutorial-ec2-instance-web-server**와 같이 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[연결 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. [**데이터베이스 인증(Database authentication)**] 섹션에서 [**암호 인증(Password authentication)**]이 선택되어 있는지 확인합니다.

1. **추가 구성** 섹션을 열고 **초기 데이터베이스 이름**에 **sample**를 입력합니다. 다른 옵션은 기본 설정을 유지합니다.

1. MariaDB 인스턴스를 생성하려면 **데이터베이스 생성**을 선택합니다.

   새 DB 인스턴스가 **데이터베이스**목록에 **생성 중**의 상태로 나타납니다.

1. 새 DB 인스턴스의 **상태**가 **사용 가능**으로 나타날 때까지 기다립니다. 그런 다음, 세부 정보를 표시할 DB 인스턴스 이름을 선택합니다.

1. **Connectivity & security(연결 및 보안)** 섹션에서 DB 인스턴스의 **엔드포인트** 및 **포트**를 확인합니다.  
![\[DB 인스턴스 세부 정보\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port.png)

   DB 인스턴스의 엔드포인트와 포트를 적어 둡니다. 이 정보를 사용하여 웹 서버를 RDS DB 인스턴스에 연결하게 됩니다.

1. [EC2 인스턴스에 웹 서버 설치](CHAP_Tutorials.WebServerDB.CreateWebServer.md)를 완료합니다.

------
#### [ RDS for MySQL ]

**MySQL DB 인스턴스를 만들려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단 모서리에서 AWS 리전을 확인합니다. EC2 인스턴스를 생성한 리전과 동일해야 합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. **데이터베이스 생성**을 선택합니다.

1. **데이터베이스 생성** 페이지에서 **표준 생성**을 선택합니다.

1. **엔진 옵션**에서 **MySQL**을 선택합니다.  
![\[엔진 유형 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/tutorial-create-mysql.png)

1. **템플릿**에서 **프리 티어** 또는 **샌드박스**를 선택합니다. **프리 티어**는 무료 요금제 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.  
![\[템플릿 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. **가용성 및 내구성** 섹션에서 기본값을 사용합니다.

1. **설정** 섹션에서 이러한 값들을 설정합니다.
   + **DB 인스턴스 식별자** – **tutorial-db-instance**를 입력합니다.
   + **마스터 사용자 이름 ** - **tutorial\$1user**를 입력합니다.
   + **Auto generate a password**(암호 자동 생성) - 옵션을 끈 상태로 둡니다.
   + **마스터 암호** – 암호를 입력합니다.
   + **암호 확인** – 암호를 다시 입력합니다.  
![\[설정 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. **인스턴스 구성**] 섹션에서 다음 값을 설정합니다.
   + **버스트 가능 클래스(t 클래스 포함)**
   + **db.t3.micro**  
![\[인스턴스 구성 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. **스토리지** 섹션에서 기본값으로 유지합니다.

1. **연결** 섹션에서 다음 값을 설정하고 다른 값을 기본값으로 유지합니다.
   + **컴퓨팅 리소스**에서 **EC2 컴퓨팅 리소스에 연결**을 선택합니다.
   + E**C2 인스턴스**의 경우 **tutorial-ec2-instance-web-server**와 같이 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[연결 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. [**데이터베이스 인증(Database authentication)**] 섹션에서 [**암호 인증(Password authentication)**]이 선택되어 있는지 확인합니다.

1. **추가 구성** 섹션을 열고 **초기 데이터베이스 이름**에 **sample**를 입력합니다. 다른 옵션은 기본 설정을 유지합니다.

1. MySQL DB 인스턴스를 생성하려면 [**데이터베이스 생성(Create database)**]을 선택합니다.

   새 DB 인스턴스가 **데이터베이스**목록에 **생성 중**의 상태로 나타납니다.

1. 새 DB 인스턴스의 **상태**가 **사용 가능**으로 나타날 때까지 기다립니다. 그런 다음, 세부 정보를 표시할 DB 인스턴스 이름을 선택합니다.

1. **Connectivity & security(연결 및 보안)** 섹션에서 DB 인스턴스의 **엔드포인트** 및 **포트**를 확인합니다.  
![\[DB 인스턴스 세부 정보\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port.png)

   DB 인스턴스의 엔드포인트와 포트를 적어 둡니다. 이 정보를 사용하여 웹 서버를 RDS DB 인스턴스에 연결하게 됩니다.

1. [EC2 인스턴스에 웹 서버 설치](CHAP_Tutorials.WebServerDB.CreateWebServer.md)를 완료합니다.

------
#### [ RDS for PostgreSQL ]

**PostgreSQL DB 인스턴스를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단 모서리에서 AWS 리전을 확인합니다. EC2 인스턴스를 생성한 리전과 동일해야 합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. **데이터베이스 생성**을 선택합니다.

1. **데이터베이스 생성** 페이지에서 **표준 생성**을 선택합니다.

1. **엔진 옵션**에서 **PostgreSQL**을 선택합니다.  
![\[엔진 유형 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/tutorial-create-postgres.png)

1. **템플릿**에서 **프리 티어** 또는 **샌드박스**를 선택합니다. **프리 티어**는 무료 요금제 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.  
![\[템플릿 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/tutorial-create-template.png)

1. **가용성 및 내구성** 섹션에서 기본값을 사용합니다.

1. **설정** 섹션에서 이러한 값들을 설정합니다.
   + **DB 인스턴스 식별자** – **tutorial-db-instance**를 입력합니다.
   + **마스터 사용자 이름 ** - **tutorial\$1user**를 입력합니다.
   + **Auto generate a password**(암호 자동 생성) - 옵션을 끈 상태로 둡니다.
   + **마스터 암호** – 암호를 입력합니다.
   + **암호 확인** – 암호를 다시 입력합니다.  
![\[설정 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Settings.png)

1. **인스턴스 구성**] 섹션에서 다음 값을 설정합니다.
   + **버스트 가능 클래스(t 클래스 포함)**
   + **db.t3.micro**  
![\[인스턴스 구성 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_DB_instance_micro.png)

1. **스토리지** 섹션에서 기본값으로 유지합니다.

1. **연결** 섹션에서 다음 값을 설정하고 다른 값을 기본값으로 유지합니다.
   + **컴퓨팅 리소스**에서 **EC2 컴퓨팅 리소스에 연결**을 선택합니다.
   + E**C2 인스턴스**의 경우 **tutorial-ec2-instance-web-server**와 같이 이전에 생성한 EC2 인스턴스를 선택합니다.  
![\[연결 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Connectivity.png)

1. [**데이터베이스 인증(Database authentication)**] 섹션에서 [**암호 인증(Password authentication)**]이 선택되어 있는지 확인합니다.

1. **추가 구성** 섹션을 열고 **초기 데이터베이스 이름**에 **sample**를 입력합니다. 다른 옵션은 기본 설정을 유지합니다.

1. PostgreSQL DB 인스턴스를 생성하려면 **데이터베이스 생성**을 선택합니다.

   새 DB 인스턴스가 **데이터베이스**목록에 **생성 중**의 상태로 나타납니다.

1. 새 DB 인스턴스의 **상태**가 **사용 가능**으로 나타날 때까지 기다립니다. 그런 다음, 세부 정보를 표시할 DB 인스턴스 이름을 선택합니다.

1. **Connectivity & security(연결 및 보안)** 섹션에서 DB 인스턴스의 **엔드포인트** 및 **포트**를 확인합니다.  
![\[DB 인스턴스 세부 정보\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Tutorial_WebServer_Endpoint_Port_postgres.png)

   DB 인스턴스의 엔드포인트와 포트를 적어 둡니다. 이 정보를 사용하여 웹 서버를 RDS DB 인스턴스에 연결하게 됩니다.

1. [EC2 인스턴스에 웹 서버 설치](CHAP_Tutorials.WebServerDB.CreateWebServer.md)를 완료합니다.

------

# EC2 인스턴스에 웹 서버 설치
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer"></a>

[EC2 인스턴스를 시작하여 DB 인스턴스에 연결](CHAP_Tutorials.WebServerDB.LaunchEC2.md)에서 생성한 EC2 인스턴스에 웹 서버를 설치합니다. 웹 서버는 [Amazon RDS DB 인스턴스 생성](CHAP_Tutorials.WebServerDB.CreateDBInstance.md)에서 생성한 Amazon RDS DB 인스턴스에 연결됩니다.

## PHP 및 MariaDB와 함께 Apache 웹 서버 설치
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer.Apache"></a>

EC2 인스턴스에 연결하고 서버를 설치합니다.

**EC2 인스턴스에 연결하고 PHP가 포함된 Apache 웹 서버를 설치하는 방법**

1. **Amazon EC2 사용 설명서에 있는 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)의 단계를 따라 앞에서 만든 EC2 인스턴스에 연결합니다.

   SSH를 사용하여 EC2 인스턴스에 연결하는 것이 좋습니다. Windows, Linux 또는 Mac에 SSH 클라이언트 유틸리티가 설치된 경우 다음 명령 형식을 사용하여 인스턴스에 연결할 수 있습니다.

   ```
   ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name
   ```

   예를 들어 `ec2-database-connect-key-pair.pem`이 Linux의 `/dir1`에 저장되어 있고, EC2 인스턴스의 퍼블릭 IPv4 DNS가 `ec2-12-345-678-90.compute-1.amazonaws.com`이라고 가정해 보겠습니다. SSH 명령은 다음과 같이 표시됩니다.

   ```
   ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
   ```

1. EC2 인스턴스에서 소프트웨어를 업데이트하여 최신 버그 수정 및 보안 업데이트를 받습니다. 이렇게 하려면 다음 명령을 사용하십시오.
**참고**  
`-y` 옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.

   ```
   sudo dnf update -y
   ```

1. 업데이트가 완료되면 다음 명령을 사용하여 Apache 웹 서버, PHP, MariaDB 또는 PostgreSQL 소프트웨어를 설치합니다. 이 명령은 여러 소프트웨어 패키지와 관련 종속 프로그램을 동시에 설치합니다.

------
#### [ MariaDB & MySQL ]

   ```
   sudo dnf install -y httpd php php-mysqli mariadb105
   ```

------
#### [ PostgreSQL ]

   ```
   sudo dnf install -y httpd php php-pgsql postgresql15
   ```

------

   오류가 발생하면 인스턴스가 Amazon Linux 2023 AMI로 실행되지 않은 것입니다. Amazon Linux 2 AMI를 사용하고 있는 것일 수 있습니다. 다음 명령을 사용하여 Amazon Linux 버전을 볼 수 있습니다.

   ```
   cat /etc/system-release
   ```

   자세한 내용은 [인스턴스 소프트웨어 업데이트](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-updates.html) 단원을 참조하십시오.

1. 다음 명령을 사용하여 웹 서버를 시작합니다.

   ```
   sudo systemctl start httpd
   ```

   웹 서버가 제대로 설치되고 시작되었는지 테스트할 수 있습니다. 이렇게 하려면 웹 브라우저의 주소 표시줄에 EC2 인스턴스의 퍼블릭 Domain Name System(DNS) 이름을 입력합니다(예: `http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com`). 웹 서버가 실행되고 있으면 Apache 테스트 페이지가 표시됩니다.

   Apache 테스트 페이지가 표시되지 않으면 [자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)](CHAP_Tutorials.WebServerDB.CreateVPC.md)에서 생성한 VPC 보안 그룹에 대한 인바운드 규칙을 확인합니다. 인바운드 규칙에 웹 서버에 연결할 IP 주소에 대한 HTTP(포트 80) 액세스를 허용하는 규칙이 포함되어 있는지 확인합니다.
**참고**  
Apache 테스트 페이지는 문서의 루트 디렉터리 `/var/www/html`에 콘텐츠가 없는 경우에만 표시됩니다. 문서의 루트 디렉터리에 콘텐츠를 추가한 후에는 콘텐츠가 EC2 인스턴스의 퍼블릭 DNS 주소에 나타납니다. 이 시점 이전에는 Apache 테스트 페이지에 나타납니다.

1. `systemctl` 명령을 사용하여 웹 서버가 시스템 부팅 때마다 시작되도록 구성합니다.

   ```
   sudo systemctl enable httpd
   ```

`ec2-user`가 Apache 웹 서버의 기본 루트 디렉터리에 있는 파일을 관리할 수 있도록 하려면 `/var/www` 디렉터리의 소유권 및 권한을 변경합니다. 이 작업을 수행하는 방법에는 여러 가지가 있습니다. 본 자습서에서는 `ec2-user`를 `apache` 그룹에 추가하여 `apache` 그룹에 `/var/www` 디렉터리의 소유권을 부여하고 쓰기 권한을 할당합니다.

**Apache 웹 서버에 대한 파일 권한 설정 방법**

1. `ec2-user` 사용자를 `apache` 그룹에 추가합니다.

   ```
   sudo usermod -a -G apache ec2-user
   ```

1. 권한을 새로 고치고 새 `apache` 그룹을 포함하려면 로그아웃합니다.

   ```
   exit
   ```

1. 다시 로그인한 다음, `apache` 명령을 사용하여 `groups` 그룹이 있는지 확인합니다.

   ```
   groups
   ```

   출력 결과는 다음과 비슷합니다.

   ```
   ec2-user adm wheel apache systemd-journal
   ```

1. `/var/www` 디렉터리 및 해당 콘텐츠의 그룹 소유권을 `apache` 그룹으로 변경합니다.

   ```
   sudo chown -R ec2-user:apache /var/www
   ```

1. `/var/www` 및 그 하위 디렉터리의 디렉터리 권한을 변경해서 그룹 쓰기 권한을 추가하고 나중에 생성될 하위 디렉터리에서 그룹 ID를 설정합니다.

   ```
   sudo chmod 2775 /var/www
   find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. `/var/www` 디렉터리 및 하위 디렉터리의 파일 권한을 계속 변경해서 그룹 쓰기 권한을 추가합니다.

   ```
   find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

이제 `ec2-user`(및 `apache` 그룹의 향후 멤버)는 Apache 문서 루트에서 파일을 추가, 삭제, 편집할 수 있습니다. 따라서 정적 웹 사이트 또는 PHP 애플리케이션과 같은 콘텐츠를 추가할 수 있습니다.

**참고**  
HTTP 프로토콜을 실행하는 웹 서버는 송신하거나 수신하는 데이터에 대해 아무런 전송 보안 기능도 제공하지 않습니다. 웹 브라우저를 사용하여 HTTP 서버에 연결하면 네트워크 경로를 따라 어디서든 엿보려는 사람들이 많은 정보를 볼 수 있습니다. 이 정보에는 방문하는 URL, 수신하는 웹 페이지의 내용, HTML 양식의 내용(암호 포함)이 포함됩니다.  
웹 서버를 안전하게 보호하기 위한 최선의 방법은 HTTPS(HTTP Secure) 지원 기능을 설치하는 것입니다. 이 프로토콜은 SSL/TLS 암호화로 데이터를 보호합니다. 자세한 내용은 *Amazon EC2 사용 설명서*에서 [자습서: Amazon Linux AMI를 사용하여 SSL/TLS 구성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-ami.html)을 참조하세요.

## DB 인스턴스에 Apache 웹 서버 연결
<a name="CHAP_Tutorials.WebServerDB.CreateWebServer.PHPContent"></a>

이제 Amazon RDS DB 인스턴스에 연결되는 Apache 웹 서버에 콘텐츠를 추가합니다.

**DB 인스턴스에 연결되는 Apache 웹 서버에 콘텐츠를 추가하는 방법**

1. EC2 인스턴스에 계속 연결되어 있을 때 디렉터리를 `/var/www`로 변경하고 `inc`라는 새로운 하위 디렉터리를 생성합니다.

   ```
   cd /var/www
   mkdir inc
   cd inc
   ```

1. `inc`라는 `dbinfo.inc` 디렉터리에서 새 파일을 생성한 다음 nano 또는 선택한 편집기를 호출하여 파일을 편집합니다.

   ```
   >dbinfo.inc
   nano dbinfo.inc
   ```

1. 다음 내용을 `dbinfo.inc` 파일에 추가합니다. 여기서 *db\$1instance\$1endpoint*는 DB 인스턴스에 대해 포트가 없는 DB 인스턴스 엔드포인트입니다.
**참고**  
웹 서버의 문서 루트에 속하지 않은 폴더에 사용자 이름과 암호 정보를 두는 것이 좋습니다. 이렇게 하면 보안 정보가 노출될 가능성이 줄어듭니다.  
애플리케이션에서 적절한 암호로 `master password`를 변경해야 합니다.

   ```
   <?php
   
   define('DB_SERVER', 'db_instance_endpoint');
   define('DB_USERNAME', 'tutorial_user');
   define('DB_PASSWORD', 'master password');
   define('DB_DATABASE', 'sample');
   ?>
   ```

1. `dbinfo.inc` 파일을 저장하고 닫습니다. nano를 사용하는 경우 Ctrl\$1S 및 Ctrl\$1X를 사용하여 파일을 저장하고 닫습니다.

1. 디렉터리를 `/var/www/html`로 변경합니다.

   ```
   cd /var/www/html
   ```

1. `html`라는 `SamplePage.php` 디렉터리에서 새 파일을 생성한 다음 nano 또는 선택한 편집기를 호출하여 파일을 편집합니다.

   ```
   >SamplePage.php
   nano SamplePage.php
   ```

1. 다음 콘텐츠를 `SamplePage.php` 파일에 추가합니다.

------
#### [ MariaDB & MySQL ]

   ```
   <?php include "../inc/dbinfo.inc"; ?>
   <html>
   <body>
   <h1>Sample page</h1>
   <?php
   
     /* Connect to MySQL and select the database. */
     $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
   
     if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();
   
     $database = mysqli_select_db($connection, DB_DATABASE);
   
     /* Ensure that the EMPLOYEES table exists. */
     VerifyEmployeesTable($connection, DB_DATABASE);
   
     /* If input fields are populated, add a row to the EMPLOYEES table. */
     $employee_name = htmlentities($_POST['NAME']);
     $employee_address = htmlentities($_POST['ADDRESS']);
   
     if (strlen($employee_name) || strlen($employee_address)) {
       AddEmployee($connection, $employee_name, $employee_address);
     }
   ?>
   
   <!-- Input form -->
   <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
     <table border="0">
       <tr>
         <td>NAME</td>
         <td>ADDRESS</td>
       </tr>
       <tr>
         <td>
           <input type="text" name="NAME" maxlength="45" size="30" />
         </td>
         <td>
           <input type="text" name="ADDRESS" maxlength="90" size="60" />
         </td>
         <td>
           <input type="submit" value="Add Data" />
         </td>
       </tr>
     </table>
   </form>
   
   <!-- Display table data. -->
   <table border="1" cellpadding="2" cellspacing="2">
     <tr>
       <td>ID</td>
       <td>NAME</td>
       <td>ADDRESS</td>
     </tr>
   
   <?php
   
   $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");
   
   while($query_data = mysqli_fetch_row($result)) {
     echo "<tr>";
     echo "<td>",$query_data[0], "</td>",
          "<td>",$query_data[1], "</td>",
          "<td>",$query_data[2], "</td>";
     echo "</tr>";
   }
   ?>
   
   </table>
   
   <!-- Clean up. -->
   <?php
   
     mysqli_free_result($result);
     mysqli_close($connection);
   
   ?>
   
   </body>
   </html>
   
   
   <?php
   
   /* Add an employee to the table. */
   function AddEmployee($connection, $name, $address) {
      $n = mysqli_real_escape_string($connection, $name);
      $a = mysqli_real_escape_string($connection, $address);
   
      $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
   
      if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
   }
   
   /* Check whether the table exists and, if not, create it. */
   function VerifyEmployeesTable($connection, $dbName) {
     if(!TableExists("EMPLOYEES", $connection, $dbName))
     {
        $query = "CREATE TABLE EMPLOYEES (
            ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            NAME VARCHAR(45),
            ADDRESS VARCHAR(90)
          )";
   
        if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");
     }
   }
   
   /* Check for the existence of a table. */
   function TableExists($tableName, $connection, $dbName) {
     $t = mysqli_real_escape_string($connection, $tableName);
     $d = mysqli_real_escape_string($connection, $dbName);
   
     $checktable = mysqli_query($connection,
         "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");
   
     if(mysqli_num_rows($checktable) > 0) return true;
   
     return false;
   }
   ?>
   ```

------
#### [ PostgreSQL ]

   ```
   <?php include "../inc/dbinfo.inc"; ?>
   
   <html>
   <body>
   <h1>Sample page</h1>
   <?php
   
   /* Connect to PostgreSQL and select the database. */
   $constring = "host=" . DB_SERVER . " dbname=" . DB_DATABASE . " user=" . DB_USERNAME . " password=" . DB_PASSWORD ;
   $connection = pg_connect($constring);
   
   if (!$connection){
    echo "Failed to connect to PostgreSQL";
    exit;
   }
   
   /* Ensure that the EMPLOYEES table exists. */
   VerifyEmployeesTable($connection, DB_DATABASE);
   
   /* If input fields are populated, add a row to the EMPLOYEES table. */
   $employee_name = htmlentities($_POST['NAME']);
   $employee_address = htmlentities($_POST['ADDRESS']);
   
   if (strlen($employee_name) || strlen($employee_address)) {
     AddEmployee($connection, $employee_name, $employee_address);
   }
   
   ?>
   
   <!-- Input form -->
   <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
     <table border="0">
       <tr>
         <td>NAME</td>
         <td>ADDRESS</td>
       </tr>
       <tr>
         <td>
       <input type="text" name="NAME" maxlength="45" size="30" />
         </td>
         <td>
       <input type="text" name="ADDRESS" maxlength="90" size="60" />
         </td>
         <td>
       <input type="submit" value="Add Data" />
         </td>
       </tr>
     </table>
   </form>
   <!-- Display table data. -->
   <table border="1" cellpadding="2" cellspacing="2">
     <tr>
       <td>ID</td>
       <td>NAME</td>
       <td>ADDRESS</td>
     </tr>
   
   <?php
   
   $result = pg_query($connection, "SELECT * FROM EMPLOYEES");
   
   while($query_data = pg_fetch_row($result)) {
     echo "<tr>";
     echo "<td>",$query_data[0], "</td>",
          "<td>",$query_data[1], "</td>",
          "<td>",$query_data[2], "</td>";
     echo "</tr>";
   }
   ?>
   </table>
   
   <!-- Clean up. -->
   <?php
   
     pg_free_result($result);
     pg_close($connection);
   ?>
   </body>
   </html>
   
   
   <?php
   
   /* Add an employee to the table. */
   function AddEmployee($connection, $name, $address) {
      $n = pg_escape_string($name);
      $a = pg_escape_string($address);
      echo "Forming Query";
      $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
   
      if(!pg_query($connection, $query)) echo("<p>Error adding employee data.</p>"); 
   }
   
   /* Check whether the table exists and, if not, create it. */
   function VerifyEmployeesTable($connection, $dbName) {
     if(!TableExists("EMPLOYEES", $connection, $dbName))
     {
        $query = "CREATE TABLE EMPLOYEES (
            ID serial PRIMARY KEY,
            NAME VARCHAR(45),
            ADDRESS VARCHAR(90)
          )";
   
        if(!pg_query($connection, $query)) echo("<p>Error creating table.</p>"); 
     }
   }
   /* Check for the existence of a table. */
   function TableExists($tableName, $connection, $dbName) {
     $t = strtolower(pg_escape_string($tableName)); //table name is case sensitive
     $d = pg_escape_string($dbName); //schema is 'public' instead of 'sample' db name so not using that
   
     $query = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t';";
     $checktable = pg_query($connection, $query);
   
     if (pg_num_rows($checktable) >0) return true;
     return false;
   
   }
   ?>
   ```

------

1. `SamplePage.php` 파일을 저장하고 닫습니다.

1. 웹 브라우저를 열고 `http://EC2 instance endpoint/SamplePage.php`(예: `http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com/SamplePage.php`)를 검색하여 웹 서버에서 DB 인스턴스에 제대로 연결되는지 확인합니다.

`SamplePage.php`를 사용하여 DB 인스턴스에 데이터를 추가할 수 있습니다. 그러면 추가한 데이터가 페이지에 표시됩니다. 데이터가 테이블에 삽입되었는지 확인하려면 Amazon EC2 인스턴스에 MySQL을 설치합니다. 그런 다음 DB 인스턴스에 연결하여 테이블을 쿼리합니다.

MySQL 클라이언트를 설치하고 DB 인스턴스에 연결하는 방법에 대한 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요.

DB 인스턴스를 최대한 보호하려면 VPC 외부의 소스가 DB 인스턴스에 연결할 수 없는지 확인합니다.

웹 서버 및 데이터베이스 테스트를 완료한 후에는 DB 인스턴스와 Amazon EC2 인스턴스를 삭제해야 합니다.
+ DB 인스턴스를 삭제하려면 [DB 인스턴스 삭제](USER_DeleteInstance.md)의 지침을 따릅니다. 최종 스냅샷을 생성할 필요가 없습니다.
+ Amazon EC2 인스턴스를 종료하려면 *Amazon EC2 사용 설명서*에서 [인스턴스 종료](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html) 섹션의 지침을 따르세요.

# 자습서: Amazon RDS에 액세스하기 위해 Lambda 함수 사용
<a name="rds-lambda-tutorial"></a>

이 자습서에서는 Lambda 함수를 사용하여 RDS 프록시를 통해 [Amazon Relational Database Service](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)(Amazon RDS) 데이터베이스에 데이터를 기록합니다. Lambda 함수는 메시지가 추가될 때마다 Amazon Simple Queue Service(Amazon SQS) 대기열에서 레코드를 읽고 데이터베이스의 테이블에 새 항목을 기록합니다. 이 예제에서는 AWS Management Console을 사용하여 대기열에 메시지를 수동으로 추가합니다. 다음 다이어그램은 자습서를 완료하는 데 사용하는 AWS 리소스를 보여 줍니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_1.png)


Amazon RDS를 사용하면 Microsoft SQL Server, MariaDB, MySQL, Oracle Database, PostgreSQL과 같은 일반적인 데이터베이스 제품을 사용하여 클라우드에서 관리형 관계형 데이터베이스를 실행할 수 있습니다. Lambda를 사용하여 데이터베이스에 액세스하면 새 고객이 웹 사이트에 등록하는 것과 같은 이벤트에 응답하여 데이터를 읽고 쓸 수 있습니다. 함수와 데이터베이스 인스턴스, 프록시는 수요가 많은 기간에 맞춰 자동으로 확장됩니다.

이 자습서를 완료하려면 다음 작업을 수행하세요.

1. RDS for MySQL 데이터베이스 인스턴스 및 프록시를 AWS 계정의 기본 VPC에 시작합니다.

1. 데이터베이스에 새 테이블을 생성하고 여기에 데이터를 기록하는 Lambda 함수를 생성 및 테스트합니다.

1. Amazon SQS 대기열을 생성하고 새 메시지가 추가될 때마다 Lambda 함수를 호출하도록 구성합니다.

1. AWS Management Console을 사용하여 대기열에 메시지를 추가하고 CloudWatch Logs를 사용하여 결과를 모니터링하면서 전체 설정을 테스트합니다.

이 단계를 완료하면 다음을 학습하게 됩니다.
+ Amazon RDS를 사용하여 데이터베이스 인스턴스와 프록시를 생성하고 Lambda 함수를 프록시에 연결하는 방법
+ Lambda를 사용하여 Amazon RDS 데이터베이스에서 생성 및 읽기 작업을 수행하는 방법
+ Amazon SQS를 사용하여 Lambda 함수를 호출하는 방법

AWS Management Console 또는 AWS Command Line Interface(AWS CLI)를 사용하여 이 자습서를 완료할 수 있습니다.

## 사전 조건
<a name="vpc-rds-prereqs"></a>

시작하기 전에 다음 섹션에서 다음 단계를 완료하세요.
+ [AWS 계정에 가입](CHAP_SettingUp.md#sign-up-for-aws)
+ [관리자 액세스 권한이 있는 사용자 생성](CHAP_SettingUp.md#create-an-admin)

## Amazon RDS DB 인스턴스 생성
<a name="vpc-rds-create-RDS-instance"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step1.png)


Amazon RDS DB 인스턴스는 AWS 클라우드에서 실행되는 격리된 데이터베이스 환경입니다. 인스턴스에 사용자가 만든 데이터베이스가 하나 이상 포함될 수 있습니다. 별도로 지정하지 않는 한 Amazon RDS는 AWS 계정에 포함된 기본 VPC에 새 데이터베이스 인스턴스를 생성합니다. Amazon VPC에 대한 자세한 내용은 [Amazon Virtual Private Cloud 사용 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 참조하세요.

이 자습서에서는 AWS 계정의 기본 VPC 새 인스턴스를 생성하고 해당 인스턴스에 이름이 `ExampleDB`인 데이터베이스를 생성합니다. AWS Management Console 또는 AWS CLI를 사용하여 DB 인스턴스 및 데이터베이스를 생성할 수 있습니다.

**데이터베이스 인스턴스를 생성하는 방법**

1. Amazon RDS 콘솔을 열고 **데이터베이스 생성**을 선택합니다.

1. **표준 생성** 옵션을 선택한 상태로 두고 **엔진 옵션**에서 **MySQL**을 선택합니다.

1. **템플릿**에서 **프리 티어** 또는 **샌드박스**를 선택합니다. **프리 티어**는 프리 티어 계정에 표시됩니다. **샌드박스**는 유료 요금제 계정에 표시됩니다.

1. **Settings**(설정)에서 **DB instance identifier**(DB 인스턴스 식별자)에 **MySQLForLambda**를 입력합니다.

1. 다음을 따라 사용자 이름과 암호를 설정합니다.

   1. **자격 증명 설정**에서 **마스터 사용자 이름**을 `admin`으로 둡니다.

   1. **마스터 암호**의 경우 데이터베이스에 액세스하기 위한 암호를 입력하고 확인합니다.

1. 다음을 수행하여 데이터베이스 이름을 지정합니다.
   + 나머지 기본 옵션을 모두 선택한 상태로 두고 아래로 스크롤하여 **추가 구성** 섹션으로 이동합니다.
   + 이 섹션을 확장하고 **초기 데이터베이스 이름**으로 **ExampleDB**를 입력합니다.

1. 나머지 기본 옵션을 모두 선택한 상태로 두고 **데이터베이스 생성**을 선택합니다.

## Lambda 함수 및 프록시 생성
<a name="auto-create-Lambda"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step2.png)


RDS 콘솔을 사용하여 데이터베이스와 동일한 VPC에 Lambda 함수와 프록시를 생성할 수 있습니다.

**참고**  
데이터베이스 생성이 완료되어 있으며 **사용 가능** 상태인 경우에만 이러한 관련 리소스를 생성할 수 있습니다.

**관련 함수 및 프록시를 생성하는 방법**

1. **데이터베이스** 페이지에서 데이터베이스가 **사용 가능** 상태인지 확인합니다. 사용 가능 상태이면 다음 단계를 진행합니다. 사용 가능 상태가 아니면 데이터베이스를 사용할 수 있을 때까지 기다립니다.

1. 데이터베이스를 선택하고 **작업**에서 **Lambda 연결 설정**을 선택합니다.

1. **Lambda 연결 설정** 페이지에서 **새 함수 생성**을 선택합니다.

   **새 Lambda 함수 이름**을 **LambdaFunctionWithRDS**로 설정합니다.

1. **RDS 프록시** 섹션에서 **RDS 프록시를 사용하여 연결** 옵션을 선택합니다. 그리고 **새 프록시 생성**을 선택합니다.
   + **데이터베이스 자격 증명**에서 **데이터베이스 사용자 이름 및 암호**를 선택합니다.
   + **사용자 이름**은 `admin`으로 지정합니다.
   + **암호**에는 데이터베이스 인스턴스에 생성한 암호를 입력합니다.

1. **설정**을 선택하여 프록시와 Lambda 함수 생성을 완료합니다.

마법사가 설정을 완료하고 새 함수를 검토할 수 있도록 Lambda 콘솔 링크를 제공합니다. Lambda 콘솔로 전환하기 전에 프록시 엔드포인트를 기록해 두세요.

## 함수 실행 역할 생성
<a name="vpc-rds-create-execution-role"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step3.png)


Lambda 함수를 생성하기 전에 함수에 필요한 권한을 부여하는 실행 역할을 생성해야 합니다. 이 자습서에서는 데이터베이스 인스턴스가 포함된 VPC에 대한 네트워크 연결을 관리하고 Amazon SQS 대기열에서 메시지를 폴링할 수 있는 권한이 Lambda에 필요합니다.

Lambda 함수에 필요한 권한을 부여하기 위해 이 자습서에서는 IAM 관리형 정책을 사용합니다. 이러한 정책은 여러 가지 일반적인 사용 사례에서 권한을 부여하고 AWS 계정에서 제공됩니다. 관리형 정책에 대한 자세한 내용은 [정책 모범 사례](security_iam_id-based-policy-examples.md#security_iam_service-with-iam-policy-best-practices)의 내용을 참조하세요.

**Lambda 실행 역할 생성**

1. IAM 콘솔의 [역할](https://console.aws.amazon.com/iamv2/home#/roles) 페이지를 열고 **Create role**(역할 생성)을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**으로 **AWS 서비스**를 선택한 다음 **사용 사례**로 **Lambda**를 선택합니다.

1. **다음**을 선택합니다.

1. 다음을 수행하여 IAM 관리형 정책을 추가합니다.

   1. 정책 검색 상자를 사용하여 **AWSLambdaSQSQueueExecutionRole**을 검색합니다.

   1. 결과 목록에서 역할 옆의 확인란을 선택한 다음 **필터 지우기**를 선택합니다.

   1. 정책 검색 상자를 사용하여 **AWSLambdaVPCAccessExecutionRole**을 검색합니다.

   1. 결과 목록에서 역할 옆의 확인란을 선택한 다음 **Next**(다음)를 선택합니다.

1. **Role name**(역할 이름)에 **lambda-vpc-sqs-role**을 입력한 다음 **Create role**(역할 생성)을 선택합니다.

자습서 뒷부분에서는 방금 생성한 실행 역할의 Amazon 리소스 이름(ARN)이 필요합니다.

**실행 역할 ARN 찾기**

1. IAM 콘솔의 [역할](https://console.aws.amazon.com/iamv2/home#/roles) 페이지를 열고 역할(`lambda-vpc-sqs-role`)을 선택합니다.

1.  **요약** 섹션에 표시된 **역할 ARN**을 복사합니다.

## Lambda 배포 패키지 생성
<a name="vpc-rds-create-deployment-package"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step4.png)


다음 예제 Python 코드는 [PyMySQL](https://pymysql.readthedocs.io/en/latest/) 패키지를 사용하여 데이터베이스에 연결합니다. 함수를 처음 호출하면 `Customer`라는 새 테이블도 생성됩니다. 테이블은 다음 스키마를 사용하고, 여기서 `CustID`는 기본 키입니다.

```
Customer(CustID, Name)
```

또한 함수는 PyMySQL을 사용하여 이 테이블에 레코드를 추가합니다. 이 함수는 Amazon SQS 대기열에 추가할 메시지에 지정된 고객 ID 및 이름을 사용하여 레코드를 추가합니다.

이 코드는 핸들러 함수 외부에서 데이터베이스에 대한 연결을 생성합니다. 초기화 코드에서 연결을 생성하면 이후에 함수를 호출할 때 연결을 다시 사용할 수 있어 성능이 향상됩니다. 프로덕션 애플리케이션에서는 [프로비저닝된 동시성](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html)을 사용하여 요청된 수의 데이터베이스 연결을 초기화할 수도 있습니다. 이러한 연결은 함수가 호출되는 즉시 사용할 수 있습니다.

```
import sys
import logging
import pymysql
import json
import os

# rds settings
user_name = os.environ['USER_NAME']
password = os.environ['PASSWORD']
rds_proxy_host = os.environ['RDS_PROXY_HOST']
db_name = os.environ['DB_NAME']

logger = logging.getLogger()
logger.setLevel(logging.INFO)

# create the database connection outside of the handler to allow connections to be
# re-used by subsequent function invocations.
try:
        conn = pymysql.connect(host=rds_proxy_host, user=user_name, passwd=password, db=db_name, connect_timeout=5)
except pymysql.MySQLError as e:
    logger.error("ERROR: Unexpected error: Could not connect to MySQL instance.")
    logger.error(e)
    sys.exit(1)

logger.info("SUCCESS: Connection to RDS for MySQL instance succeeded")

def lambda_handler(event, context):
    """
    This function creates a new RDS database table and writes records to it
    """
    message = event['Records'][0]['body']
    data = json.loads(message)
    CustID = data['CustID']
    Name = data['Name']

    item_count = 0
    sql_string = f"insert into Customer (CustID, Name) values(%s, %s)"

    with conn.cursor() as cur:
        cur.execute("create table if not exists Customer ( CustID  int NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (CustID))")
        cur.execute(sql_string, (CustID, Name))
        conn.commit()
        cur.execute("select * from Customer")
        logger.info("The following items have been added to the database:")
        for row in cur:
            item_count += 1
            logger.info(row)
    conn.commit()

    return "Added %d items to RDS for MySQL table" %(item_count)
```

**참고**  
이 예제에서는 데이터베이스 액세스 자격 증명이 환경 변수로 저장됩니다. 프로덕션 애플리케이션에서는 보다 안전한 옵션으로 [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)을 사용하는 것이 좋습니다. Lambda 함수가 VPC에 있는 경우 Secrets Manager에 연결하려면 VPC 엔드포인트를 생성해야 한다는 점을 참고하세요. 자세한 내용은 [Virtual Private Cloud 내에서 Secrets Manager에 연결하는 방법](https://aws.amazon.com/blogs/security/how-to-connect-to-aws-secrets-manager-service-within-a-virtual-private-cloud/)을 참조하세요.

 함수 코드에 PyMySQL 종속성을 포함하려면.zip 배포 패키지를 생성하세요. 다음 명령은 Linux, macOS 또는 Unix에서 작동합니다.

**.zip 배포 패키지 생성**

1. 예제 코드를 `lambda_function.py`라는 파일로 저장합니다.

1. `lambda_function.py` 파일을 생성한 디렉터리와 동일한 디렉터리에서 이름이 `package`인 새 디렉터리를 생성하고 PyMySQL 라이브러리를 설치합니다.

   ```
   mkdir package
   pip install --target package pymysql
   ```

1. 애플리케이션 코드와 PyMySQL 라이브러리가 포함된 zip 파일을 생성합니다. Linux 또는 MacOS에서는 다음 CLI 명령을 실행합니다. Windows에서는 선호하는 zip 도구를 사용하여 `lambda_function.zip` 파일을 생성합니다. `lambda_function.py` 원본 코드 파일과 종속 항목이 포함된 폴더는 .zip 파일의 루트에 설치해야 합니다.

   ```
   cd package
   zip -r ../lambda_function.zip .
   cd ..
   zip lambda_function.zip lambda_function.py
   ```

   Python 가상 환경을 사용하여 배포 패키지를 생성할 수도 있습니다. [.zip 파일 아카이브를 사용하여 Python Lambda 함수 배포](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-create-package-with-dependency)를 참조하세요.

## Lambda 함수 업데이트
<a name="vpc-rds-update-function"></a>

방금 생성한 .zip 패키지를 사용하여 이제 Lambda 콘솔에서 Lambda 함수를 업데이트합니다. 함수가 데이터베이스에 액세스할 수 있도록 하려면 액세스 보안 인증으로 환경 변수도 구성해야 합니다.

**Lambda 함수를 업데이트하는 방법**

1. Lambda 콘솔의 [함수](https://console.aws.amazon.com/lambda/home#/functions) 페이지를 열고 함수(`LambdaFunctionWithRDS`)를 선택합니다.

1. **런타임 설정** 탭에서 **편집**을 선택하여 함수의 **런타임**을 **Python 3.10**으로 변경합니다.

1. **핸들러**를 `lambda_function.lambda_handler`로 변경합니다.

1. **코드** 탭에서 **에서 업로드**를 선택한 다음 **.zip 파일**을 선택합니다.

1. 이전 단계에서 생성한 `lambda_function.zip` 파일을 선택하고 **저장**을 선택합니다.

이제 앞서 생성한 실행 역할로 함수를 구성합니다. 이렇게 하면 함수에 데이터베이스 인스턴스에 액세스하고 Amazon SQS 대기열을 폴링하는 데 필요한 권한이 부여됩니다.

**함수의 실행 역할을 구성하는 방법**

1. Lambda 콘솔의 [함수](https://console.aws.amazon.com/lambda/home#/functions) 페이지에서 **구성** 탭을 선택한 다음 **권한**을 선택합니다.

1. **실행 역할**에서 **편집**을 선택합니다.

1. **기존 역할**에서 실행 역할(`lambda-vpc-sqs-role`)을 선택합니다.

1. **저장**을 선택합니다.

**함수의 환경 변수를 구성하는 방법**

1. Lambda 콘솔의 [함수](https://console.aws.amazon.com/lambda/home#/functions) 페이지에서 **구성** 탭을 선택한 다음 **환경 변수**를 선택합니다.

1. **편집**을 선택합니다.

1. 데이터베이스 액세스 자격 증명을 추가하려면 다음을 수행합니다.

   1. **환경 변수 추가**를 선택한 다음 **키**에 **USER\$1NAME**을 입력하고 **값**에 **admin**을 선택합니다.

   1. **환경 변수 추가**를 선택한 다음 **키**에 **DB\$1NAME**을 입력하고 **값**에 **ExampleDB**를 선택합니다.

   1. **환경 변수 추가**를 선택한 다음 **키**에 **PASSWORD**를 입력하고 **값**에 데이터베이스를 생성할 때 선택한 암호를 입력합니다.

   1. **환경 변수 추가**를 선택한 다음 **키**에 **RDS\$1PROXY\$1HOST**를 입력하고 **값**에 앞서 기록한 RDS 프록시 엔드포인트를 입력합니다.

   1. **저장**을 선택합니다.

## 콘솔에서 Lambda 함수 테스트
<a name="vpc-rds-test-function"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step5.png)


이제 Lambda 콘솔을 사용하여 함수를 테스트할 수 있습니다. 자습서의 마지막 단계에서 Amazon SQS를 사용하여 함수를 호출할 때 함수가 수신할 데이터를 모방하는 테스트 이벤트를 생성합니다. 테스트 이벤트에는 함수가 생성하는 `Customer` 테이블에 추가할 고객 ID와 고객 이름을 지정하는 JSON 객체가 포함됩니다.

**Lambda 함수를 테스트하려면**

1. Lambda 콘솔의 [함수](https://console.aws.amazon.com/lambda/home#/functions) 페이지를 열고 함수를 선택합니다.

1. **테스트** 섹션을 선택합니다.

1. **새 이벤트 생성**을 선택하고 이벤트 이름으로 **myTestEvent**를 입력합니다.

1. 다음 코드를 **이벤트 JSON**에 복사하고 **저장**을 선택합니다.

   ```
   {
     "Records": [
       {
         "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
         "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
         "body": "{\n     \"CustID\": 1021,\n     \"Name\": \"Martha Rivera\"\n}",
         "attributes": {
           "ApproximateReceiveCount": "1",
           "SentTimestamp": "1545082649183",
           "SenderId": "AIDAIENQZJOLO23YVJ4VO",
           "ApproximateFirstReceiveTimestamp": "1545082649185"
         },
         "messageAttributes": {},
         "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
         "eventSource": "aws:sqs",
         "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue",
         "awsRegion": "us-west-2"
       }
     ]
   }
   ```

1. **테스트**를 선택합니다.

**실행 결과** 탭의 **함수 로그**에 아래와 비슷한 결과가 표시될 것입니다.

```
[INFO] 2023-02-14T19:31:35.149Z bdd06682-00c7-4d6f-9abb-89f4bbb4a27f The following items have been added to the database:
[INFO] 2023-02-14T19:31:35.149Z bdd06682-00c7-4d6f-9abb-89f4bbb4a27f (1021, 'Martha Rivera')
```

## Amazon SQS 대기열 생성
<a name="vpc-rds-create-queue"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step6.png)


Lambda 함수와 Amazon RDS 데이터베이스 인스턴스의 통합을 성공적으로 테스트했습니다. 이제 자습서의 마지막 단계에서 Lambda 함수를 호출하는 데 사용할 Amazon SQS 대기열을 생성합니다.

**Amazon SQS 대기열 생성(콘솔)**

1. Amazon SQS 콘솔의 [대기열](https://console.aws.amazon.com/sqs/v2/home#/queues) 페이지를 열고 **대기열 생성**을 선택합니다.

1. **유형**을 **표준**으로 두고 대기열 이름으로 **LambdaRDSQueue**를 입력합니다.

1. 기본 옵션을 모두 선택한 상태로 두고 **Create queue**(대기열 생성)를 선택합니다.

## 이벤트 소스 매핑을 생성하여 Lambda 함수 호출
<a name="vpc-rds-create-event-source-mapping"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step7.png)


[이벤트 소스 매핑](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html)은 스트림 또는 대기열에서 항목을 읽고 Lambda 함수를 호출하는 Lambda 리소스입니다. 이벤트 소스 매핑을 구성할 때 스트림 또는 대기열의 레코드가 단일 페이로드로 일괄 처리되도록 배치 크기를 지정할 수 있습니다. 이 예제에서는 대기열에 메시지를 보낼 때마다 Lambda 함수가 호출되도록 배치 크기를 1로 설정합니다. AWS CLI 또는 Lambda 콘솔을 사용하여 이벤트 소스 매핑을 구성할 수 있습니다.

**이벤트 소스 매핑 생성(콘솔)**

1. Lambda 콘솔의 [함수](https://console.aws.amazon.com/lambda/home#/functions) 페이지를 열고 함수(`LambdaFunctionWithRDS`)를 선택합니다.

1. **함수 개요** 섹션에서 **트리거 추가**를 선택합니다.

1. 소스로 **Amazon SQS**를 선택한 다음 대기열의 이름(`LambdaRDSQueue`)을 선택합니다.

1. **배치 크기**에 **1**을 입력합니다.

1. 다른 모든 옵션은 기본값으로 두고 **추가**를 선택합니다.

이제 Amazon SQS 대기열에 메시지를 추가하여 전체 설정을 테스트할 준비가 되었습니다.

## 설정 테스트 및 모니터링
<a name="vpc-rds-test-setup"></a>

![\[\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/TUT_Lambda_step8.png)


전체 설정을 테스트하려면 콘솔을 사용하여 Amazon SQS 대기열에 메시지를 추가합니다. 이후 CloudWatch Logs를 사용하여 Lambda 함수가 예상대로 데이터베이스에 레코드를 작성하고 있는지 확인합니다.

**설정 테스트 및 모니터링**

1. Amazon SQS 콘솔의 [대기열](https://console.aws.amazon.com/sqs/v2/home#/queues) 페이지를 열고 대기열(`LambdaRDSQueue`)을 선택합니다.

1. **메시지 전송 및 수신**을 선택하고 다음 JSON을 **메시지 전송** 섹션의 **메시지 본문**에 붙여넣습니다.

   ```
   {
       "CustID": 1054,
       "Name": "Richard Roe"
   }
   ```

1. **메시지 전송**을 선택합니다.

   메시지를 대기열로 보내면 Lambda가 이벤트 소스 매핑을 통해 함수를 호출합니다. Lambda에서 예상대로 함수를 호출했는지 확인하려면 CloudWatch Logs를 사용하여 함수가 고객 이름과 ID를 데이터베이스 테이블에 기록했는지 확인합니다.

1. CloudWatch 콘솔의 [로그 그룹](https://console.aws.amazon.com/cloudwatch/home#logsV2:log-groups) 페이지를 열고 함수(`/aws/lambda/LambdaFunctionWithRDS`)의 로그 그룹을 선택합니다.

1. **로그 스트림** 섹션에서 가장 최근의 로그 스트림을 선택합니다.

   테이블에는 함수를 호출할 때마다 하나씩, 총 두 개의 고객 레코드가 포함되어야 합니다. 로그 스트림에 다음과 유사한 메시지가 표시됩니다.

   ```
   [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 The following items have been added to the database:
   [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 (1021, 'Martha Rivera')
   [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 (1054, 'Richard Roe')
   ```

## 리소스 정리
<a name="rds-tutorial-cleanup"></a>

이 자습서 용도로 생성한 리소스를 보관하고 싶지 않다면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.

**Lambda 함수를 삭제하려면**

1. Lambda 콘솔의 [함수 페이지](https://console.aws.amazon.com/lambda/home#/functions)를 엽니다.

1. 생성한 함수를 선택합니다.

1. **작업**(Actions), **삭제**(Delete)를 선택합니다.

1. **삭제**를 선택합니다.

**실행 역할을 삭제하려면**

1. IAM 콘솔에서 [역할 페이지](https://console.aws.amazon.com/iam/home#/roles)를 엽니다.

1. 생성한 실행 역할을 선택합니다.

1. **역할 삭제(Delete role)**를 선택합니다.

1. **예, 삭제**를 선택합니다.

**MySQL DB 인스턴스를 삭제하려면**

1. Amazon RDS 콘솔의 [데이터베이스 페이지](https://console.aws.amazon.com//rds/home#databases:)를 엽니다.

1. 생성한 데이터베이스를 선택합니다.

1. **작업**(Actions), **삭제**(Delete)를 선택합니다.

1. **최종 스냅샷 생성** 확인란을 선택 해제합니다.

1. 텍스트 상자에 **delete me**를 입력합니다.

1. **삭제**를 선택합니다.

**Amazon SQS 대기열을 삭제하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)에서 Amazon SQS 콘솔을 엽니다.

1. 생성한 대기열을 선택합니다.

1. **삭제**를 선택합니다.

1. 텍스트 상자에 **delete**를 입력합니다.

1. **삭제**를 선택합니다.