すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:Terraform による ApsaraDB for MongoDB の統合

最終更新日:Jun 25, 2026

このトピックでは、Terraform を使用して ApsaraDB for MongoDB インスタンスを作成する方法について説明します。

説明

このトピックのサンプルコードは、数回クリックするだけで実行できます。

Terraform の詳細については、「Terraform とは」をご参照ください。 Terraform でサポートされている MongoDB リソースタイプの詳細については、「統合の概要」または「Alibaba Cloud プロバイダー」をご参照ください。

リソースアーキテクチャ

image.png

このテンプレートは、指定されたリージョンに Virtual Private Cloud (VPC) と vSwitch を作成し、次に MongoDB レプリカセットインスタンスを作成します。

前提条件

  • このアカウントに属するすべてのリソースに対する完全な権限を持つ Alibaba Cloud アカウントが必要です。Alibaba Cloud アカウントの認証情報が漏洩すると、セキュリティリスクが発生する可能性があります。Resource Access Management (RAM) ユーザーを使用し、その RAM ユーザーのアクセスキーペアを作成することを推奨します。詳細については、「RAM ユーザーの作成」および「アクセスキーペアの作成」をご参照ください。

  • RAM ユーザーには AliyunMongoDBFullAccess と AliyunVPCFullAccess 権限が付与されます。 AliyunMongoDBFullAccess 権限は ApsaraDB for MongoDB の管理に使用され、AliyunVPCFullAccess 権限は 仮想プライベートクラウド (VPC) の管理に使用されます。 次のサンプルコードは、RAM ユーザーに 2 つの権限を付与する方法の例を示します。 詳細については、「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"
                    }
                }
            }
        ]
    }
    
  • 次のいずれかの方法で Terraform のランタイム環境を準備します:

    • Terraform Explorer で Terraform を使用する: Alibaba Cloud は、Terraform のオンラインランタイム環境である Terraform Explorer を提供しています。Terraform Explorer にログインすると、Terraform をインストールすることなく使用できます。この方法は、追加費用なしで迅速かつ便利に Terraform を使用、デバッグしたいシナリオに適しています。

    • Cloud Shell で Terraform を使用する: Terraform は Cloud Shell にプリインストールされており、ID 認証情報も設定済みです。Cloud Shell で直接 Terraform コマンドを実行できます。この方法は、低コストで迅速かつ便利に Terraform を使用、デバッグしたいシナリオに適しています。

    • オンプレミスのマシンに Terraform をインストールして設定する: この方法は、ネットワーク接続が不安定な場合や、カスタム開発環境が必要なシナリオに適しています。

重要

Terraform 0.12.28 以降をインストールする必要があります。terraform --version コマンドを実行して、Terraform のバージョンを確認できます。

説明

この例の特定のリソースでは料金が発生します。リソースが不要になったら、リソースを解放してください。

必要なリソース

