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

5분 분량
0

AWS Lambda를 사용하여 7일 이상 Amazon Relational Database Service(RDS)를 중지하려고 합니다.

간략한 설명

기본적으로 한 번에 최대 7일 동안 Amazon RDS 데이터베이스 인스턴스를 중지할 수 있습니다. 7일이 지나면 유지 관리 업데이트를 놓치지 않도록 인스턴스가 다시 시작됩니다.

7일 이상 인스턴스를 중지하려면 Step Functions를 사용하여 유지 관리 기간을 놓치지 않고 워크플로를 자동화할 수 있습니다.

**참고:**다른 해결 방법은 Step Functions를 사용하여 7일 이상 Amazon RDS 인스턴스를 중지하려면 어떻게 해야 합니까?를 참조하세요

해결 방법

IAM 권한 구성

Lambda가 인스턴스를 시작 및 중지하고 인스턴스에 대한 정보를 검색할 수 있도록 AWS ID 및 액세스 관리(IAM) 정책을 생성합니다.

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 정책을 선택합니다.

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

4.    JSON 탭을 선택합니다.

5.    필요한 IAM 권한을 부여하려면 JSON 탭 아래에 다음의 정책을 입력합니다.

{
    "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.    태그 탭에서 추가를 선택합니다. 태그 키에 대해 autostart를 입력합니다. 에 대해 yes를 입력합니다. 추가를 선택하여 변경 사항을 저장합니다.

6.    추가를 다시 선택합니다. 태그 키에 대해 autostop을 입력합니다. 에 대해 yes를 입력합니다. 추가를 선택하여 변경 사항을 저장합니다.

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

Lambda 함수를 생성하여 태그된 DB 인스턴스를 시작합니다

1.    Lambda 콘솔을 엽니다.

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

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

4.    처음 작성자를 선택합니다.

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

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

7.    아키텍처의 경우 기본 선택인 x86_64를 유지합니다.

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

9.    실행 역할에서 기존 역할 사용을 선택합니다.

10.    기존 역할에서 생성한 IAM 역할을 선택합니다.

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

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

13.    코드 소스 편집기에서 샘플 코드를 삭제하고 다음의 코드를 입력합니다.

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'):
            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']))
            except Exception as e:
                print ("Cannot start instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)


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

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

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

16.    제한 시간에서 다음의 필드를 작성합니다.
에서 0을 선택합니다.
에서 10을 선택합니다.

17.    저장을 선택합니다.

Lambda 함수를 생성하여 태그된 DB 인스턴스를 중지합니다

태그된 DB 인스턴스를 중지하는 Lambda 함수를 생성하려면 이전 섹션 태그된 DB 인스턴스를 시작하는 Lambda 함수 생성을 참조하세요. 동일한 단계를 따르되 12단계에서는 다른 코드를 사용합니다.

코드 소스 편집기에서 샘플 코드를 삭제하고 다음의 코드를 입력합니다.

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'):
            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']))
            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 이벤트)**를 선택한 다음 새 규칙 생성을 선택합니다.

5.    규칙 이름에 만들려는 규칙의 이름을 입력합니다.

6.    스케줄 표현식의 경우 자동화된 스케줄에 대한 크론 표현식을 추가합니다(예: cron(30 21 ? * SUN *)).

7.    추가를 선택합니다.

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

관련 정보

Amazon RDS에서 DB 인스턴스 중지 및 시작 구현

Amazon RDS에서 자동으로 시작된 데이터베이스 인스턴스 중지

Amazon Aurora 클러스터를 7일 이상 중지하려면 어떻게 해야 합니까?

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