AWS CLIでRDSメンテナンス実施


# 公式ドキュメント

http://docs.aws.amazon.com/cli/latest/reference/rds/index.html

# 前提条件

## AWS CLIバージョン

以下のバージョンで動作確認済
* AWS CLI 1.7.29

```ruby:コマンド
aws --version
```
```ruby:結果
aws-cli/1.7.29
```


## マネジメントコンソール(日本語)

対象RDSインスタンスの「メンテナンスの詳細」に通知がある事 

![RDSメンテナンスの詳細.png](https://qiita-image-store.s3.amazonaws.com/0/74171/d74b65d3-c553-7d36-f041-6866d68a020a.png)

# aws rdsコマンドによるメンテナンス実行

## エンドポイントの設定

```ruby:コマンド
RDS_ENDPOINT='dbinstance.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com' && echo ${RDS_ENDPOINT_TARGET}
```
```ruby:結果
dbinstance.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
```

## DBインスタンスの設定

```ruby:コマンド
RDS_DBINSTANCE='dbinstance' && echo ${RDS_DBINSTANCE}
```
```ruby:結果
dbinstance
```

## DBインスタンス確認

```ruby:コマンド
aws rds describe-pending-maintenance-actions --filter Name=db-instance-id,Values=${RDS_DBINSTANCE}
```
```ruby:結果
{
    "PendingMaintenanceActions": [
        {
            "PendingMaintenanceActionDetails": [
                {
                    "Action": "os-upgrade",
                    "Description": "Security and stability updates"
                }
            ],
            "ResourceIdentifier": "arn:aws:rds:ap-northeast-1:012345678910:db:dbinstance"
        }
    ]
}
```


## Actionの設定

aws rds describe-pending-maintenance-actionsにて確認済みのActionを設定

```ruby:コマンド
RDS_ACTION=`aws rds  describe-pending-maintenance-actions \ 
--filter Name=db-instance-id,Values=${RDS_INSTANCEID_TARGET} \ 
| jq -r '.PendingMaintenanceActions[].PendingMaintenanceActionDetails[].Action '` \ 
&& echo ${RDS_ACTION}
```
```ruby:結果
os-upgrade
```

## ResourceIdentifierの設定

aws rds describe-pending-maintenance-actionsにて確認済みのResourceIdentifierを設定

```ruby:コマンド
RDS_RESOURCEIDENTIFIER=`aws rds  describe-pending-maintenance-actions \
 --filter Name=db-instance-id,Values=${RDS_DBINSTANCE} \
| jq -r '.PendingMaintenanceActions[].ResourceIdentifier'` \
&& echo ${RDS_RESOURCEIDENTIFIER}
```
```ruby:結果
arn:aws:rds:ap-northeast-1:012345678910:db:dbinstance
```

## opt-in-type の設定

即時にメンテナンスを実行する為、immediate を設定

```ruby:コマンド
RDS_OPTINTYPE='immediate' && echo ${RDS_OPTINTYPE}
```
```ruby:結果
immediate
```

## aws rds apply-pending-maintenance-actionの実行

メンテナンス対象のDBインスタンスへメンテナンスアクションを実施

```ruby:コマンド
aws rds apply-pending-maintenance-action --apply-action ${RDS_ACTION} \
--opt-in-type ${RDS_OPTINTYPE}  \
--resource-identifier ${RDS_RESOURCEIDENTIFIER}
```
```ruby:結果
{
    "ResourcePendingMaintenanceActions": {
        "PendingMaintenanceActionDetails": [
            {
                "Action": "os-upgrade",
                "Description": "Security and stability updates",
                "OptInStatus": "immediate"
            }
        ],
        "ResourceIdentifier": "arn:aws:rds:ap-northeast-1:012345678910:db:dbinstance"
    }
}
```
*※アップデート中はDBインスタンスがオフラインとなるので注意*


## aws rds describe-pending-maintenance-actionsの確認

```ruby:コマンド
aws rds describe-pending-maintenance-actions --filter Name=db-instance-id,Values=${RDS_DBINSTANCE}
```
```ruby:結果
{
    "PendingMaintenanceActions": []
}
```

## aws describe-eventsの確認

aws describe-eventsコマンドにてイベント確認

```ruby:コマンド
aws --output text rds describe-events
```
```ruby:結果
EVENTS  YYYY-MM-DDThh:mm:ss.635Z        Applying off-line patches to DB instance        dbinstance    db-instance
EVENTCATEGORIES maintenance
EVENTS  YYYY-MM-DDThh:mm:ss.258Z        DB instance shutdown    dbinstance    db-instance
EVENTCATEGORIES availability
EVENTS  YYYY-MM-DDThh:mm:ss.845Z        DB instance restarted   dbinstance    db-instance
EVENTCATEGORIES availability
EVENTS  YYYY-MM-DDThh:mm:ss.148Z        DB instance shutdown    dbinstance    db-instance
EVENTCATEGORIES availability
EVENTS  YYYY-MM-DDThh:mm:ss.835Z        DB instance restarted   dbinstance    db-instance
EVENTCATEGORIES availability
EVENTS  YYYY-MM-DDThh:mm:ss.322Z        Finished applying off-line patches to DB instance       dbinstance    db-instance
EVENTCATEGORIES maintenance
```