全部产品
Search
文档中心

Resource Orchestration Service:Menyebarkan NGINX pada Instance ECS dengan Menggunakan Terraform

更新时间:Aug 12, 2025

Topik ini menjelaskan cara menyebarkan NGINX pada instance Elastic Compute Service (ECS) menggunakan Template Terraform.

Prasyarat

Anda harus memahami sintaksis dan struktur Template ROS. Untuk informasi lebih lanjut, lihat Memulai dengan template.

Skenario contoh

Buat instance ECS jenis jaringan virtual private cloud (VPC) di Konsol Manajemen Alibaba Cloud untuk menyebarkan NGINX.

2023-05-31_16-34-18..png

Catatan penggunaan

Anda dapat melihat tipe sumber daya dari sumber daya yang disebutkan sebelumnya untuk mendapatkan detail setiap properti sumber daya. Untuk informasi lebih lanjut, lihat Lihat tipe sumber daya.

Setiap topik tipe sumber daya memberikan informasi tentang properti sumber daya yang diperlukan dan opsional. Anda harus mendeklarasikan properti sumber daya yang diperlukan dari tipe sumber daya yang ingin digunakan di bagian Sumber daya Template Terraform.

Buat template

Untuk menemukan tipe sumber daya yang dibutuhkan bisnis Anda, lihat Daftar tipe sumber daya berdasarkan layanan.

Dalam contoh ini, tipe sumber daya berikut digunakan: alicloud_vpc, alicloud_instance, alicloud_vswitch, alicloud_security_group, dan alicloud_security_group_rule. NGINX disebarkan saat instance ECS dibuat.

Definisikan sumber daya dan dependensi sumber daya dalam template

Definisikan sumber daya jaringan dasar

Anda dapat mendefinisikan sumber daya jaringan dasar berikut: vpc, vsw, dan security_group.

  • Gunakan alicloud_vpc.vpc.id untuk menanyakan ID keluaran dari alicloud_vpc.

  • Gunakan var.*** untuk menanyakan nilai variabel kustom yang didefinisikan di bidang variable. Sebagai contoh, Anda dapat menggunakan var.zone_id untuk menanyakan nilai zone_id yang didefinisikan di bidang variable.

resource "alicloud_vpc" "vpc" {
  cidr_block = "10.1.0.0/21"
}
resource "alicloud_vswitch" "vsw" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "172.16.0.0/21"
  zone_id    = var.zone_id
}
resource "alicloud_security_group" "security_group" {
  name       = "new-group"
  vpc_id     = alicloud_vpc.vpc.id
}

Definisikan aturan grup keamanan

Anda dapat mendefinisikan aturan grup keamanan berikut: allow_ssh, allow_web, dan allow_egress.

Gunakan alicloud_security_group.security_group.id untuk menanyakan ID keluaran dari security_group.

# Ingress port 1 dari grup keamanan
resource "alicloud_security_group_rule" "allow_ssh" {
  security_group_id = alicloud_security_group.security_group.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  policy            = "accept"
  ip_protocol				= "tcp"
  port_range				= "22/22"
  priority					= 1
}

# Ingress port 2 dari grup keamanan
resource "alicloud_security_group_rule" "allow_web" {
  security_group_id = alicloud_security_group.security_group.id
  type 							= "ingress"
  cidr_ip						= "0.0.0.0/0"
  policy 						= "accept"
  ip_protocol				= "tcp"
  port_range				= "80/443"
  priority					= 1
}

# Egress port dari grup keamanan
resource "alicloud_security_group_rule" "allow_egress" {
  security_group_id = alicloud_security_group.security_group.id
  type 							= "egress"
  cidr_ip						= "0.0.0.0/0"
  policy 						= "accept"
  ip_protocol				= "tcp"
  port_range				= "1/65535"
  priority					= 1
}

Definisikan instance ECS

Anda dapat mendefinisikan sebuah instance ECS di dalam template.

  • Gunakan var.*** untuk menanyakan nilai variabel kustom yang didefinisikan di bidang variable. Sebagai contoh, Anda dapat menggunakan var.instance_type untuk menanyakan nilai instance_type yang didefinisikan di bidang variable.

  • Gunakan local.*** untuk menanyakan nilai variabel lokal yang didefinisikan di bidang locals. Sebagai contoh, Anda dapat menggunakan local.new_host_name untuk menanyakan nilai new_host_name yang didefinisikan di bidang locals.

  • Gunakan ${path.cwd} di user_data untuk menanyakan direktori kerja saat ini.

  • File user_data.sh menyediakan skrip inisialisasi yang harus dieksekusi pada instance ECS. Contoh skrip inisialisasi:

