Amazon RDS 인스턴스를 7일 이상 중지하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 10월 18일

Amazon Relational Database Service(Amazon RDS)를 7일 이상 중지하고 싶습니다.

간략한 설명

몇 분 안에 Amazon RDS 인스턴스를 쉽게 시작하고 중지할 수 있습니다. 이 기능은 항상 실행될 필요가 없는 데이터베이스에 대한 비용 절감을 지원합니다. 최대 7일 동안 데이터베이스 인스턴스를 중지할 수 있습니다. 7일 후에 DB 인스턴스를 수동으로 시작하지 않으면 인스턴스가 자동으로 시작됩니다. 이는 인스턴스가 하드웨어, 기본 운영 체제 또는 데이터베이스 엔진 버전에 대한 필수 유지 관리 업데이트에 뒤처지지 않도록 하기 위해 발생합니다.

필요한 유지 관리 업데이트를 놓치지 않고 7일 이상 RDS 인스턴스를 중지하려면 다음을 수행합니다.

  1. AWS Lambda가 다음을 수행할 수 있도록 AWS Identity Access Management(IAM) 권한을 설정합니다. 인스턴스를 시작합니다. 인스턴스를 중지합니다. 인스턴스에 대한 정보를 검색합니다.
  2. 자동으로 시작 및 중지할 RDS 인스턴스에 태그를 추가합니다.
  3. DB 인스턴스를 시작하는 Lambda 함수를 생성합니다.
  4. DB 인스턴스를 중지하는 Lambda 함수를 생성합니다.
  5. 다음 작업을 수행할 일정을 만듭니다. 주간 유지 관리 기간이 시작될 때 DB 인스턴스를 시작합니다. 유지 관리 기간이 끝날 때 DB 인스턴스를 중지합니다.

해결 방법

IAM 권한 구성

Lambda가 인스턴스를 시작 및 중지하고 인스턴스에 대한 정보를 검색하도록 허용하는 IAM 정책을 생성합니다.

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 [Policies]를 선택합니다.

3.    정책 생성을 선택합니다.

4.    [JSON] 탭을 선택합니다.

5.    다음 정책을 복사하고 JSON 탭 아래에 정책을 붙여 넣어 필요한 IAM 권한을 부여합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "rds:StartDBCluster",
                "rds:StopDBCluster",
                "rds:ListTagsForResource",
                "rds:DescribeDBInstances",
                "rds:StopDBInstance",
                "rds:DescribeDBClusters",
                "rds:StartDBInstance"
            ],
            "Resource": "*"
        }
    ]
}

6.    다음: 태그를 선택합니다.

7.    (선택 사항) 태그를 추가하려면 태그 추가를 선택한 다음 값-옵션 필드에 적절한 값을 입력합니다.

8.    다음: 검토를 선택합니다.

9.    정책 검토 페이지에서 이름란에 정책의 이름을 입력합니다. 요약 섹션을 검토하여 정책에 의해 부여된 권한을 확인합니다.

10.    정책 생성을 선택합니다.

자세한 내용은 JSON 탭에서 정책 만들기를 참조하십시오.

IAM 역할을 생성한 다음 필요한 정책 연결

  1. IAM 콘솔을 엽니다.
  2. 탐색 창에서 역할을 선택합니다.
  3. 역할 생성을 선택합니다.
  4. 신뢰할 수 있는 유형의 엔터티 선택에서 AWS 서비스를 선택합니다.
  5. 또는 서비스를 선택하여 사용 사례 보기에서 Lambda를 선택합니다.
  6. 다음: 권한을 선택합니다.
  7. 필터-정책에는 이전 섹션에서 생성한 정책의 이름을 입력합니다. 생성한 정책이 나타나면 해당 정책을 선택합니다. 필터-정책에는 AWSLambdaBasicExecutionRole을 입력합니다. 생성한 관리형 정책 AWSLambdaBasicExecutionRole이 나타나면 해당 정책을 선택합니다.
  8. 다음: 태그를 선택합니다.
  9. (선택 사항) 태그를 추가하려면 값(선택 사항) 필드에 적절한 값을 입력합니다.
  10. 다음: 검토를 선택합니다.
  11. 역할 만들기 페이지에서 역할 이름에 생성 중인 역할의 이름을 입력합니다.
  12. 역할 생성을 선택합니다.

자세한 내용은 AWS 서비스(콘솔)에 대한 역할 생성을 참조하세요.

DB 인스턴스에 태그 추가

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 데이터베이스를 선택합니다.
  3. 자동으로 시작 및 중지할 DB 인스턴스를 선택합니다.
  4. 세부 정보 섹션에서 태그 섹션까지 아래로 스크롤합니다.
  5. 태그 탭에서 추가를 선택합니다. 태그 키에는 자동 시작을 입력합니다. 에는 를 입력합니다. 추가를 선택하여 변경 내용을 저장합니다.
  6. 추가를 다시 선택합니다. 태그 키에는 AutoStop을 입력합니다. 에는 를 입력합니다. 추가를 선택하여 변경 내용을 저장합니다.

