public DatabaseStack(Construct scope, string name, Vpc vpc, StackProps props = null) : base(scope, $"database-{name}", props) { // pricing - rds // 750 horas de uso de instâncias db.t2.micro Single-AZ do Amazon RDS para execução de // MySQL, MariaDB, PostgreSQL, Oracle BYOL ou SQL Server(executando SQL Server Express Edition) // // 20 GB de armazenamento de banco de dados de SSD // // 20 GB de armazenamento de backup para seus backups de banco de dados automatizados e // quaisquer snapshots de banco de dados iniciados por usuário // // pricing - secret manager // 0,40 USD por segredo por mês. No caso de segredos armazenados por menos de um mês, // o preço é pro-rata (com base no número de horas). // 0,05 USD por 10.000 chamadas de API. var secret = new Secret(this, $"database-{name}-secret", new SecretProps() { Description = $"Database {name} password", SecretName = $"database-{name}-secret" }); var databaseSecret = new DatabaseSecret(this, $"database-{name}-databasesecret", new DatabaseSecretProps() { Username = "******", MasterSecret = secret, ExcludeCharacters = "{}[]()'\"/\\" }); _databaseInstance = new DatabaseInstance(this, $"database-{name}-cluster", new DatabaseInstanceProps() { InstanceIdentifier = name + "-instance", DatabaseName = name, Credentials = Credentials.FromSecret(databaseSecret), Engine = DatabaseInstanceEngine.Mysql(new MySqlInstanceEngineProps() { Version = MysqlEngineVersion.VER_8_0_21 }), InstanceType = new InstanceType("t2.micro"), Vpc = vpc, VpcSubnets = new SubnetSelection() { SubnetType = SubnetType.ISOLATED } }); _databaseInstance.AddRotationSingleUser(new RotationSingleUserOptions() { AutomaticallyAfter = Duration.Days(7), ExcludeCharacters = "!@#$%^&*" }); }
private static IInstanceEngine GetInstanceEngine(DeputyBase databaseEngineVersion, string edition = "ex") { var databaseType = databaseEngineVersion.GetType(); if (databaseType == typeof(MysqlEngineVersion)) { return(DatabaseInstanceEngine.Mysql(new MySqlInstanceEngineProps { Version = databaseEngineVersion as MysqlEngineVersion })); } if (databaseType == typeof(PostgresEngineVersion)) { return(DatabaseInstanceEngine.Postgres(new PostgresInstanceEngineProps() { Version = databaseEngineVersion as PostgresEngineVersion })); } if (databaseType == typeof(MariaDbEngineVersion)) { return(DatabaseInstanceEngine.MariaDb(new MariaDbInstanceEngineProps() { Version = databaseEngineVersion as MariaDbEngineVersion })); } if (databaseType == typeof(SqlServerEngineVersion)) { return(edition switch { "ee" => DatabaseInstanceEngine.SqlServerEe(new SqlServerEeInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), "se" => DatabaseInstanceEngine.SqlServerSe(new SqlServerSeInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), "ex" => DatabaseInstanceEngine.SqlServerEx(new SqlServerExInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), "web" => DatabaseInstanceEngine.SqlServerWeb(new SqlServerWebInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), _ => throw new ArgumentException("The edition of the SQL Server is not recognized."), });
private IInstanceEngine GetInstanceEngine(DeputyBase databaseEngineVersion) { var databaseType = databaseEngineVersion.GetType(); if (databaseType == typeof(MysqlEngineVersion)) { return(DatabaseInstanceEngine.Mysql(new MySqlInstanceEngineProps { Version = databaseEngineVersion as MysqlEngineVersion })); } if (databaseType == typeof(PostgresEngineVersion)) { return(DatabaseInstanceEngine.Postgres(new PostgresInstanceEngineProps() { Version = databaseEngineVersion as PostgresEngineVersion })); } if (databaseType == typeof(MariaDbEngineVersion)) { return(DatabaseInstanceEngine.MariaDb(new MariaDbInstanceEngineProps() { Version = databaseEngineVersion as MariaDbEngineVersion })); } if (databaseType == typeof(SqlServerEngineVersion)) { return(DatabaseInstanceEngine.SqlServerEe(new SqlServerEeInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion })); } if (databaseType == typeof(OracleEngineVersion)) { return(DatabaseInstanceEngine.OracleEe(new OracleEeInstanceEngineProps() { Version = databaseEngineVersion as OracleEngineVersion })); } throw new ArgumentException("Not supported database option. Try: MysqlEngineVersion, PostgresEngineVersion, MariaDbEngineVersion, SqlServerEngineVersion and OracleEngineVersion"); }
public DatabaseInstance Create(Amazon.CDK.AWS.EC2.Vpc vpc, IConfigSettings configSettings, SecurityGroup[] securityGroups) { var db = new DatabaseInstance(this, $"{configSettings.Rds.Name}", new DatabaseInstanceProps { // todo change all properties based on config settings Engine = DatabaseInstanceEngine.Mysql(new MySqlInstanceEngineProps { //todo change based on config settings Version = MysqlEngineVersion.VER_5_7, }), Credentials = GetCredentials(configSettings), InstanceType = InstanceType.Of(InstanceClass.BURSTABLE2, InstanceSize.SMALL), VpcSubnets = new SubnetSelection { SubnetType = SubnetType.ISOLATED }, Vpc = vpc, MultiAz = configSettings.Rds.MultiAz, BackupRetention = Duration.Days(configSettings.Rds.BackupRetentionInDays), StorageEncrypted = configSettings.Rds.StorageEncrypted, AutoMinorVersionUpgrade = configSettings.Rds.AutoMinorVersionUpgrade, // todo StorageType = StorageType.GP2, SecurityGroups = securityGroups, InstanceIdentifier = configSettings.Rds.Name, DeletionProtection = configSettings.Rds.DeletionProtection, }); // rotate the master password (use this when storing it in secrets manager) //db.AddRotationSingleUser(); //EaSdRDpAgGjGKd0AL-uI2fwSJ,znW5 DBInstance = db; return(db); }