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

# [aws-cli]RDSをjson形式設定ファイルから起動する。
RDSの起動コマンドはcreate-db-inscance
[create-db-instance — AWS CLI 1.10.38 Command Reference](http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
## デフォルトの設定ファイルを出力
<pre>
$ aws rds create-db-instance --generate-cli-skeleton > defaultRDS.json
$ cat defaultRDS.json
{
    "DBName": "",
    "DBInstanceIdentifier": "",
    "AllocatedStorage": 0,
    "DBInstanceClass": "",
    "Engine": "",
    "MasterUsername": "",
    "MasterUserPassword": "",
    "DBSecurityGroups": [
        "" 
    ],
    "VpcSecurityGroupIds": [
        "" 
    ],
    "AvailabilityZone": "",
    "DBSubnetGroupName": "",
    "PreferredMaintenanceWindow": "",
    "DBParameterGroupName": "",
    "BackupRetentionPeriod": 0,
    "PreferredBackupWindow": "",
    "Port": 0,
    "MultiAZ": true,
    "EngineVersion": "",
    "AutoMinorVersionUpgrade": true,
    "LicenseModel": "",
    "Iops": 0,
    "OptionGroupName": "",
    "CharacterSetName": "",
    "PubliclyAccessible": true,
    "Tags": [
        {
            "Key": "",
            "Value": "" 
        }
    ],
    "DBClusterIdentifier": "",
    "StorageType": "",
    "TdeCredentialArn": "",
    "TdeCredentialPassword": "",
    "StorageEncrypted": true,
    "KmsKeyId": "",
    "CopyTagsToSnapshot": true
} 
</pre>
## 各項目について確認
DBName: database名
DBInstanceIdentifier: DBインスタンス名 アカウント内で一意
AllocatedStorage: ストレージのサイズ
DBInstanceClass: インスタンスタイプ
Engine: DBエンジン
MasterUserName: DB管理ユーザ名
MasterUserPassword: DB管理ユーザパスワード
DBSecurityGroups: DBセキュリティグループの配列
VpcSecurityGroupIds: VPCセキュリティグループの配列
AvailabilityZone: アベイラビリティゾーン
DBSubnetGroupName: DBサブネットグループ名
PreferredMaintenanceWindow: メンテナンスウィンドウ ddd:hh24:mi-ddd:hh24:mi
DBParameterGroupName: DBパラメータグループ名
BackupRetentionPeriod: バックアップ保持期間 0だとバックアップを行わない
PreferredBackupWindow: バックアップウィンドウ hh24:mi-hh24:mi
Port: ポート 未定義であればデフォルト
MultiAZ: マルチAZ構成にするか否か
EngineVersion: DBエンジンのバージョン
AutoMinorVersionUpgrade: マイナーバージョンアップを適用するか否か
LicenseModel: ライセンシングモデル license-included | bring-your-own-license | general-public-license
Iops: ストレージへの秒間IO上限
OptionGroupName: オプショングループ名
CharacterSetName: 文字コード
PubliclyAccessible: 外部アクセス可否
Tags: タグの配列
DBClusterIdentifier: DBクラスタ名
StorageType: ストレージタイプ standard | gp2 | io1
TdeCredentialArn: HAパーティショングループのリソース番号
TdeCredentialPassword: HAパーティショングループの初期化時に使用したパーティションパスワード
StorageEncrypted: ストレージの暗号化有無
KmsKeyId: KMSで設定されたID
CopyTagsToSnapshot: スナップショットにタグをコピーするか否か
## 書き換え
<pre>
$ cat createRDS.json
{
    "DBName": "test",
    "DBInstanceIdentifier": "test",
    "AllocatedStorage": 5,
    "DBInstanceClass": "db.t2.micro",
    "Engine": "MySQL",
    "MasterUsername": "root",
    "MasterUserPassword": "password",
    "VpcSecurityGroupIds": [
        "sg-xxxxxx" 
    ],
    "AvailabilityZone": "ap-northeast-1a",
    "DBSubnetGroupName": "default-vpc-xxxxxxx",
    "PreferredMaintenanceWindow": "Sat:18:00-Sat:18:30",
    "BackupRetentionPeriod": 3, 
    "PreferredBackupWindow": "19:00-19:30",
    "MultiAZ": false,
    "EngineVersion": "5.6.27",
    "AutoMinorVersionUpgrade": true,
    "LicenseModel": "general-public-license",
    "Iops": 0,
    "OptionGroupName": "",
    "PubliclyAccessible": false,
    "Tags": [
        {
            "Key": "test",
            "Value": "test" 
        }
    ],
    "DBClusterIdentifier": "",
    "StorageType": "standard",
    "StorageEncrypted": false,
    "CopyTagsToSnapshot": true
}
</pre>
## 作成
<pre>
$ aws --region ap-northeast-1 rds create-db-instance --cli-input-json file:///tmp/createRDS.json
{
    "DBInstance": {
        "PubliclyAccessible": false,
        "MasterUsername": "root",
        "LicenseModel": "general-public-license",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-xxxxxxxx" 
            }
        ],
        "CopyTagsToSnapshot": true,
        "OptionGroupMemberships": [
            {
                "Status": "in-sync",
                "OptionGroupName": "default:mysql-5-6" 
            }
        ],
        "PendingModifiedValues": {
            "MasterUserPassword": "****" 
        },
        "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": 3,
        "DBName": "test",
        "PreferredMaintenanceWindow": "sat:18:00-sat:18:30",
        "DBInstanceStatus": "creating",
        "EngineVersion": "5.6.27",
        "AvailabilityZone": "ap-northeast-1a",
        "StorageType": "standard",
        "DbiResourceId": "db-XXXXXXXXXXXXXXXXXXX",
        "CACertificateIdentifier": "rds-ca-2015",
        "StorageEncrypted": false,
        "DBInstanceClass": "db.t2.micro",
        "DbInstancePort": 0,
        "DBInstanceIdentifier": "account-dev" 
    }
}
</pre>