자세한 내용은 태그 추가, 나열 및 제거를 참조하십시오.

Lambda 함수를 생성하여 태그가 지정된 DB 인스턴스를 시작

1.    Lambda 콘솔을 엽니다.

2.    탐색 창에서 함수를 선택합니다.

3.    함수 생성을 선택합니다.

4.    새로 작성을 선택합니다.

5.    함수 이름에 함수 이름을 입력합니다.

6.    런타임에서 Python 3.7을 선택합니다.

7.    아키텍처는 기본 선택인 x86_64를 그대로 둡니다.

7.    기본 실행 역할 변경을 확장합니다.

8.    실행 역할의 경우 기존 역할 사용을 선택합니다.

9.    기존 역할은 이전에 생성한 IAM 역할을 선택합니다.

10.    함수 생성을 선택합니다.

11.    코드 탭을 선택합니다.

12.    코드 소스 편집기에서 샘플 코드를 삭제하고 다음을 붙여 넣습니다.

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Start DB Instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance stopped. Start it if eligible.
        if (db['DBInstanceStatus'] == 'stopped'):
            doNotStart=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for instance, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Starting instance: {0}.".format(db['DBInstanceIdentifier']))
                if(doNotStart == 1):
                    doNotStart=1
            except Exception as e:
                print ("Cannot start instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

13.    파일을 선택하고 저장을 선택한 다음 배포를 선택합니다.

15.    구성 탭을 선택하고 일반 구성을 선택한 다음 편집을 선택합니다.

16.    시간 초과에서 다음을 수행합니다. 0을 선택합니다. 10을 선택합니다. 17.    저장을 선택합니다.

태그가 지정된 DB 인스턴스를 중지하는 Lambda 함수 생성

태그가 지정된 DB 인스턴스를 중지하는 Lambda 함수를 생성하려면 다음의 변경 사항과 함께 이전 섹션 태그가 지정된 DB 인스턴스를 시작하는 Lambda 함수 생성의 지침을 사용합니다.

코드 소스 편집기에서 샘플 코드를 삭제하고 다음을 붙여 넣습니다.

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Stop DB instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance is not already stopped
        if (db['DBInstanceStatus'] == 'available'):
            DoNotStop=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for instance, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Stopping instance: {0}.".format(db['DBInstanceIdentifier']))
                if(DoNotStop == 1):
                    DoNotStop=1
            except Exception as e:
                print ("Cannot stop instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)
                
if __name__ == "__main__":
    lambda_handler(None, None)

함수 테스트 수행

태그가 지정된 DB 인스턴스가 중지 상태라고 가정해 보겠습니다. 함수 테스트를 수행하려면 다음을 수행하십시오.

  1. Lambda 함수 목록을 엽니다.
  2. DB 인스턴스를 시작하기 위해 생성한 함수를 선택합니다.
  3. 작업을 선택한 다음, 테스트를 선택합니다.
  4. 테스트 탭에서 이름에 이벤트 이름을 입력합니다.
  5. 변경 사항 저장을 선택한 다음테스트를 선택합니다.

일정 만들기

태그가 지정된 DB 인스턴스의 주간 유지 관리 기간이 일요일 22:00 ~ 22:30이라고 가정해 보겠습니다. 다음에 대한 두 가지 규칙을 생성하여 일정을 설정할 수 있습니다.

  • 유지 관리 기간이 시작되기 30분 전에 DB 인스턴스 자동 시작
  • 유지 관리 기간이 종료된 후 30분 후에 DB 인스턴스 자동 중지

유지 관리 기간 30분 전에 DB 인스턴스를 자동으로 시작하는 규칙을 생성하려면 다음을 수행합니다.

  1. Lambda 함수 목록을 엽니다.
  2. DB 인스턴스를 시작하기 위해 생성한 함수를 선택합니다.
  3. 함수 개요에서 트리거 추가를 선택합니다.
  4. EventBridge(CloudWatch Events)를 선택한 다음 새 규칙 만들기를 선택합니다.
  5. 규칙 이름은 생성하고자 하는 규칙 이름을 입력합니다.
  6. 일정 표현식의 경우 자동화된 일정에 대한 cron 표현식을 추가합니다(예: cron(30 21 ? * SUN *)).
  7. 추가를 선택합니다.

유지 관리 기간이 30분 지난 후에 DB 인스턴스를 자동으로 중지하는 또 다른 규칙을 생성하는 동일한 지침을 사용합니다. 이에 따라 자동화된 일정에 대한 규칙 이름과 cron 표현식을 변경합니다(예: cron(00 23 ? * SUN *)).