RDS †
メンテナンス時のOSの更新 †
- メール件名:Action required: Amazon RDS Maintenanceの場合
- apply-action: system upgrades
- apply-pending-maintenance-actionは不要だった
- AWS console上のRDSインスタンスのメンテナンスカラムには何も表示されない
- 指定されたメンテナンスウィンドウの時間帯にメンテナンスが実施され、1〜2分停止する。
- ログの例: failover started時にダウンタイムが発生する。0:00 UTC〜30分の間にメンテナンスウィンドウを設定した場合
09:02:14 AM UTC+9 db01 Multi-AZ instance failover completed
09:01:49 AM UTC+9 db01 DB instance restarted
09:01:39 AM UTC+9 db01 Multi-AZ instance failover started
RDSメンテナンスウィンドウの指定 †
- 曜日、開始時刻、期間指定が面倒なので、以下では、日時を指定すれば曜日等は自動
- バックアップウィンドウとメンテナンスウィンドウは重ねられず、エラーになる
- メンテナンスウィンドウの前にバックアップウィンドウを設定する場合
--preferred-backup-window $(LANG=C date -u -d "$MAINTENANCE_WINDOW 60 minutes ago" '+%H:%M')-$(LANG=C date -u -d "$MAINTENANCE_WINDOW 30 minutes ago" '+%H:%M') \
AWS_PROFILE=default
AWS_REGION=ap-northeast-1
MAINTENANCE_WINDOW="2017-12-18 05:00 UTC"
RDS_IDS="id1 id2"
for id in $RDS_IDS; do \
aws rds modify-db-instance \
--db-instance-identifier $id \
--preferred-maintenance-window $(LANG=C date -u -d "$MAINTENANCE_WINDOW" '+%a:%H:%M')-$(LANG=C date -u -d "$MAINTENANCE_WINDOW 30 minutes" '+%a:%H:%M') \
--profile $AWS_PROFILE \
--region $AWS_REGION > ./${id}.json; \
done
初期設定 †
- MySQL 5.6 設定:日本語(絵文字utf8mb4含む)ケースの例
AWS_PROFILE=default
AWS_REGION=ap-northeast-1
DB_PARAMETER_GROUP_NAME=test
DB_PARAMETER_GROUP_DESCRIPTION="For $DB_PARAMETER_GROUP_NAME"
aws --profile $AWS_PROFILE --region $AWS_REGION rds create-db-parameter-group \
--db-parameter-group-name $DB_PARAMETER_GROUP_NAME \
--db-parameter-group-family mysql5.6 \
--description "$DB_PARAMETER_GROUP_DESCRIPTION"
aws --profile $AWS_PROFILE --region $AWS_REGION rds modify-db-parameter-group \
--db-parameter-group-name $DB_PARAMETER_GROUP_NAME \
--parameters \
"ParameterName=max_connections,ParameterValue=1000,ApplyMethod=immediate" \
"ParameterName=max_connect_errors,ParameterValue=999999999,ApplyMethod=immediate" \
"ParameterName=character_set_client,ParameterValue=utf8mb4,ApplyMethod=immediate" \
"ParameterName=character_set_server,ParameterValue=utf8mb4,ApplyMethod=immediate" \
"ParameterName=collation_server,ParameterValue=utf8mb4_general_ci,ApplyMethod=immediate" \
"ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=long_query_time,ParameterValue=3,ApplyMethod=immediate" \
"ParameterName=max_heap_table_size,ParameterValue=$(expr 32 \* 1024 \* 1024),ApplyMethod=immediate" \
"ParameterName=tmp_table_size,ParameterValue=$(expr 32 \* 1024 \* 1024),ApplyMethod=immediate" \
"ParameterName=thread_cache_size,ParameterValue=32,ApplyMethod=immediate" \
"ParameterName=innodb_file_per_table,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=innodb_file_format,ParameterValue=Barracuda,ApplyMethod=immediate" \
"ParameterName=innodb_large_prefix,ParameterValue=1,ApplyMethod=immediate"
aws --profile $AWS_PROFILE --region $AWS_REGION rds reset-db-parameter-group \
--db-parameter-group-name $DB_PARAMETER_GROUP_NAME \
--no-reset-all-parameters \
--parameters "ParameterName=max_connections,ApplyMethod=immediate"
aws --profile default --region ap-northeast-1 rds describe-db-instances --query "DBInstances[].[DBInstanceIdentifier,EngineVersion,StorageType]" --output table
-----------------------------------------------------
| DescribeDBInstances |
+-----------------------------+----------+----------+
| example-db-01 | 5.5.40 | standard |
| example-db-02 | 5.6.13 | gp2 |
+-----------------------------+----------+----------+
- RDSのMaintenance windowを、リージョン毎に一括設定する。時間はUTC。火曜日の午前6:00-6:30に設定する場合
AWS_PROFILE=default
AWS_REGION=ap-northeast-1
AWS_MAINTENANCE_WINDOW=Mon:21:00-Mon:21:30
for id in $(aws --profile $AWS_PROFILE --region $AWS_REGION rds describe-db-instances --query "DBInstances[].[DBInstanceIdentifier]" --output text); do \
aws --profile $AWS_PROFILE --region $AWS_REGION rds modify-db-instance --preferred-maintenance-window $AWS_MAINTENANCE_WINDOW --db-instance-identifier $id; \
done
aws --region ap-northeast-1 rds describe-db-snapshots --snapshot-type manual
RDSイベントログの取得 †
管理コンソールからは過去2日分しか見えないが、awscliならそれ以上に取得できる。
aws --profile default rds describe-events --source-identifier <rds id> --source-type db-instance --start-time 2016-11-22T00:00:00
# 日付とイベントだけ抽出する場合、以下を追加
--query 'Events[].[Date,Message]'
DBParameterGroupNameの取得 †
- 全リージョンのDBParameterGroupNameを取得(mysqlを指定)
AWS_PROFILE=default
for region in $(aws --profile $AWS_PROFILE ec2 describe-regions --query "Regions[].[RegionName]" --output text); do \
for i in $(aws --profile $AWS_PROFILE --region $region rds describe-db-parameter-groups --query 'DBParameterGroups[?contains(DBParameterGroupFamily, `mysql`)].[DBParameterGroupName]' --output text); do \
echo "$region, $i"; \
done \
done