#!/bin/bash -v
# Pasang disk ke /disk1.
cat >> /root/InitDataDisk.sh << "EOF"
#!/bin/bash
echo "p
n
p
w
" |  fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /disk1
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
mount -a
# Konfigurasikan skrip instalasi.
yum install -y nginx
# Konfigurasikan skrip startup.
/usr/sbin/nginx

Kode berikut memberikan contoh template yang mendefinisikan instance ECS:

resource "alicloud_instance" "instance" {
      availability_zone					 = var.zone_id
      security_groups 					 = [alicloud_security_group.security_group.id]
      # seri III
      host_name 								 = local.new_host_name
      instance_type              = var.instance_type
      system_disk_size           = 500
      system_disk_category       = "cloud_essd"
      image_id                   = "centos_7_9_x64_20G_alibase_20210318.vhd"
      vswitch_id                 = alicloud_vswitch.vsw.id
      password                   = var.instance_password
      internet_charge_type 			 = "PayByTraffic"
      internet_max_bandwidth_out = 30
      instance_charge_type 			 = var.pay_type
      period 										 = var.pay_period
      period_unit 							 = var.pay_period_unit
      user_data									 = file("${path.cwd}/user-data.sh")
      data_disks {
        size        						 = 100
        category  						   = "cloud_essd"
      }
    }

Contoh template lengkap

variable "pay_type" {
	type                       = string
}
variable "pay_period_unit" {
	type                       = string
}
variable "pay_period" {
	type                       = number
}
variable "zone_id" {
	type                       = string
}
variable "vpc_cidr_block" {
	type                       = string
}
variable "vswitch_cidr_block" {
	type                       = string
} 
variable "instance_type" {
	type                       = string
}
variable "system_disk_category" {
	type                       = string
}
variable "system_disk_size" {
	type                       = number
}
variable "data_disk_category" {
	type                       = string
}
variable "data_disk_size" {
	type                       = number
} 
variable "instance_password" {
	type                       = string
}
# Nama sumber daya default
locals {
  production_name            = "nginx"
  new_scg_name 							 = "sg-for-${local.production_name}"
  new_host_name						   = "app-for-${local.production_name}"
}

resource "alicloud_vpc" "vpc" {
  cidr_block 								 = var.vpc_cidr_block
}

resource "alicloud_vswitch" "vsw" {
  vpc_id     								 = alicloud_vpc.vpc.id
  cidr_block 								 = var.vswitch_cidr_block
  zone_id    								 = var.zone_id
}

// Konfigurasi grup keamanan dasar
resource "alicloud_security_group" "security_group" {
  name        							 = local.new_scg_name
  description 							 = "nginx scg"
  vpc_id 										 =  alicloud_vpc.vpc.id
}

# Ingress port 1 dari grup keamanan
resource "alicloud_security_group_rule" "allow_ssh" {
  security_group_id 				 = alicloud_security_group.security_group.id
  type										   = "ingress"
  cidr_ip										 = "0.0.0.0/0"
  policy 							 		   = "accept"
  ip_protocol					 			 = "tcp"
  port_range							   = "22/22"
  priority								 	 = 1
}

# Ingress port 2 dari grup keamanan
resource "alicloud_security_group_rule" "allow_web" {
  security_group_id 			 	 = alicloud_security_group.security_group.id
  type											 = "ingress"
  cidr_ip										 = "0.0.0.0/0"
  policy									 	 = "accept"
  ip_protocol								 = "tcp"
  port_range								 = "80/443"
  priority									 = 1
}

# Egress port dari grup keamanan
resource "alicloud_security_group_rule" "allow_egress" {
  security_group_id 				 = alicloud_security_group.security_group.id
  type 											 = "egress"
  cidr_ip										 = "0.0.0.0/0"
  policy										 = "accept"
  ip_protocol								 = "tcp"
  port_range								 = "1/65535"
  priority									 = 1
}

