Skip to content

docs:修改md文档内容,并更新目录。 #334

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## Introduction

<!-- DOCS_DESCRIPTION_CN -->
本示例用于实现解决方案[自建 MongoDB 迁移到云数据库](https://www.aliyun.com/solution/tech-solution/migrate-self-managed-mongodb-to-cloud), 涉及到专有网络(VPC)、交换机(VSwitch)、云服务器(ECS)、云数据库(MongoDB) 等资源的创建。
<!-- DOCS_DESCRIPTION_CN -->
Expand All @@ -11,8 +13,8 @@ This example demonstrates the implementation of the solution [Migrate self-manag

| Name | Version |
|------|---------|
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | 1.253.0 |
| <a name="provider_random"></a> [random](#provider\_random) | 3.7.2 |
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | n/a |
| <a name="provider_random"></a> [random](#provider\_random) | n/a |

## Modules

Expand Down Expand Up @@ -44,9 +46,9 @@ No modules.
|------|-------------|------|---------|:--------:|
| <a name="input_db_name"></a> [db\_name](#input\_db\_name) | 请输入自建MongoDB数据库名称(由小写字母、数字及特殊字符 -\_ 组成,以小写字母开头,小写字母或数字结尾,最多64个字符)。 | `string` | `"mongodb_transfer_test"` | no |
| <a name="input_db_password"></a> [db\_password](#input\_db\_password) | 请输入自建MongoDB数据库密码。密码长度为8-32位,需包含大写字母、小写字母、数字和特殊字符(如:!@#$%^&*()\_+-=)。 | `string` | n/a | yes |
| <a name="input_db_user_name"></a> [db\_user\_name](#input\_db\_user\_name) | 请输入自建MongoDB数据库账号(长度为2-16个字符,仅允许小写字母、大写字母、数字和下划线,必须以字母开头,以字母或数字结尾)。 | `string` | n/a | yes |
| <a name="input_db_user_name"></a> [db\_user\_name](#input\_db\_user\_name) | 请输入自建MongoDB数据库账号(长度为2-16个字符,仅允许小写字母、大写字母、数字和下划线,必须以字母开头,以字母或数字结尾)。 | `string` | `"mongouser"` | no |
| <a name="input_ecs_instance_password"></a> [ecs\_instance\_password](#input\_ecs\_instance\_password) | 请输入服务器登录密码。密码长度为8-30位,必须包含大写字母、小写字母、数字和特殊字符(如:!@#$%^&*\_-+=\|{}[]:;'<>,.?/)。 | `string` | n/a | yes |
| <a name="input_mongodb_account_password"></a> [mongodb\_account\_password](#input\_mongodb\_account\_password) | 请输入MongoDB Root密码。密码长度为6-32位,需包含大写字母、小写字母、数字和特殊字符(如:!@#$%^&*()\_+-=)。 | `string` | n/a | yes |
| <a name="input_mongodb_instance_class"></a> [mongodb\_instance\_class](#input\_mongodb\_instance\_class) | 请输入MongoDB实例规格(例如:mdb.shard.2x.xlarge.d)。根据您的数据库负载选择合适的规格。 | `string` | `"mdb.shard.2x.xlarge.d"` | no |
| <a name="input_mongodb_password"></a> [mongodb\_password](#input\_mongodb\_password) | 请输入MongoDB Root密码。密码长度为6-32位,需包含大写字母、小写字母、数字和特殊字符(如:!@#$%^&*()\_+-=)。 | `string` | n/a | yes |
| <a name="input_region_id"></a> [region\_id](#input\_region\_id) | 请输入地域ID(例如:cn-hangzhou)。 | `string` | `"cn-hangzhou"` | no |
<!-- END_TF_DOCS -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
provider "alicloud" {
region = var.region_id
}

resource "random_id" "suffix" {
byte_length = 8
}

data "alicloud_instance_types" "default" {
system_disk_category = "cloud_essd"
image_id = data.alicloud_images.default.images[0].id
instance_type_family = "ecs.c6"
availability_zone = data.alicloud_db_zones.rds_zones.zones[length(data.alicloud_db_zones.rds_zones.zones) - 1].id
}

data "alicloud_images" "default" {
name_regex = "^aliyun_3_x64_20G_alibase_.*"
most_recent = true
owners = "system"
}

locals {
common_name = "${random_id.suffix.id}"
redis_install_script = <<-SCRIPT
#!/bin/bash
export ROS_DEPLOY=true
curl -fsSL https://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/install-script/read-write-splitting-through-tair-proxy/install.sh | bash
SCRIPT
}

# VPC Resources
resource "alicloud_vpc" "vpc" {
vpc_name = "VPC_HZ"
cidr_block = "192.168.0.0/16"
}

resource "alicloud_vswitch" "vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "192.168.1.0/24"
zone_id = var.zone_id
vswitch_name = "vsw_001"
}

# Security Group
resource "alicloud_security_group" "ecs_security_group" {
vpc_id = alicloud_vpc.vpc.id
security_group_name = "SecurityGroup_1"
security_group_type = "normal"
}

resource "alicloud_security_group_rule" "http" {
type = "ingress"
ip_protocol = "tcp"
port_range = "80/80"
cidr_ip = "140.205.11.1/25"
security_group_id = alicloud_security_group.ecs_security_group.id
}

# Redis Instance
resource "alicloud_kvstore_instance" "redis" {
db_instance_name = "redis"
instance_class = "redis.shard.small.2.ce"
engine_version = "7.0"
password = var.db_password
payment_type = "PostPaid"
vswitch_id = alicloud_vswitch.vswitch.id
zone_id = var.zone_id
read_only_count = 1
security_ips = ["192.168.0.0/16"]
}

# ECS Instance
resource "alicloud_instance" "ecs_instance" {
instance_name = "ecs-${local.common_name}"
system_disk_category = data.alicloud_instance_types.default.system_disk_category
image_id = data.alicloud_images.default.images[0].id
system_disk_size = 100
vswitch_id = alicloud_vswitch.vswitch.id
password = var.ecs_instance_password
instance_type = var.ecs_instance_type
internet_max_bandwidth_out = 5
security_groups = [alicloud_security_group.ecs_security_group.id]
}

# Install Redis Client Command
resource "alicloud_ecs_command" "install_redis_client" {
name = "install-redis-client-${local.common_name}"
description = "Install Redis client on ECS instance"
type = "RunShellScript"
command_content = base64encode(local.redis_install_script)
timeout = 600
working_dir = "/root"
}

resource "alicloud_ecs_invocation" "install_redis_client" {
instance_id = [alicloud_instance.ecs_instance.id]
command_id = alicloud_ecs_command.install_redis_client.id
depends_on = [alicloud_kvstore_instance.redis]
timeouts {
create = "10m"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Outputs
output "ecs_login_address" {
description = "ECS登录地址"
value = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=${data.alicloud_regions.current.regions[0].id}&instanceId=${alicloud_instance.ecs_instance.id}"
}

output "redis_connection_address" {
description = "Redis连接地址"
value = alicloud_kvstore_instance.redis.connection_domain
}

output "ecs_public_ip" {
description = "ECS公网IP"
value = alicloud_instance.ecs_instance.public_ip
}

data "alicloud_regions" "current" {
current = true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Parameters
variable "region_id" {
description = "请输入地域ID(例如:cn-hangzhou)。"
default = "cn-hangzhou"
}
variable "zone_id" {
type = string
description = "交换机可用区ID"
default = "cn-hangzhou-k"
}

variable "db_password" {
type = string
description = "Tair数据库密码。长度8-30,必须包含大写字母、小写字母、数字、特殊符号三个;特殊字符包括:!@#$%^&*()_+-="
sensitive = true
validation {
condition = can(regex("^[0-9A-Za-z_!@#$%^&*()_+\\-=\\+]+$", var.db_password)) && length(var.db_password) >= 8 && length(var.db_password) <= 30
error_message = "长度8-30,必须包含三项(大写字母、小写字母、数字、 !@#$%^&*()_+-=中的特殊符号)"
}
}

variable "ecs_instance_type" {
type = string
description = "ECS 实例类型"
default = "ecs.e-c1m2.large"
}

variable "ecs_instance_password" {
type = string
description = "ECS实例密码。服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)"
sensitive = true
validation {
condition = can(regex("^[a-zA-Z0-9-\\(\\)\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\_\\-\\+\\=\\|\\{\\}\\[\\]\\:\\;\\<\\>\\,\\.\\?\\/]*$", var.ecs_instance_password)) && length(var.ecs_instance_password) >= 8 && length(var.ecs_instance_password) <= 30
error_message = "长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)"
}
}
Loading