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

ApsaraDB for MongoDB:Terraformを使用したApsaraDB for MongoDBの統合

最終更新日:Sep 14, 2024

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

Terraformの詳細については、「Terraformとは何ですか?」をご参照ください。 TerraformでサポートされているApsaraDB For MongoDBリソースタイプの詳細については、「概要」をご参照ください。 また、サービスとTerraformで動作するリソースごとに、サポートされているリソースタイプを照会できます。

リソースアーキテクチャ

image.png

特定のリージョンに仮想プライベートクラウド (VPC) 、vSwitch、およびレプリカセットインスタンスを作成できます。

手順

Terraformのインストール

  • ローカルPCにTerraformをインストールして設定します。 詳細については、「ローカルPCでのTerraformのインストールと設定」をご参照ください。

    Terraformをインストールしたら、コマンドラインインターフェイス (CLI) を開き、terraform versionと入力します。 バージョン情報が返された場合は、Terraformがインストールされます。

  • Terraformをインストールしない場合は、Alibaba Cloudが提供するCloud Shellを使用してください。 Cloud Shellは、Terraformに組み込みのランタイム環境を提供します。

RAMユーザーに必要な権限を付与

Terraformテンプレートを実行するには、Resource Access Management (RAM) ユーザーに必要な権限を付与する必要があります。 RAMユーザーを作成し、AccessKeyペアを取得してから、権限ポリシーをRAMユーザーにアタッチする必要があります。 サンプルTerraformテンプレートを使用して、VPC、vSwitch、およびApsaraDB for MongoDBインスタンスを作成できます。 RAMユーザーに次の権限を付与する必要があります。

  • AliyunVPCFullAccess: Virtual Private Cloudへのフルアクセスを提供します。

  • AliyunMongoDBFullAccess: ApsaraDB for MongoDBへのフルアクセスを提供します。

テンプレートの作成

main.tfという名前のファイルを作成し、使用するインスタンスアーキテクチャに基づいて次の内容を入力します。

スタンドアロンインスタンス

# Declare the alicloud provider.
provider "alicloud" {}

# Declare a variable named name.
variable "name" {
  default = "terraform-example"
}

# Specify the alicloud_mongodb_zones parameter to query zone information.
data "alicloud_mongodb_zones" "default" {
  
}

# Set the zone_id parameter to the ID of the last zone in the value of the alicloud_mongodb_zones parameter.
locals {
  index   = length(data.alicloud_mongodb_zones.default.zones) - 1
  zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}

# Create a VPC.
resource "alicloud_vpc" "default" {
  vpc_name   = var.name
  description = var.name
  cidr_block = "172.17.3.0/24"
}

# Create a vSwitch under the VPC in the zone specified by the local.zone_id parameter.
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
}

# Use the VPC and vSwitch to create a standalone resource.
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_mongodb_instance」をご参照ください。

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

# Declare the alicloud provider.
provider "alicloud" {}

# Declare a variable named name.
variable "name" {
  default = "terraform-example"
}

# Specify the alicloud_mongodb_zones parameter to query zone information.
data "alicloud_mongodb_zones" "default" {
  
}

# Set the zone_id parameter to the ID of the last zone in the value of the alicloud_mongodb_zones parameter.
locals {
  index   = length(data.alicloud_mongodb_zones.default.zones) - 1
  zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}

# Create a VPC.
resource "alicloud_vpc" "default" {
  vpc_name   = var.name
  description = var.name
  cidr_block = "172.17.3.0/24"
}

# Create a vSwitch under the VPC in the zone specified by the local.zone_id parameter.
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
}

# Use the VPC and VSwitch to create a replica set resource.
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_mongodb_instance」をご参照ください。

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

# Declare the alicloud provider.
provider "alicloud" {}

# Declare a variable named name.
variable "name" {
  default = "terraform-example"
}

# Specify the alicloud_mongodb_zones parameter to query zone information.
data "alicloud_mongodb_zones" "default" {
  
}

# Set the zone_id parameter to the ID of the last zone in the value of the alicloud_mongodb_zones parameter.
locals {
  index   = length(data.alicloud_mongodb_zones.default.zones) - 1
  zone_id = data.alicloud_mongodb_zones.default.zones[local.index].id
}

# Create a VPC.
resource "alicloud_vpc" "default" {
  vpc_name   = var.name
  description = var.name
  cidr_block = "172.17.3.0/24"
}

# Create a vSwitch under the VPC in the zone specified by the local.zone_id parameter.
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
}

# Use the VPC and VSwitch to create a sharded cluster resource.
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リソースタイプの設定方法の詳細については、「alicloud_mongodb_sharding_instance」をご参照ください。

説明

テンプレートの実行時に指定されたパラメーターが見つからないことを示すエラーが返された場合は、terraform versionコマンドを実行して、Terraformの現在のバージョンが正式バージョンと同じかどうかを確認できます。 現在のバージョンが最新バージョンでない場合は、次の文を実行して、main.tfファイルのprovider "alicloud" {} フィールドに最新バージョンを指定する必要があります。 Terraformの公式バージョンの詳細については、「alicloud_mongodb_instance」をご参照ください。

provider "alicloud" {version = "~> v*.***.*"}

v *.***.* を最新のバージョン番号に置き換えます。

テンプレートの実行

  1. ロードされたプロバイダー、プロバイダー、モジュールの構成ファイルなど、Terraform構成ファイルを初期化します。

    terraform init

    image

  2. テンプレートの構文が正しいかどうかを確認します。

    terraform validate

    image

  3. 実行プランを作成します。

    terraform plan

    7dee7a7bdb291024a81457306cec277c

  4. テンプレートをデプロイします。

    terraform apply

    image.png

    デプロイ情報はログに記録されます。

    image

    はいと入力してリソースを変更します。

  5. テンプレートから作成されたリソースを解放します。

    terraform destroy

    imageimageはいと入力してリソースを破棄します。