Cette rubrique explique comment utiliser Terraform pour créer une instance ApsaraDB for MongoDB.
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

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.
Vous devez installer Terraform version 0.12.28 ou ultérieure. Exécutez la commande terraform --version pour vérifier la version de Terraform.
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
alicloud_mongodb_instance : le type de ressource utilisé pour créer une instance de jeu de réplicas.
alicloud_mongodb_sharding_instance : le type de ressource utilisé pour créer une instance de cluster fragmenté.
Utiliser Terraform pour créer une instance ApsaraDB for MongoDB
-
Créez un répertoire de travail et un fichier de configuration nommé
main.tfdans 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. -
Exécutez la commande suivante pour initialiser
Terraform:terraform initSi 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. -
Créez un plan d'exécution et prévisualisez les modifications.
terraform plan -
Exécutez la commande suivante pour créer une instance ApsaraDB for MongoDB .
terraform applyLorsque vous y êtes invité, saisissez
yeset 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. -
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 showshell@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
Vous pouvez exécuter l'exemple de code présenté dans cette rubrique en quelques clics.
Exemple de code
Pour consulter d'autres exemples de code, visitez GitHub.