## エラー集

<dl>
<dt> A client error (InvalidParameterCombination) occurred when calling the CreateDBInstance operation: Invalid license model '' for engine 'mysql'. Valid license models are: general-public-license</dt>
<dd>
LicenseModelを設定していなかったのが原因。<br>
general-public-licenseをセットして解消。<br>　
</dd>
<dt> A client error (InvalidParameterCombination) occurred when calling the CreateDBInstance operation: DB Instance class db.t2.micro does not support encryption at rest</dt>
<dd>
StorageEncryptedがtrueになっていたのが原因。<br>
falseをセットして解消。<br>　
</dd>
<dt> A client error (InvalidParameterCombination) occurred when calling the CreateDBInstance operation: To enable encryption at rest StorageEncrypted must be set to 'true'</dt>
<dd>
StorageEncryptedがfalseなのにKmsKeyIdが設定されているのが原因。<br>
KmsKeyIdを削除して解消。<br>　
</dd>
<dt> A client error (InvalidParameterValue) occurred when calling the CreateDBInstance 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 CreateDBInstance operation: The parameter MasterUserPassword is not a valid password because it is shorter than 8 characters.</dt>
<dd>
MasterUserPasswordが8文字以下なのが原因。<br>
8文字以上を設定して解消。<br>　
</dd>
<dt> A client error (InvalidParameterCombination) occurred when calling the CreateDBInstance operation: DB Security Groups and Vpc Security Groups cannot both be provided.</dt>
<dd>
DBSecurityGroupsとVpcSecurityGroupIdsが両方設定されているのが原因。<br>
DBSecurityGroupsを削除して解消。<br>　
</dd>
<dt> A client error (StorageTypeNotSupported) occurred when calling the CreateDBInstance operation: Invalid storage type:</dt>
<dd>
StorageTypeが空になっているのが原因。<br>
standardを設定して解消。<br>　
</dd>
<dt> A client error (InvalidParameterValue) occurred when calling the CreateDBInstance operation: Character sets not supported on create for engine: mysql and version5.6.27</dt>
<dd>
CharacterSetNameが空になっているのが原因。<br>
CharacterSetNameを削除して解消。<br>　
</dd>
<dt> A client error (DBParameterGroupNotFound) occurred when calling the CreateDBInstance operation: DBParameterGroup not found:</dt>
<dd>
DBParameterGroupNameが空になっているのが原因。<br>
DBParameterGroupNameを削除して解消。<br>　
</dd>
<dt> A client error (InvalidParameterCombination) occurred when calling the CreateDBInstance operation: Could not create the client with the key store.</dt>
<dd>
TdeCredentialArnとTdeCredentialPasswordが設定されているのが原因。<br>
TdeCredentialArnとTdeCredentialPasswordを削除して解消。<br>　
</dd>
</dl>