Tous les produits
Search
Centre de documentation

ApsaraDB for MongoDB:Intégrer ApsaraDB for MongoDB à l'aide de Terraform

Dernière mise à jour :Aug 31, 2026

Cette rubrique explique comment utiliser Terraform pour créer une instance ApsaraDB for MongoDB.

Remarque

Vous pouvez exécuter l'exemple de code présenté dans cette rubrique en quelques clics.

Pour plus d'informations sur Terraform, consultez la rubrique Qu'est-ce que Terraform ? Pour en savoir plus sur les types de ressources MongoDB pris en charge par Terraform, reportez-vous à la section Présentation de l'intégration ou au fournisseur Alibaba Cloud.

Architecture des ressources

image.png

Le modèle crée un VPC et un vSwitch dans une région spécifiée, puis crée une instance de jeu de réplicas MongoDB.

Prérequis

  • Un compte Alibaba Cloud dispose de toutes les autorisations sur les ressources qui lui appartiennent. Si les identifiants du compte Alibaba Cloud sont divulgués, des risques de sécurité peuvent survenir. Nous vous recommandons d'utiliser un utilisateur RAM (Resource Access Management) et de créer une paire de clés AccessKey pour cet utilisateur. Pour plus d'informations, consultez les rubriques Créer un utilisateur RAM et Créer une paire de clés AccessKey.

  • Les autorisations AliyunMongoDBFullAccess et AliyunVPCFullAccess sont accordées à l'utilisateur RAM. L'autorisation AliyunMongoDBFullAccess permet de gérer ApsaraDB for MongoDB, tandis que l'autorisation AliyunVPCFullAccess sert à gérer les réseaux privés virtuels (VPC). L'exemple de code suivant illustre la procédure d'attribution de ces deux autorisations à l'utilisateur RAM. Pour plus de détails, consultez la rubrique Accorder des autorisations à un utilisateur 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"
                    }
                }
            }
        ]
    }
    
  • Préparez l'environnement d'exécution pour Terraform en utilisant l'une des méthodes suivantes :

    • Utilisez Terraform dans Terraform Explorer : Alibaba Cloud met à disposition Terraform Explorer, un environnement d'exécution en ligne pour Terraform. Connectez-vous à Terraform Explorer pour utiliser Terraform sans avoir besoin de l'installer. Cette méthode convient aux scénarios où vous souhaitez utiliser et déboguer Terraform rapidement et facilement, sans frais supplémentaires.

    • Utiliser Terraform dans Cloud Shell : Terraform est préinstallé dans Cloud Shell et les identifiants d'identité sont configurés. Exécutez directement les commandes Terraform dans Cloud Shell. Cette approche est adaptée aux situations nécessitant une utilisation et un débogage rapides de Terraform à faible coût.

    • Installer et configurer Terraform sur votre machine locale : Cette méthode est recommandée lorsque les connexions réseau sont instables ou qu'un environnement de développement personnalisé est requis.

Important

Vous devez installer Terraform version 0.12.28 ou ultérieure. Exécutez la commande terraform --version pour vérifier la version de Terraform.

Remarque

Des frais sont générés pour certaines ressources dans cet exemple. Libérez les ressources lorsque vous n'en avez plus besoin.

Ressources requises

Utiliser Terraform pour créer une instance ApsaraDB for MongoDB

  1. Créez un répertoire de travail et un fichier de configuration nommé main.tf dans ce répertoire. Le fichier main.tf est le fichier principal de Terraform et définit les ressources que vous souhaitez déployer.

    Instance autonome

    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"
      #   ]
    }

    Pour plus d'informations sur la configuration du type de ressource alicloud_mongodb_instance , consultez la documentation alicloud_mongodb_instance.

    Instance de jeu 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"
      }
    }

    Pour plus d'informations sur la configuration du type de ressource alicloud_mongodb_instance , consultez la documentation alicloud_mongodb_instance.

    Instance de cluster fragmenté

    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"
      }
    }

    Pour plus d'informations sur la configuration du type de ressource alicloud_mongodb_sharding_instance , consultez la documentation alicloud_mongodb_sharding_instance.

  2. Exécutez la commande suivante pour initialiser Terraform :

    terraform init

    Si les informations suivantes s'affichent, Terraform a été initialisé avec succès.

    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. Créez un plan d'exécution et prévisualisez les modifications.

    terraform plan
  4. Exécutez la commande suivante pour créer une instance ApsaraDB for MongoDB .

    terraform apply

    Lorsque vous y êtes invité, saisissez yes et appuyez sur Entrée. La sortie suivante indique que l'instance ApsaraDB for MongoDB a été créée avec succès.

    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. Vérifiez le résultat.

    Exécuter la commande terraform show

    Exécutez la commande suivante pour interroger les ressources créées par 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
    }

    Se connecter à la console ApsaraDB for MongoDB

    Une fois l'instance créée, vous pouvez utiliser OpenAPI, les SDK ou vous connecter à la console ApsaraDB for MongoDB pour vérifier que l'opération a réussi. Connectez-vous à la console ApsaraDB for MongoDB et accédez à la page Replica Set Instances. Vérifiez que l'instance créée par Terraform est dans l'état Running et que sa configuration correspond à vos paramètres : l'instance se trouve dans une zone de disponibilité en Chine (Heyuan), la classe d'instance est mdb.shard.2x.xlarge.d, le stockage est de 20 Go, la version est 7.0, le type de réseau est VPC, la méthode de facturation est paiement à l'utilisation et l'architecture est trois nœuds.

Libérer les ressources

Si vous n'avez plus besoin des ressources précédentes créées ou gérées par Terraform, exécutez la commande suivante pour les libérer. Pour plus d'informations sur la commande terraform destroy , consultez la rubrique Commandes courantes.

terraform destroy

Exemple de code

Remarque

Vous pouvez exécuter l'exemple de code présenté dans cette rubrique en quelques clics.

Exemple de code

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"
  }
}

Pour consulter d'autres exemples de code, visitez GitHub.