Created
July 19, 2017 19:57
-
-
Save smithclay/2d11c2fc2f4584a87ac97574262f91c9 to your computer and use it in GitHub Desktop.
Revisions
-
smithclay revised this gist
Jul 19, 2017 . 1 changed file with 0 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -21,7 +21,6 @@ variable "aws_amis" { } } # Specify the provider and access details provider "aws" { region = "${var.aws_region}" -
smithclay created this gist
Jul 19, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,180 @@ variable "aws_region" { description = "EC2 Region for the VPC" default = "us-west-2" } variable "aws_availability_zones" { default = "us-west-2a,us-west-2b,us-west-2c" description = "List of availability zones, use AWS CLI to find your " } # TODO: replace with local file variable "aws_key_name" { description = "Desired name of AWS key pair" default = "cloudrace" } # Custom AMI Created with Packer variable "aws_amis" { default = { us-west-2 = "ami-7d342804" } } # Specify the provider and access details provider "aws" { region = "${var.aws_region}" } # Create a VPC to launch our instances into resource "aws_vpc" "default" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true } # Create an internet gateway to give our subnet access to the outside world resource "aws_internet_gateway" "default" { vpc_id = "${aws_vpc.default.id}" } # Grant the VPC internet access on its main route table resource "aws_route" "internet_access" { route_table_id = "${aws_vpc.default.main_route_table_id}" destination_cidr_block = "0.0.0.0/0" gateway_id = "${aws_internet_gateway.default.id}" } # Create a subnet to launch our instances into resource "aws_subnet" "default" { vpc_id = "${aws_vpc.default.id}" cidr_block = "10.0.1.0/24" map_public_ip_on_launch = true } resource "aws_security_group" "elb" { name = "web_elb_sg" vpc_id = "${aws_vpc.default.id}" # HTTP access from anywhere ingress { from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } # outbound internet access egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } # ensure the VPC has an Internet gateway or this step will fail depends_on = ["aws_internet_gateway.default"] } resource "aws_elb" "web_elb" { name = "webelb" # The same availability zone as our instances /*availability_zones = ["${split(",", var.aws_availability_zones)}"]*/ subnets = ["${aws_subnet.default.id}"] security_groups = ["${aws_security_group.elb.id}"] listener { instance_port = "${var.cloudrace_service_port}" instance_protocol = "http" lb_port = 80 lb_protocol = "http" } health_check { healthy_threshold = 2 unhealthy_threshold = 2 timeout = 3 target = "HTTP:${var.cloudrace_service_port}/health" interval = 10 } } resource "aws_autoscaling_group" "web_asg" { #availability_zones = ["${split(",", var.aws_availability_zones)}"] name = "web_asg" max_size = "3" min_size = "1" desired_capacity = "${var.instances_count}" force_delete = true launch_configuration = "${aws_launch_configuration.web_lc.name}" load_balancers = ["${aws_elb.web_elb.name}"] vpc_zone_identifier = ["${aws_subnet.default.id}"] tag { key = "Name" value = "awsweb_asg" propagate_at_launch = "true" } } data "aws_ami" "custom" { most_recent = true filter { name = "name" values = ["ubuntu-host-cloudrace*"] } } resource "aws_launch_configuration" "web_lc" { name = "web_lc" image_id = "${data.aws_ami.custom.image_id}" instance_type = "t2.nano" # Security group security_groups = ["${aws_security_group.default.id}"] key_name = "${var.aws_key_name}" } # Our default security group to access # the instances over SSH and HTTP resource "aws_security_group" "default" { name = "terraform_example_sg" vpc_id = "${aws_vpc.default.id}" # SSH access from anywhere ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } # HTTP access from anywhere ingress { from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } # HTTP access from anywhere ingress { from_port = "${var.cloudrace_service_port}" to_port = "${var.cloudrace_service_port}" protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } # outbound internet access egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,185 @@ variable "azure_subscription_id" {} variable "azure_client_id" {} variable "azure_client_secret" {} variable "azure_tenant_id" {} variable "rg_prefix" { description = "The shortened abbreviation to represent your resource group that will go on the front of some resources." default = "rg" } variable "hostname" { description = "VM name referenced also in storage-related names." default = "azweb" } variable "location" { description = "The location/region where the virtual network is created. Changing this forces a new resource to be created." default = "westcentralus" } variable "storage_account_type" { description = "Defines the type of storage account to be created. Valid options are Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Premium_LRS. Changing this is sometimes valid - see the Azure documentation for more information on which types of accounts can be converted into other types." default = "Standard_LRS" } variable "image_uri" { description = "packer-created VHD for the VM" default = "https://tfimages.blob.core.windows.net/system/Microsoft.Compute/Images/images/packer-osDisk.c8c51b67-99b1-43cf-86be-2e550994b6b4.vhd" } variable "vmss_name" { description = "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended." default = "azweb0" } variable "vm_size" { description = "Specifies the size of the virtual machine." default = "Standard_A0" } variable "admin_username" { description = "administrator user name" default = "ubuntu" } variable "admin_password" { description = "administrator password (recommended to disable password auth)" default = "insert-secure-password-here" } provider "azurerm" { subscription_id = "${var.azure_subscription_id}" client_id = "${var.azure_client_id}" client_secret = "${var.azure_client_secret}" tenant_id = "${var.azure_tenant_id}" } resource "azurerm_resource_group" "rg" { name = "cloudrace_rg" location = "${var.location}" } resource "azurerm_virtual_network" "vnet" { name = "${var.rg_prefix}vnet" location = "${azurerm_resource_group.rg.location}" address_space = ["10.0.0.0/16"] resource_group_name = "${azurerm_resource_group.rg.name}" } resource "azurerm_subnet" "subnet" { name = "subnet" address_prefix = "10.0.0.0/24" resource_group_name = "${azurerm_resource_group.rg.name}" virtual_network_name = "${azurerm_virtual_network.vnet.name}" } resource "azurerm_public_ip" "pip" { name = "${var.hostname}-pip" location = "${azurerm_resource_group.rg.location}" resource_group_name = "${azurerm_resource_group.rg.name}" public_ip_address_allocation = "Dynamic" domain_name_label = "${var.hostname}" } resource "azurerm_lb" "weblb" { name = "LoadBalancer" location = "${azurerm_resource_group.rg.location}" resource_group_name = "${azurerm_resource_group.rg.name}" depends_on = ["azurerm_public_ip.pip"] frontend_ip_configuration { name = "LBFrontEnd" public_ip_address_id = "${azurerm_public_ip.pip.id}" } } resource "azurerm_lb_backend_address_pool" "backlb" { name = "BackEndAddressPool" resource_group_name = "${azurerm_resource_group.rg.name}" loadbalancer_id = "${azurerm_lb.weblb.id}" } resource "azurerm_lb_nat_pool" "np" { resource_group_name = "${azurerm_resource_group.rg.name}" loadbalancer_id = "${azurerm_lb.weblb.id}" name = "NATPool" protocol = "Tcp" frontend_port_start = 50000 frontend_port_end = 50119 backend_port = 22 frontend_ip_configuration_name = "LBFrontEnd" } resource "azurerm_lb_rule" "web" { resource_group_name = "${azurerm_resource_group.rg.name}" loadbalancer_id = "${azurerm_lb.weblb.id}" name = "LBRule" protocol = "Tcp" frontend_port = 80 backend_port = "${var.cloudrace_service_port}" backend_address_pool_id = "${azurerm_lb_backend_address_pool.backlb.id}" frontend_ip_configuration_name = "LBFrontEnd" probe_id = "${azurerm_lb_probe.lb_probe.id}" depends_on = ["azurerm_lb_probe.lb_probe", "azurerm_lb_backend_address_pool.backlb"] } resource "azurerm_lb_probe" "lb_probe" { resource_group_name = "${azurerm_resource_group.rg.name}" loadbalancer_id = "${azurerm_lb.weblb.id}" name = "httpProbe" protocol = "Http" request_path = "/health" port = "${var.cloudrace_service_port}" interval_in_seconds = 10 number_of_probes = 2 } resource "azurerm_virtual_machine_scale_set" "scalesetd" { name = "azwebscale" location = "${azurerm_resource_group.rg.location}" resource_group_name = "${azurerm_resource_group.rg.name}" upgrade_policy_mode = "Manual" overprovision = true depends_on = ["azurerm_lb.weblb", "azurerm_virtual_network.vnet"] sku { name = "${var.vm_size}" tier = "Standard" capacity = "${var.instances_count}" } os_profile { computer_name_prefix = "${var.vmss_name}" admin_username = "${var.admin_username}" admin_password = "${var.admin_password}" } os_profile_linux_config { disable_password_authentication = false } network_profile { name = "${var.hostname}-nic" primary = true ip_configuration { name = "${var.hostname}ipconfig" subnet_id = "${azurerm_subnet.subnet.id}" load_balancer_backend_address_pool_ids = ["${azurerm_lb_backend_address_pool.backlb.id}"] load_balancer_inbound_nat_rules_ids = ["${element(azurerm_lb_nat_pool.np.*.id, count.index)}"] } } storage_profile_os_disk { name = "packer-osDisk.247bd425-f041-48cc-acc0-48848e6842e0.vhd" caching = "ReadWrite" create_option = "FromImage" image = "${var.image_uri}" os_type = "linux" } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,169 @@ variable "region" { default = "us-central1" } variable "region_zone" { default = "us-central1-f" } variable "project_name" { description = "The ID of the Google Cloud project" default = "c4-cloud-test" } # Custom Image created via Packer variable "gcp_image_name" { description = "image name" default = "packer-1500055284" } variable "credentials_file_path" { description = "Path to the JSON file used to describe your account credentials" default = "~/.ssh/compute-engine-google.json" } variable "public_key_path" { description = "Path to file containing public key" default = "~/.ssh/id_rsa_cloudrace.pub" } variable "private_key_path" { description = "Path to file containing private key" default = "~/.ssh/id_rsa_cloudrace" } provider "google" { region = "${var.region}" project = "${var.project_name}" credentials = "${file("${var.credentials_file_path}")}" } resource "google_compute_network" "cloudrace-network" { name = "cloudrace-network" } resource "google_compute_subnetwork" "cloudrace-subnet" { name = "cloudrace-subnet" ip_cidr_range = "10.0.2.0/24" network = "${google_compute_network.cloudrace-network.self_link}" region = "${var.region}" } resource "google_compute_firewall" "allow-all-internal" { name = "allow-all-10-2-0-0-20" network = "${google_compute_network.cloudrace-network.name}" allow { protocol = "tcp" } allow { protocol = "udp" } allow { protocol = "icmp" } source_ranges = ["10.0.2.0/24"] } resource "google_compute_backend_service" "cloudrace_backend" { name = "cloudracebackend" port_name = "http" protocol = "HTTP" timeout_sec = 10 enable_cdn = false backend { group = "${google_compute_instance_group_manager.cloudrace_webservers.instance_group}" } health_checks = ["${google_compute_http_health_check.default.self_link}"] } resource "google_compute_http_health_check" "default" { name = "http-test" request_path = "/health" port = "${var.cloudrace_service_port}" timeout_sec = 3 check_interval_sec = 10 healthy_threshold = 2 unhealthy_threshold = 2 } resource "google_compute_instance_group_manager" "cloudrace_webservers" { name = "gcpweb" instance_template = "${google_compute_instance_template.web_template.self_link}" base_instance_name = "gcpweb" zone = "${var.region_zone}" target_size = "${var.instances_count}" named_port { name = "http" port = "${var.cloudrace_service_port}" } } resource "google_compute_instance_template" "web_template" { name = "gcpweb" machine_type = "f1-micro" region = "${var.region}" tags = ["web"] disk { source_image = "${var.gcp_image_name}" auto_delete = true boot = true } network_interface { subnetwork = "${google_compute_subnetwork.cloudrace-subnet.name}" access_config { # Ephemeral } } metadata { ssh-keys = "root:${file("${var.public_key_path}")}" } } resource "google_compute_firewall" "allow-ssh-http-icmp" { name = "allow-tcp22-tcp80-tcp8080-icmp" network = "${google_compute_network.cloudrace-network.name}" allow { protocol = "tcp" ports = ["22", "80", "8080"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] target_tags = ["web"] } resource "google_compute_global_forwarding_rule" "default" { name = "tf-www-forwarding-rule" target = "${google_compute_target_http_proxy.default.self_link}" port_range = "80" } resource "google_compute_target_http_proxy" "default" { name = "test-proxy" description = "a description" url_map = "${google_compute_url_map.default.self_link}" } resource "google_compute_url_map" "default" { name = "url-map" description = "a description" default_service = "${google_compute_backend_service.cloudrace_backend.self_link}" }