# Konfigurasi instance dasar
resource "alicloud_instance" "instance" {
  availability_zone          = var.zone_id
  security_groups						 = [alicloud_security_group.security_group.id]
  # seri III
  host_name 								 = local.new_host_name
  instance_type              = var.instance_type
  system_disk_size           = var.system_disk_size
  system_disk_category       = var.system_disk_category
  image_id                   = "centos_7_9_x64_20G_alibase_20210318.vhd"
  vswitch_id                 = alicloud_vswitch.vsw.id
  password                   = var.instance_password
  internet_charge_type			 = "PayByTraffic"
  internet_max_bandwidth_out = 30
  instance_charge_type			 = var.pay_type
  period										 = var.pay_period
  period_unit								 = var.pay_period_unit
  user_data									 = file("${path.cwd}/user-data.sh")
  data_disks {
    size       							 = var.data_disk_size
    category 							   = var.data_disk_category
  }
}
# Alamat IP yang dikembalikan oleh NGINX
output "nginx_ip" {
  value										 	 = "http://${alicloud_instance.instance.public_ip}:8080"
}

Konversi template Terraform

Anda dapat mengonversi template Terraform menjadi template ROS di Konsol ROS. Jika Anda menggunakan ROS, Anda dapat mengelompokkan parameter template dan secara dinamis mendapatkan pengaturan parameter.

  1. Masuk ke Konsol ROS.

  2. Di panel navigasi kiri, pilih Templates > My Templates.

  3. Di halaman My Templates, klik Create Template.

  4. Pilih Terraform Template di Template Type.

  5. Ubah isi template Terraform.

    1. Buat file main.tf dan masukkan isi dari contoh template Terraform.

    2. Buat file user-data.sh dan masukkan isi dari user_data.sh skrip inisialisasi.

  6. Pilih ROS Template di Template Type dan konversikan template Terraform menjadi template ROS. Contoh template ROS ditunjukkan di bawah ini.

    ROSTemplateFormatVersion: '2015-09-01'
    Transform: Aliyun::Terraform-v1.2
    Workspace:
      main.tf: |-
            variable "pay_type" {
              type 										   = string
            }
            variable "pay_period_unit" {
              type											 = string
            }
            variable "pay_period" {
              type											 = number
            }
            variable "zone_id" {
              type											 = string
            }
            variable "instance_type" {
              type											 = string
            }
            variable "vpc_cidr_block" {
              type											 = string
            }
            variable "vsw_cidr_block" {
              type											 = string
            }
            variable "instance_password" {
              type											 = string
            }
            # Nama sumber daya default.
            locals {
              production_name = "nginx"
              new_vpc_name  					   = "vpc-for-${local.production_name}"
              new_vsw_name  			 		   = "vsw-for-${local.production_name}"
              new_scg_name  						 = "sg-for-${local.production_name}"
              new_host_name   					 = "app-for-${local.production_name}"
            }
    
            resource "alicloud_vpc" "vpc" {
              vpc_name    					     = local.new_vpc_name
              cidr_block 								 = var.vpc_cidr_block
            }
    
    
            resource "alicloud_vswitch" "vsw" {
              vpc_id   								   = alicloud_vpc.vpc.id
              cidr_block								 = var.vsw_cidr_block
              zone_id   							   = var.zone_id
            }
    
            // Konfigurasi grup keamanan dasar
            resource "alicloud_security_group" "security_group" {
              name      							   = local.new_scg_name
              description							   = "nginx scg"
              vpc_id									   =  alicloud_vpc.vpc.id
            }
            
            # Ingress port 1 dari grup keamanan
            resource "alicloud_security_group_rule" "allow_ssh" {
              security_group_id				   = alicloud_security_group.security_group.id
              type 											 = "ingress"
              cidr_ip										 = "0.0.0.0/0"
              policy 										 = "accept"
              ip_protocol								 = "tcp"
              port_range								 = "22/22"
              priority						 		 	 = 1
            }
            
            # Ingress port 2 dari grup keamanan
            resource "alicloud_security_group_rule" "allow_web" {
              security_group_id					 = alicloud_security_group.security_group.id
              type											 = "ingress"
              cidr_ip										 = "0.0.0.0/0"
              policy										 = "accept"
              ip_protocol								 = "tcp"
              port_range								 = "80/443"
              priority									 = 1
            }
            
            # Egress port dari grup keamanan
            resource "alicloud_security_group_rule" "allow_egress" {
              security_group_id					 = alicloud_security_group.security_group.id
              type 											 = "egress"
              cidr_ip										 = "0.0.0.0/0"
              policy										 = "accept"
              ip_protocol								 = "tcp"
              port_range								 = "1/65535"
              priority						 			 = 1
            }
            
            # Konfigurasi instance dasar
            resource "alicloud_instance" "instance" {
              availability_zone					 = var.zone_id
              security_groups						 = [alicloud_security_group.security_group.id]
              # seri III
              host_name									 = local.new_host_name
              instance_type              = var.instance_type
              system_disk_size           = 500
              system_disk_category       = "cloud_essd"
              image_id                   = "centos_7_9_x64_20G_alibase_20210318.vhd"
              vswitch_id                 = alicloud_vswitch.vsw.id
              password                   = var.instance_password
              internet_charge_type 			 = "PayByTraffic"
              internet_max_bandwidth_out = 30
              instance_charge_type 			 = var.pay_type
              period 										 = var.pay_period
              period_unit								 = var.pay_period_unit
              user_data 								 = file("${path.cwd}/user-data.sh")
              data_disks {
                size       							 = 100
                category  						   = "cloud_essd"
              }
            }
            # Alamat IP yang dikembalikan oleh NGINX
            output "nginx_ip" {
              value											 = "http://${alicloud_instance.instance.public_ip}:8080"
            }
            
      user-data.sh: |-
        #!/bin/bash -v
        # Pasang disk ke /disk1.
        cat >> /root/InitDataDisk.sh << "EOF"
        #!/bin/bash
        echo "p
        n
        p
        w
        " |  fdisk -u /dev/vdb
        EOF
        /bin/bash /root/InitDataDisk.sh
        rm -f /root/InitDataDisk.sh
        mkfs -t ext4 /dev/vdb1
        cp /etc/fstab /etc/fstab.bak
        mkdir /disk1
        echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
        mount -a
        # Konfigurasikan skrip instalasi.
        yum install -y nginx
        # Konfigurasikan skrip startup.
        /usr/sbin/nginx
    

