All Products
Search
Document Center

ApsaraDB for MongoDB:Integrasikan ApsaraDB for MongoDB menggunakan Terraform

Last Updated:Jun 25, 2026

Topik ini menjelaskan cara menggunakan Terraform untuk membuat instans ApsaraDB for MongoDB.

Catatan

Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik.

Untuk informasi selengkapnya tentang Terraform, lihat Apa itu Terraform?. Untuk informasi lebih lanjut tentang tipe resource MongoDB yang didukung oleh Terraform, lihat Ikhtisar integrasi atau Alibaba Cloud Provider.

Arsitektur resource

image.png

Templat ini membuat VPC dan vSwitch di wilayah tertentu, lalu membuat instans set replika MongoDB.

Prasyarat

  • Akun Alibaba Cloud memiliki izin penuh atas semua resource yang dimiliki akun tersebut. Jika kredensial identitas Akun Alibaba Cloud bocor, risiko keamanan mungkin timbul. Kami menyarankan Anda menggunakan pengguna Resource Access Management (RAM) dan membuat Pasangan Kunci Akses untuk pengguna RAM tersebut. Untuk informasi selengkapnya, lihat Buat pengguna RAM dan Buat Pasangan Kunci Akses.

  • Izin AliyunMongoDBFullAccess diberikan kepada Pengguna RAM untuk mengelola ApsaraDB for MongoDB, sedangkan izin AliyunVPCFullAccess digunakan untuk mengelola virtual private cloud (VPC). Contoh kode berikut menunjukkan cara memberikan kedua izin tersebut kepada Pengguna RAM. Untuk informasi selengkapnya, lihat Memberikan izin kepada Pengguna RAM.

    {
        "Version": "1",
        "Statement": [
            {
                "Action": "dds:*",
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "vpc:DescribeVpcs",
                    "vpc:DescribeVSwitches",
                    "vpc:CreateVpc",
                    "vpc:DeleteVpc",
                    "vpc:ModifyVpcAttribute",
                    "vpc:CreateVSwitch",
                    "vpc:DeleteVSwitch",
                    "vpc:ModifyVSwitchAttribute"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": "hdm:*",
                "Resource": "acs:dds:*:*:*",
                "Effect": "Allow"
            },
            {
                "Action": "dms:LoginDatabase",
                "Resource": "acs:dds:*:*:*",
                "Effect": "Allow"
            },
            {
                "Action": "ram:CreateServiceLinkedRole",
                "Resource": "*",
                "Effect": "Allow",
                "Condition": {
                    "StringEquals": {
                        "ram:ServiceName": "mongodb.aliyuncs.com"
                    }
                }
            }
        ]
    }
    
  • Persiapkan lingkungan runtime untuk Terraform dengan salah satu metode berikut:

    • Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan Terraform Explorer, yaitu lingkungan runtime online untuk Terraform. Anda dapat menggunakan Terraform setelah login ke Terraform Explorer tanpa perlu menginstal Terraform. Metode ini cocok untuk skenario di mana Anda ingin menggunakan dan men-debug Terraform secara cepat dan mudah tanpa biaya tambahan.

    • Gunakan Terraform di Cloud Shell: Terraform telah terinstal sebelumnya di Cloud Shell dan kredensial identitas telah dikonfigurasi. Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario di mana Anda ingin menggunakan dan men-debug Terraform secara cepat dan mudah dengan biaya rendah.

    • Instal dan konfigurasikan Terraform di mesin lokal Anda: Metode ini cocok untuk skenario di mana koneksi jaringan tidak stabil atau diperlukan lingkungan pengembangan kustom.

Penting

Anda harus menginstal Terraform versi 0.12.28 atau yang lebih baru. Anda dapat menjalankan perintah terraform --version untuk memeriksa versi Terraform.

Catatan

Biaya akan dikenakan untuk resource tertentu dalam contoh ini. Batalkan langganan resource tersebut jika Anda tidak lagi membutuhkannya.

Resource yang diperlukan

