0
0

More than 3 years have passed since last update.

RDS Aurora Cluster 自動起動停止簡易版(Lambda不使用版)

Last updated at Posted at 2019-10-24

概要

  • AuroraClusterの停止機能がリリースされていた
  • 開発環境の費用節約のために夜間休日などAuroraを停止したい
  • Lambda+CloudWatchなどの組み合わせでもよい手間がかかる
  • AWS上でLambda実行環境を構築するのが面倒な場合おすすめ
  • シンプルにawscliとcronだけで動かす
  • 環境はCentsOS7系(AmazonLinux2)
  • AWS公式参考

事前準備

  • AWSCLIは最新である必要がある(この時点でaws-cli/1.16.264)
  • 少しでも古いとAuroraClusterに関する制御系が存在しない
  • Pythonは最新である必要がある(この時点でPython3.6系と3.7系)
  • Pyenvなどは最新にしておくこと

詳細

Pythonアップデート

  • 新しい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の起動停止ポリシーはここでは直接関係ないので無視してください

image.png

ユーザ

  • 処理を実行させる専用ユーザを作成する
  • この例の場合startstop_userを作成

image.png

アクセスキー

  • 処理を実行させるユーザのアクセスキーを発行する
  • この例の場合startstop_userのアクセスキーを発行

image.png

動作確認

  • まず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でも
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0