Memo/AmazonWebServices/awscli/RDS

https://dexlab.net:443/pukiwiki/index.php?Memo/AmazonWebServices/awscli/RDS
 


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') \
  • 複数のRDSにメンテナンスウィンドウを設定
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"
  • DBパラメータグループの初期化
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"
  • RDSのバージョンを取得
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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:37 (3d)