Terraform を使用してApsaraDB for MongoDB インスタンスを作成する

  1. 作業ディレクトリを作成し、そのディレクトリに main.tf という名前の設定ファイルを作成します。main.tf は Terraform のメインファイルであり、デプロイするリソースを定義します。

    レプリカセットインスタンス

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # 変数 'name' を宣言します。
    variable "name" {
      default = "terraform-example-1125"
    }
    variable "engine_version" {
      default = "7.0"
    }
    variable "db_instance_class" {
      default = "mdb.shard.2x.xlarge.d"
    }
    # 利用可能なアベイラビリティーゾーンを照会します。
    data "alicloud_mongodb_zones" "default" {
    }
    # ローカル値を使用して、データソースから最後の利用可能なアベイラビリティーゾーン ID を取得します。
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # VPC リソースを作成します。
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # VPC 内の指定されたアベイラビリティーゾーンに vSwitch を作成します。
    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
    }
    # VPC と vSwitch を使用してレプリカセットインスタンスを作成します。
    resource "alicloud_mongodb_instance" "singleNode" {
      # (必須) データベースのバージョン。
      engine_version      = var.engine_version
      # (必須) インスタンスタイプ。
      db_instance_class   = var.db_instance_class
      # (必須) インスタンスのストレージ容量 (GB)。
      db_instance_storage = 20
      # インスタンスのネットワークタイプ。
      network_type        = "VPC"
      # (オプション, ForceNew) インスタンスを接続する VPC の vSwitch ID。
      vswitch_id          = alicloud_vswitch.default.id
      # VPC の ID。
      vpc_id              = alicloud_vpc.vpc1.id
      # (オプション, ForceNew) インスタンスを配置するアベイラビリティーゾーン。
      zone_id             = local.zone_id
      # インスタンスの名前。  
      name                = var.name
      # (オプション, v1.199.0 以降で利用可能) インスタンスのストレージタイプ。
      # storage_type        = "cloud_auto"
      # (オプション) リソースに割り当てるタグのマップ。
      # tags = {
      #   Created = "TF"
      #   For     = "example"
      #   }
      # (オプション, リスト) インスタンスのすべてのデータベースへのアクセスを許可する IP アドレスのリスト。
      # security_ip_list    = [
            # "10.168.1.12",
            # "100.69.7.112"
      #   ]
    }

    alicloud_mongodb_instance リソースタイプの設定方法の詳細については、「alicloud_mongodb_instance」をご参照ください。

    レプリカセットインスタンス

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # 変数 'name' を宣言します。
    variable "name" {
      default = "terraform-example-1125"
    }
    variable "engine_version" {
      default = "7.0"
    }
    variable "db_instance_class" {
      default = "mdb.shard.2x.xlarge.d"
    }
    # 利用可能なアベイラビリティーゾーンを照会します。
    data "alicloud_mongodb_zones" "default" {
    }
    # ローカル値を使用して、データソースから最後の利用可能なアベイラビリティーゾーン ID を取得します。
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # VPC リソースを作成します。
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # VPC 内の指定されたアベイラビリティーゾーンに vSwitch を作成します。
    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
    }
    # VPC と 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"
      }
    }

    alicloud_mongodb_instance リソースタイプの設定方法の詳細については、「alicloud_mongodb_instance」をご参照ください。

    シャードクラスターインスタンス

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    # 変数 'name' を宣言します。
    variable "name" {
      default = "terraform-example-1125"
    }
    # 利用可能なアベイラビリティーゾーンを照会します。
    data "alicloud_mongodb_zones" "default" {
    }
    # ローカル値を使用して、データソースから最後の利用可能なアベイラビリティーゾーン ID を取得します。
    locals {
      index   = length(data.alicloud_mongodb_zones.default.zones) - 1
      zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
    }
    # VPC リソースを作成します。
    resource "alicloud_vpc" "vpc1" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # VPC 内の指定されたアベイラビリティーゾーンに vSwitch を作成します。
    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
    }
    # VPC と vSwitch を使用してシャードクラスターインスタンスを作成します。
    resource "alicloud_mongodb_sharding_instance" "default" {
      # (必須) データベースのバージョン。
      engine_version      = "7.0"
      # (オプション, ForceNew) インスタンスの vSwitch ID。
      vswitch_id          = alicloud_vswitch.default.id
      # インスタンスのネットワークタイプ。
      network_type        = "VPC"
      # インスタンスの VPC ID。
      vpc_id              = alicloud_vpc.vpc1.id
      # インスタンスの名前。
      name                = var.name
      # アベイラビリティーゾーン。
      zone_id = local.zone_id
      # インスタンスの Mongos ノード。 ノード数は2~32にする必要があります。 以下の mongo_list をご参照ください。
      mongo_list {
        # (必須) Mongos ノードのインスタンスタイプ。
        node_class = "mdb.shard.2x.xlarge.d"
      }
      mongo_list {
        node_class = "mdb.shard.2x.xlarge.d"
      }
      # (必須, セット) インスタンスのシャードノード。 2 から 32 個のシャードノードを購入できます。 以下の shard_list をご参照ください。
      shard_list {
        # (必須) シャードノードのインスタンスタイプ。
        node_class   = "mdb.shard.2x.xlarge.d"
        #  (必須, Int) シャードノードのストレージ容量。
        node_storage = 20
      }
      shard_list {
        node_class        = "mdb.shard.2x.xlarge.d"
        node_storage      = 20
        # シャードノード内の読み取り専用ノードの数。 デフォルト値:0。 有効な値:0〜5。
        readonly_replicas = 1
      }
      config_server_list {
        # ConfigServer ノードのインスタンスタイプ。 有効な値:mdb.shard.2x.xlarge.d と dds.cs.mid。
        node_class ="mdb.shard.2x.xlarge.d"
        # ConfigServer ノードのストレージ容量。
        node_storage = "20"
      }
      # リソースに割り当てるタグのマップ。
      tags = {
        Created = "TF"
        For     = "Example"
      }
    }

    alicloud_mongodb_sharding_instance リソースタイプの設定方法の詳細については、「alicloud_mongodb_sharding_instance」をご参照ください。

  2. 次のコマンドを実行して Terraform を初期化します:

    terraform init

    次の情報が返された場合、Terraform は正常に初期化されています。

    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. 実行計画を作成し、変更をプレビューします。

    terraform plan
  4. 次のコマンドを実行して、ApsaraDB for MongoDB インスタンスを作成します。

    terraform apply

    プロンプトが表示されたら、yes と入力して [Enter] キーを押します。次の出力は、ApsaraDB for MongoDB インスタンスが正常に作成されたことを示します。

    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. 結果の検証

    terraform show コマンドの実行

    次のコマンドを実行して、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
    }

    ApsaraDB for MongoDB コンソールへのログイン

    インスタンスが作成された後、OpenAPI、SDK を使用するか、ApsaraDB for MongoDB コンソールにログインして、操作が成功したことを確認できます。ApsaraDB for MongoDB コンソールにログインし、[レプリカセットインスタンス] ページに移動します。Terraform によって作成されたインスタンスが [実行中] 状態であり、その設定が設定内容と一致することを確認します:インスタンスは China (Heyuan) のアベイラビリティーゾーンにあり、インスタンスクラスは mdb.shard.2x.xlarge.d、ストレージは 20 GB、バージョンは 7.0、ネットワークタイプは VPC、課金方法は 従量課金、アーキテクチャは 3 ノード です。