Tambahkan grup parameter dan peroleh pengaturan parameter secara dinamis

Template di atas mencakup sumber daya dan dependensi sumber daya yang dibutuhkan oleh bisnis Anda. Di dalam template, nilai dari system_disk_category bersifat statis. Jika Anda ingin membuat dan menyebarkan stack menggunakan template ini di wilayah lain, Anda harus mengubah isi template dan mengganti properti sumber daya.

Dalam kasus ini, Anda dapat menambahkan bagian Parameters ke template untuk meningkatkan fleksibilitas dan kemampuan penggunaan ulang template.

Tambahkan grup parameter

Anda dapat menggunakan Metadata untuk mengelompokkan parameter yang didefinisikan di bagian Parameters dan mendefinisikan label untuk setiap grup. Untuk informasi lebih lanjut, lihat Metadata.

Anda dapat mengelompokkan parameter berdasarkan sumber daya yang sesuai dengan parameter tersebut. Tabel berikut menggunakan template di atas sebagai contoh untuk menjelaskan cara mengelompokkan parameter.

Grup

Sumber Daya

Parameter

Konfigurasi jaringan dasar

vpc, vsw, dan security_group

zone_id, vpc_cidr_block, dan vswitch_cidr_block

Konfigurasi instance ECS

instance

instance_type, system_disk_category, system_disk_size, data_disk_category, data_disk_size, dan instance_password

Di tab Terraform, buat file .metadata dan masukkan konten berikut:

{
  "ALIYUN::ROS::Interface": {
    "ParameterGroups": [
      {
        "Parameters": [
          "pay_type",
          "pay_period_unit",
          "pay_period"
        ],
        "Label": {
          "default": {
            "en": "Konfigurasi Mode Pembayaran",
             
          }
        }
      },
      {
        "Parameters": [
          "zone_id"
        ],
        "Label": {
          "default": {
             
            "en": "Konfigurasi Zona"
          }
        }
      },
      {
        "Parameters": [
          "vpc_cidr_block",
          "vswitch_cidr_block"
        ],
        "Label": {
          "default": {
             
            "en": "Pilih Konfigurasi Infrastruktur yang Ada"
          }
        }
      },
      {
        "Parameters": [
          "instance_type",
          "system_disk_category",
          "system_disk_size",
          "data_disk_category",
          "data_disk_size",
          "instance_password"
        ],
        "Label": {
          "default": {
            "en": "Instance",
             
          }
        }
      }
    ]
  }
}

Peroleh pengaturan parameter secara dinamis

