Browse Source

Created a first generation on an EC2 module to create instances

Roberto Barbosa 8 years ago
parent
commit
666ba49fb9
3 changed files with 126 additions and 59 deletions
  1. 85 0
      instance/main.tf
  2. 38 57
      main.tf
  3. 3 2
      variables.tf

+ 85 - 0
instance/main.tf

@@ -0,0 +1,85 @@
+#-------------------------------
+# Create Nuxeo Ubuntu Instance
+#-------------------------------
+# Create a new EC2 instance 
+
+variable "stack_name" {
+  type = "string"
+  description = "Name of the Stack/Env that this instance will used for"
+}
+
+variable "ubuntu_releases" {  
+    default = {
+        trusty  = "trusty-14.04"
+        xenial  = "xenial-16.04"
+        yakkety = "yakkety-16.10"
+    }
+}
+
+variable "os_release" {
+	type = "string"
+	description = "Ubuntu Release"
+	default = "xenial"
+}
+
+variable "instance_type" {
+	type = "string"
+	description = "EC2 Instance Type"
+	default = "t2.micro"
+}
+
+variable "instance_name" {
+  type = "string"
+  description = "Name to be give to this instance"
+}
+
+# Lookup on Amazon for the right AMI for Ubuntu on any region
+data "aws_ami" "ubuntu" {
+  most_recent = true
+  filter {
+    name = "name"
+    values = ["ubuntu/images/hvm-ssd/ubuntu-${lookup(var.ubuntu_releases, var.os_release)}-amd64-server-*"]
+  }
+  filter {
+    name = "virtualization-type"
+    values = ["hvm"]
+  }
+  owners = ["099720109477"] # Canonical
+}
+
+variable "subnet_id" {
+  type = "string"
+}
+variable "public_key_path" {
+	type = "string"
+	description = "Local Path to the Pub Key to put on server"
+}
+
+#---------------------
+# Deployer SSH keys 
+#--------------------
+resource "aws_key_pair" "deployer" {
+  key_name = "deployer-key" 
+  public_key = "${file(var.public_key_path)}"
+}
+
+#---------------------
+# EC2 Instance
+#--------------------
+
+resource "aws_instance" "ec2" {
+    ami = "${data.aws_ami.ubuntu.id}"
+    instance_type = "${var.instance_type}"
+    key_name = "${aws_key_pair.deployer.id}"
+    subnet_id   = "${var.subnet_id}"
+    tags {
+      Name = "${var.instance_name}"
+      billing-category = "customers"
+      billing-subcategory = "${var.stack_name}"
+      role= "nuxeo.instance"
+      managed_by="terraform"
+    }
+}
+
+
+

+ 38 - 57
main.tf

@@ -1,11 +1,15 @@
 /*
 * https://wiki.nuxeo.com/display/INFRA/Cloud+Provisioning
-* 1) Create Public Subnet with a /24 size. One private Subnet to run Nuxeo and at least 2 Private Subnets for Data
+* 1) Create Subnets for the Stack
+*     - On Public with a /24 size. 
+*     - One private Subnet to run Nuxeo 
+*     - at least 2 Private Subnets for Databases
 * 2) Create a NAT Gateway in one of the Public Subnets
 * 3) Create a Route with the Internet Gateway as default route, associate it with the Public Subnet(s)
 * 4) Create a Route with the NAT Gateway as default route, *that should be associated to all Private Subnets when they are created*
-* 5) Create a Security Group for Bastion Hosts that accepts SSH from anywhere
-* 6) Create a Security Group for ELBs that accepts HTTP and HTTPS from anywhere
+* 5) Create a Security Group for ELBs that accepts HTTP and HTTPS from anywhere
+* 6) Create a Security Group for Bastion Hosts that accepts SSH from anywhere
+* 
 * 7) Create a Bastion Host with bastion host SG associated to ti, install NTP and Userify on it
 */
 
