[aws-cli]RDSをjson形式設定ファイルから設定変更する。

# [aws-cli]RDSをjson形式設定ファイルから設定変更する。

RDSの設定変更コマンドはmodify-db-instance
[modify-db-instance — AWS CLI 1.10.38 Command Reference](http://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)
同じ設定内容で何度コマンドを実行しても変更は走らないので、ビルド実行時等に自動実行することも可能。

## デフォルトの設定ファイルを出力
<pre>
$ aws rds modify-db-instance --generate-cli-skeleton > default.json
$ cat default.json
{
    "DBInstanceIdentifier": "",
    "AllocatedStorage": 0,
    "DBInstanceClass": "",
    "DBSecurityGroups": [
        "" 
    ],
    "VpcSecurityGroupIds": [
        "" 
    ],
    "ApplyImmediately": true,
    "MasterUserPassword": "",
    "DBParameterGroupName": "",
    "BackupRetentionPeriod": 0,
    "PreferredBackupWindow": "",
    "PreferredMaintenanceWindow": "",
    "MultiAZ": true,
    "EngineVersion": "",
    "AllowMajorVersionUpgrade": true,
    "AutoMinorVersionUpgrade": true,
    "Iops": 0,
    "OptionGroupName": "",
    "NewDBInstanceIdentifier": "",
    "StorageType": "",
    "TdeCredentialArn": "",
    "TdeCredentialPassword": "",
    "CACertificateIdentifier": "",
    "CopyTagsToSnapshot": true,
    "DBPortNumber": 0,
    "PubliclyAccessible": true
}
</pre>
## 各項目について確認

DBInstanceIdentifier: DBインスタンス名 アカウント内で一意
AllocatedStorage: ストレージのサイズ
DBInstanceClass: インスタンスタイプ
MasterUserPassword: DB管理ユーザパスワード
DBSecurityGroups: DBセキュリティグループの配列
VpcSecurityGroupIds: VPCセキュリティグループの配列
PreferredMaintenanceWindow: メンテナンスウィンドウ ddd:hh24:mi-ddd:hh24:mi
DBParameterGroupName: DBパラメータグループ名
BackupRetentionPeriod: バックアップ保持期間 0だとバックアップを行わない
PreferredBackupWindow: バックアップウィンドウ hh24:mi-hh24:mi
Port: ポート 未定義であればデフォルト
MultiAZ: マルチAZ構成にするか否か
EngineVersion: DBエンジンのバージョン
AllowMajorVersionUpgrade: メジャーバージョンアップを適用するか否か
AutoMinorVersionUpgrade: 自動マイナーバージョンアップを許可するか否か
Iops: ストレージへの秒間IO上限
OptionGroupName: オプショングループ名
NewDBInstanceIdentifier: 新しいDBインスタンス名 変更の際に定義
PubliclyAccessible: 外部アクセス可否
StorageType: ストレージタイプ standard | gp2 | io1
TdeCredentialArn: HAパーティショングループのリソース番号
TdeCredentialPassword: HAパーティショングループの初期化時に使用したパーティションパスワード
CACertificateIdentifier: 認証局
CopyTagsToSnapshot: スナップショットにタグをコピーするか否か
DBPortNumber: DBのポート番号
## 設定ファイル書き換え
<pre>
$ cat modify.json
{
    "DBInstanceIdentifier": "test",
    "AllocatedStorage": 5,
    "DBInstanceClass": "db.t2.micro",
    "VpcSecurityGroupIds": [
        "sg-xxxxxxxx"
    ],
    "ApplyImmediately": true,
    "DBParameterGroupName": "default.mysql5.6",
    "BackupRetentionPeriod": 3,
    "PreferredBackupWindow": "19:00-19:30",
    "PreferredMaintenanceWindow": "sat:18:00-sat:18:30",
    "MultiAZ": false,
    "EngineVersion": "5.6.27",
    "AllowMajorVersionUpgrade": true,
    "AutoMinorVersionUpgrade": true,
    "Iops": 0,
    "OptionGroupName": "default:mysql-5-6",
    "StorageType": "standard",
    "CopyTagsToSnapshot": true,
    "PubliclyAccessible": false
}
</pre>
## 設定変更コマンド実行
<pre>
$ aws --region ap-northeast-1 rds modify-db-instance --cli-input-json file:///tmp/modify.json
{
    "DBInstance": {
        "PubliclyAccessible": false,
        "MasterUsername": "root",
        "LicenseModel": "general-public-license",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-xxxxxxxx" 
            }
        ],
        "InstanceCreateTime": "2016-06-16T08:48:46.145Z",
        "CopyTagsToSnapshot": true,
        "OptionGroupMemberships": [
            {
                "Status": "in-sync",
                "OptionGroupName": "default:mysql-5-6" 
            }
        ],
        "PendingModifiedValues": {
            "BackupRetentionPeriod": 3
        },
        "Engine": "mysql",
        "MultiAZ": false,
        "DBSecurityGroups": [],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.mysql5.6",
                "ParameterApplyStatus": "in-sync" 
            }
        ],
        "AutoMinorVersionUpgrade": true,
        "PreferredBackupWindow": "19:00-19:30",
        "DBSubnetGroup": {
            "Subnets": [
                {
                    "SubnetStatus": "Active",
                    "SubnetIdentifier": "subnet-xxxxxxxx",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1c" 
                    }
                },
                {
                    "SubnetStatus": "Active",
                    "SubnetIdentifier": "subnet-xxxxxxxx",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1a" 
                    }
                }
            ],
            "DBSubnetGroupName": "default-vpc-xxxxxxxx",
            "VpcId": "vpc-xxxxxxxx",
            "DBSubnetGroupDescription": "Created from the RDS Management Console",
            "SubnetGroupStatus": "Complete" 
        },
        "ReadReplicaDBInstanceIdentifiers": [],
        "AllocatedStorage": 5,
        "BackupRetentionPeriod": 0,
        "DBName": "test",
        "PreferredMaintenanceWindow": "sat:18:00-sat:18:30",
        "Endpoint": {
            "Port": 3306,
            "Address": "test.xxxxxxxx.ap-northeast-1.rds.amazonaws.com" 
        },
        "DBInstanceStatus": "available",
        "EngineVersion": "5.6.27",
        "AvailabilityZone": "ap-northeast-1a",
        "StorageType": "standard",
        "DbiResourceId": "db-xxxxxxxxxxxxxxxxxxxxxxxx",
        "CACertificateIdentifier": "rds-ca-2015",
        "StorageEncrypted": false,
        "DBInstanceClass": "db.t2.micro",
        "DbInstancePort": 0,
        "DBInstanceIdentifier": "test" 
    }
}
$
</pre>
## エラー集
<dl>
<dt>
A client error (InvalidParameterValue) occurred when calling the ModifyDBInstance operation: Invalid endpoint port 0. Valid range is: 1150-65535
</dt>
<dd>
Portに0が設定されているのが原因。<br>
Portを削除して解消。<br>
各DBのデフォルトポートが使用される。<br>　
</dd>
<dt>
A client error (InvalidParameterValue) occurred when calling the ModifyDBInstance operation: The parameter NewDBInstanceIdentifier must be provided and must not be blank.
</dt>
<dd>
NewDBInstanceIdentifierに空が設定されていたのが原因。<br>
NewDBInstanceIdentifierを削除して解消。<br>　
</dd>
</dl>