Gunakan Terraform untuk membuat instans ApsaraDB for MongoDB.

  1. Buat direktori kerja dan file konfigurasi bernama main.tf di dalam direktori tersebut. main.tf adalah file utama Terraform dan mendefinisikan resource yang ingin Anda deploy.

    Instans mandiri

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # Deklarasikan variabel 'name'.
    variable "name" {
      default = "terraform-example-1125"
    }
    variable "engine_version" {
      default = "7.0"
    }
    variable "db_instance_class" {
      default = "mdb.shard.2x.xlarge.d"
    }
    # Kueri zona ketersediaan yang tersedia.
    data "alicloud_mongodb_zones" "default" {
    }
    # Gunakan nilai lokal untuk mendapatkan ID zona ketersediaan terakhir dari sumber data.
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # Buat resource VPC.
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # Buat vSwitch di zona ketersediaan tertentu dalam VPC.
    resource "alicloud_vswitch" "default" {
      vswitch_name = var.name
      cidr_block   = "172.16.20.0/24"
      vpc_id       = alicloud_vpc.vpc1.id
      zone_id      = local.zone_id
    }
    # Buat instans mandiri menggunakan VPC dan vSwitch.
    resource "alicloud_mongodb_instance" "singleNode" {
      # (Wajib) Versi database.
      engine_version      = var.engine_version
      # (Wajib) Tipe instans.
      db_instance_class   = var.db_instance_class
      # (Wajib) Kapasitas penyimpanan instans, dalam GB.
      db_instance_storage = 20
      # Jenis jaringan instans.
      network_type        = "VPC"
      # (Opsional, ForceNew) ID vSwitch tempat instans terhubung dalam VPC.
      vswitch_id          = alicloud_vswitch.default.id
      # ID VPC.
      vpc_id              = alicloud_vpc.vpc1.id
      # (Opsional, ForceNew) Zona ketersediaan tempat instans berada.
      zone_id             = local.zone_id
      # Nama instans.  
      name                = var.name
      # (Opsional, tersedia mulai v1.199.0) Jenis penyimpanan instans.
      # storage_type        = "cloud_auto"
      # (Opsional) Pemetaan tag yang ditetapkan ke resource.
      # tags = {
      #   Created = "TF"
      #   For     = "example"
      #   }
      # (Opsional, List) Daftar alamat IP yang diizinkan mengakses semua database instans.
      # security_ip_list    = [
            # "10.168.1.12",
            # "100.69.7.112"
      #   ]
    }

    Untuk informasi selengkapnya tentang cara mengonfigurasi tipe resource alicloud_mongodb_instance, lihat alicloud_mongodb_instance.

    Instans set replika

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # Deklarasikan variabel 'name'.
    variable "name" {
      default = "terraform-example-1125"
    }
    variable "engine_version" {
      default = "7.0"
    }
    variable "db_instance_class" {
      default = "mdb.shard.2x.xlarge.d"
    }
    # Kueri zona ketersediaan yang tersedia.
    data "alicloud_mongodb_zones" "default" {
    }
    # Gunakan nilai lokal untuk mendapatkan ID zona ketersediaan terakhir dari sumber data.
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # Buat resource VPC.
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # Buat vSwitch di zona ketersediaan tertentu dalam VPC.
    resource "alicloud_vswitch" "default" {
      vswitch_name = var.name
      cidr_block   = "172.16.20.0/24"
      vpc_id       = alicloud_vpc.vpc1.id
      zone_id      = local.zone_id
    }
    # Buat instans set replika menggunakan VPC dan vSwitch.
    resource "alicloud_mongodb_instance" "default" {
      engine_version      = var.engine_version
      db_instance_class   = var.db_instance_class
      db_instance_storage = 20
      network_type        = "VPC"
      vswitch_id          = alicloud_vswitch.default.id
      vpc_id              = alicloud_vpc.vpc1.id
      security_ip_list    = ["10.168.1.12", "100.69.7.112"]
      name                = var.name
      tags = {
        Created = "TF"
        For     = "example"
      }
    }

    Untuk informasi selengkapnya tentang cara mengonfigurasi tipe resource alicloud_mongodb_instance, lihat alicloud_mongodb_instance.

    Instans kluster sharded

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # Deklarasikan variabel 'name'.
    variable "name" {
      default = "terraform-example-1125"
    }
    # Kueri zona ketersediaan yang tersedia.
    data "alicloud_mongodb_zones" "default" {
    }
    # Gunakan nilai lokal untuk mendapatkan ID zona ketersediaan terakhir dari sumber data.
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # Buat resource VPC.
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # Buat vSwitch di zona ketersediaan tertentu dalam VPC.
    resource "alicloud_vswitch" "default" {
      vswitch_name = var.name
      cidr_block   = "172.16.20.0/24"
      vpc_id       = alicloud_vpc.vpc1.id
      zone_id      = local.zone_id
    }
    # Buat instans kluster sharded menggunakan VPC dan vSwitch.
    resource "alicloud_mongodb_sharding_instance" "default" {
      # (Wajib) Versi database.
      engine_version      = "7.0"
      # (Opsional, ForceNew) ID vSwitch instans.
      vswitch_id          = alicloud_vswitch.default.id
      # Jenis jaringan instans.
      network_type        = "VPC"
      # ID VPC instans.
      vpc_id              = alicloud_vpc.vpc1.id
      # Nama instans.
      name                = var.name
      # Zona ketersediaan.
      zone_id = local.zone_id
      # Node mongos instans. Jumlah node harus antara 2 hingga 32. Lihat mongo_list di bawah.
      mongo_list {
        # (Wajib) Tipe instans node mongos.
        node_class = "mdb.shard.2x.xlarge.d"
      }
      mongo_list {
        node_class = "mdb.shard.2x.xlarge.d"
      }
      # (Wajib, Set) Node shard instans. Anda dapat membeli 2 hingga 32 node shard. Lihat shard_list di bawah.
      shard_list {
        # (Wajib) Tipe instans node shard.
        node_class   = "mdb.shard.2x.xlarge.d"
        #  (Wajib, Int) Kapasitas penyimpanan node shard.
        node_storage = 20
      }
      shard_list {
        node_class        = "mdb.shard.2x.xlarge.d"
        node_storage      = 20
        # Jumlah node read-only dalam node shard. Nilai default: 0. Nilai valid: 0 hingga 5.
        readonly_replicas = 1
      }
      config_server_list {
        # Tipe instans node ConfigServer. Nilai valid: mdb.shard.2x.xlarge.d dan dds.cs.mid.
        node_class ="mdb.shard.2x.xlarge.d"
        # Kapasitas penyimpanan node ConfigServer.
        node_storage = "20"
      }
      # Pemetaan tag yang ditetapkan ke resource.
      tags = {
        Created = "TF"
        For     = "Example"
      }
    }

    Untuk informasi selengkapnya tentang cara mengonfigurasi tipe resource alicloud_mongodb_sharding_instance, lihat alicloud_mongodb_sharding_instance.

  2. Jalankan perintah berikut untuk menginisialisasi Terraform:

    terraform init

    Jika informasi berikut dikembalikan, Terraform berhasil diinisialisasi.

    Initializing the backend...
    Initializing provider plugins...
    - Finding latest version of hashicorp/alicloud...
    - Installing hashicorp/alicloud v1.234.0...
    - Installed hashicorp/alicloud v1.234.0 (signed by HashiCorp)
    Terraform has created a lock file .terraform.lock.hcl to record the provider
    selections it made above. Include this file in your version control repository
    so that Terraform can guarantee to make the same selections by default when
    you run "terraform init" in the future.
    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.
  3. Buat rencana eksekusi dan pratinjau perubahan.

    terraform plan
  4. Jalankan perintah berikut untuk membuat instans ApsaraDB for MongoDB.

    terraform apply

    Saat diminta, masukkan yes dan tekan Enter. Output berikut menunjukkan bahwa instans ApsaraDB for MongoDB berhasil dibuat.

    Plan: 3 to add, 0 to change, 0 to destroy.
    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.vpc1: Creating...
    alicloud_vpc.vpc1: Creation complete after 6s [id=vpc-f8zov2h1snsl2bm9qz***]
    alicloud_vswitch.default: Creating...
    alicloud_vswitch.default: Creation complete after 3s [id=vsw-f8zswqowidqw16ypc2***]
    alicloud_mongodb_instance.singleNode: Creating...
    alicloud_mongodb_instance.singleNode: Still creating... [10s elapsed]
    alicloud_mongodb_instance.singleNode: Still creating... [20s elapsed]
    alicloud_mongodb_instance.singleNode: Still creating... [30s elapsed]
    alicloud_mongodb_instance.singleNode: Still creating... [40s elapsed]
    alicloud_mongodb_instance.singleNode: Still creating... [50s elapsed]
    alicloud_mongodb_instance.singleNode: Still creating... [1m0s elapsed]
    alicloud_mongodb_instance.singleNode: Still creating... [1m10s elapsed]
    ...
    alicloud_mongodb_instance.singleNode: Still creating... [14m11s elapsed]
    alicloud_mongodb_instance.singleNode: Still creating... [14m21s elapsed]
    alicloud_mongodb_instance.singleNode: Creation complete after 14m29s [id=dds-f8z3a787aea1c***]
    Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
  5. Verifikasi hasilnya.

    Jalankan perintah terraform show

    Jalankan perintah berikut untuk mengkueri resource yang dibuat oleh Terraform:

    terraform show
    shell@Alicloud:~/ens/mongodb$ terraform show
    # alicloud_mongodb_instance.singleNode:
    resource "alicloud_mongodb_instance" "singleNode" {
        backup_interval                          = "-1"
        backup_period                            = [
            "Friday",
            "Monday",
            "Saturday",
            "Sunday",
            "Thursday",
            "Tuesday",
            "Wednesday",
        ]
        backup_retention_period                  = 30
        backup_retention_policy_on_cluster_deletion = 0
        backup_time                              = "07:00Z-08:00Z"
        db_instance_class                        = "mdb.shard.2x.xlarge.d"
        db_instance_storage                      = 20
        enable_backup_log                        = 1
        encrypted                                = false
        engine_version                           = "7.0"
        id                                       = "dds xxx"
        instance_charge_type                     = "PostPaid"
        log_backup_retention_period              = 30
        ...
    }
        maintain_end_time                        = "22:00Z"
        maintain_start_time                      = "18:00Z"
        name                                     = "terraform-example-1125"
        network_type                             = "VPC"
        provisioned_iops                         = 0
        readonly_replicas                        = 0
        replica_set_name                         = "mgset-84451431"
        replica_sets                             = [
            {
                connection_domain    = "xxx"
                connection_port      = "3717"
                network_type         = "VPC"
                replica_set_role     = "Primary"
                vpc_cloud_instance_id = "xxx"
                vpc_id               = "vpc-xxx"
                vswitch_id           = "vsw-xxx"
            },
        ]
        replication_factor                       = 3
        resource_group_id                        = "xxx"
        retention_period                         = 30
    }

    Login ke konsol ApsaraDB for MongoDB

    Setelah instans dibuat, Anda dapat menggunakan OpenAPI, SDK, atau login ke konsol ApsaraDB for MongoDB untuk memverifikasi keberhasilan operasi. Login ke konsol ApsaraDB for MongoDB dan buka halaman Replica Set Instances. Verifikasi bahwa instans yang dibuat oleh Terraform berada dalam status Running dan konfigurasinya sesuai dengan pengaturan Anda: instans berada di zona ketersediaan di China (Heyuan), kelas instans adalah mdb.shard.2x.xlarge.d, penyimpanan 20 GB, versi 7.0, jenis jaringan VPC, metode penagihan pay-as-you-go, dan arsitektur tiga node.

