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

ApsaraDB for MongoDB:ApsaraDB for MongoDB インスタンスを作成するための Terraform の使用方法

最終更新日:Mar 15, 2025

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

説明

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

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

リソースアーキテクチャ

image.png

特定のリージョンに VPC、vSwitch、およびレプリカセットインスタンスを作成できます。

前提条件

  • Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対するフル 権限 を持っています。Alibaba Cloud アカウントの資格情報が漏洩した場合、セキュリティリスクが発生する可能性があります。Resource Access Management(RAM)ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することをお勧めします。詳細については、「RAM ユーザーを作成する」および「AccessKey ペアを作成する」をご参照ください。

  • AliyunMongoDBFullAccess 権限と AliyunMongoDBFullAccess 権限が RAM ユーザーに付与されます。AliyunMongoDBFullAccess 権限は ApsaraDB for MongoDB の管理に使用され、AliyunMongoDBFullAccess 権限は 仮想プライベートクラウド (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"
    }
    # alicloud_mongodb_zones パラメーターを指定して、ゾーン情報をクエリします。
    data "alicloud_mongodb_zones" "default" {
    }
    # zone_id パラメーターを、alicloud_mongodb_zones パラメーターの値の最後のゾーンの 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"
    }
    
    # local.zone_id パラメーターで指定されたゾーンの 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"
      # (オプション)VPC 内のインスタンスの vSwitch ID。新しい vSwitch が必要です。
      vswitch_id          = alicloud_vswitch.default.id
      # vpc_id
      vpc_id              = alicloud_vpc.vpc1.id
      # (オプション)インスタンスが存在するゾーン。新しいゾーンが必要です。
      zone_id             = local.zone_id
      # インスタンスの名前。
      name                = var.name
      # (オプション)インスタンスのストレージタイプ。この構成は、Terraform 1.199.0 以降のバージョンで使用できます。
      # storage_type        = "cloud_auto"
      # (オプション)リソースに割り当てるタグ。
      # tags = {
      #   Created = "TF"
      #   For     = "example"
      #   }
      # (オプション)インスタンスのすべてのデータベースへのアクセスを許可される IP アドレス。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"
    }
    
    # alicloud_mongodb_zones パラメーターを指定して、ゾーン情報をクエリします。
    data "alicloud_mongodb_zones" "default" {
    }
    
    # zone_id パラメーターを、alicloud_mongodb_zones パラメーターの値の最後のゾーンの 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"
    }
    
    # local.zone_id パラメーターで指定されたゾーンの 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"
    }
    
    # alicloud_mongodb_zones パラメーターを指定して、ゾーン情報をクエリします。
    data "alicloud_mongodb_zones" "default" {
      
    }
    
    # zone_id パラメーターを、alicloud_mongodb_zones パラメーターの値の最後のゾーンの 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"
    }
    
    # local.zone_id パラメーターで指定されたゾーンの 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"
      # (オプション)VPC 内のインスタンスの vSwitch ID。新しい vSwitch が必要です。
      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 ノードを定義します。購入できる mongos ノードの数は 2 ~ 32 です。mongo_list パラメーターを使用して mongos ノードを構成できます。
      mongo_list {
        # (必須)mongos ノードのインスタンスタイプ。
        node_class = "mdb.shard.2x.xlarge.d"
      }
      mongo_list {
        node_class = "mdb.shard.2x.xlarge.d"
      }
      # (必須)インスタンスのシャードを定義します。購入できるシャードの数は 2 ~ 32 です。mongo_list パラメーターを使用してシャードを構成できます。
      shard_list {
        # (必須)シャードのインスタンスタイプ。
        node_class   = "mdb.shard.2x.xlarge.d"
        # (必須)シャードのストレージ容量。ストレージ容量は整数です。
        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

    image

    ApsaraDB for MongoDB コンソールにログインする

    作成後、API 操作を呼び出したり、SDK を使用したり、ApsaraDB for MongoDB コンソールにログインして、作成操作が完了したかどうかを確認できます。image

リソースを解放する

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"
}
# alicloud_mongodb_zones パラメーターを指定して、ゾーン情報をクエリします。
data "alicloud_mongodb_zones" "default" {
}
# zone_id パラメーターを、alicloud_mongodb_zones パラメーターの値の最後のゾーンの 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"
}

# local.zone_id パラメーターで指定されたゾーンの 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"
  # (オプション)VPC 内のインスタンスの vSwitch ID。新しい vSwitch が必要です。
  vswitch_id          = alicloud_vswitch.default.id
  # vpc_id
  vpc_id              = alicloud_vpc.vpc1.id
  # (オプション)インスタンスが存在するゾーン。新しいゾーンが必要です。
  zone_id             = local.zone_id
  # インスタンスの名前。
  name                = var.name
  # (オプション)リソースに割り当てるタグ。
  tags = {
    Created = "TF"
    For     = "example"
    }
  # (オプション)インスタンスのすべてのデータベースへのアクセスを許可される IP アドレス。IP アドレスリストが表示されます。
  security_ip_list    = [
         "10.168.1.12",
         "100.69.7.112"
     ]
  # (オプション)インスタンスのストレージタイプ。この構成は、Terraform 1.199.0 以降のバージョンで使用できます。
  # storage_type        = "cloud_auto"   
}
# VPC と vSwitch を使用して、シャードクラスターリソースを作成します。
resource "alicloud_mongodb_sharding_instance" "default" {
  # (必須)インスタンスのデータベースエンジンバージョン。
  engine_version      = "7.0"
  # (オプション)VPC 内のインスタンスの vSwitch ID。新しい vSwitch が必要です。
  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 ノードを定義します。購入できる mongos ノードの数は 2 ~ 32 です。mongo_list パラメーターを使用して mongos ノードを構成できます。
  mongo_list {
    # (必須)mongos ノードのインスタンスタイプ。
    node_class = "mdb.shard.2x.xlarge.d"
  }
  mongo_list {
    node_class = "mdb.shard.2x.xlarge.d"
  }
  # (必須)インスタンスのシャードを定義します。購入できるシャードの数は 2 ~ 32 です。mongo_list パラメーターを使用してシャードを構成できます。
  shard_list {
    # (必須)シャードのインスタンスタイプ。
    node_class   = "mdb.shard.2x.xlarge.d"
    # (必須)シャードのストレージ容量。ストレージ容量は整数です。
    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 にアクセスしてください。