Merge pull request #2358 from sathiyas/examples-add-aws-rds

Terraform example for RDS
pull/2481/head
Mitchell Hashimoto 11 years ago
commit d96a263a9e

@ -0,0 +1,17 @@
## Creating an RDS instance in AWS
This example provides sample configuration for creating a mysql or postgres insatnce. For Oracle/SQL Servers, replace default values with appropriate values, they are not included in sample since the number of options are high.
The example creates db subnet groups and a VPC security group as inputs to the instance creation
For AWS provider, set up your AWS environment as outlined in https://www.terraform.io/docs/providers/aws/index.html
If you need to use existing security groups and subnets, remove the sg.tf and subnets.tf files and replace the corresponidng sections in main.tf under aws_db_instance
Pass the password variable through your ENV variable.
Several paraneters are externalized, review the different variables.tf files and change them to fit your needs. Carefully review the CIDR blocks, egress/ingress rules, availability zones that are very specific to your account.
Once ready run 'terraform plan' to review. At the minimum, provide the vpc_id as input variable.
Once satisfied with plan, run 'terraform apply'

@ -0,0 +1,19 @@
resource "aws_db_instance" "default" {
depends_on = "aws_security_group.default"
identifier = "${var.identifier}"
allocated_storage = "${var.storage}"
engine = "${var.engine}"
engine_version = "${lookup(var.engine_version, var.engine)}"
instance_class = "${var.instance_class}"
name = "${var.db_name}"
username = "${var.username}"
password = "${var.password}"
vpc_security_group_ids = ["${aws_security_group.default.id}"]
db_subnet_group_name = "${aws_db_subnet_group.default.id}"
}
resource "aws_db_subnet_group" "default" {
name = "main_subnet_group"
description = "Our main group of subnets"
subnet_ids = ["${aws_subnet.subnet_1.id}", "${aws_subnet.subnet_2.id}"]
}

@ -0,0 +1,10 @@
output "subnet_group" {
value = "${aws_db_subnet_group.default.name}"
}
output "db_instance_id" {
value = "${aws_db_instance.default.id}"
}
output "db_instance_address" {
value = "${aws_db_instance.default.address}"
}

@ -0,0 +1,10 @@
variable "cidr_blocks" {
default = "0.0.0.0/0"
description = "CIDR for sg"
}
variable "sg_name" {
default = "rds_sg"
description = "Tag Name for sg"
}

@ -0,0 +1,23 @@
resource "aws_security_group" "default" {
name = "main_rds_sg"
description = "Allow all inbound traffic"
vpc_id = "${var.vpc_id}"
ingress {
from_port = 0
to_port = 65535
protocol = "TCP"
cidr_blocks = ["${var.cidr_blocks}"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags {
Name = "${var.sg_name}"
}
}

@ -0,0 +1,24 @@
variable "subnet_1_cidr" {
default = "10.0.1.0/24"
description = "Your AZ"
}
variable "subnet_2_cidr" {
default = "10.0.2.0/24"
description = "Your AZ"
}
variable "az_1" {
default = "us-east-1b"
description = "Your Az1, use AWS CLI to find your account specific"
}
variable "az_2" {
default = "us-east-1c"
description = "Your Az2, use AWS CLI to find your account specific"
}
variable "vpc_id" {
description = "Your VPC ID"
}

@ -0,0 +1,19 @@
resource "aws_subnet" "subnet_1" {
vpc_id = "${var.vpc_id}"
cidr_block = "${var.subnet_1_cidr}"
availability_zone = "${var.az_1}"
tags {
Name = "main_subnet1"
}
}
resource "aws_subnet" "subnet_2" {
vpc_id = "${var.vpc_id}"
cidr_block = "${var.subnet_2_cidr}"
availability_zone = "${var.az_2}"
tags {
Name = "main_subnet2"
}
}

@ -0,0 +1,41 @@
variable "identifier" {
default = "mydb-rds"
description = "Identifier for your DB"
}
variable "storage" {
default = "10"
description = "Storage size in GB"
}
variable "engine" {
default = "postgres"
description = "Engine type, example values mysql, postgres"
}
variable "engine_version" {
description = "Engine version"
default = {
mysql = "5.6.22"
postgres = "9.4.1"
}
}
variable "instance_class" {
default = "db.t2.micro"
description = "Instance class"
}
variable "db_name" {
default = "mydb"
description = "db name"
}
variable "username" {
default = "myuser"
description = "User name"
}
variable "password" {
description = "password, provide through your ENV variables"
}
Loading…
Cancel
Save