Exemplo n.º 1
0
        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."),
                });
Exemplo n.º 3
0
        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");
        }
Exemplo n.º 4
0
        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);
        }