[aws-cli]json形式設定ファイルを元にスナップショットからRDSを復元する。

# [aws-cli]json形式設定ファイルを元にスナップショットからRDSを復元する。
RDSをスナップショットから復元するコマンドはrestore-db-instance-from-db-snapshot
[restore-db-instance-from-db-snapshot — AWS CLI 1.10.39 Command Reference](http://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)

スナップショット取得元の設定内容は下記記事を参照
[[aws-cli]RDSをjson形式設定ファイルから起動する。](http://qiita.com/qr_taka/items/f64d82e6b1c4b414a314)

## デフォルトの設定ファイルを出力
<pre>
$ aws rds  restore-db-instance-from-db-snapshot --generate-cli-skeleton > default.json
$ cat default.json
{
    "DBInstanceIdentifier": "",
    "DBSnapshotIdentifier": "",
    "DBInstanceClass": "",
    "Port": 0,
    "AvailabilityZone": "",
    "DBSubnetGroupName": "",
    "MultiAZ": true,
    "PubliclyAccessible": true,
    "AutoMinorVersionUpgrade": true,
    "LicenseModel": "",
    "DBName": "",
    "Engine": "",
    "Iops": 0,
    "OptionGroupName": "",
    "Tags": [
        {
            "Key": "",
            "Value": "" 
        }
    ],
    "StorageType": "",
    "TdeCredentialArn": "",
    "TdeCredentialPassword": "",
    "CopyTagsToSnapshot": true
}
</pre>

## 各項目について確認
DBInstanceIdentifier: DBインスタンス名 アカウント内で一意
DBSnapshotIdentifier: 起動の元となるDBスナップショット名
DBInstanceClass: インスタンスタイプ
Port: ポート 未定義であればデフォルト
AvailabilityZone: アベイラビリティゾーン
DBSubnetGroupName: DBサブネットグループ名
MultiAZ: マルチAZ構成にするか否か
PubliclyAccessible: 外部アクセス可否
AutoMinorVersionUpgrade: マイナーバージョンアップを適用するか否か
LicenseModel: ライセンシングモデル license-included | bring-your-own-license | general-public-license
DBName: database名
Engine: DBエンジン
Iops: ストレージへの秒間IO上限
OptionGroupName: オプショングループ名
Tags: タグの配列
StorageType: ストレージタイプ standard | gp2 | io1
TdeCredentialArn: HAパーティショングループのリソース番号
TdeCredentialPassword: HAパーティショングループの初期化時に使用したパーティションパスワード
CopyTagsToSnapshot: スナップショットにタグをコピーするか否か

## 書き換え
<pre>
$ cat modify.json
{
    "DBInstanceIdentifier": "test2",
    "DBSnapshotIdentifier": "snapshotName",
    "DBInstanceClass": "db.t2.micro",
    "AvailabilityZone": "ap-northeast-1a",
    "DBSubnetGroupName": "subnet-xxxxxxxx",
    "MultiAZ": false,
    "PubliclyAccessible": false,
    "AutoMinorVersionUpgrade": true,
    "LicenseModel": "general-public-license",
    "Engine": "MySQL",
    "Iops": 0,
    "OptionGroupName": "",
    "Tags": [
        {
            "Key": "test",
            "Value": "test" 
        }
    ],
    "StorageType": "standard",
    "CopyTagsToSnapshot": true
}
</pre>

## 作成
<pre>
$ aws --region ap-northeast-1 rds  restore-db-instance-from-db-snapshot --cli-input-json file:///tmp/modify.json
{
    "DBInstance": {
        "PubliclyAccessible": false,
        "MasterUsername": "root",
        "LicenseModel": "general-public-license",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-xxxxxxxx" 
            }
        ],
        "CopyTagsToSnapshot": true,
        "OptionGroupMemberships": [
            {
                "Status": "pending-apply",
                "OptionGroupName": "default:mysql-5-6" 
            }
        ],
        "PendingModifiedValues": {},
        "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": "subnet-xxxxxxxx",
            "VpcId": "vpc-xxxxxxxx",
            "DBSubnetGroupDescription": "for db subnet",
            "SubnetGroupStatus": "Complete" 
        },
        "ReadReplicaDBInstanceIdentifiers": [],
        "AllocatedStorage": 5,
        "BackupRetentionPeriod": 3,
        "DBName": "test",
        "PreferredMaintenanceWindow": "sat:18:00-sat:18:30",
        "DBInstanceStatus": "creating",
        "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": "test2" 
    }
}
</pre>
## エラー
<dl>
<dt>A client error (InvalidParameterValue) occurred when calling the RestoreDBInstanceFromDBSnapshot operation: DBName must be null when Restoring for this Engine.</dt>
<dd>
MySQLをリストアする場合にはDBNameを設定できないよう。<br>
DBNameを削除して解消。<br>
</dd>
</dl>