リソースの解放

Terraform によって作成または管理されている上記のリソースが不要になった場合は、次のコマンドを実行してリソースを解放します。terraform destroy コマンドの詳細については、「一般的なコマンド」をご参照ください。

terraform destroy

サンプルコード

説明

このトピックのサンプルコードは、数回クリックするだけで実行できます。

サンプルコード

variable "region" {
  default = "cn-heyuan"
}
provider "alicloud" {
  region = var.region
}
# 変数 'name' を宣言します。
variable "name" {
  default = "terraform-example-1125"
}
variable "engine_version" {
  default = "7.0"
}
variable "db_instance_class" {
  default = "mdb.shard.2x.xlarge.d"
}
# 利用可能なアベイラビリティーゾーンを照会します。
data "alicloud_mongodb_zones" "default" {
}
# ローカル値を使用して、データソースから最後の利用可能なアベイラビリティーゾーン ID を取得します。
locals {
  index   = length(data.alicloud_mongodb_zones.default.zones) - 1
  zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}
# VPC リソースを作成します。
resource "alicloud_vpc" "vpc1" {
  vpc_name   = var.name
  cidr_block = "172.16.0.0/12"
}
# VPC 内の指定されたアベイラビリティーゾーンに vSwitch を作成します。
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
}
# VPC と vSwitch を使用してレプリカセットインスタンスを作成します。
resource "alicloud_mongodb_instance" "singleNode" {
  # (必須) データベースのバージョン。
  engine_version      = var.engine_version
  # (必須) インスタンスタイプ。
  db_instance_class   = var.db_instance_class
  # (必須) インスタンスのストレージ容量 (GB)。
  db_instance_storage = 20
  # インスタンスのネットワークタイプ。
  network_type        = "VPC"
  # (オプション, ForceNew) インスタンスを接続する VPC の vSwitch ID。
  vswitch_id          = alicloud_vswitch.default.id
  # VPC の ID。
  vpc_id              = alicloud_vpc.vpc1.id
  # (オプション, ForceNew) インスタンスを配置するアベイラビリティーゾーン。
  zone_id             = local.zone_id
  # インスタンスの名前。  
  name                = var.name
  # (オプション) リソースに割り当てるタグのマップ。
  tags = {
    Created = "TF"
    For     = "example"
    }
  # (オプション, リスト) インスタンスのすべてのデータベースへのアクセスを許可する IP アドレスのリスト。
  security_ip_list    = [
         "10.168.1.12",
         "100.69.7.112"
     ]
  # (オプション, v1.199.0 以降で利用可能) インスタンスのストレージタイプ。
  # storage_type        = "cloud_auto"   
}
# VPC と vSwitch を使用してシャードクラスターインスタンスを作成します。
resource "alicloud_mongodb_sharding_instance" "default" {
  # (必須) データベースのバージョン。
  engine_version      = "7.0"
  # (オプション, ForceNew) インスタンスの vSwitch ID。
  vswitch_id          = alicloud_vswitch.default.id
  # インスタンスのネットワークタイプ。
  network_type        = "VPC"
  # インスタンスの VPC ID。
  vpc_id              = alicloud_vpc.vpc1.id
  # インスタンスの名前。
  name                = var.name
  # アベイラビリティーゾーン。
  zone_id = local.zone_id
  # インスタンスの Mongos ノード。 ノード数は2~32にする必要があります。 以下の mongo_list をご参照ください。
  mongo_list {
    # (必須) Mongos ノードのインスタンスタイプ。
    node_class = "mdb.shard.2x.xlarge.d"
  }
  mongo_list {
    node_class = "mdb.shard.2x.xlarge.d"
  }
  # (必須, セット) インスタンスのシャードノード。 2 から 32 個のシャードノードを購入できます。 以下の shard_list をご参照ください。
  shard_list {
    # (必須) シャードノードのインスタンスタイプ。
    node_class   = "mdb.shard.2x.xlarge.d"
    #  (必須, Int) シャードノードのストレージ容量。
    node_storage = 20
  }
  shard_list {
    node_class        = "mdb.shard.2x.xlarge.d"
    node_storage      = 20
    # シャードノード内の読み取り専用ノードの数。 デフォルト値:0。 有効な値:0〜5。
    readonly_replicas = 1
  }
  config_server_list {
    # ConfigServer ノードのインスタンスタイプ。 有効な値:mdb.shard.2x.xlarge.d と dds.cs.mid。
    node_class ="mdb.shard.2x.xlarge.d"
    # ConfigServer ノードのストレージ容量。
    node_storage = "20"
  }
  # リソースに割り当てるタグのマップ。
  tags = {
    Created = "TF"
    For     = "Example"
  }
}

その他のサンプルコードについては、GitHub をご覧ください。