Commit 26dde1aa authored by A-Gordon's avatar A-Gordon

Initial commit

parents
Pipeline #114 passed with stage
in 7 seconds
image: alpine:latest
variables:
TERRAFORM_URL: "https://releases.hashicorp.com/terraform/0.7.1/terraform_0.7.1_linux_amd64.zip"
before_script:
- apk update && apk add ca-certificates && update-ca-certificates && apk add openssl
- wget -O /tmp/terraform.zip $TERRAFORM_URL
- unzip /tmp/terraform.zip -d /usr/local/bin
test:
script: terraform validate
#############################################################################################################
# Variables
#############################################################################################################
variable "vpc_id" {}
variable "security_groups" {
type = "list"
}
variable "subnet_ids" {
type = "list"
}
variable "rds_instance_name" {}
variable "rds_engine" {
default = "mysql"
}
variable "rds_engine_version" {
default = "5.6.27"
}
variable "rds_allocated_storage" {
description = "The allocated storage in GBs"
default = "100"
}
variable "rds_storage_type" {
default = "gp2"
}
variable "rds_instance_class" {
default = "db.t2.micro"
}
variable "rds_username" {}
variable "rds_password" {}
variable "rds_multi_az" {
default = "true"
}
variable "rds_publicly_accessible" {
default = "false"
}
variable "backup_retention_period" {
default = "7"
}
variable "backup_window" {
default = "00:00-01:00"
}
variable "maintenance_window" {
default = "Sun:01:00-Sun:02:00"
}
variable "read_replica_count" {
default = "0"
}
variable "parameter_group" {
default = "default.mysql5.6"
}
variable "route53_zone" {}
#############################################################################################################
# Security Group
#############################################################################################################
resource "aws_security_group" "rds" {
vpc_id = "${var.vpc_id}"
description = "${var.rds_instance_name} RDS SG"
ingress {
from_port = 3306
to_port = 3306
protocol = "tcp"
security_groups = ["${var.security_groups}"]
}
}
#############################################################################################################
# Subnet Group
#############################################################################################################
resource "aws_db_subnet_group" "default" {
name = "${var.rds_instance_name}-subnet"
description = "RDS Subnet group for ${var.rds_instance_name}"
subnet_ids = ["${var.subnet_ids}"]
}
#############################################################################################################
# RDS Instances
#############################################################################################################
resource "aws_db_instance" "default" {
identifier = "${var.rds_instance_name}"
engine = "${var.rds_engine}"
engine_version = "${var.rds_engine_version}"
allocated_storage = "${var.rds_allocated_storage}"
storage_type = "${var.rds_storage_type}"
instance_class = "${var.rds_instance_class}"
username = "${var.rds_username}"
password = "${var.rds_password}"
multi_az = "${var.rds_multi_az}"
publicly_accessible = "${var.rds_publicly_accessible}"
vpc_security_group_ids = ["${aws_security_group.rds.id}"]
db_subnet_group_name = "${aws_db_subnet_group.default.name}"
parameter_group_name = "${var.parameter_group}"
backup_retention_period = "${var.backup_retention_period}"
backup_window = "${var.backup_window}"
maintenance_window = "${var.maintenance_window}"
}
resource "aws_db_instance" "read_replica" {
identifier = "${var.rds_instance_name}-read-replica"
engine = "${var.rds_engine}"
engine_version = "${var.rds_engine_version}"
allocated_storage = "${var.rds_allocated_storage}"
storage_type = "${var.rds_storage_type}"
instance_class = "${var.rds_instance_class}"
username = "${var.rds_username}"
password = "${var.rds_password}"
multi_az = "${var.rds_multi_az}"
publicly_accessible = "${var.rds_publicly_accessible}"
vpc_security_group_ids = ["${aws_security_group.rds.id}"]
db_subnet_group_name = "${aws_db_subnet_group.default.name}"
parameter_group_name = "${var.parameter_group}"
backup_retention_period = "${var.backup_retention_period}"
backup_window = "${var.backup_window}"
maintenance_window = "${var.maintenance_window}"
replicate_source_db = "${aws_db_instance.default.name}"
count = "${var.read_replica_count}"
}
#############################################################################################################
# Route 53 Records
#############################################################################################################
resource "aws_route53_record" "private_rds_default" {
zone_id = "${var.route53_zone}"
name = "mysql.${var.rds_instance_name}.aws"
type = "CNAME"
ttl = "60"
records = ["${aws_db_instance.default.address}"]
count = "${length(split(",", "var.route53_zone"))}"
}
resource "aws_route53_record" "private_rds_read-replica" {
zone_id = "${var.route53_zone}"
name = "readonly-mysql.${var.rds_instance_name}.aws"
type = "CNAME"
ttl = "60"
records = ["${aws_db_instance.read_replica.address}"]
count = "${length(split(",", "var.route53_zone")) * var.read_replica_count}"
}
#############################################################################################################
# Outputs
#############################################################################################################
output "rds_instance_id" {
value = "${aws_db_instance.default.id}"
}
output "rds_instance_address" {
value = "${aws_db_instance.default.address}"
}
output "read_replica_rds_instance_id" {
value = "${aws_db_instance.read_replica.id}"
}
output "read_replica_rds_instance_address" {
value = "${aws_db_instance.read_replica.address}"
}
output "subnet_group_id" {
value = "${aws_db_subnet_group.default.id}"
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment