16.1 Billing Management and Few Other Services
Vložit
- čas přidán 12. 09. 2024
- 16 Billing Management and Few Other Services
The example launches ECS instance, disk, and attached the disk on ECS. the count parameter in variables.tf can let you create specify number ECS instances. To learn more about Terraform explore our Terraform Courses.
provider "alicloud" {
access_key = ""
secret_key = ""
region = ""
}
variable "number" {
default = "1"
}
variable "count_format" {
default = "%02d"
}
variable "image_id" {
default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
}
variable "role" {
default = "work"
}
variable "datacenter" {
default = "beijing"
}
variable "short_name" {
default = "hi"
}
variable "ecs_type" {
default = "ecs.n4.small"
}
variable "ecs_password" {
default = "Test12345"
}
variable "internet_charge_type" {
default = "PayByTraffic"
}
variable "internet_max_bandwidth_out" {
default = 5
}
variable "disk_category" {
default = "cloud_efficiency"
}
variable "disk_size" {
default = "40"
}
variable "nic_type" {
default = "intranet"
}
data "alicloud_instance_types" "instance_type" {
instance_type_family = "ecs.n4"
cpu_core_count = "1"
memory_size = "2"
}
resource "alicloud_security_group" "group" {
name = var.short_name
description = "New security group"
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_http_80" {
type = "ingress"
ip_protocol = "tcp"
nic_type = var.nic_type
policy = "accept"
port_range = "80/80"
priority = 1
security_group_id = alicloud_security_group.group.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_https_443" {
type = "ingress"
ip_protocol = "tcp"
nic_type = var.nic_type
policy = "accept"
port_range = "443/443"
priority = 1
security_group_id = alicloud_security_group.group.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_disk" "disk" {
availability_zone = alicloud_instance.instance[0].availability_zone
category = var.disk_category
size = var.disk_size
count = var.number
}
resource "alicloud_vpc" "vpc" {
cidr_block = "172.16.0.0/12"
}
data "alicloud_zones" "zones_ds" {
available_instance_type = data.alicloud_instance_types.instance_type.instance_types[0].id
}
resource "alicloud_vswitch" "vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/24"
availability_zone = data.alicloud_zones.zones_ds.zones[0].id
}
resource "alicloud_instance" "instance" {
instance_name = "${var.short_name}-${var.role}-${format(var.count_format, count.index + 1)}"
host_name = "${var.short_name}-${var.role}-${format(var.count_format, count.index + 1)}"
image_id = var.image_id
instance_type = data.alicloud_instance_types.instance_type.instance_types[0].id
count = var.number
security_groups = alicloud_security_group.group.*.id
vswitch_id = alicloud_vswitch.vswitch.id
internet_charge_type = var.internet_charge_type
internet_max_bandwidth_out = var.internet_max_bandwidth_out
password = var.ecs_password
instance_charge_type = "PostPaid"
system_disk_category = "cloud_efficiency"
security_enhancement_strategy = "Deactive"
data_disks {
name = "disk1"
size = "20"
category = "cloud"
description = "disk1"
}
data_disks {
name = "disk2"
size = "20"
category = "cloud"
description = "disk2"
}
tags = {
role = var.role
dc = var.datacenter
}
}
resource "alicloud_disk_attachment" "instance-attachment" {
count = var.number
disk_id = alicloud_disk.disk.*.id[count.index]
instance_id = alicloud_instance.instance.*.id[count.index]
}
output "hostname_list" {
value = join(",", alicloud_instance.instance.*.instance_name)
}
output "ecs_ids" {
value = join(",", alicloud_instance.instance.*.id)
}
output "ecs_public_ip" {
value = join(",", alicloud_instance.instance.*.public_ip)
}
output "tags" {
value = jsonencode(alicloud_instance.instance.*.tags)
}