RDS Aurora Cluster 自動起動停止簡易版(Lambda不使用版)
概要
- 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の起動停止ポリシーはここでは直接関係ないので無視してください
- 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の起動停止ポリシーはここでは直接関係ないので無視してください
$ python --version
$ pyenv install --list
$ pyenv install 3.6.4
$ pyenv global 3.6.4
$ python --version
Python 3.6.4
$ 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
$ 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
{
"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": [
"*"
]
}
]
}
ユーザ
- 処理を実行させる専用ユーザを作成する
- この例の場合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でも
Author And Source
この問題について(RDS Aurora Cluster 自動起動停止簡易版(Lambda不使用版)), 我々は、より多くの情報をここで見つけました https://qiita.com/ezaqiita/items/97398494cba914b35675著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .