Todos los productos
Search
Centro de documentos

ApsaraDB for MongoDB:Integrar ApsaraDB for MongoDB mediante Terraform

Última actualización: Sep 19, 2026

Este tema describe cómo usar Terraform para crear una instancia de ApsaraDB for MongoDB.

Nota

Puede ejecutar el código de ejemplo de este tema con unos pocos clics.

Para obtener más información sobre Terraform, consulte What is Terraform? Para conocer los tipos de recursos de MongoDB compatibles con Terraform, consulte Integration overview o Alibaba Cloud Provider.

Arquitectura de recursos

image.png

La plantilla crea una VPC y un vSwitch en la región especificada. Después, crea una instancia de conjunto de réplicas de MongoDB.

Requisitos previos

  • Una cuenta de Alibaba Cloud tiene permisos completos sobre todos los recursos que le pertenecen. Si las credenciales de esta cuenta se filtran, pueden surgir riesgos de seguridad. Se recomienda utilizar un usuario de Resource Access Management (RAM) y crear un par de AccessKey para dicho usuario. Para obtener más información, consulte Create a RAM user y Create an AccessKey pair.

  • Se otorgaron los permisos AliyunMongoDBFullAccess y AliyunMongoDBFullAccess al usuario de RAM. El permiso AliyunMongoDBFullAccess sirve para gestionar ApsaraDB for MongoDB, mientras que el permiso AliyunMongoDBFullAccess permite gestionar virtual private clouds (VPCs). A continuación se muestra un ejemplo de código sobre cómo otorgar ambos permisos al usuario de RAM. Para obtener más información, consulte Grant permissions to a RAM user

    {
        "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"
                    }
                }
            }
        ]
    }
    
  • Prepare el entorno de ejecución de Terraform con uno de los siguientes métodos:

    • Usar Terraform en Terraform Explorer: Alibaba Cloud ofrece Terraform Explorer, un entorno de ejecución en línea para Terraform. Puede usar Terraform después de iniciar sesión en Terraform Explorer, sin necesidad de instalarlo. Este método es adecuado para escenarios donde desea usar y depurar Terraform de forma rápida y cómoda, sin costos adicionales.

    • Use Terraform in Cloud Shell: Terraform viene preinstalado en Cloud Shell y las credenciales de identidad ya están configuradas. Puede ejecutar comandos de Terraform directamente en Cloud Shell. Más indicado para escenarios donde busca usar y depurar Terraform de manera ágil y a bajo costo.

    • Install and configure Terraform on your on-premises machine: Recomendado cuando las conexiones de red son inestables o se requiere un entorno de desarrollo personalizado.

Importante

Debe instalar Terraform 0.12.28 o una versión posterior. Ejecute el comando terraform --version para consultar la versión de Terraform.

Nota

En este ejemplo se generan cargos por ciertos recursos. Cancele la suscripción de los recursos cuando ya no los necesite.

Recursos obligatorios

Usar Terraform para crear una instancia de ApsaraDB for MongoDB

  1. Cree un directorio de trabajo y, dentro de él, un archivo de configuración llamado main.tf. El archivo main.tf es el archivo principal de Terraform y define los recursos que desea desplegar.

    Instancia independiente

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # Declare the variable 'name'.
    variable "name" {
      default = "terraform-example-1125"
    }
    variable "engine_version" {
      default = "7.0"
    }
    variable "db_instance_class" {
      default = "mdb.shard.2x.xlarge.d"
    }
    # Query for available availability zones.
    data "alicloud_mongodb_zones" "default" {
    }
    # Use a local value to get the last available availability zone ID from the data source.
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # Create a VPC resource.
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # Create a vSwitch in the specified availability zone within the 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
    }
    # Create a standalone instance by using the VPC and vSwitch.
    resource "alicloud_mongodb_instance" "singleNode" {
      # (Required) The database version.
      engine_version      = var.engine_version
      # (Required) The instance type.
      db_instance_class   = var.db_instance_class
      # (Required) The storage capacity of the instance, in GB.
      db_instance_storage = 20
      # The network type of the instance.
      network_type        = "VPC"
      # (Optional, ForceNew) The ID of the vSwitch to which the instance is connected in the VPC.
      vswitch_id          = alicloud_vswitch.default.id
      # The ID of the VPC.
      vpc_id              = alicloud_vpc.vpc1.id
      # (Optional, ForceNew) The availability zone where the instance resides.
      zone_id             = local.zone_id
      # The name of the instance.  
      name                = var.name
      # (Optional, available from v1.199.0) The storage type of the instance.
      # storage_type        = "cloud_auto"
      # (Optional) A mapping of tags to assign to the resource.
      # tags = {
      #   Created = "TF"
      #   For     = "example"
      #   }
      # (Optional, List) The list of IP addresses that are allowed to access all databases of the instance.
      # security_ip_list    = [
            # "10.168.1.12",
            # "100.69.7.112"
      #   ]
    }

    Para obtener más información sobre cómo configurar el tipo de recurso alicloud_mongodb_instance, consulte alicloud_mongodb_instance.

    Instancia de conjunto de réplicas

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # Declare the variable 'name'.
    variable "name" {
      default = "terraform-example-1125"
    }
    variable "engine_version" {
      default = "7.0"
    }
    variable "db_instance_class" {
      default = "mdb.shard.2x.xlarge.d"
    }
    # Query for available availability zones.
    data "alicloud_mongodb_zones" "default" {
    }
    # Use a local value to get the last available availability zone ID from the data source.
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # Create a VPC resource.
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # Create a vSwitch in the specified availability zone within the 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
    }
    # Create a replica set instance by using the VPC and 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"
      }
    }

    Para obtener más información sobre cómo configurar el tipo de recurso alicloud_mongodb_instance, consulte alicloud_mongodb_instance.

    Instancia de clúster fragmentado

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # Declare the variable 'name'.
    variable "name" {
      default = "terraform-example-1125"
    }
    # Query for available availability zones.
    data "alicloud_mongodb_zones" "default" {
    }
    # Use a local value to get the last available availability zone ID from the data source.
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # Create a VPC resource.
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # Create a vSwitch in the specified availability zone within the 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
    }
    # Create a sharded cluster instance by using the VPC and vSwitch.
    resource "alicloud_mongodb_sharding_instance" "default" {
      # (Required) The database version.
      engine_version      = "7.0"
      # (Optional, ForceNew) The vSwitch ID of the instance.
      vswitch_id          = alicloud_vswitch.default.id
      # The network type of the instance.
      network_type        = "VPC"
      # The VPC ID of the instance.
      vpc_id              = alicloud_vpc.vpc1.id
      # The name of the instance.
      name                = var.name
      # The availability zone.
      zone_id = local.zone_id
      # The mongos nodes of the instance. The number of nodes must be between 2 and 32. See mongo_list below.
      mongo_list {
        # (Required) The instance type of the mongos node.
        node_class = "mdb.shard.2x.xlarge.d"
      }
      mongo_list {
        node_class = "mdb.shard.2x.xlarge.d"
      }
      # (Required, Set) The shard nodes of the instance. You can purchase 2 to 32 shard nodes. See shard_list below.
      shard_list {
        # (Required) The instance type of the shard node.
        node_class   = "mdb.shard.2x.xlarge.d"
        #  (Required, Int) The storage space of the shard node.
        node_storage = 20
      }
      shard_list {
        node_class        = "mdb.shard.2x.xlarge.d"
        node_storage      = 20
        # The number of read-only nodes in the shard node. Default value: 0. Valid values: 0 to 5.
        readonly_replicas = 1
      }
      config_server_list {
        # The instance type of the ConfigServer node. Valid values: mdb.shard.2x.xlarge.d and dds.cs.mid.
        node_class ="mdb.shard.2x.xlarge.d"
        # The storage space of the ConfigServer node.
        node_storage = "20"
      }
      # A mapping of tags to assign to the resource.
      tags = {
        Created = "TF"
        For     = "Example"
      }
    }

    Para obtener más información sobre cómo configurar el tipo de recurso alicloud_mongodb_sharding_instance, consulte alicloud_mongodb_sharding_instance.

  2. Ejecute el siguiente comando para inicializar Terraform:

    terraform init

    Si se devuelve la siguiente información, Terraform se inicializó correctamente.

    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. Cree un plan de ejecución y obtenga una vista previa de los cambios.

    terraform plan
  4. Ejecute el siguiente comando para crear una instancia de ApsaraDB for MongoDB.

    terraform apply

    Cuando el sistema lo solicite, introduzca yes y presione Enter. La siguiente salida indica que la instancia de ApsaraDB for MongoDB se creó correctamente.

    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. Compruebe el resultado.

    Ejecutar el comando terraform show

    Ejecute el siguiente comando para consultar los recursos creados por 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
    }

    Iniciar sesión en la consola de ApsaraDB for MongoDB

    Una vez creada la instancia, puede usar OpenAPI, SDK o iniciar sesión en la consola de ApsaraDB for MongoDB para comprobar que la operación se completó correctamente. Inicie sesión en la consola de ApsaraDB for MongoDB y vaya a la página Replica Set Instances. Compruebe que la instancia creada por Terraform tenga el estado Running y que su configuración coincida con los parámetros establecidos: la instancia se encuentra en una zona de disponibilidad de China (Heyuan), la clase de instancia es mdb.shard.2x.xlarge.d, el almacenamiento es de 20 GB, la versión es 7.0, el tipo de red es VPC, el método de facturación es pay-as-you-go y la arquitectura es de tres nodos.

Liberar recursos

Si ya no necesita los recursos anteriores creados o gestionados por Terraform, ejecute el siguiente comando para liberarlos. Para obtener más información sobre el comando terraform destroy, consulte Common commands.

terraform destroy

Código de ejemplo

Nota

Puede ejecutar el código de ejemplo de este tema con unos pocos clics.

Código de ejemplo

variable "region" {
  default = "cn-heyuan"
}
provider "alicloud" {
  region = var.region
}
# Declare the variable 'name'.
variable "name" {
  default = "terraform-example-1125"
}
variable "engine_version" {
  default = "7.0"
}
variable "db_instance_class" {
  default = "mdb.shard.2x.xlarge.d"
}
# Query for available availability zones.
data "alicloud_mongodb_zones" "default" {
}
# Use a local value to get the last available availability zone ID from the data source.
locals {
  index   = length(data.alicloud_mongodb_zones.default.zones) - 1
  zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}
# Create a VPC resource.
resource "alicloud_vpc" "vpc1" {
  vpc_name   = var.name
  cidr_block = "172.16.0.0/12"
}
# Create a vSwitch in the specified availability zone within the 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
}
# Create a standalone instance by using the VPC and vSwitch.
resource "alicloud_mongodb_instance" "singleNode" {
  # (Required) The database version.
  engine_version      = var.engine_version
  # (Required) The instance type.
  db_instance_class   = var.db_instance_class
  # (Required) The storage capacity of the instance, in GB.
  db_instance_storage = 20
  # The network type of the instance.
  network_type        = "VPC"
  # (Optional, ForceNew) The ID of the vSwitch to which the instance is connected in the VPC.
  vswitch_id          = alicloud_vswitch.default.id
  # The ID of the VPC.
  vpc_id              = alicloud_vpc.vpc1.id
  # (Optional, ForceNew) The availability zone where the instance resides.
  zone_id             = local.zone_id
  # The name of the instance.  
  name                = var.name
  # (Optional) A mapping of tags to assign to the resource.
  tags = {
    Created = "TF"
    For     = "example"
    }
  # (Optional, List) The list of IP addresses that are allowed to access all databases of the instance.
  security_ip_list    = [
         "10.168.1.12",
         "100.69.7.112"
     ]
  # (Optional, available from v1.199.0) The storage type of the instance.
  # storage_type        = "cloud_auto"   
}
# Create a sharded cluster instance by using the VPC and vSwitch.
resource "alicloud_mongodb_sharding_instance" "default" {
  # (Required) The database version.
  engine_version      = "7.0"
  # (Optional, ForceNew) The vSwitch ID of the instance.
  vswitch_id          = alicloud_vswitch.default.id
  # The network type of the instance.
  network_type        = "VPC"
  # The VPC ID of the instance.
  vpc_id              = alicloud_vpc.vpc1.id
  # The name of the instance.
  name                = var.name
  # The availability zone.
  zone_id = local.zone_id
  # The mongos nodes of the instance. The number of nodes must be between 2 and 32. See mongo_list below.
  mongo_list {
    # (Required) The instance type of the mongos node.
    node_class = "mdb.shard.2x.xlarge.d"
  }
  mongo_list {
    node_class = "mdb.shard.2x.xlarge.d"
  }
  # (Required, Set) The shard nodes of the instance. You can purchase 2 to 32 shard nodes. See shard_list below.
  shard_list {
    # (Required) The instance type of the shard node.
    node_class   = "mdb.shard.2x.xlarge.d"
    #  (Required, Int) The storage space of the shard node.
    node_storage = 20
  }
  shard_list {
    node_class        = "mdb.shard.2x.xlarge.d"
    node_storage      = 20
    # The number of read-only nodes in the shard node. Default value: 0. Valid values: 0 to 5.
    readonly_replicas = 1
  }
  config_server_list {
    # The instance type of the ConfigServer node. Valid values: mdb.shard.2x.xlarge.d and dds.cs.mid.
    node_class ="mdb.shard.2x.xlarge.d"
    # The storage space of the ConfigServer node.
    node_storage = "20"
  }
  # A mapping of tags to assign to the resource.
  tags = {
    Created = "TF"
    For     = "Example"
  }
}

Para consultar otros ejemplos de código, visite GitHub.