このトピックでは、Terraform を使用して ApsaraDB for MongoDB インスタンスを作成する方法を説明します。
このトピックの サンプルコードを実行 できます。
Terraform の詳細については、「Terraformとは」をご参照ください。Terraform でサポートされている MongoDB リソースタイプの詳細については、「統合の概要」または「Alibaba Cloud Provider」をご参照ください。
リソースアーキテクチャ

このテンプレートは、指定されたリージョンに Virtual Private Cloud (VPC) と vSwitch を作成し、次に MongoDB レプリカセットインスタンスを作成します。
前提条件
Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対する完全な権限を持ちます。Alibaba Cloud アカウントの認証情報が漏洩すると、セキュリティリスクが生じる可能性があります。Resource Access Management (RAM) ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することを推奨します。詳細については、「RAMユーザーの作成」および「AccessKeyペアの作成」をご参照ください。
RAM ユーザーに AliyunMongoDBFullAccess および AliyunVPCFullAccess 権限を付与する必要があります。AliyunMongoDBFullAccess 権限は ApsaraDB for MongoDB の管理に使用され、AliyunVPCFullAccess 権限は Virtual Private Cloud (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 のバージョンを確認できます。
この例の特定のリソースには料金が発生します。不要になったリソースは解放してください。
必要なリソース
alicloud_mongodb_instance:レプリカセットインスタンスの作成に使用するリソースタイプです。
alicloud_mongodb_sharding_instance:シャードクラスターインスタンスの作成に使用するリソースタイプです。
Terraformによる ApsaraDB for MongoDB インスタンスの作成
-
作業ディレクトリを作成し、そのディレクトリに
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" } # (必須、Set) インスタンスのシャードノード。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」をご参照ください。 -
次のコマンドを実行して
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. 実行計画を作成し、変更をプレビューします。
terraform plan-
次のコマンドを実行して 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. -
結果を確認します。
terraform show コマンドの実行
次のコマンドを実行して、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 }ApsaraDB for MongoDBコンソールへのログイン
インスタンスが作成された後、OpenAPI、SDK を使用するか、ApsaraDB for MongoDB コンソールにログインして、操作が成功したことを確認できます。ApsaraDB for MongoDB コンソールにログインし、[レプリカセットインスタンス] ページに移動します。Terraform で作成したインスタンスが [実行中] 状態であり、その構成が設定と一致していることを確認します。インスタンスは [中国 (河源)] のアベイラビリティーゾーンにあり、インスタンスタイプは [mdb.shard.2x.xlarge.d]、ストレージは [20 GB]、バージョンは [7.0]、ネットワークタイプは [VPC]、課金方法は [従量課金]、アーキテクチャは [単一ノード] です。
リソースの解放
Terraform で作成または管理している上記のリソースが不要になった場合は、次のコマンドを実行してリソースを解放します。terraform destroy コマンドの詳細については、「一般的なコマンド」をご参照ください。
terraform destroy
サンプルコード
このトピックの サンプルコードを実行 できます。
サンプルコード
その他のサンプルコードについては、GitHubをご覧ください。