Creating a Yandex StoreDoc cluster
A Yandex StoreDoc cluster is one or more database hosts between which you can configure replication. Replication is on by default in any cluster consisting of more than one host: the primary host accepts write requests and asynchronously replicates the changes in the secondary hosts.
Note
- The number of hosts you can create in a Yandex StoreDoc cluster depends on the selected disk type and the host class.
- Available disk types depend on the selected host class.
Creating a cluster
To create a Yandex StoreDoc cluster, you will need the vpc.user role, as well as the managed-mongodb.editor role or higher. For information on assigning roles, see the Identity and Access Management documentation.
To create a Yandex StoreDoc cluster:
-
In the management console
, select the folder where you want to create a DB cluster. -
Select Yandex StoreDoc.
-
Click Create cluster.
-
Under Basic parameters:
-
Enter a name in the Cluster name field. The cluster name must be unique within the cloud.
-
Optionally, enter a cluster Description.
-
Select the environment where you want to create your cluster (the environment cannot be changed after cluster creation):
PRODUCTION: For stable versions of your applications.PRESTABLE: For testing purposes. The prestable environment is similar to the production environment and likewise covered by the SLA, but it is the first of the two to get new features, improvements, and bug fixes. In the prestable environment, you can test the new versions for compatibility with your application.
-
Specify the DBMS version.
-
-
Under Host class, select:
- One of the available platforms.
- Configuration type: memory-optimized, cpu-optimized, standard, or burstable.
- Host class: Defines the technical specifications of the VMs where the DB hosts will be deployed. When you change the host class for the cluster, the characteristics of all existing hosts change, too.
-
Under Storage size:
-
Select the disk type.
The selected type determines the increments in which you can change your disk size:
- Network HDD and SSD storage: In increments of 1 GB.
- Local SSD storage:
- For Intel Broadwell and Intel Cascade Lake: In increments of 100 GB.
- For Intel Ice Lake: In increments of 368 GB.
- Non-replicated SSDs and ultra high-speed network SSDs with three replicas: In increments of 93 GB.
-
Select the storage capacity for your data and backups. For more information on how backups take up storage space, see Backups.
-
Optionally, select Encrypted disk to encrypt the disk with a custom KMS key.
-
To create a new key, click Create.
-
To use the key you created earlier, select it in the KMS key field.
To learn more about disk encryption, see Storage.
-
-
-
Under Database, specify the database details:
-
Database name.
A database name may contain Latin letters, numbers, underscores, and hyphens. The name may be up to 63 characters long. Such names as
config,local,admin, andmdb_internalare reserved for Yandex StoreDoc. You cannot create DBs with these names. -
Username.
-
User password. The password must be at least 8 characters long.
-
-
Under Network settings, select:
- Cloud network for the cluster.
- Security groups for the cluster network traffic. You may need to additionally set up security groups to be able to connect to the cluster.
-
Under Hosts, add the DB hosts created with the cluster:
- Click Add host.
- Select the availability zone.
- Select a subnet in the specified availability zone. If there is no subnet, create one.
- If the host must be available outside Yandex Cloud, enable Public access.
To ensure fault tolerance, you need at least 3 hosts for
local-ssdandnetwork-ssd-nonreplicateddisk types. For more information, see Storage.By default, hosts are created in different availability zones. Read more about host management.
-
Specify additional cluster settings, if required:
-
Backup start time (UTC): Time interval during which the cluster backup starts. Time is specified in 24-hour UTC format. The default time is
22:00 - 23:00UTC. -
Retention period for automatic backups, days
Retention period for automatic backups. Backups are automatically deleted once their retention period expires. The default is 7 days. This feature is at the Preview stage. For more information, see Backups.
Changing the retention period affects both new and existing automatic backups. For example, if the initial retention period was 7 days, and the remaining lifetime of a separate automatic backup is 1 day, increasing the retention period to 9 days will change the remaining lifetime of this backup to 3 days.
For an existing cluster, automatic backups are stored for a specified number of days whereas manually created ones are stored indefinitely. After a cluster is deleted, all backups persist for 7 days.
-
Maintenance window: Maintenance window settings:
- To enable maintenance at any time, select arbitrary (default).
- To specify the preferred maintenance start time, select by schedule and specify the desired day of the week and UTC hour. For example, you can choose a time when the cluster is least loaded.
Maintenance operations are carried out both on enabled and disabled clusters. They may include updating the DBMS, applying patches, and so on.
-
WebSQL access: Enables you to run SQL queries against cluster databases from the Yandex Cloud management console using Yandex WebSQL.
-
Statistics sampling: Enable this option to use the built-in performance diagnostics tool in the cluster. This feature is at the Preview stage.
-
Deletion protection: Cluster protection from accidental deletion.
Even with cluster deletion protection enabled, one can still delete a user or database or connect manually and delete the database contents.
-
-
Configure the DBMS, if required.
Note
Some Yandex StoreDoc settings depend on the selected host class.
-
Click Create cluster.
If you do not have the Yandex Cloud CLI installed yet, install and initialize it.
By default, the CLI uses the folder specified when creating the profile. To change the default folder, use the yc config set folder-id <folder_ID> command. You can also set a different folder for any specific command using the --folder-name or --folder-id parameter.
To create a Yandex StoreDoc cluster:
-
Check whether the folder has any subnets for the cluster hosts:
yc vpc subnet listIf your folder has no subnets, create them in VPC.
-
View the description of the CLI command to create a cluster:
yc managed-mongodb cluster create --help -
Specify the cluster parameters in the create command (not all parameters are given in the example):
yc managed-mongodb cluster create \ --name <cluster_name> \ --environment=<environment> \ --network-name <network_name> \ --host zone-id=<availability_zone>,` `subnet-id=<subnet_ID>,` `assign-public-ip=<allow_public_access_to_host>,` `hidden=<hide_host>,` `secondary-delay-secs=<replica_lag_in_seconds>,` `priority=<host_priority> \ --mongod-resource-preset <host_class> \ --user name=<username>,password=<user_password> \ --database name=<DB_name> \ --mongod-disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \ --mongod-disk-size <storage_size_in_GB> \ --disk-encryption-key-id <KMS_key_ID> \ --performance-diagnostics=<enable_diagnostics> \ --deletion-protectionYou need to specify
subnet-idif the selected availability zone has two or more subnets.Where:
-
--environment: Environment,prestableorproduction. -
--host: Host settings:zone-id: Availability zone.subnet-id: Subnet ID. Specify it if the selected availability zone has two or more subnets.assign-public-ip: Internet access to the host via a public IP address,trueorfalse.hidden: Hide host,trueorfalse. If the host is hidden, only direct connections will be able to read from it (for example, to make backups from it without adding load to the cluster).secondary-delay-secs: Replica's lag behind the master in seconds. It can be useful for data recovery in case of invalid operations.priority: Priority for assigning the host as a master.
-
--mongod-disk-type: Disk type. -
--disk-encryption-key-id: Disk encryption using a custom KMS key.To learn more about disk encryption, see Storage.
-
--performance-diagnostics: Enables cluster performance diagnostics,trueorfalse. -
--deletion-protection: Cluster protection from accidental deletion,trueorfalse.Even with cluster deletion protection enabled, one can still delete a user or database or connect manually and delete the database contents.
A database name may contain Latin letters, numbers, underscores, and hyphens. The name may be up to 63 characters long. Such names as
config,local,admin, andmdb_internalare reserved for Yandex StoreDoc. You cannot create DBs with these names.Note
The default maintenance mode for new clusters is
anytime. You can set a specific maintenance period when updating the cluster settings. -
With Terraform
Terraform is distributed under the Business Source License
For more information about the provider resources, see the relevant documentation on the Terraform
If you do not have Terraform yet, install it and configure the Yandex Cloud provider.
To create a Yandex StoreDoc cluster:
-
In the configuration file, describe the properties of resources you want to create:
-
Database cluster: Description of the cluster and its hosts.
-
Network: Description of the cloud network where a cluster will be located. If you already have a suitable network, you don't have to describe it again.
-
Subnets: Description of the subnets to connect the cluster hosts to. If you already have suitable subnets, you don't have to describe them again.
Here is an example of the configuration file structure:
resource "yandex_mdb_mongodb_cluster" "<cluster_name>" { name = "<cluster_name>" environment = "<environment>" network_id = yandex_vpc_network.<network_name>.id security_group_ids = [ "<list_of_security_group_IDs>" ] deletion_protection = <protect_cluster_from_deletion> cluster_config { version = "<Yandex_StoreDoc_version>" } resources_mongod { resource_preset_id = "<host_class>" disk_type_id = "<disk_type>" disk_size = <storage_size_in_GB> } host { zone_id = "<availability_zone>" subnet_id = yandex_vpc_subnet.<subnet_name>.id assign_public_ip = <allow_public_access_to_host> host_parameters { hidden = <hide_host> secondary_delay_secs = <replica_lag_in_seconds> priority = <host_priority> } } } resource "yandex_mdb_mongodb_database" "<DB_name>" { cluster_id = yandex_mdb_mongodb_cluster.<cluster_name>.id name = "<DB_name>" } resource "yandex_mdb_mongodb_user" "<username>" { cluster_id = yandex_mdb_mongodb_cluster.<cluster_name>.id name = "<username>" password = "<password>" permission { database_name = "<DB_name>" roles = [ "<list_of_user_roles>" ] } depends_on = [ yandex_mdb_mongodb_database.<DB_name> ] } resource "yandex_vpc_network" "<network_name>" { name = "<network_name>" } resource "yandex_vpc_subnet" "<subnet_name>" { name = "<subnet_name>" zone = "<availability_zone>" network_id = yandex_vpc_network.<network_name>.id v4_cidr_blocks = ["<range>"] }Where:
-
environment: Environment,PRESTABLEorPRODUCTION. -
host: Host settings:zone_id: Availability zone.subnet_id: ID of a subnet in the selected availability zone.assign_public_ip: Public access to the host,trueorfalse.host_parameters: Additional host parameters:hidden: Hide host,trueorfalse. If the host is hidden, only direct connections will be able to read from it (for example, to make backups from it without adding load to the cluster).secondary_delay_secs: Replica's lag behind the master in seconds. It can be useful for data recovery in case of invalid operations.priority: Host priority for assignment as a master.
-
deletion_protection: Cluster protection from accidental deletion,trueorfalse.Even with cluster deletion protection enabled, one can still delete a user or database or connect manually and delete the database contents.
-
version: Yandex StoreDoc version, 6.0 or 7.0.
A database name may contain Latin letters, numbers, underscores, and hyphens. The name may be up to 63 characters long. Such names as
config,local,admin, andmdb_internalare reserved for Yandex StoreDoc. You cannot create DBs with these names.To set up the maintenance window (for disabled clusters as well), add the
maintenance_windowsection to the cluster description:resource "yandex_mdb_mongodb_cluster" "<cluster_name>" { ... maintenance_window { type = <maintenance_type> day = <day_of_week> hour = <hour> } ... }Where:
type: Maintenance type. The possible values include:ANYTIME: AnytimeWEEKLY: On a schedule
day: Day of week for theWEEKLYtype, i.e.,MON,TUE,WED,THU,FRI,SAT, orSUN.hour: UTC hour for theWEEKLYtype, from1to24.
To encrypt the disk with a custom KMS key, add the
disk_encryption_key_idparameter:resource "yandex_mdb_mongodb_cluster" "<cluster_name>" { ... disk_encryption_key_id = <KMS_key_ID> ... }To learn more about disk encryption, see Storage.
For more information about the resources you can create with Terraform, see this provider guide.
-
-
Validate your configuration.
-
In the command line, navigate to the directory that contains the current Terraform configuration files defining the infrastructure.
-
Run this command:
terraform validateTerraform will show any errors found in your configuration files.
-
-
Create a cluster.
-
Run this command to view the planned changes:
terraform planIf you described the configuration correctly, the terminal will display a list of the resources to update and their parameters. This is a verification step that does not apply changes to your resources.
-
If everything looks correct, apply the changes:
-
Run this command:
terraform apply -
Confirm updating the resources.
-
Wait for the operation to complete.
-
After this, all required resources will be created in the specified folder, and the host FQDNs will be displayed in the terminal. You can check the new resources and their configuration using the management console
.Timeouts
The Terraform provider sets the following timeouts for Yandex StoreDoc cluster operations:
- Creating a cluster, including by restoring one from a backup: 30 minutes.
- Editing a cluster: 60 minutes.
Operations exceeding the set timeout are interrupted.
How do I change these limits?
Add the
timeoutsblock to the cluster description, for example:resource "yandex_mdb_mongodb_cluster" "<cluster_name>" { ... timeouts { create = "1h30m" # An hour and a half update = "2h" # Two hours } } -
-
Get an IAM token for API authentication and save it as an environment variable:
export IAM_TOKEN="<IAM_token>" -
Create a file named
body.jsonand paste the following code into it:{ "folderId": "<folder_ID>", "name": "<cluster_name>", "environment": "<environment>", "networkId": "<network_ID>", "securityGroupIds": [ "<security_group_1_ID>", "<security_group_2_ID>", ... "<security_group_N_ID>" ], "deletionProtection": <protect_cluster_from_deletion>, "maintenanceWindow": { "weeklyMaintenanceWindow": { "day": "<day_of_week>", "hour": "<hour>" } }, "configSpec": { "version": "<Yandex_StoreDoc_version>", "mongodb": { "mongod": { "resources": { "resourcePresetId": "<host_class>", "diskSize": "<storage_size_in_bytes>", "diskTypeId": "<disk_type>" } } }, "backupWindowStart": { "hours": "<hours>", "minutes": "<minutes>", "seconds": "<seconds>", "nanos": "<nanoseconds>" }, "backupRetainPeriodDays": "<backup_retention_in_days>", "performanceDiagnostics": { "profilingEnabled": <enable_profiler> } }, "databaseSpecs": [ { "name": "<DB_name>" }, { <similar_configuration_for_DB_2> }, { ... }, { <similar_configuration_for_DB_N> } ], "userSpecs": [ { "name": "<username>", "password": "<user_password>", "permissions": [ { "databaseName": "<DB_name>", "roles": [ "<role_1>", "<role_2>", ..., "<role_N>" ] } ] }, { <similar_settings_for_user_2> }, { ... }, { <similar_settings_for_user_N> } ], "hostSpecs": [ { "zoneId": "<availability_zone>", "subnetId": "<subnet_ID>", "assignPublicIp": <allow_public_access_to_host>, "type": "<host_type>", "shardName": "<shard_name>", "hidden": <hide_host>, "secondaryDelaySecs": "<replica_lag_in_seconds>", "priority": "<host_priority>", "tags": "<host_labels>" }, { <similar_settings_for_host_2> }, { ... }, { <similar_settings_for_host_N> } ], }Where:
-
folderId: Folder ID. You can get it from the cloud’s folder list. -
name: Cluster name. -
environment: Cluster environment,PRODUCTIONorPRESTABLE. -
networkId: ID of the network the cluster will be in. -
securityGroupIds: Security group IDs. -
deletionProtection: Cluster protection from accidental deletion,trueorfalse.Even with cluster deletion protection enabled, one can still delete a user or database or connect manually and delete the database contents.
-
maintenanceWindow: Maintenance window settings, including those for disabled clusters. InmaintenanceWindow, provide one of the two parameters:-
anytime: Maintenance can take place at any time. -
weeklyMaintenanceWindow: Maintenance takes place once a week at the specified time:day: Day of week, inDDDformat.hour: Hour, inHHformat. The values range from1to24hours.
-
-
configSpec: Cluster settings:-
version: Yandex StoreDoc version, 5.0, 6.0, or 7.0. -
mongod: Host type.-
resources: Cluster resources:resourcePresetId: Host class.diskSize: Disk size, in bytes.diskTypeId: Disk type.
-
-
backupWindowStart: Backup window settings.In this parameter, specify the backup start time:
hours: Between0and23hours.minutes: Between0and59minutes.seconds: Between0and59seconds.nanos: Between0and999999999nanoseconds.
-
backupRetainPeriodDays: Backup retention in days. -
performanceDiagnostics: Statistics collection settings:profilingEnabled: Enable profiler,trueorfalse.
-
-
databaseSpecs: Database settings as an array of elements, one for each DB. Each element contains thenameparameter with the DB name.A database name may contain Latin letters, numbers, underscores, and hyphens. The name may be up to 63 characters long. Such names as
config,local,admin, andmdb_internalare reserved for Yandex StoreDoc. You cannot create DBs with these names. -
userSpecs: User settings as an array of elements, one per user. Each element has the following structure:-
name: Username. -
password: Password. -
permissions: User permissions settings:databaseName: Name of the database to which the user will have access.roles: Array of user roles. Each role is provided as a separate string in the array. For a list of possible values, see Users and roles.
For each database, add a separate element with permission settings to the
permissionsarray.
-
-
hostSpecs: Cluster host settings as an array of elements, one per host. Each element has the following structure:zoneId: Availability zone.subnetId: Subnet ID.assignPublicIp: Internet access to the host via a public IP address,trueorfalse.type: Host type in a sharded cluster,MONGOD,MONGOINFRA,MONGOS, orMONGOCFG.shardName: Shard name in a sharded cluster.hidden: Hide host,trueorfalse. If the host is hidden, only direct connections will be able to read from it (for example, to make backups from it without adding load to the cluster).secondaryDelaySecs: Replica's lag behind the master in seconds. It can be useful for data recovery in case of invalid operations.priority: Host priority for assignment as a master.tags: Host labels.
-
-
Use the Cluster.Create method to execute the following request via cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-mongodb/v1/clusters' \ --data "@body.json" -
View the server response to make sure your request was successful.
-
Get an IAM token for API authentication and save it as an environment variable:
export IAM_TOKEN="<IAM_token>" -
Clone the cloudapi
repository:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiBelow, we assume the repository contents are stored in the
~/cloudapi/directory. -
Create a file named
body.jsonand paste the following code into it:{ "folder_id": "<folder_ID>", "name": "<cluster_name>", "environment": "<environment>", "network_id": "<network_ID>", "security_group_ids": [ "<security_group_1_ID>", "<security_group_2_ID>", ... "<security_group_N_ID>" ], "deletion_protection": <protect_cluster_from_deletion>, "maintenance_window": { "weekly_maintenance_window": { "day": "<day_of_week>", "hour": "<hour>" } }, "config_spec": { "version": "<Yandex_StoreDoc_version>", "mongodb": { "mongod": { "resources": { "resource_preset_id": "<host_class>", "disk_size": "<storage_size_in_bytes>", "disk_type_id": "<disk_type>" } } }, "backup_window_start": { "hours": "<hours>", "minutes": "<minutes>", "seconds": "<seconds>", "nanos": "<nanoseconds>" }, "backup_retain_period_days": "<backup_retention_in_days>", "performance_diagnostics": { "profiling_enabled": <enable_profiler> } }, "database_specs": [ { "name": "<DB_name>" }, { <similar_configuration_for_DB_2> }, { ... }, { <similar_configuration_for_DB_N> } ], "user_specs": [ { "name": "<username>", "password": "<user_password>", "permissions": [ { "database_name": "<DB_name>", "roles": [ "<role_1>", "<role_2>", ..., "<role_N>" ] } ] }, { <similar_settings_for_user_2> }, { ... }, { <similar_settings_for_user_N> } ], "host_specs": [ { "zone_id": "<availability_zone>", "subnet_id": "<subnet_ID>", "assign_public_ip": <allow_public_access_to_host>, "type": "<host_type>", "shard_name": "<shard_name>", "hidden": <hide_host>, "secondary_delay_secs": "<replica_lag_in_seconds>", "priority": "<host_priority>", "tags": "<host_labels>" }, { <similar_settings_for_host_2> }, { ... }, { <similar_configuration_for_host_N> } ] }Where:
-
folder_id: Folder ID. You can request it with the list of folders in the cloud. -
name: Cluster name. -
environment: Cluster environment,PRODUCTIONorPRESTABLE. -
network_id: ID of the network the cluster will be in. -
security_group_ids: Security group IDs. -
deletion_protection: Cluster protection from accidental deletion,trueorfalse.Even with cluster deletion protection enabled, one can still delete a user or database or connect manually and delete the database contents.
-
maintenance_window: Maintenance window settings, including those for disabled clusters. Inmaintenance_window, provide one of the two parameters:-
anytime: Maintenance can take place at any time. -
weekly_maintenance_window: Maintenance takes place once a week at the specified time:day: Day of week, inDDDformat.hour: Hour, inHHformat. The values range from1to24hours.
-
-
config_spec: Cluster settings:version: Yandex StoreDoc version, 5.0, 6.0, or 7.0.-
mongod: Host type.-
resources: Cluster resources:resource_preset_id: Host class.disk_size: Disk size, in bytes.disk_type_id: Disk type.
-
-
backup_window_start: Backup window settings.In this parameter, specify the backup start time:
hours: Between0and23hours.minutes: Between0and59minutes.seconds: Between0and59seconds.nanos: Between0and999999999nanoseconds.
-
backup_retain_period_days: Backup retention in days. -
performance_diagnostics: Statistics collection settings:profiling_enabled: Enable profiler,trueorfalse.
-
-
database_specs: Database settings as an array of elements, one for each DB. Each element contains thenameparameter with the DB name.A database name may contain Latin letters, numbers, underscores, and hyphens. The name may be up to 63 characters long. Such names as
config,local,admin, andmdb_internalare reserved for Yandex StoreDoc. You cannot create DBs with these names. -
user_specs: User settings as an array of elements, one per user. Each element has the following structure:-
name: Username. -
password: Password. -
permissions: User permission settings:database_name: Name of the database to which the user will have access.roles: Array of user roles. Each role is provided as a separate string in the array. For a list of possible values, see Users and roles.
For each database, add a separate element with permission settings to the
permissionsarray.
-
-
host_specs: Cluster host settings as an array of elements, one per host. Each element has the following structure:zone_id: Availability zone.subnet_id: Subnet ID.assign_public_ip: Internet access to the host via a public IP address,trueorfalse.type: Host type in a sharded cluster,MONGOD,MONGOINFRA,MONGOS, orMONGOCFG.shard_name: Shard name in a sharded cluster.hidden: Hide host,trueorfalse. If the host is hidden, only direct connections will be able to read from it (for example, to make backups from it without adding load to the cluster).secondaryDelaySecs: Replica's lag behind the master in seconds. It can be useful for data recovery in case of invalid operations.priority: Host priority for assignment as a master.tags: Host labels.
-
-
Use the ClusterService.Create call to execute the following request, e.g., via gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/mongodb/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.Create \ < body.json -
View the server response to make sure your request was successful.
Warning
If you specified security group IDs when creating a cluster, you may also need to additionally configure security groups to connect to the cluster.
Creating a cluster copy
You can create a Yandex StoreDoc cluster using the settings of the previously created cluster. To do this, import the Yandex StoreDoc source cluster configuration to Terraform. This way, you can either create an identical copy or use the imported configuration as a starting point for modification. Import is convenient when the source Yandex StoreDoc cluster has many settings and you need to create a similar cluster.
To create a Yandex StoreDoc cluster copy:
-
If you do not have Terraform yet, install it.
-
Get the authentication credentials. You can add them to environment variables or specify them later in the provider configuration file.
-
Configure and initialize a provider. There is no need to create a provider configuration file manually, you can download it
. -
Place the configuration file in a separate working directory and specify the parameter values. If you did not add the authentication credentials to environment variables, specify them in the configuration file.
-
In your current working directory, create a
.tffile with the following content:resource "yandex_mdb_mongodb_cluster" "old" { } -
Save the ID of the original Yandex StoreDoc cluster to an environment variable:
export STOREDOC_CLUSTER_ID=<cluster_ID>You can get the ID from the folder’s cluster list.
-
Import the original Yandex StoreDoc cluster settings to the Terraform configuration:
terraform import yandex_mdb_mongodb_cluster.old ${STOREDOC_CLUSTER_ID} -
Display the imported configuration:
terraform show -
Copy it from the terminal and paste it into the
.tffile. -
Create a new directory named
imported-clusterand move your file there. -
Modify the configuration so it can be used to create a new cluster:
- Specify the new cluster name in the
resourcestring and thenameparameter. - Delete
created_at,health,id,sharded, andstatus. - In the
hostsections, deletehealthandname. - If the
maintenance_windowsection hastype = "ANYTIME", delete thehourparameter. - Delete all
usersections (if any). You can add database users with a separateyandex_mdb_mongodb_userresource. - Optionally, you can customize the configuration further if needed.
- Specify the new cluster name in the
-
Get the authentication credentials in the
imported-clusterdirectory. -
In the same directory, configure and initialize a provider. To avoid creating the provider configuration file manually, you can download it here
. -
Move the configuration file to the
imported-clusterdirectory and edit it to include your required values. If you have not added your authentication credentials to the environment variables, specify them in the configuration file. -
Validate your Terraform configuration files:
terraform validateTerraform will display any configuration errors detected in your files.
-
Create the required infrastructure:
-
Run this command to view the planned changes:
terraform planIf you described the configuration correctly, the terminal will display a list of the resources to update and their parameters. This is a verification step that does not apply changes to your resources.
-
If everything looks correct, apply the changes:
-
Run this command:
terraform apply -
Confirm updating the resources.
-
Wait for the operation to complete.
-
All the required resources will be created in the specified folder. You can check resource availability and their settings in the management console
. -
Timeouts
The Terraform provider sets the following timeouts for Yandex StoreDoc cluster operations:
- Creating a cluster, including by restoring one from a backup: 30 minutes.
- Editing a cluster: 60 minutes.
Operations exceeding the set timeout are interrupted.
How do I change these limits?
Add the timeouts block to the cluster description, for example:
resource "yandex_mdb_mongodb_cluster" "<cluster_name>" {
...
timeouts {
create = "1h30m" # An hour and a half
update = "2h" # Two hours
}
}
Examples
Creating a single-host cluster
To create a single-host cluster, provide one --host parameter.
Create a Yandex StoreDoc cluster with the following test specifications:
- Name:
mymg. - Environment:
production. - Network:
default. - Security group ID:
enp6saqnq4ie244g67sb. - One
s2.microhost in theb0rcctk2rvtr********subnet, in theru-central1-aavailability zone. - Network SSD storage (
network-ssd): 20 GB. - One user:
user1, password:user1user1. - One database:
db1. - Deletion protection: Enabled.
Run this command:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--network-name default \
--security-group-ids enp6saqnq4ie244g67sb \
--mongod-resource-preset s2.micro \
--host zone-id=ru-central1-a,subnet-id=b0rcctk2rvtr******** \
--mongod-disk-size 20 \
--mongod-disk-type network-ssd \
--user name=user1,password=user1user1 \
--database name=db1 \
--deletion-protection
Create a Yandex StoreDoc cluster and its network with the following test specifications:
-
Name:
mymg. -
Version:
7.0. -
Environment:
PRODUCTION. -
Cloud ID:
b1gq90dgh25bebiu75o. -
Folder ID:
b1gia87mbaomkfvsleds. -
Network:
mynet. -
Host class:
s2.micro. -
Number of
hostblocks: 1. -
Subnet:
mysubnet. Network settings:- Availability zone:
ru-central1-a. - Range:
10.5.0.0/24.
- Availability zone:
-
Security group:
mymg-sg. The group rules allow TCP connections to the cluster from the internet via port27018. -
Network SSD storage:
network-ssd. -
Storage size: 20 GB.
-
user1user. -
Password:
user1user1. -
Database:
db1. -
Deletion protection: Enabled.
Configuration file for a single-host cluster:
resource "yandex_mdb_mongodb_cluster" "mymg" {
name = "mymg"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.mymg-sg.id ]
deletion_protection = true
cluster_config {
version = "7.0"
}
resources_mongod {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 20
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
}
}
resource "yandex_mdb_mongodb_database" "db1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "db1"
}
resource "yandex_mdb_mongodb_user" "user1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
depends_on = [
yandex_mdb_mongodb_database.db1
]
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_security_group" "mymg-sg" {
name = "mymg-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Yandex StoreDoc"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
Creating sharded clusters
You can create Yandex StoreDoc clusters with standard or advanced sharding. For more information about sharding types, see Sharding management.
Standard sharding
Create a Yandex StoreDoc cluster and a network for it with multiple hosts:
- One
MONGODhost - Three
MONGOINFRAhosts
Cluster test specifications:
- Name:
mymg. - Environment:
PRODUCTION. - Deletion protection: Enabled.
- Version:
7.0. - Database:
db1. user1user.- Password:
user1user1. MONGODhost class:s2.micro.MONGOINFRAhost class:c3-c2-m4.- Network SSD storage:
network-ssd. - Storage size: 10 GB.
Network specifications:
-
Network:
mynet. -
Security group:
mymg-sgwithenp6saqnq4ie244g67sbID. In Terraform, a group is created with the rule allowing TCP connections to the cluster from the internet on port27018. -
Subnet:
mysubnet. -
Availability zone:
ru-central1-a. -
Range:
10.5.0.0/24(only for Terraform).
To create a Yandex StoreDoc cluster with standard sharding, run this command:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--deletion-protection \
--mongodb-version 7.0 \
--database name=db1 \
--user name=user1,password=user1user1 \
--mongod-resource-preset s2.micro \
--mongod-disk-type network-ssd \
--mongod-disk-size 10 \
--host type=mongod,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--mongoinfra-resource-preset c3-c2-m4 \
--mongoinfra-disk-type network-ssd \
--mongoinfra-disk-size 10 \
--host type=mongoinfra,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongoinfra,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongoinfra,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--network-name mynet \
--security-group-ids enp6saqnq4ie244g67sb
The configuration file for a cluster with standard sharding is as follows:
resource "yandex_mdb_mongodb_cluster" "mymg" {
name = "mymg"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.mymg-sg.id ]
deletion_protection = true
cluster_config {
version = "7.0"
}
resources_mongod {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
resources_mongoinfra {
resource_preset_id = "c3-c2-m4"
disk_type_id = "network-ssd"
disk_size = 10
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongod"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
resource "yandex_mdb_mongodb_database" "db1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "db1"
}
resource "yandex_mdb_mongodb_user" "user1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
depends_on = [
yandex_mdb_mongodb_database.db1
]
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_security_group" "mymg-sg" {
name = "mymg-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Yandex StoreDoc"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
Advanced sharding
Create a Yandex StoreDoc cluster and a network for it with multiple hosts:
- One
MONGODhost - Two
MONGOShosts - Three
MONGOCFGhosts
Cluster test specifications:
- Name:
mymg. - Environment:
PRODUCTION. - Deletion protection: Enabled.
- Version:
7.0. - Database:
db1. user1user.- Password:
user1user1. - Host class:
s2.micro. - Network SSD storage:
network-ssd. - Storage size: 10 GB.
Network specifications:
- Network:
mynet. - Security group:
mymg-sgwithenp6saqnq4ie244g67sbID. In Terraform, a group is created with the rule allowing TCP connections to the cluster from the internet on port27018. - Subnet:
mysubnet. - Availability zone:
ru-central1-a. - Range:
10.5.0.0/24(only for Terraform).
To create a Yandex StoreDoc cluster with advanced sharding, run this command:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--deletion-protection \
--mongodb-version 7.0 \
--database name=db1 \
--user name=user1,password=user1user1 \
--mongod-resource-preset s2.micro \
--mongod-disk-type network-ssd \
--mongod-disk-size 10 \
--host type=mongod,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--mongos-resource-preset s2.micro \
--mongos-disk-type network-ssd \
--mongos-disk-size 10 \
--host type=mongos,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongos,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--mongocfg-resource-preset s2.micro \
--mongocfg-disk-type network-ssd \
--mongocfg-disk-size 10 \
--host type=mongocfg,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongocfg,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongocfg,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--network-name mynet \
--security-group-ids enp6saqnq4ie244g67sb
The configuration file for a cluster with advanced sharding is as follows:
resource "yandex_mdb_mongodb_cluster" "mymg" {
name = "mymg"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.mymg-sg.id ]
deletion_protection = true
cluster_config {
version = "7.0"
}
resources_mongod {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
resources_mongos {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
resources_mongocfg {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongod"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongos"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongos"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
}
resource "yandex_mdb_mongodb_database" "db1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "db1"
}
resource "yandex_mdb_mongodb_user" "user1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
depends_on = [
yandex_mdb_mongodb_database.db1
]
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_security_group" "mymg-sg" {
name = "mymg-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Yandex StoreDoc"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}