Bagian berikut menggunakan parameter instance sebagai contoh untuk menjelaskan cara memperoleh pengaturan parameter secara dinamis. Jika Anda ingin mengonfigurasi kondisi filter untuk parameter instance di Konsol ROS dan secara dinamis mendapatkan pengaturan parameter berdasarkan kondisi filter yang berbeda, Anda dapat menggunakan tipe sumber daya ALIYUN::ECS::Instance yang sesuai dengan parameter instance untuk menanyakan nilai dari AssociationProperty yang didukung oleh parameter instance di topik "AssociationProperty and AssociationPropertyMetadata" dokumentasi ROS. Kemudian, Anda dapat menanyakan nilai dari AssociationPropertyMetadata yang didukung oleh parameter instance ketika ZoneId digunakan sebagai kondisi filter dari AssociationProperty. Dalam contoh ini, nilai dari AssociationProperty yang didukung oleh parameter instance adalah ALIYUN::ECS::Instance::InstanceType. Untuk informasi lebih lanjut, lihat AssociationProperty dan AssociationPropertyMetadata.

Di tab Terraform, masukkan konten berikut di file main.tf:

variable "pay_type" {
  type 				= string
  default     = "PostPaid"
  description = <<EOT
  {
    "Label": {
      "en": "Tipe Biaya Instance ECS",
       
    },
    "AllowedValues": [
      "PostPaid",
      "PrePaid"
    ],
    "AssociationProperty": "ChargeType",
    "AssociationPropertyMetadata": {
      "LocaleKey": "InstanceChargeType"
    }
  }
  EOT
}
variable "pay_period_unit" {
  type 				= string
  default     = "Month"
  description = <<EOT
  {
    "Label": {
      "en": "Unit Periode Pembayaran",
       
    },
    "AllowedValues": [
      "Month",
      "Year"
    ],
    "AssociationProperty": "PayPeriodUnit",
    "AssociationPropertyMetadata": {
      "Visible": {
        "Condition": {
          "Fn::Not": {
            "Fn::Equals": [
              "$${pay_type}",
              "PostPaid"
            ]
          }
        }
      }
    }
  }
  EOT
}
variable "pay_period" {
  type				 = number
  default     = 1
  description = <<EOT
  {
    "Label": {
      "en": "Periode",
       
    },
    "AllowedValues": [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9
    ],
    "AssociationProperty": "PayPeriod",
    "AssociationPropertyMetadata": {
      "Visible": {
        "Condition": {
          "Fn::Or": [
            {
              "Fn::Equals": [
                "$${pay_type}",
                "PrePaid"
              ]
            },
            {
              "Fn::Equals": [
                "$${pay_type}",
                "undefined"
              ]
            }
          ]
        }
      }
    }
  }
  EOT
}
variable "zone_id" {
  type			  = string
  description = <<EOT
  {
    "AssociationProperty": "ALIYUN::ECS::Instance:ZoneId",
    "Description": {
        </font></b>",
      "en": "ID Zona Ketersediaan.

Tambahkan dependensi dan batasan parameter template

Template di atas mendefinisikan sebuah instance ECS. Anda perlu menambahkan batasan untuk parameter berikut ke template: zone_id, instance_type, vswitch_id, system_disk_category, system_disk_size, data_disk_category, dan data_disk_size. Parameter di atas terkait dengan parameter alicloud_instance.

Di bidang ResourcesForParameterConstraints, Anda hanya perlu mendefinisikan tipe sumber daya ALIYUN::ECS::Instance (alicloud_instance) dan mengasosiasikan tipe sumber daya tersebut dengan image_id, instance_type, dan zone_id untuk menambahkan batasan.

{
  "ALIYUN::ROS::Interface": {
    "ResourcesForParameterConstraints": {
      "instance": {
        "Type": "ALIYUN::ECS::Instance",
        "Properties": {
          "InstanceType": {
            "Ref": "instance_type"
          },
          "ImageId": "centos_7_9_x64_20G_alibase_20210318.vhd",
          "VSwitchId": {
            "Ref": "vswitch_id"
          },
          "ZoneId": {
            "Ref": "zone_id"
          },
          "SystemDiskCategory": {
            "Ref": "system_disk_category"
          },
          "SystemDiskSize": {
            "Ref": "system_disk_size"
          },
          "DataDiskCategory": {
            "Ref": "data_disk_category"
          },
          "DataDiskSize": {
            "Ref": "data_disk_size"
          }
        }
      }
    },
    "ParameterGroups": [
      {
        "Parameters": [
          "pay_type",
          "pay_period_unit",
          "pay_period"
        ],
        "Label": {
          "default": {
            "en": "Konfigurasi Mode Pembayaran",
             
          }
        }
      },
      {
        "Parameters": [
          "zone_id"
        ],
        "Label": {
          "default": {
             
            "en": "Konfigurasi Zona"
          }
        }
      },
      {
        "Parameters": [
          "vpc_cidr_block",
          "vswitch_cidr_block"
        ],
        "Label": {
          "default": {
             
            "en": "Pilih Konfigurasi Infrastruktur yang Ada"
          }
        }
      },
      {
        "Parameters": [
          "instance_type",
          "system_disk_category",
          "system_disk_size",
          "data_disk_category",
          "data_disk_size",
          "instance_password"
        ],
        "Label": {
          "default": {
            "en": "Instance",
             
          }
        }
      }
    ]
  }
}

Contoh template lengkap

ROSTemplateFormatVersion: '2015-09-01'
Transform: Aliyun::Terraform-v1.2
Workspace:
  .metadata: |-
    {
      "ALIYUN::ROS::Interface": {
        "ResourcesForParameterConstraints": {
          "instance": {
            "Type": "ALIYUN::ECS::Instance",
            "Properties": {
              "InstanceType": {
                "Ref": "instance_type"
              },
              "ImageId": "centos_7_9_x64_20G_alibase_20210318.vhd",
              "VSwitchId": {
                "Ref": "vswitch_id"
              },
              "ZoneId": {
                "Ref": "zone_id"
              },
              "SystemDiskCategory": {
                "Ref": "system_disk_category"
              },
              "SystemDiskSize": {
                "Ref": "system_disk_size"
              },
              "DataDiskCategory": {
                "Ref": "data_disk_category"
              },
              "DataDiskSize": {
                "Ref": "data_disk_size"
              }
            }
          }
        },
        "ParameterGroups": [
          {
            "Parameters": [
              "pay_type",
              "pay_period_unit",
              "pay_period"
            ],
            "Label": {
              "default": {
                "en": "Konfigurasi Mode Pembayaran",
                 
              }
            }
          },
          {
            "Parameters": [
              "zone_id"
            ],
            "Label": {
              "default": {
                 
                "en": "Konfigurasi Zona"
              }
            }
          },
          {
            "Parameters": [
              "vpc_cidr_block",
              "vswitch_cidr_block"
            ],
            "Label": {
              "default": {
                 
                "en": "Pilih Konfigurasi Infrastruktur yang Ada"
              }
            }
          },
          {
            "Parameters": [
              "instance_type",
              "system_disk_category",
              "system_disk_size",
              "data_disk_category",
              "data_disk_size",
              "instance_password"
            ],
            "Label": {
              "default": {
                "en": "Instance",
                 
              }
            }
          }
        ]
      }
    }
  main.tf: |-
    variable "pay_type" {
      type			  = string
      default     = "PostPaid"
      description = <<EOT
      {
        "Label": {
          "en": "Tipe Biaya Instance ECS",
           
        },
        "AllowedValues": [
          "PostPaid",
          "PrePaid"
        ],
        "AssociationProperty": "ChargeType",
        "AssociationPropertyMetadata": {
          "LocaleKey": "InstanceChargeType"
        }
      }
      EOT
    }
    variable "pay_period_unit" {
      type			  = string
      default     = "Month"
      description = <<EOT
      {
        "Label": {
          "en": "Unit Periode Pembayaran",
           
        },
        "AllowedValues": [
          "Month",
          "Year"
        ],
        "AssociationProperty": "PayPeriodUnit",
        "AssociationPropertyMetadata": {
          "Visible": {
            "Condition": {
              "Fn::Not": {
                "Fn::Equals": [
                  "$${pay_type}",
                  "PostPaid"
                ]
              }
            }
          }
        }
      }
      EOT
    }
    variable "pay_period" {
      type			  = number
      default     = 1
      description = <<EOT
      {
        "Label": {
          "en": "Periode",
           
        },
        "AllowedValues": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "AssociationProperty": "PayPeriod",
        "AssociationPropertyMetadata": {
          "Visible": {
            "Condition": {
              "Fn::Or": [
                {
                  "Fn::Equals": [
                    "$${pay_type}",
                    "PrePaid"
                  ]
                },
                {
                  "Fn::Equals": [
                    "$${pay_type}",
                    "undefined"
                  ]
                }
              ]
            }
          }
        }
      }
      EOT
    }
    variable "zone_id" {
      type			  = string
      description = <<EOT
      {
        "AssociationProperty": "ALIYUN::ECS::Instance:ZoneId",
        "Description": {
            </font></b>",
          "en": "ID Zona Ketersediaan.