From b52f5aa7579e368124da6fd5b86ce904b5d3f927 Mon Sep 17 00:00:00 2001 From: demonwy Date: Tue, 18 Apr 2017 20:18:57 +0800 Subject: [PATCH] ess-scaling and vpc-snat examples Originally submitted as part of hashicorp/terraform#13731 . --- examples/ess-scaling/README.md | 17 ++++++ examples/ess-scaling/main.tf | 38 +++++++++++++ examples/ess-scaling/outputs.tf | 7 +++ examples/ess-scaling/variables.tf | 24 +++++++++ examples/ess-schedule/README.md | 17 ++++++ examples/ess-schedule/main.tf | 51 ++++++++++++++++++ examples/ess-schedule/outputs.tf | 11 ++++ examples/ess-schedule/variables.tf | 32 +++++++++++ examples/vpc-snat/main.tf | 87 ++++++++++++++++++++++++++++++ examples/vpc-snat/ouputs.tf | 7 +++ examples/vpc-snat/variables.tf | 22 ++++++++ 11 files changed, 313 insertions(+) create mode 100644 examples/ess-scaling/README.md create mode 100644 examples/ess-scaling/main.tf create mode 100644 examples/ess-scaling/outputs.tf create mode 100644 examples/ess-scaling/variables.tf create mode 100644 examples/ess-schedule/README.md create mode 100644 examples/ess-schedule/main.tf create mode 100644 examples/ess-schedule/outputs.tf create mode 100644 examples/ess-schedule/variables.tf create mode 100644 examples/vpc-snat/main.tf create mode 100644 examples/vpc-snat/ouputs.tf create mode 100644 examples/vpc-snat/variables.tf diff --git a/examples/ess-scaling/README.md b/examples/ess-scaling/README.md new file mode 100644 index 00000000000..3d9d2abb3e7 --- /dev/null +++ b/examples/ess-scaling/README.md @@ -0,0 +1,17 @@ +### ESS scaling configuration Example + +The example launches ESS scaling configuration, will create ECS instance automatic by system schedule. + +### Get up and running + +* Planning phase + + terraform plan + +* Apply phase + + terraform apply + +* Destroy + + terraform destroy \ No newline at end of file diff --git a/examples/ess-scaling/main.tf b/examples/ess-scaling/main.tf new file mode 100644 index 00000000000..0f7575bc9e1 --- /dev/null +++ b/examples/ess-scaling/main.tf @@ -0,0 +1,38 @@ +data "alicloud_images" "ecs_image" { + most_recent = true + name_regex = "^centos_6\\w{1,5}[64].*" +} + +resource "alicloud_security_group" "sg" { + name = "${var.security_group_name}" + description = "tf-sg" +} + +resource "alicloud_security_group_rule" "ssh-in" { + type = "ingress" + ip_protocol = "tcp" + nic_type = "internet" + policy = "accept" + port_range = "22/22" + priority = 1 + security_group_id = "${alicloud_security_group.sg.id}" + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_ess_scaling_group" "scaling" { + min_size = "${var.scaling_min_size}" + max_size = "${var.scaling_max_size}" + scaling_group_name = "tf-scaling" + removal_policies = "${var.removal_policies}" + +} + +resource "alicloud_ess_scaling_configuration" "config" { + scaling_group_id = "${alicloud_ess_scaling_group.scaling.id}" + enable = "${var.enable}" + + image_id = "${data.alicloud_images.ecs_image.images.0.id}" + instance_type = "${var.ecs_instance_type}" + io_optimized = "optimized" + security_group_id = "${alicloud_security_group.sg.id}" +} \ No newline at end of file diff --git a/examples/ess-scaling/outputs.tf b/examples/ess-scaling/outputs.tf new file mode 100644 index 00000000000..c4bfbb73e8f --- /dev/null +++ b/examples/ess-scaling/outputs.tf @@ -0,0 +1,7 @@ +output "scaling_group_id" { + value = "${alicloud_ess_scaling_group.scaling.id}" +} + +output "configuration_id" { + value = "${alicloud_ess_scaling_configuration.config.id}" +} \ No newline at end of file diff --git a/examples/ess-scaling/variables.tf b/examples/ess-scaling/variables.tf new file mode 100644 index 00000000000..11d2ef56739 --- /dev/null +++ b/examples/ess-scaling/variables.tf @@ -0,0 +1,24 @@ +variable "security_group_name" { + default = "tf-sg" +} + +variable "scaling_min_size" { + default = 1 +} + +variable "scaling_max_size" { + default = 1 +} + +variable "enable" { + default = true +} + +variable "removal_policies" { + type = "list" + default = ["OldestInstance", "NewestInstance"] +} + +variable "ecs_instance_type" { + default = "ecs.s2.large" +} \ No newline at end of file diff --git a/examples/ess-schedule/README.md b/examples/ess-schedule/README.md new file mode 100644 index 00000000000..e606951b109 --- /dev/null +++ b/examples/ess-schedule/README.md @@ -0,0 +1,17 @@ +### ESS scaling schedule Example + +The example launches ESS schedule task, which will create ECS by the schedule time. + +### Get up and running + +* Planning phase + + terraform plan + +* Apply phase + + terraform apply + +* Destroy + + terraform destroy \ No newline at end of file diff --git a/examples/ess-schedule/main.tf b/examples/ess-schedule/main.tf new file mode 100644 index 00000000000..339ba670b51 --- /dev/null +++ b/examples/ess-schedule/main.tf @@ -0,0 +1,51 @@ +data "alicloud_images" "ecs_image" { + most_recent = true + name_regex = "^centos_6\\w{1,5}[64].*" +} + +resource "alicloud_security_group" "sg" { + name = "${var.security_group_name}" + description = "tf-sg" +} + +resource "alicloud_security_group_rule" "ssh-in" { + type = "ingress" + ip_protocol = "tcp" + nic_type = "internet" + policy = "accept" + port_range = "22/22" + priority = 1 + security_group_id = "${alicloud_security_group.sg.id}" + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_ess_scaling_group" "scaling" { + min_size = "${var.scaling_min_size}" + max_size = "${var.scaling_max_size}" + scaling_group_name = "tf-scaling" + removal_policies = "${var.removal_policies}" + +} + +resource "alicloud_ess_scaling_configuration" "config" { + scaling_group_id = "${alicloud_ess_scaling_group.scaling.id}" + enable = "${var.enable}" + + image_id = "${data.alicloud_images.ecs_image.images.0.id}" + instance_type = "${var.ecs_instance_type}" + io_optimized = "optimized" + security_group_id = "${alicloud_security_group.sg.id}" +} + +resource "alicloud_ess_scaling_rule" "rule" { + scaling_group_id = "${alicloud_ess_scaling_group.scaling.id}" + adjustment_type = "TotalCapacity" + adjustment_value = "${var.rule_adjust_size}" + cooldown = 60 +} + +resource "alicloud_ess_schedule" "run" { + scheduled_action = "${alicloud_ess_scaling_rule.rule.ari}" + launch_time = "${var.schedule_launch_time}" + scheduled_task_name = "tf-run" +} \ No newline at end of file diff --git a/examples/ess-schedule/outputs.tf b/examples/ess-schedule/outputs.tf new file mode 100644 index 00000000000..1d48aabfd31 --- /dev/null +++ b/examples/ess-schedule/outputs.tf @@ -0,0 +1,11 @@ +output "scaling_group_id" { + value = "${alicloud_ess_scaling_group.scaling.id}" +} + +output "configuration_id" { + value = "${alicloud_ess_scaling_configuration.config.id}" +} + +output "configuration_ari" { + value = "${alicloud_ess_scaling_configuration.config.ari}" +} \ No newline at end of file diff --git a/examples/ess-schedule/variables.tf b/examples/ess-schedule/variables.tf new file mode 100644 index 00000000000..fb95b6bee8d --- /dev/null +++ b/examples/ess-schedule/variables.tf @@ -0,0 +1,32 @@ +variable "security_group_name" { + default = "tf-sg" +} + +variable "scaling_min_size" { + default = 1 +} + +variable "scaling_max_size" { + default = 1 +} + +variable "enable" { + default = true +} + +variable "removal_policies" { + type = "list" + default = ["OldestInstance", "NewestInstance"] +} + +variable "ecs_instance_type" { + default = "ecs.s2.large" +} + +variable "rule_adjust_size" { + default = 3 +} + +variable "schedule_launch_time" { + default = "2017-04-01T01:59Z" +} \ No newline at end of file diff --git a/examples/vpc-snat/main.tf b/examples/vpc-snat/main.tf new file mode 100644 index 00000000000..1f204432ad1 --- /dev/null +++ b/examples/vpc-snat/main.tf @@ -0,0 +1,87 @@ +provider "alicloud" { + region = "cn-hangzhou" +} + +data "alicloud_instance_types" "1c2g" { + cpu_core_count = 1 + memory_size = 2 + instance_type_family = "ecs.n1" +} + +data "alicloud_zones" "default" { + "available_instance_type"= "${data.alicloud_instance_types.1c2g.instance_types.0.id}" + "available_disk_category"= "${var.disk_category}" +} + +resource "alicloud_vpc" "default" { + name = "tf_vpc" + cidr_block = "${var.vpc_cidr}" +} + +resource "alicloud_vswitch" "default" { + vpc_id = "${alicloud_vpc.default.id}" + cidr_block = "${var.vswitch_cidr}" + availability_zone = "${data.alicloud_zones.default.zones.0.id}" +} + +resource "alicloud_nat_gateway" "default" { + vpc_id = "${alicloud_vpc.default.id}" + spec = "Small" + name = "test_foo" + bandwidth_packages = [{ + ip_count = 2 + bandwidth = 5 + zone = "${data.alicloud_zones.default.zones.0.id}" + }] + depends_on = [ + "alicloud_vswitch.default"] +} +resource "alicloud_snat_entry" "default"{ + snat_table_id = "${alicloud_nat_gateway.default.snat_table_ids}" + source_vswitch_id = "${alicloud_vswitch.default.id}" + snat_ip = "${element(split(",", alicloud_nat_gateway.default.bandwidth_packages.0.public_ip_addresses),0)}" +} + +resource "alicloud_forward_entry" "default"{ + forward_table_id = "${alicloud_nat_gateway.default.forward_table_ids}" + external_ip = "${element(split(",", alicloud_nat_gateway.default.bandwidth_packages.0.public_ip_addresses),1)}" + external_port = "80" + ip_protocol = "tcp" + internal_ip = "${alicloud_instance.default.private_ip}" + internal_port = "8080" +} + +resource "alicloud_security_group" "sg" { + name = "tf_sg" + description = "tf_sg" + vpc_id = "${alicloud_vpc.default.id}" +} + +resource "alicloud_security_group_rule" "http-in" { + type = "ingress" + ip_protocol = "tcp" + nic_type = "intranet" + policy = "accept" + port_range = "80/80" + priority = 1 + security_group_id = "${alicloud_security_group.sg.id}" + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_instance" "default" { + # cn-beijing + availability_zone = "${data.alicloud_zones.default.zones.0.id}" + security_groups = ["${alicloud_security_group.sg.id}"] + + vswitch_id = "${alicloud_vswitch.default.id}" + + # series II + instance_charge_type = "PostPaid" + instance_type = "${var.instance_type}" + internet_max_bandwidth_out = 0 + io_optimized = "${var.io_optimized}" + + system_disk_category = "cloud_efficiency" + image_id = "${var.image_id}" + instance_name = "tf_vpc_snat" +} \ No newline at end of file diff --git a/examples/vpc-snat/ouputs.tf b/examples/vpc-snat/ouputs.tf new file mode 100644 index 00000000000..f9a55914f3e --- /dev/null +++ b/examples/vpc-snat/ouputs.tf @@ -0,0 +1,7 @@ +output "instance_id" { + value = "${alicloud_instance.default.id}" +} + +output "bindwidth_package_ip" { + value = "${alicloud_nat_gateway.default.bandwidth_packages.0.public_ip_addresses}" +} diff --git a/examples/vpc-snat/variables.tf b/examples/vpc-snat/variables.tf new file mode 100644 index 00000000000..9e9eb76dbce --- /dev/null +++ b/examples/vpc-snat/variables.tf @@ -0,0 +1,22 @@ + +variable "vpc_cidr" { + default = "10.1.0.0/21" +} +variable "vswitch_cidr" { + default = "10.1.1.0/24" +} +variable "rule_policy" { + default = "accept" +} +variable "instance_type" { + default = "ecs.n1.small" +} +variable "image_id" { + default = "ubuntu_140405_64_40G_cloudinit_20161115.vhd" +} +variable "io_optimized" { + default = "optimized" +} +variable "disk_category"{ + default = "cloud_efficiency" +} \ No newline at end of file