

# 자습서: 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. **삭제**를 선택합니다.