本文為您示範如何通過Terraform建立ApsaraDB for MongoDB執行個體。
如果您還不瞭解Terraform,請參見文檔什麼是Terraform。關於支援的MongoDB資源類型,請參見整合概覽或直接通過Terraform文檔尋找。
資源架構
在指定地區建立一個VPC網路和一台交換器,然後建立一個MongoDB複本集執行個體。
操作步驟
安裝Terraform
您如果想要在本地安裝和配置Terraform,請參見在本地安裝和配置Terraform。
安裝完成後,您可以開啟命令列終端,輸入
terraform version
,看到返回版本資訊表示已成功安裝。如果您不想安裝Terraform,可以使用阿里雲提供的線上服務Cloud Shell,其中內建了Terraform的運行環境。
配置許可權
執行Terraform模板需要RAM使用者權限,我們需要建立一個RAM使用者,並擷取AccessKey,添加權限原則。樣本Terraform模板會建立VPC、虛擬交換器以及MongoDB執行個體,您需要為RAM使用者添加以下許可權:
AliyunVPCFullAccess:管理Virtual Private Cloud的許可權。
AliyunMongoDBFullAccess:管理ApsaraDB for MongoDB的許可權。
編寫模板
建立一個名為main.tf
檔案,根據需求選擇填入以下內容。
單節點
# 引入 alicloud provider
provider "alicloud" {}
# 聲明變數名: name
variable "name" {
default = "terraform-example"
}
# 查詢可用性區域資訊: alicloud_mongodb_zones
data "alicloud_mongodb_zones" "default" {
}
# 聲明本地值, zone_id 取 alicloud_mongodb_zones 中的最後一個可用性區域
locals {
index = length(data.alicloud_mongodb_zones.default.zones) - 1
zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}
# 建立 alicloud_vpc 資源
resource "alicloud_vpc" "default" {
vpc_name = var.name
description = var.name
cidr_block = "172.17.3.0/24"
}
# 在 local.zone_id 地區建立 alicloud_vpc 資源下的 alicloud_vswitch 資源
resource "alicloud_vswitch" "default" {
vswitch_name = var.name
cidr_block = "172.17.3.0/24"
vpc_id = alicloud_vpc.default.id
zone_id = local.zone_id
}
# 使用上述vpc、vswitch資訊建立單節點資源
resource "alicloud_mongodb_instance" "singleNode" {
engine_version = "4.0"
db_instance_class = "dds.sn4.xlarge.1"
db_instance_storage = 20
vswitch_id = alicloud_vswitch.default.id
zone_id = local.zone_id
security_ip_list = [
"10.168.1.12",
"100.69.7.112"
]
name = var.name
storage_type = "cloud_essd1"
tags = {
Created = "TF"
For = "example"
}
}
關於alicloud_mongodb_instance
資源類型的配置資訊,請參見資源詳情。
複本集
# 引入 alicloud provider
provider "alicloud" {}
# 聲明變數名: name
variable "name" {
default = "terraform-example"
}
# 查詢可用性區域資訊: alicloud_mongodb_zones
data "alicloud_mongodb_zones" "default" {
}
# 聲明本地值, zone_id 取 alicloud_mongodb_zones 中的最後一個可用性區域
locals {
index = length(data.alicloud_mongodb_zones.default.zones) - 1
zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}
# 建立 alicloud_vpc 資源
resource "alicloud_vpc" "default" {
vpc_name = var.name
description = var.name
cidr_block = "172.17.3.0/24"
}
# 在 local.zone_id 地區建立 alicloud_vpc 資源下的 alicloud_vswitch 資源
resource "alicloud_vswitch" "default" {
vswitch_name = var.name
cidr_block = "172.17.3.0/24"
vpc_id = alicloud_vpc.default.id
zone_id = local.zone_id
}
# 使用上述vpc、vswitch資訊棄置站台集資源
resource "alicloud_mongodb_instance" "default" {
engine_version = "5.0"
db_instance_class = "mdb.shard.2x.xlarge.d"
db_instance_storage = 20
vswitch_id = alicloud_vswitch.default.id
security_ip_list = ["10.168.1.12", "100.69.7.112"]
name = var.name
tags = {
Created = "TF"
For = "example"
}
}
關於alicloud_mongodb_instance
資源類型的配置資訊,請參見資源詳情。
分區叢集
# 引入 alicloud provider
provider "alicloud" {}
# 聲明變數名: name
variable "name" {
default = "terraform-example"
}
# 查詢可用性區域資訊: alicloud_mongodb_zones
data "alicloud_mongodb_zones" "default" {
}
# 聲明本地值, zone_id 取 alicloud_mongodb_zones 中的最後一個可用性區域
locals {
index = length(data.alicloud_mongodb_zones.default.zones) - 1
zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}
# 建立 alicloud_vpc 資源
resource "alicloud_vpc" "default" {
vpc_name = var.name
description = var.name
cidr_block = "172.17.3.0/24"
}
# 在 local.zone_id 地區建立 alicloud_vpc 資源下的 alicloud_vswitch 資源
resource "alicloud_vswitch" "default" {
vswitch_name = var.name
cidr_block = "172.17.3.0/24"
vpc_id = alicloud_vpc.default.id
zone_id = local.zone_id
}
# 使用上述vpc、vswitch資訊建立分區叢集資源
resource "alicloud_mongodb_sharding_instance" "default" {
engine_version = "7.0"
vswitch_id = alicloud_vswitch.default.id
name = var.name
zone_id = local.zone_id
mongo_list {
node_class = "mdb.shard.2x.large.c"
}
mongo_list {
node_class = "mdb.shard.2x.large.c"
}
shard_list {
node_class = "mdb.shard.2x.large.c"
node_storage = "20"
}
shard_list {
node_class = "mdb.shard.2x.large.c"
node_storage = "20"
readonly_replicas = "1"
}
config_server_list {
node_class ="mdb.shard.2x.large.c"
node_storage = "20"
}
tags = {
Created = "TF"
For = "Example"
}
}
關於alicloud_mongodb_sharding_instance
資源類型的配置資訊,請參見資源詳情。
如果您在運行模板的時候遇到參數不存在的報錯,可以執行terraform version
命令確認目前的版本與官網版本是否一致,如果不是最新版本,您需要在main.tf
檔案中的provider "alicloud" {}
內指定版本,格式如下:
provider "alicloud" {version = "~> v*.***.*"}
實際使用時請將v*.***.*
替換為最新版本號碼。
運行模板
初始化載入模組,包括Provider,Provisioner,Module等模板。
terraform init
驗證模板文法是否正確。
terraform validate
建立執行計畫。
terraform plan
部署模板。
terraform apply
本案例部署時的部分返回日誌。
輸入yes即可真正變更資源。
釋放當前模板建立的資源。
terraform destroy
輸入yes即可銷毀資源。