RDS Aurora Cluster 자동 기동 정지 간이판(Lambda 미사용판)

개요


  • AuroraCluster 정지 기능이 출시되었습니다
  • 개발 환경의 비용 절감을 위해 야간 휴일 등 Aurora를 중지하고 싶다
  • Lambda + CloudWatch와 같은 조합이 될 수있는 번거 로움이 있습니다
  • AWS에서 Lambda 실행 환경을 구축하는 것이 귀찮은 경우 권장
  • 간단하게 awscli와 cron만으로 움직인다
  • 환경은 CentsOS7계(AmazonLinux2)
  • AWS 공식 참고

  • 사전 준비


  • AWSCLI는 최신이어야합니다 (이 시점에서 aws-cli/1.16.264)
  • 조금이라도 오래되었고 AuroraCluster에 대한 제어 시스템이 없습니다
  • 파이썬은 최신이어야합니다 (이 시점에서 파이썬 3.6 및 3.7 시스템).
  • Pyenv 등은 최신으로 유지하는 것

  • 상세



    파이썬 업데이트


  • 새로운 Python을 넣어 세트 해 둔다
  • $ python --version
    $ pyenv install --list
    $ pyenv install 3.6.4
    $ pyenv global 3.6.4
    $ python --version
    Python 3.6.4
    

    오래된 Cli가 있으면 삭제


  • 오래된 awscli 제거
  • 반드시 필요하지 않을지도
  • 제 경우에는 복수 (1.14와 1.16)의 awscli가 들어있는 상태였기 때문에 (왜인지는 불명) 일단 완전 삭제
  • $ sudo yum list installed | grep awscli
    $ pip3 list
    Package         Version
    --------------- --------
    awscli          1.16.264
    boto3           1.10.0
    botocore        1.13.0
    colorama        0.4.1
    docutils        0.15.2
    jmespath        0.9.4
    pip             9.0.1
    pyasn1          0.4.7
    python-dateutil 2.8.0
    PyYAML          5.1.2
    rsa             3.4.2
    s3transfer      0.2.1
    setuptools      28.8.0
    six             1.12.0
    urllib3         1.25.6
    $ pip uninstall awscli ※必要に応じて
    $ pip3 uninstall awscli
    :
    Successfully uninstalled awscli-1.16.264
    

    awscli 설치


  • 새로운 awscli 넣기
  • aws 명령의 경로가 통과하지 못할 수 있습니다. 이 경우 전체 경로로 실행됩니다
  • $ sudo pip3 install awscli --upgrade
    :
    Successfully installed awscli-1.16.266 botocore-1.13.2
    $ aws --version
    aws-cli/1.16.264 Python/3.7.4 Linux/4.9.85-47.59.amzn2.x86_64 botocore/1.13.0
    $ pip3 list
    Package         Version
    --------------- --------
    awscli          1.16.266
    boto3           1.10.0
    botocore        1.13.2
    colorama        0.4.1
    docutils        0.15.2
    jmespath        0.9.4
    pip             9.0.1
    pyasn1          0.4.7
    python-dateutil 2.8.0
    PyYAML          5.1.2
    rsa             3.4.2
    s3transfer      0.2.1
    setuptools      28.8.0
    six             1.12.0
    urllib3         1.25.6
    

    권한 설정


  • 실행할 권한을 설정해야합니다

  • 정책 설정


  • 실행 사용자가 시작 중지 만 실행하도록 허용합니다
  • 이 경우 기존 정책이 아닌 요구 사항과 일치하는 정책을 만듭니다.
  • IAM에서 다음 정책을 만들고 임의의 이름으로 저장
  • {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents",
                    "logs:GetLogEvents"
                ],
                "Resource": [
                    "*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "rds:DescribeDBClusters",
                    "rds:ListTagsForResource",
                    "rds:StartDBCluster",
                    "rds:StopDBCluster"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }
    

    그룹


  • 만든 정책을 모든 그룹과 연결
  • 화면 예에서 볼 수있는 EC2의 시작 중지 정책은 여기에서 직접 관련이 없으므로 무시하십시오.



    사용자


  • 처리를 수행 할 전용 사용자 만들기
  • 이 예제의 경우 startstop_user를 만듭니다.



    액세스 키


  • 처리를 수행 할 사용자의 액세스 키를 발행합니다
  • 이 예에서는 startstop_user 액세스 키를 발행합니다.



    동작 확인


  • 우선 help가 움직이는지 확인
  • DB 정지를 알고 정지 명령을 실행해보십시오.
    $ aws rds stop-db-cluster help
    $ aws rds stop-db-cluster --db-cluster-identifier <cluster_name>
    $ aws rds start-db-cluster --db-cluster-identifier <cluster_name>
    

    cron 설정


  • 환경에서 적절한 호스트의 CRON 내에서 다음 처리를 설명합니다
  • $ sudo vi /etc/cron.d/startRdsAuroraCluster
    30 9 * * 1-5 appuser /usr/local/bin/aws rds start-db-cluster --db-cluster-identifier <cluster_name>
    $ sudo vi /etc/cron.d/stopRdsAuroraCluster
    0 23 * * 1-5 appuser /usr/local/bin/aws rds stop-db-cluster --db-cluster-identifier <cluster_name>
    

    발생한 오류 1


  • 적절한 정책을 설정할 수 없으면 다음 오류가 발생합니다.
  • RDS 인스턴스가 아닌 클러스터에 대한 권한이 필요합니다
  • $ aws rds start-db-cluster --db-cluster-identifier <cluster_name>
    
    An error occurred (AccessDenied) when calling the StartDBCluster operation: User: arn:aws:iam::**********:user/stopstart_user is not authorized to perform: rds:StartDBCluster on resource: arn:aws:rds:ap-northeast-1:**********:cluster:<cluster_name>
    

    발생한 오류 2


    $ aws rds start-db-cluster --db-cluster-identifier <cluster_name>
    You must specify a region. You can also configure your region by running "aws configure".
    
    $ aws configure
    AWS Access Key ID [None]: *******************
    AWS Secret Access Key [None]:*******************
    Default region name [None]: ap-northeast-1
    Default output format [None]: json
    
    $ aws configure list
          Name                    Value             Type    Location
          ----                    -----             ----    --------
       profile                <not set>             None    None
    access_key     ****************YUOM shared-credentials-file
    secret_key     ****************zrkd shared-credentials-file
        region           ap-northeast-1      config-file    ~/.aws/config
    
  • 필요하면 aws configure를 해 둔다
  • 제 경우에는 기본 영역을 설정하지 않았기 때문에 aws 명령 런타임 오류로 경고했습니다.
  • 이 사용자는 RDS 시작 중지 정책 만 생성하고 설정 한 사용자의 액세스 키를 사용하는 것이 바람직합니다.
  • 귀찮다면 RDSFullAccess에서도
  • 좋은 웹페이지 즐겨찾기