Melepaskan sumber daya

Jika Anda tidak lagi memerlukan resource yang dibuat atau dikelola oleh Terraform sebelumnya, jalankan perintah berikut untuk menghapus resource tersebut. Untuk informasi selengkapnya tentang perintah terraform destroy, lihat Perintah umum.

terraform destroy

Kode contoh

Catatan

Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik.

Kode contoh

variable "region" {
  default = "cn-heyuan"
}
provider "alicloud" {
  region = var.region
}
# Deklarasikan variabel 'name'.
variable "name" {
  default = "terraform-example-1125"
}
variable "engine_version" {
  default = "7.0"
}
variable "db_instance_class" {
  default = "mdb.shard.2x.xlarge.d"
}
# Kueri zona ketersediaan yang tersedia.
data "alicloud_mongodb_zones" "default" {
}
# Gunakan nilai lokal untuk mendapatkan ID zona ketersediaan terakhir dari sumber data.
locals {
  index   = length(data.alicloud_mongodb_zones.default.zones) - 1
  zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}
# Buat resource VPC.
resource "alicloud_vpc" "vpc1" {
  vpc_name   = var.name
  cidr_block = "172.16.0.0/12"
}
# Buat vSwitch di zona ketersediaan tertentu dalam VPC.
resource "alicloud_vswitch" "default" {
  vswitch_name = var.name
  cidr_block   = "172.16.20.0/24"
  vpc_id       = alicloud_vpc.vpc1.id
  zone_id      = local.zone_id
}
# Buat instans mandiri menggunakan VPC dan vSwitch.
resource "alicloud_mongodb_instance" "singleNode" {
  # (Wajib) Versi database.
  engine_version      = var.engine_version
  # (Wajib) Tipe instans.
  db_instance_class   = var.db_instance_class
  # (Wajib) Kapasitas penyimpanan instans, dalam GB.
  db_instance_storage = 20
  # Jenis jaringan instans.
  network_type        = "VPC"
  # (Opsional, ForceNew) ID vSwitch tempat instans terhubung dalam VPC.
  vswitch_id          = alicloud_vswitch.default.id
  # ID VPC.
  vpc_id              = alicloud_vpc.vpc1.id
  # (Opsional, ForceNew) Zona ketersediaan tempat instans berada.
  zone_id             = local.zone_id
  # Nama instans.  
  name                = var.name
  # (Opsional) Pemetaan tag yang ditetapkan ke resource.
  tags = {
    Created = "TF"
    For     = "example"
    }
  # (Opsional, List) Daftar alamat IP yang diizinkan mengakses semua database instans.
  security_ip_list    = [
         "10.168.1.12",
         "100.69.7.112"
     ]
  # (Opsional, tersedia mulai v1.199.0) Jenis penyimpanan instans.
  # storage_type        = "cloud_auto"   
}
# Buat instans kluster sharded menggunakan VPC dan vSwitch.
resource "alicloud_mongodb_sharding_instance" "default" {
  # (Wajib) Versi database.
  engine_version      = "7.0"
  # (Opsional, ForceNew) ID vSwitch instans.
  vswitch_id          = alicloud_vswitch.default.id
  # Jenis jaringan instans.
  network_type        = "VPC"
  # ID VPC instans.
  vpc_id              = alicloud_vpc.vpc1.id
  # Nama instans.
  name                = var.name
  # Zona ketersediaan.
  zone_id = local.zone_id
  # Node mongos instans. Jumlah node harus antara 2 hingga 32. Lihat mongo_list di bawah.
  mongo_list {
    # (Wajib) Tipe instans node mongos.
    node_class = "mdb.shard.2x.xlarge.d"
  }
  mongo_list {
    node_class = "mdb.shard.2x.xlarge.d"
  }
  # (Wajib, Set) Node shard instans. Anda dapat membeli 2 hingga 32 node shard. Lihat shard_list di bawah.
  shard_list {
    # (Wajib) Tipe instans node shard.
    node_class   = "mdb.shard.2x.xlarge.d"
    #  (Wajib, Int) Kapasitas penyimpanan node shard.
    node_storage = 20
  }
  shard_list {
    node_class        = "mdb.shard.2x.xlarge.d"
    node_storage      = 20
    # Jumlah node read-only dalam node shard. Nilai default: 0. Nilai valid: 0 hingga 5.
    readonly_replicas = 1
  }
  config_server_list {
    # Tipe instans node ConfigServer. Nilai valid: mdb.shard.2x.xlarge.d dan dds.cs.mid.
    node_class ="mdb.shard.2x.xlarge.d"
    # Kapasitas penyimpanan node ConfigServer.
    node_storage = "20"
  }
  # Pemetaan tag yang ditetapkan ke resource.
  tags = {
    Created = "TF"
    For     = "Example"
  }
}

Untuk melihat kode contoh lainnya, kunjungi GitHub.