Elastic IP Address (EIP) adalah sumber daya alamat IP publik yang dapat Anda beli dan kelola secara independen. Setelah mengasosiasikan EIP dengan sumber daya cloud, sumber daya tersebut dapat menggunakan EIP tersebut untuk berkomunikasi dengan Internet. Misalnya, jika Anda menjalankan beberapa aplikasi pada satu Instance ECS, Anda dapat menetapkan Elastic Network Interface (ENI) sekunder terpisah beserta EIP independen untuk setiap aplikasi, sehingga masing-masing aplikasi memiliki alamat IP publik sendiri. Topik ini menjelaskan cara mengasosiasikan EIP dengan ENI sekunder.
Kode contoh dalam tutorial ini mendukung eksekusi satu klik. Anda dapat menjalankan kode tersebut secara langsung. Jalankan satu klik
Sumber Daya
alicloud_eip_address: Membuat EIP.
alicloud_eip_association: Mengasosiasikan EIP dengan sumber daya cloud, seperti Instance ECS atau ENI.
alicloud_vpc: Membuat VPC.
alicloud_vswitch: Membuat virtual switch.
alicloud_security_group: Membuat security group.
alicloud_security_group_rule: Menambahkan aturan kontrol akses ke security group.
alicloud_ecs_network_interface: Membuat ENI.
Buat file konfigurasi
Buat file bernama terraform.tf, tambahkan konten berikut, lalu simpan file tersebut.
provider "alicloud" {
region = var.region
}
# Wilayah tempat sumber daya akan dibuat.
variable "region" {
default = "cn-beijing"
description = "Wilayah tempat sumber daya akan dibuat."
}
# ID VPC yang ada. Parameter ini diperlukan saat Anda mengaitkan ENI dengan instance ECS yang ada. Nilainya harus VPC dari instance ECS tersebut.
variable "vpc_id" {
default = ""
description = "Saat mengaitkan ENI ke instance ECS yang ada, nilai ini diperlukan dan harus merupakan VPC yang terkait dengan instance ECS tersebut."
}
# Blok CIDR untuk VPC. Anda dapat mengosongkan parameter ini jika Anda menentukan vpc_id.
variable "vpc_cidr_block" {
default = "192.168.0.0/16"
description = "Tentukan blok CIDR dari VPC. Jika vpc_id disediakan, nilai ini dapat dikosongkan."
}
# Zona. Parameter ini diperlukan saat Anda mengaitkan ENI dengan instance ECS yang ada. Nilainya harus zona tempat instance ECS berada.
variable "zone_id" {
default = ""
description = "Saat mengaitkan ENI ke instance ECS yang ada, nilai ini diperlukan dan harus merupakan zona tempat instance ECS berada."
}
# Blok CIDR untuk vSwitch. Blok CIDR harus berada dalam blok CIDR dari VPC.
variable "vswitch_cidr_block" {
default = "192.168.0.0/24"
description = "Tentukan blok CIDR dari VSwitch. Blok CIDR harus berada dalam rentang blok CIDR VPC."
}
# Alamat IP sumber untuk mengakses ENI.
variable "source_ip" {
description = "Alamat IP yang Anda gunakan untuk mengakses ENI."
type = string
default = "0.0.0.0/0"
}
# Alamat IP pribadi dari ENI.
variable "private_ip" {
description = "Alamat IP pribadi utama dari ENI. Alamat IP yang ditentukan harus tersedia dalam blok CIDR dari VSwitch. Jika parameter ini tidak ditentukan, alamat IP yang tersedia akan ditetapkan dari blok CIDR VSwitch secara acak."
type = string
default = ""
}
locals {
new_zone_id = var.zone_id == ""
create_vpc = var.vpc_id == ""
}
resource "alicloud_eip" "eip" {
address_name = "test_eip"
}
resource "alicloud_vpc" "vpc" {
count = local.create_vpc ? 1 : 0
vpc_name = "test_vpc"
cidr_block = var.vpc_cidr_block
}
data "alicloud_zones" "default" {
count = local.new_zone_id ? 1 : 0
available_resource_creation = "VSwitch"
}
resource "alicloud_vswitch" "vswitch" {
vswitch_name = "test_vswitch"
cidr_block = var.vswitch_cidr_block
zone_id = local.new_zone_id ? data.alicloud_zones.default[0].zones.0.id : var.zone_id
vpc_id = local.create_vpc ? alicloud_vpc.vpc[0].id : var.vpc_id
}
resource "alicloud_security_group" "group" {
security_group_name = "test_sg"
vpc_id = local.create_vpc ? alicloud_vpc.vpc[0].id : var.vpc_id
}
# Tambahkan aturan untuk mengizinkan lalu lintas masuk pada port TCP 80.
resource "alicloud_security_group_rule" "allow_80_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "80/80"
priority = 1
security_group_id = alicloud_security_group.group.id
cidr_ip = var.source_ip
}
resource "alicloud_network_interface" "default" {
network_interface_name = "test_eni"
vswitch_id = alicloud_vswitch.vswitch.id
security_group_ids = [alicloud_security_group.group.id]
primary_ip_address = var.private_ip
secondary_private_ip_address_count = 1
}
resource "alicloud_eip_association" "default" {
allocation_id = alicloud_eip.eip.id
instance_type = "NetworkInterface"
instance_id = alicloud_network_interface.default.id
}Buat sumber daya
Jalankan perintah berikut di folder tempat file terraform.tf berada.
Jalankan
terraform inituntuk menginisialisasi Terraform. Output berikut menunjukkan bahwa inisialisasi telah selesai.Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.Jalankan
terraform applydan masukkanyespada prompt untuk membuat sumber daya. Output berikut menunjukkan bahwa sumber daya telah dibuat.Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes alicloud_vpc.vpc: Creating... alicloud_eip.eip: Creating... ... Apply complete! Resources: 7 added, 0 changed, 0 destroyed.CatatanJika Anda membuat ENI untuk diasosiasikan dengan Instance ECS yang sudah ada, jalankan
terraform applydan berikan parameter yang diperlukan. Contohnya:terraform apply -var source_ip=XX.XX.XX.XX -var vpc_id=vpc-2vc4ctyuxpq6nXXXXXXXXX -var zone_id=cn-beijing-a -var vswitch_cidr_block=XX.XX.XX.XX/XX.Jalankan
terraform showuntuk melihat sumber daya yang telah dibuat, termasuk VPC, EIP, dan ENI.CatatanAnda juga dapat melihat sumber daya yang telah dibuat di Konsol.
Bersihkan sumber daya
Jika Anda tidak lagi memerlukan sumber daya yang dibuat atau dikelola oleh Terraform, jalankan perintah terraform destroy untuk melepaskannya.
terraform destroyReferensi
Setelah membuat ENI, Anda dapat mengasosiasikannya dengan Instance ECS di zona dan VPC yang sama. Untuk informasi selengkapnya, lihat Buat dan gunakan ENI.
Untuk informasi selengkapnya tentang perintah Terraform, lihat Perintah Terraform umum.