@@ -20,7 +24,7 @@ module "net" {
   source = "./net/"
 
   stack_name = "${var.stack_name}"  
-  region = "us-west-2"
+  region = "${var.aws_region}"
   vpc_id = "${var.vpc_id}"
 
   public_subnets = ["10.0.10.0/24"]
@@ -30,23 +34,23 @@ module "net" {
 
 
 #-------------
-# DNS Entry for Cloud Customer
+#DNS Entry for Cloud Customer
 #-------------
-#resource "aws_route53_record" "dns" {
-#   zone_id = "Z1EFT3O5K9NMCJ" // Zone ID for nuxeocloud.com
-#   name = "${name}"
-#   type = "CNAME"
-#   ttl = "300"
-#   weighted_routing_policy {
-#    weight = 90
-#   }
-#  set_identifier = "${var.stack_name}"
-#  records = ["${var.stack_name}.nuxeocloud.com"]
-#}
+resource "aws_route53_record" "dns" {
+  zone_id = "Z1EFT3O5K9NMCJ" // Zone ID for nuxeocloud.com
+  name = "${name}"
+  type = "CNAME"
+  ttl = "300"
+  weighted_routing_policy {
+   weight = 90
+  }
+ set_identifier = "${var.stack_name}"
+ records = ["${var.stack_name}.nuxeocloud.com"]
+}
 
-#-------------------------------------
+# -------------------------------------
 # S3 buckets:w for Nuxeo and for Backups
-#-------------------------------------
+# -------------------------------------
 module "s3" {
   source = "./s3/"
   stack_name = "${var.stack_name}"
@@ -54,9 +58,9 @@ module "s3" {
 }
 
 
-#-------------------------
+# -------------------------
 # RDS Postgres Database
-#-------------------------
+# -------------------------
 module "rds" {
   source = "./rds/"
   region = "${var.aws_region}"
@@ -84,42 +88,19 @@ module "elasticcache" {
 	private_subnet_ids  = ["${module.net.db_private}"]
 }
 
+#-------------------------
+# EC2 Instances
+#-------------------------
+module "nuxeo" {
+  source = "./instance/"
+  # Variables for creating an instance
+  stack_name = "${var.stack_name}-nuxeo"
+  instance_name = "${var.stack_name}-nuxeo-instance"
+  os_release = "xenial"
+  instance_type = "t2.micro"
+  public_key_path ="${var.public_key_path}"
+#  public_key_path="/path/to/my/pub_key"
+  subnet_id="${element(module.net.private_subnets, 0)}"
+}
 
-# #-------------------------------
-# # Create Nuxeo Ubuntu Instance
-# #-------------------------------
-# # Create a new instance of the latest Ubuntu on an
-# # t2.micro node with an AWS Tag naming it "Nuxeo"
-# data "aws_ami" "ubuntu" {
-#   most_recent = true
-#   filter {
-#     name = "name"
-#     values = ["ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*"]
-#   }
-#   filter {
-#     name = "virtualization-type"
-#     values = ["hvm"]
-#   }
-#   owners = ["099720109477"] # Canonical
-# }
-
-# resource "aws_instance" "nuxeo" {
-#     ami = "${data.aws_ami.ubuntu.id}"
-#     instance_type = "t2.micro"
-#     key_name = "${aws_key_pair.deployer.id}"
-#     subnet_id   = "${aws_subnet.private.id}"
-#     tags {
-#       Name = "Nuxeo"
-#       billing-category = "customers"
-#       billing-subcategory = "${var.stack_name}"
-#       role= "nuxeo.instance"
-#     }
-# }
 
-# #---------------------
-# # Deployer SSH keys 
-# #--------------------
-# resource "aws_key_pair" "deployer" {
-#   key_name = "deployer-key" 
-#   public_key = "${file(var.public_key_path)}"
-# }

+ 3 - 2
variables.tf

@@ -2,9 +2,10 @@
 # VARIABLES
 #-------------------
 variable "stack_name" {
-        default = "Name for this stack like customer-Name or project-name"
 }
-variable "aws_region" {}
+variable "aws_region" {
+	default = "us-west-2"
+}
 
 variable "vpc_id" {}